Beispiel #1
0
        public async Task OpenListener_ReceiveWrongPacket()
        {
            await Task.Delay(2000);

            Random random   = new Random();
            var    comparer = new ByteArrayComparer();

            Byte[] randomBytes     = random.NextBytes(20);
            Int32  packetsReceived = 0;

            var serviceBusMock = new Mock <IServiceBus>(MockBehavior.Strict);

            serviceBusMock.Setup(x => x.Publish(
                                     It.Is <InvalidDHCPv6PacketArrivedMessage>(y => comparer.Equals(y.Packet.GetAsStream(), randomBytes) == true))).Callback(() => packetsReceived++).Returns(Task.CompletedTask).Verifiable();

            Mock <ILoggerFactory> factoryMock = new Mock <ILoggerFactory>(MockBehavior.Strict);

            factoryMock.Setup(x => x.CreateLogger(It.IsAny <String>())).Returns(Mock.Of <ILogger <DHCPv6Server> >());

            IDHCPv6InterfaceEngine engine = new DHCPv6InterfaceEngine(
                serviceBusMock.Object,
                Mock.Of <IDHCPv6StorageEngine>(MockBehavior.Strict),
                factoryMock.Object
                );

            var possibleListener = engine.GetPossibleListeners();
            var listener         = possibleListener.First();

            engine.OpenListener(listener);

            IPAddress  address        = new IPAddress(listener.Address.GetBytes());
            IPEndPoint ownEndPoint    = new IPEndPoint(address, 546);
            IPEndPoint serverEndPoint = new IPEndPoint(address, 547);

            UdpClient client = new UdpClient(ownEndPoint);

            client.Send(randomBytes, randomBytes.Length, serverEndPoint);

            Int32 trysLeft = 100;

            while (trysLeft-- > 0 && packetsReceived == 0)
            {
                await Task.Delay(1000);
            }

            engine.CloseListener(listener);
            client.Dispose();

            Assert.Equal(1, packetsReceived);

            serviceBusMock.Verify(x => x.Publish(
                                      It.Is <InvalidDHCPv6PacketArrivedMessage>(y => comparer.Equals(y.Packet.GetAsStream(), randomBytes) == true)), Times.Once);
        }
Beispiel #2
0
        public async Task SendPacket()
        {
            Mock <ILoggerFactory> factoryMock = new Mock <ILoggerFactory>(MockBehavior.Strict);

            factoryMock.Setup(x => x.CreateLogger(It.IsAny <String>())).Returns(Mock.Of <ILogger <DHCPv6Server> >());

            DHCPv6InterfaceEngine engine = new DHCPv6InterfaceEngine(
                Mock.Of <IServiceBus>(MockBehavior.Strict),
                Mock.Of <IDHCPv6StorageEngine>(MockBehavior.Strict),
                factoryMock.Object
                );

            var possibleListener = engine.GetPossibleListeners();
            var listener         = possibleListener.First();

            engine.OpenListener(listener);

            DHCPv6Packet responsePacket = DHCPv6Packet.AsOuter(
                new IPv6HeaderInformation(listener.Address, listener.Address), 4, DHCPv6PacketTypes.Solicit, new List <DHCPv6PacketOption>
            {
                new DHCPv6PacketTrueOption(DHCPv6PacketOptionTypes.RapitCommit),
                new DHCPv6PacketByteOption(DHCPv6PacketOptionTypes.Preference, 14),
            });

            IPAddress  address       = new IPAddress(listener.Address.GetBytes());
            IPEndPoint localEndPoint = new IPEndPoint(address, 546);
            UdpClient  client        = new UdpClient(localEndPoint);

            client.Connect(new IPEndPoint(address, 547));
            try
            {
                Boolean sended = engine.SendPacket(responsePacket);
                Assert.True(sended);
                var result = await client.ReceiveAsync();

                Assert.True(result.Buffer.Length > 0);

                DHCPv6Packet receivedPacket = DHCPv6Packet.FromByteArray(result.Buffer,
                                                                         new IPv6HeaderInformation(listener.Address, listener.Address));

                Assert.Equal(responsePacket, receivedPacket);
            }
            finally
            {
                client.Dispose();
                engine.CloseListener(listener);

                await Task.Delay(1000);
            }
        }
Beispiel #3
0
        public void GetPossibleListeners()
        {
            IDHCPv6InterfaceEngine engine = new DHCPv6InterfaceEngine(
                Mock.Of <IServiceBus>(MockBehavior.Strict),
                Mock.Of <IDHCPv6StorageEngine>(MockBehavior.Strict),
                Mock.Of <ILoggerFactory>()
                );

            var result = engine.GetPossibleListeners();

            Assert.NotNull(result);
            Assert.NotEmpty(result);

            Assert.Equal(0, result.Count(x => x == null));
        }
Beispiel #4
0
        public async Task GetActiveListener()
        {
            List <DHCPv6Listener> listeners = new List <DHCPv6Listener>();

            var storageMock = new Mock <IDHCPv6StorageEngine>(MockBehavior.Strict);

            storageMock.Setup(x => x.GetDHCPv6Listener()).ReturnsAsync(listeners).Verifiable();

            IDHCPv6InterfaceEngine engine = new DHCPv6InterfaceEngine(
                Mock.Of <IServiceBus>(MockBehavior.Strict),
                storageMock.Object,
                Mock.Of <ILoggerFactory>()
                );

            var result = await engine.GetActiveListeners();

            Assert.NotNull(result);
            Assert.Equal(listeners, result);

            storageMock.Verify();
        }
Beispiel #5
0
        public async Task OpenListener_SendPacket_CloseListener()
        {
            await Task.Delay(2000);

            var          comparer    = new ByteArrayComparer();
            DHCPv6Packet dummyPacket = new DHCPv6Packet(null, 4, DHCPv6PacketTypes.Solicit, new List <DHCPv6PacketOption>
            {
                new DHCPv6PacketTrueOption(DHCPv6PacketOptionTypes.RapitCommit),
                new DHCPv6PacketByteOption(DHCPv6PacketOptionTypes.Preference, 14),
            });

            Int32 packetsReceived = 0;

            Byte[] packetAsByte = dummyPacket.GetAsStream();

            var serviceBusMock = new Mock <IServiceBus>(MockBehavior.Strict);

            serviceBusMock.Setup(x => x.Publish(
                                     It.Is <DHCPv6PacketArrivedMessage>(y => comparer.Equals(y.Packet.GetAsStream(), packetAsByte) == true))).Callback(() => packetsReceived++).Returns(Task.CompletedTask).Verifiable();

            Mock <ILoggerFactory> factoryMock = new Mock <ILoggerFactory>(MockBehavior.Strict);

            factoryMock.Setup(x => x.CreateLogger(It.IsAny <String>())).Returns(Mock.Of <ILogger <DHCPv6Server> >());

            IDHCPv6InterfaceEngine engine = new DHCPv6InterfaceEngine(
                serviceBusMock.Object,
                Mock.Of <IDHCPv6StorageEngine>(MockBehavior.Strict),
                factoryMock.Object
                );

            var possibleListener = engine.GetPossibleListeners();
            var listener         = possibleListener.First();

            engine.OpenListener(listener);


            IPAddress  address        = new IPAddress(listener.Address.GetBytes());
            IPEndPoint ownEndPoint    = new IPEndPoint(address, 546);
            IPEndPoint serverEndPoint = new IPEndPoint(address, 547);

            UdpClient client = new UdpClient(ownEndPoint);

            client.Send(packetAsByte, packetAsByte.Length, serverEndPoint);

            Int32 trysLeft = 100;

            while (trysLeft-- > 0 && packetsReceived == 0)
            {
                await Task.Delay(1000);
            }

            engine.CloseListener(listener);
            engine.Dispose();

            client.Send(packetAsByte, packetAsByte.Length, serverEndPoint);
            await Task.Delay(3000);

            Assert.Equal(1, packetsReceived);
            client.Dispose();

            serviceBusMock.Verify(x => x.Publish(
                                      It.Is <DHCPv6PacketArrivedMessage>(y => comparer.Equals(y.Packet.GetAsStream(), packetAsByte) == true)), Times.Once);
        }