public void Parse_Throws_MessageException_On_Code_Mismatch()
        {
            var msg = new MessageBuilder()
                      .Code(MessageCode.PeerBrowseRequest)
                      .Build();

            var ex = Record.Exception(() => PeerInfoResponse.Parse(msg));

            Assert.NotNull(ex);
            Assert.IsType <MessageException>(ex);
        }
        public void Parse_Throws_MessageReadException_On_Missing_Data()
        {
            var msg = new MessageBuilder()
                      .Code(MessageCode.PeerInfoResponse)
                      .WriteString("foo")
                      .Build();

            var ex = Record.Exception(() => PeerInfoResponse.Parse(msg));

            Assert.NotNull(ex);
            Assert.IsType <MessageReadException>(ex);
        }
        public void Instantiates_With_The_Given_Data(string description, bool hasPicture, byte[] picture, int uploadSlots, int queueLength, bool hasFreeSlot)
        {
            PeerInfoResponse response = null;

            var ex = Record.Exception(() => response = new PeerInfoResponse(description, hasPicture, picture, uploadSlots, queueLength, hasFreeSlot));

            Assert.Null(ex);

            Assert.Equal(description, response.Description);
            Assert.Equal(hasPicture, response.HasPicture);
            Assert.Equal(picture, response.Picture);
            Assert.Equal(uploadSlots, response.UploadSlots);
            Assert.Equal(queueLength, response.QueueLength);
            Assert.Equal(hasFreeSlot, response.HasFreeUploadSlot);
        }
        public void Parse_Returns_Expected_Data_Without_Picture(string description, int uploadSlots, int queueLength, bool hasFreeSlot)
        {
            var msg = new MessageBuilder()
                      .Code(MessageCode.PeerInfoResponse)
                      .WriteString(description)
                      .WriteByte(0)
                      .WriteInteger(uploadSlots)
                      .WriteInteger(queueLength)
                      .WriteByte((byte)(hasFreeSlot ? 1 : 0))
                      .Build();

            var response = PeerInfoResponse.Parse(msg);

            Assert.Equal(description, response.Description);
            Assert.False(response.HasPicture);
            Assert.Equal(uploadSlots, response.UploadSlots);
            Assert.Equal(queueLength, response.QueueLength);
            Assert.Equal(hasFreeSlot, response.HasFreeUploadSlot);
        }
Esempio n. 5
0
        public async Task GetPeerInfoAsync_Returns_Expected_Info(string username, string description, byte[] picture, int uploadSlots, int queueLength, bool hasFreeSlot)
        {
            var result = new PeerInfoResponse(description, true, picture, uploadSlots, queueLength, hasFreeSlot);

            var waiter = new Mock <IWaiter>();

            waiter.Setup(m => m.Wait <PeerInfoResponse>(It.IsAny <WaitKey>(), null, It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(result));
            waiter.Setup(m => m.Wait <GetPeerAddressResponse>(It.IsAny <WaitKey>(), null, It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new GetPeerAddressResponse(username, IPAddress.Parse("127.0.0.1"), 1)));

            var serverConn = new Mock <IMessageConnection>();

            serverConn.Setup(m => m.WriteMessageAsync(It.IsAny <Message>(), It.IsAny <CancellationToken>()))
            .Returns(Task.CompletedTask);

            var conn = new Mock <IMessageConnection>();

            conn.Setup(m => m.WriteMessageAsync(It.IsAny <Message>(), It.IsAny <CancellationToken>()))
            .Returns(Task.CompletedTask);

            var connManager = new Mock <IConnectionManager>();

            connManager.Setup(m => m.GetOrAddUnsolicitedConnectionAsync(It.IsAny <ConnectionKey>(), It.IsAny <string>(), It.IsAny <EventHandler <Message> >(), It.IsAny <ConnectionOptions>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(conn.Object));

            var s = new SoulseekClient("127.0.0.1", 1, waiter: waiter.Object, serverConnection: serverConn.Object, connectionManager: connManager.Object);

            s.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

            var info = await s.GetPeerInfoAsync(username);

            Assert.Equal(result.Description, info.Description);
            Assert.Equal(result.HasPicture, info.HasPicture);
            Assert.Equal(result.Picture, info.Picture);
            Assert.Equal(result.UploadSlots, info.UploadSlots);
            Assert.Equal(result.QueueLength, info.QueueLength);
            Assert.Equal(result.HasFreeUploadSlot, info.HasFreeUploadSlot);
        }
Esempio n. 6
0
        public async Task GetPeerInfoAsync_Throws_PeerInfoException_On_Throw(string username, string description, byte[] picture, int uploadSlots, int queueLength, bool hasFreeSlot)
        {
            var result = new PeerInfoResponse(description, true, picture, uploadSlots, queueLength, hasFreeSlot);

            var waiter = new Mock <IWaiter>();

            waiter.Setup(m => m.Wait <PeerInfoResponse>(It.IsAny <WaitKey>(), null, It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(result));
            waiter.Setup(m => m.Wait <GetPeerAddressResponse>(It.IsAny <WaitKey>(), null, It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new GetPeerAddressResponse(username, IPAddress.Parse("127.0.0.1"), 1)));

            var serverConn = new Mock <IMessageConnection>();

            serverConn.Setup(m => m.WriteMessageAsync(It.IsAny <Message>(), It.IsAny <CancellationToken>()))
            .Returns(Task.CompletedTask);

            var conn = new Mock <IMessageConnection>();

            conn.Setup(m => m.WriteMessageAsync(It.IsAny <Message>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromException(new ConnectionException("foo")));

            var connManager = new Mock <IConnectionManager>();

            connManager.Setup(m => m.GetOrAddUnsolicitedConnectionAsync(It.IsAny <ConnectionKey>(), It.IsAny <string>(), It.IsAny <EventHandler <Message> >(), It.IsAny <ConnectionOptions>(), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(conn.Object));

            var s = new SoulseekClient("127.0.0.1", 1, waiter: waiter.Object, serverConnection: serverConn.Object, connectionManager: connManager.Object);

            s.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

            PeerInfoResponse info = null;
            var ex = await Record.ExceptionAsync(async() => info = await s.GetPeerInfoAsync(username));

            Assert.NotNull(ex);
            Assert.IsType <PeerInfoException>(ex);
            Assert.IsType <ConnectionException>(ex.InnerException);
        }