Exemple #1
0
    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);
    }
Exemple #2
0
    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);
    }
Exemple #3
0
    public void Dispose_CheckInnerCall()
    {
        var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object);

        chainer.Dispose();
        _broadcastImplMock.Verify(broadcast => broadcast.Dispose(), Times.Once);
    }
Exemple #4
0
    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));
    }
Exemple #5
0
    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));
    }
Exemple #6
0
    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));
    }
Exemple #7
0
    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);
    }
Exemple #8
0
    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);
    }
Exemple #9
0
 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);
 }
Exemple #10
0
 public async void SendAsync_PassingNullData()
 {
     var chainer = new LANPaint.Services.Broadcast.UDP.Chainer.Chainer(_broadcastImplMock.Object);
     await Assert.ThrowsAsync <ArgumentNullException>(() => chainer.SendAsync(null));
 }