public async Task WriteAsync_Throws_ConnectionWriteException_When_Stream_WriteAsync_Throws(IPAddress ipAddress, int port) { var streamMock = new Mock <INetworkStream>(); streamMock.Setup(s => s.WriteAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .Throws(new IOException()); streamMock.Setup(s => s.ReadAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .Returns(Task.Run(() => 1)); var tcpMock = new Mock <ITcpClient>(); tcpMock.Setup(m => m.Client).Returns(new Socket(SocketType.Stream, ProtocolType.IP)); tcpMock.Setup(s => s.Connected).Returns(true); tcpMock.Setup(s => s.GetStream()).Returns(streamMock.Object); var msg = new MessageBuilder() .WriteCode(MessageCode.Peer.BrowseRequest) .Build(); var c = new MessageConnection(ipAddress, port, tcpClient: tcpMock.Object); var ex = await Record.ExceptionAsync(async() => await c.WriteAsync(msg)); Assert.NotNull(ex); Assert.IsType <ConnectionWriteException>(ex); Assert.IsType <IOException>(ex.InnerException); streamMock.Verify(s => s.WriteAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once); }
public async Task WriteAsync_Writes_When_Connected(string username, IPAddress ipAddress, int port) { var streamMock = new Mock <INetworkStream>(); streamMock.Setup(s => s.ReadAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .Returns(Task.Run(() => 1)); 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); var msg = new MessageBuilder() .WriteCode(MessageCode.Peer.BrowseRequest) .Build(); using (var c = new MessageConnection(username, ipAddress, port, tcpClient: tcpMock.Object)) { await c.WriteAsync(msg); streamMock.Verify(s => s.WriteAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()), Times.Once); } } }