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); }
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); }
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); }