public async void ClearBufferAsync_CheckInnerCall() { var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object); await chainer.ClearBufferAsync(); _broadcastImplMock.Verify(broadcast => broadcast.ClearBufferAsync(), Times.Once); }
public void LocalEndPoint_CheckInnerCall() { var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object); var _ = chainer.LocalEndPoint; _broadcastImplMock.Verify(broadcast => broadcast.LocalEndPoint, Times.Once); }
public void Dispose_CheckInnerCall() { var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object); chainer.Dispose(); _broadcastImplMock.Verify(broadcast => broadcast.Dispose(), Times.Once); }
public async void ReceiveAsync_ReceiveSegmented() { const int payloadLength = 20000; const int packetLength = 5000; var data = GenerateRandomByteSequence(payloadLength); var chainStorage = new List <byte[]>(); _broadcastImplMock.Setup(broadcast => broadcast.SendAsync(It.IsAny <byte[]>())) .ReturnsAsync((byte[] dataParam) => { chainStorage.Add(dataParam); return(dataParam.Length); }); //It used just to fill chainStorage with payloadLength/packetLength packets with bytes to use it for receive var chainerFiller = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object, packetLength); await chainerFiller.SendAsync(data); using var enumerator = chainStorage.GetEnumerator(); _broadcastImplMock.Setup(broadcast => broadcast.ReceiveAsync(It.IsAny <CancellationToken>())) .Returns(() => { enumerator.MoveNext(); return(Task.FromResult(enumerator.Current)); }); var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object, 5000); var result = await chainer.ReceiveAsync(); Assert.True(data.SequenceEqual(result)); }
public async void SendAsync_CheckNumberOfSendCalls(int dataLength, int maxSegmentLength, int expectedSendCallsNumber) { var data = new byte[dataLength]; var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object, maxSegmentLength); await chainer.SendAsync(data); _broadcastImplMock.Verify(broadcast => broadcast.SendAsync(It.IsAny <byte[]>()), Times.Exactly(expectedSendCallsNumber)); }
public async void ReceiveAsync_CancelReceiveAtStart() { var tokenSource = new CancellationTokenSource(); tokenSource.Cancel(); _broadcastImplMock.Setup(broadcast => broadcast.ReceiveAsync(It.IsAny <CancellationToken>())) .Callback <CancellationToken>(token => token.ThrowIfCancellationRequested()); var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object); await Assert.ThrowsAsync <OperationCanceledException>(() => chainer.ReceiveAsync(tokenSource.Token)); }
public async void SendAsync_CheckReturnValue() { const int dataLength = 10000; var data = new byte[dataLength]; var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object); var result = await chainer.SendAsync(data); //We know that Chainer wraps data into Package, so sent amount of bytes //definitely will be more than initial payload size. Assert.True(result > dataLength); }
public async void ReceiveAsync_CancelAfterFirstReceive() { const int payloadLength = 20000; const int packetLength = 5000; var data = GenerateRandomByteSequence(payloadLength); var chainStorage = new List <byte[]>(); _broadcastImplMock.Setup(broadcast => broadcast.SendAsync(It.IsAny <byte[]>())) .ReturnsAsync((byte[] dataParam) => { chainStorage.Add(dataParam); return(dataParam.Length); }); //It used just to fill chainStorage with payloadLength/packetLength packets with bytes to use it for receive var chainerFiller = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object, packetLength); await chainerFiller.SendAsync(data); var tokenSource = new CancellationTokenSource(); var isFirstIterationDone = false; _broadcastImplMock.SetupSequence(broadcast => broadcast.ReceiveAsync(It.IsAny <CancellationToken>())) .Returns(() => { isFirstIterationDone = true; tokenSource.Cancel(); return(Task.FromResult(chainStorage[0])); }) .Returns( () => { tokenSource.Token.ThrowIfCancellationRequested(); return(Task.FromResult(chainStorage[1])); }) .Returns(() => throw new Exception()); var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object, 5000); await Assert.ThrowsAsync <OperationCanceledException>(() => chainer.ReceiveAsync(tokenSource.Token)); Assert.True(isFirstIterationDone); }
public void Ctor_ValidSegmentLength() { var _ = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object, LANPaint.Services.Broadcast.UDP.Chainer.Chainer.MinSegmentLength + (LANPaint.Services.Broadcast.UDP.Chainer.Chainer.MaxSegmentLength - LANPaint.Services.Broadcast.UDP.Chainer.Chainer.MinSegmentLength) / 2); }
public async void SendAsync_PassingNullData() { var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object); await Assert.ThrowsAsync <ArgumentNullException>(() => chainer.SendAsync(null)); }