Open AdeMiller opened 9 years ago
Looks like the following will fix this. There are several test cases that look like they might have similar concurrency issues here.
[Test]
public void WriteAndReadShouldBeAsyncronous()
{
var write = new List<int>();
var read = new ConcurrentBag<int>();
var expected = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
using (var server = new FakeTcpServer(FakeServerPort))
{
server.OnBytesReceived += data => write.AddRange(data.Batch(4).Select(x => x.ToArray().ToInt32()));
var test = new KafkaTcpSocket(new DefaultTraceLog(), _fakeServerUrl);
var tasks = Enumerable.Range(1, 10)
.SelectMany(i => new[]
{
test.WriteAsync(i.ToBytes()),
test.ReadAsync(4).ContinueWith(t => read.Add(t.Result.ToInt32())),
server.SendDataAsync(i.ToBytes())
}).ToArray();
Task.WaitAll(tasks);
Assert.That(write.OrderBy(x => x).ToList(), Is.EqualTo(expected));
Assert.That(read.OrderBy(x => x).ToList(), Is.EqualTo(expected));
// Don't let server go out of scope before test has finished accessing it.
server.DropConnection();
}
}
Thanks Ade, there are a few that are definitely not testing things correctly in terms of concurrency. And some that are not testing exactly what they say they are testing. They definitely need review.
Hey Ade, do you want to do the test as a pull request so you can get credit for the fix? Otherwise I can just paste the fix in. Let me know.
This test occasionally fails with the following: