Example #1
0
    public void Initialize_WithReadyToUseIpAddressTwice()
    {
        var calledCreateWithAddress        = false;
        var calledCreateWithAddressAndPort = false;

        _broadcastImplMock.Setup(broadcast => broadcast.LocalEndPoint).Returns(new IPEndPoint(_ipAddress, 0));
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        _broadcastFactoryMock.Setup(factory => factory.Create(_ipAddress))
        .Returns(() => _broadcastImplMock.Object)
        .Callback(() => calledCreateWithAddress = true);
        _broadcastFactoryMock.Setup(factory => factory.Create(_ipAddress, It.IsAny <int>()))
        .Returns(() => _broadcastImplMock.Object)
        .Callback(() => calledCreateWithAddressAndPort = true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        var firstInitResult  = broadcastService.Initialize(_ipAddress);
        var secondInitResult = broadcastService.Initialize(_ipAddress);

        Assert.True(firstInitResult);
        Assert.True(secondInitResult);
        Assert.True(broadcastService.IsReady);
        Assert.True(calledCreateWithAddress ^ calledCreateWithAddressAndPort);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress), Times.AtMostOnce);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress, 0), Times.AtMostOnce);
    }
Example #2
0
    public void Initialize_WithReadyToUseIpAddress()
    {
        var calledCreateWithAddress        = false;
        var calledCreateWithAddressAndPort = false;

        _networkUtilityMock.Setup(utility =>
                                  utility.IsReadyToUse(_ipAddress))
        .Returns((IPAddress ipAddress) => Equals(ipAddress, _ipAddress));

        _broadcastFactoryMock.Setup(factory => factory.Create(It.IsAny <IPAddress>()))
        .Returns(() => _broadcastImplMock.Object)
        .Callback(() => calledCreateWithAddress = true);
        _broadcastFactoryMock.Setup(factory => factory.Create(It.IsAny <IPAddress>(), It.IsAny <int>()))
        .Returns(() => _broadcastImplMock.Object)
        .Callback(() => calledCreateWithAddressAndPort = true);

        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        var result = broadcastService.Initialize(_ipAddress);

        Assert.True(result);
        Assert.True(broadcastService.IsReady);
        Assert.True(calledCreateWithAddress ^ calledCreateWithAddressAndPort);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress), Times.AtMostOnce);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress, 0), Times.AtMostOnce);
    }
Example #3
0
    public void Initialize_WithNullAddress()
    {
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        Assert.Throws <ArgumentNullException>(() => broadcastService.Initialize(null));
    }
Example #4
0
    public async Task ReceiveAsync_ReceiveData()
    {
        var bytesToReceive = RandomizeByteSequence(1024);
        var receivedData   = new List <byte[]>();

        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        _broadcastImplMock.SetupSequence(broadcast => broadcast.ReceiveAsync(It.IsAny <CancellationToken>()))
        .ReturnsAsync(bytesToReceive).ReturnsAsync(() =>
        {
            Task.Delay(5000).Wait();
            return(Array.Empty <byte>());
        });
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.DataReceived += (_, args) => receivedData.Add(args.Data);
        broadcastService.Initialize(_ipAddress);
        var stopAfterDelay = Task.Run(() =>
        {
            Task.Delay(20).Wait();
            broadcastService.CancelReceive();
        });
        var receiving = broadcastService.StartReceiveAsync();

        await Task.WhenAll(stopAfterDelay, receiving);

        Assert.Single(receivedData);
        Assert.True(bytesToReceive.SequenceEqual(receivedData.First()));
    }
Example #5
0
    public void Initialize_AfterDispose()
    {
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.Dispose();

        Assert.Throws <ObjectDisposedException>(() => broadcastService.Initialize(IPAddress.Any));
    }
Example #6
0
    public async Task SendAsync_ThrowOnDisposed()
    {
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.Initialize(_ipAddress);
        var data = RandomizeByteSequence(1024);

        broadcastService.Dispose();
        await Assert.ThrowsAsync <ObjectDisposedException>(() => broadcastService.SendAsync(data));
    }
Example #7
0
    public async Task ReceiveAsync_ThrowOnDisposed()
    {
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.Initialize(_ipAddress);

        broadcastService.Dispose();
        await Assert.ThrowsAsync <ObjectDisposedException>(() => broadcastService.StartReceiveAsync());

        Assert.False(broadcastService.IsReceiving);
    }
Example #8
0
    public void Initialize_WithNotReadyToUseIpAddress()
    {
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(It.IsAny <IPAddress>())).Returns(false);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        var result = broadcastService.Initialize(_ipAddress);

        Assert.False(result);
        Assert.False(broadcastService.IsReady);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress), Times.Never);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress, It.IsAny <int>()), Times.Never);
    }
Example #9
0
    public async void CancelReceive()
    {
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(It.IsAny <IPAddress>())).Returns(true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.Initialize(_ipAddress);
        var receiveTask = broadcastService.StartReceiveAsync();

        broadcastService.CancelReceive();
        await receiveTask;

        Assert.False(broadcastService.IsReceiving);
    }
Example #10
0
    public async Task SendAsync_SendData()
    {
        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.Initialize(_ipAddress);
        var data = RandomizeByteSequence(1024);

        var bytesSent = await broadcastService.SendAsync(data);

        Assert.Equal(data.Length, bytesSent);
        _broadcastImplMock.Verify(broadcast => broadcast.SendAsync(It.IsAny <byte[]>()));
    }
Example #11
0
    public void Initialize_WithReadyToUseIpAddressAndPort()
    {
        const int port = 50100;

        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        var result = broadcastService.Initialize(_ipAddress, port);

        Assert.True(result);
        Assert.True(broadcastService.IsReady);
        _broadcastFactoryMock.Verify(factory => factory.Create(It.IsAny <IPAddress>()), Times.Never);
        _broadcastFactoryMock.Verify(factory => factory.Create(_ipAddress, port), Times.Once);
    }
Example #12
0
    public void ConnectionLost_DontRaiseOnDisconnectNotUsedAdapter()
    {
        var isConnectionLostInvoked = false;

        _networkUtilityMock.Setup(utility => utility.IsReadyToUse(_ipAddress)).Returns(true);
        _broadcastImplMock.SetupGet(broadcast => broadcast.LocalEndPoint).Returns(new IPEndPoint(_ipAddress, 0));
        var broadcastService = new BroadcastService(_broadcastFactoryMock.Object, _networkWatcherMock.Object,
                                                    _networkUtilityMock.Object);

        broadcastService.ConnectionLost += (_, _) => isConnectionLostInvoked = true;
        broadcastService.Initialize(_ipAddress);

        _networkWatcherMock.Raise(watcher => watcher.NetworkStateChanged -= null, EventArgs.Empty);

        Assert.False(isConnectionLostInvoked);
        Assert.True(broadcastService.IsReady);
    }