Example #1
0
        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()));
        }
Example #2
0
        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);
        }