Exemplo n.º 1
0
        public async Task ReadContinuously_Returns_If_Already_Reading(string username, IPEndPoint endpoint)
        {
            var streamMock = new Mock <INetworkStream>();

            streamMock.Setup(s => s.ReadAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Throws(new Exception());

            var tcpMock = new Mock <ITcpClient>();

            using (var socket = new Socket(SocketType.Stream, ProtocolType.IP))
            {
                tcpMock.Setup(m => m.Client).Returns(socket);
                tcpMock.Setup(s => s.Connected).Returns(true);
                tcpMock.Setup(s => s.GetStream()).Returns(streamMock.Object);

                using (var c = new MessageConnection(username, endpoint, tcpClient: tcpMock.Object))
                {
                    c.SetProperty("ReadingContinuously", true);

                    await c.InvokeMethod <Task>("ReadContinuouslyAsync");
                }
            }

            streamMock.Verify(m => m.ReadAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Exemplo n.º 2
0
        public async Task WriteAsync_Throws_ArgumentException_When_Message_Is_Null(string username, IPEndPoint endpoint)
        {
            using (var c = new MessageConnection(username, endpoint))
            {
                c.SetProperty("State", ConnectionState.Disconnected);

                var ex = await Record.ExceptionAsync(() => c.WriteAsync(message: null));

                Assert.NotNull(ex);
                Assert.IsType <ArgumentException>(ex);
                Assert.Equal("message", ((ArgumentException)ex).ParamName);
            }
        }
Exemplo n.º 3
0
        public async Task WriteAsync_Throws_InvalidOperationException_When_Disconnecting(string username, IPEndPoint endpoint)
        {
            var msg = new BrowseRequest();

            using (var c = new MessageConnection(username, endpoint))
            {
                c.SetProperty("State", ConnectionState.Disconnecting);

                var ex = await Record.ExceptionAsync(() => c.WriteAsync(msg));

                Assert.NotNull(ex);
                Assert.IsType <InvalidOperationException>(ex);
            }
        }
        public async Task WriteAsync_Throws_InvalidOperationException_When_Disconnecting(string username, IPAddress ipAddress, int port)
        {
            var msg = new MessageBuilder()
                      .WriteCode(MessageCode.Peer.BrowseRequest)
                      .Build();

            var c = new MessageConnection(username, ipAddress, port);

            c.SetProperty("State", ConnectionState.Disconnecting);

            var ex = await Record.ExceptionAsync(async() => await c.WriteAsync(msg));

            Assert.NotNull(ex);
            Assert.IsType <InvalidOperationException>(ex);
        }
Exemplo n.º 5
0
        public async Task WriteMessageAsync_Defers_When_Connecting(string username, IPAddress ipAddress, int port)
        {
            var msg = new MessageBuilder()
                      .Code(MessageCode.PeerBrowseRequest)
                      .Build();

            var c = new MessageConnection(MessageConnectionType.Peer, username, ipAddress, port);

            c.SetProperty("State", ConnectionState.Connecting);

            await c.WriteMessageAsync(msg);

            var deferred = c.GetProperty <ConcurrentQueue <Message> >("DeferredMessages");

            Assert.Single(deferred);
        }
Exemplo n.º 6
0
        public async Task WriteAsync_Throws_MessageException_When_Message_ToByteArray_Throws(string username, IPEndPoint endpoint)
        {
            var expectedEx = new Exception();

            var msg = new Mock <IOutgoingMessage>();

            msg.Setup(m => m.ToByteArray())
            .Throws(expectedEx);

            using (var c = new MessageConnection(username, endpoint))
            {
                c.SetProperty("State", ConnectionState.Disconnected);

                var ex = await Record.ExceptionAsync(() => c.WriteAsync(msg.Object));

                Assert.NotNull(ex);
                Assert.IsType <MessageException>(ex);
                Assert.Equal(expectedEx, ex.InnerException);
            }
        }