示例#1
0
        public async Task HandleInvalidPacket()
        {
            Random random = new Random();

            String dbName = $"{random.Next()}";

            var(client, serviceBus) = GetTestClient(dbName);

            try
            {
                IPv6HeaderInformation headerInformation = new IPv6HeaderInformation(
                    IPv6Address.FromString("fe80::2"), IPv6Address.FromString("fe80::1"));

                DHCPv6Packet packet = DHCPv6RelayPacket.AsOuterRelay(headerInformation, true, 1, IPv6Address.FromString("fe80::3"), IPv6Address.FromString("fe80::4"), Array.Empty <DHCPv6PacketOption>(),
                                                                     DHCPv6Packet.AsInner(1, DHCPv6PacketTypes.ADVERTISE, new List <DHCPv6PacketOption>()));

                var message = new DHCPv6PacketArrivedMessage(packet);

                await serviceBus.Publish(message);

                await Task.Delay(2000);

                StorageContext initicalContext = DatabaseTestingUtility.GetTestDatabaseContext(dbName);

                Int32 tries = 10;
                while (tries-- > 0)
                {
                    if (initicalContext.DHCPv6PacketEntries.Count() == 1)
                    {
                        break;
                    }

                    await Task.Delay(1000);
                }

                Assert.Equal(1, await initicalContext.DHCPv6PacketEntries.AsQueryable().CountAsync());

                var firstEntry = await initicalContext.DHCPv6PacketEntries.AsQueryable().FirstAsync();

                Assert.NotEqual(Guid.Empty, firstEntry.Id);
                Assert.False(firstEntry.InvalidRequest);
                Assert.Equal(packet.GetSize(), firstEntry.RequestSize);
                Assert.Equal(DHCPv6PacketTypes.ADVERTISE, firstEntry.RequestType);
                Assert.Equal(nameof(DHCPv6PacketConsistencyFilter), firstEntry.FilteredBy);

                Assert.True((DateTime.UtcNow - firstEntry.Timestamp).TotalSeconds < 20);
                Assert.NotEqual(DateTime.MinValue, firstEntry.TimestampDay);
                Assert.NotEqual(DateTime.MinValue, firstEntry.TimestampWeek);
                Assert.NotEqual(DateTime.MinValue, firstEntry.TimestampMonth);
            }
            finally
            {
                await DatabaseTestingUtility.DeleteDatabase(dbName);
            }
        }