public async Task TestNoAckFlow() { const string data = "The cuiqk brwon fox jumps over the zaly god."; var server = new FakeServer(SimulationMode.Success); var connection = new Connection(server.EndPoint, Connection.DefaultSocketFactory, BPool, RPool, 16, 16); const int correlationId = 379821; const byte ack = 1; var buffer = new ReusableMemoryStream(null); BigEndianConverter.Write(buffer, 4 + 4 + 1 + data.Length - 4); BigEndianConverter.Write(buffer, correlationId); buffer.WriteByte(ack); var s = Encoding.UTF8.GetBytes(data); buffer.Write(s, 0, s.Length); var bdata = buffer.ToArray(); var p = new TaskCompletionSource <Response>(); connection.Response += (con, cor, b) => p.SetResult(new Response { Connection = con, CorrelationId = cor, Data = b }); await connection.ConnectAsync(); buffer.Position = 8; buffer.WriteByte(0); await connection.SendAsync(correlationId, buffer, false); buffer = new ReusableMemoryStream(null); buffer.Write(bdata, 0, bdata.Length); buffer.Position = 8; buffer.WriteByte(1); await connection.SendAsync(correlationId, buffer, true); var r = await p.Task; server.Stop(); Assert.AreSame(connection, r.Connection); Assert.AreEqual(correlationId, r.CorrelationId); Assert.AreEqual(data, Encoding.UTF8.GetString(r.Data.ToArray())); }
public async Task TestCorrelationError() { const string data = "The cuiqk brwon fox jumps over the zaly god."; var server = new FakeServer(SimulationMode.CorrelationIdError); var connection = new Connection(server.EndPoint, Connection.DefaultSocketFactory, BPool, RPool, 1024, 1024); const int correlationId = 379821; const byte ack = 1; var buffer = new ReusableMemoryStream(null); BigEndianConverter.Write(buffer, 4 + 4 + 1 + data.Length - 4); BigEndianConverter.Write(buffer, correlationId); buffer.WriteByte(ack); var s = Encoding.UTF8.GetBytes(data); buffer.Write(s, 0, s.Length); var p = new TaskCompletionSource <Error>(); connection.ReceiveError += (c, e) => p.TrySetResult(new Error { Connection = c, Exception = e }); await connection.ConnectAsync(); await connection.SendAsync(correlationId, buffer, true); var r = await p.Task; server.Stop(); connection.Dispose(); Assert.AreSame(connection, r.Connection); Assert.IsInstanceOf <CorrelationException>(r.Exception); var exception = r.Exception as CorrelationException; Assert.AreEqual(correlationId, exception.Expected); }