Пример #1
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            DHCPv4ScopeProperties item = (DHCPv4ScopeProperties)value;

            serializer.Serialize(writer, new EeasySerialibleVersionOfDHCPv4ScopeProperties
            {
                Properties = item.Properties.Where(x => x != null),
                ExcludedFromInheritance = item.GetMarkedFromInheritanceOptionCodes().Cast <Int32>().ToArray(),
            });
        }
Пример #2
0
        protected static DHCPv4ScopeProperties GetScopeProperties(IScopeChangeCommand request)
        {
            List <DHCPv4ScopeProperty> properties = new List <DHCPv4ScopeProperty>();
            List <Byte> optionsToRemove           = new();

            foreach (var item in request.Properties ?? Array.Empty <DHCPv4ScopePropertyRequest>())
            {
                if (item.MarkAsRemovedInInheritance == true)
                {
                    optionsToRemove.Add(item.OptionCode);
                }
                else
                {
                    switch (item)
                    {
                    case DHCPv4AddressListScopePropertyRequest property:
                        properties.Add(new DHCPv4AddressListScopeProperty(item.OptionCode, property.Addresses.Select(x => IPv4Address.FromString(x)).ToList()));
                        break;

                    case DHCPv4AddressScopePropertyRequest property:
                        properties.Add(new DHCPv4AddressScopeProperty(item.OptionCode, IPv4Address.FromString(property.Address)));
                        break;

                    case DHCPv4BooleanScopePropertyRequest property:
                        properties.Add(new DHCPv4BooleanScopeProperty(item.OptionCode, property.Value));
                        break;

                    case DHCPv4NumericScopePropertyRequest property:
                        properties.Add(new DHCPv4NumericValueScopeProperty(item.OptionCode, property.Value, property.NumericType, item.Type));
                        break;

                    case DHCPv4TextScopePropertyRequest property:
                        properties.Add(new DHCPv4TextScopeProperty(item.OptionCode, property.Value));
                        break;

                    case DHCPv4TimeScopePropertyRequest property:
                        properties.Add(new DHCPv4TimeScopeProperty(item.OptionCode, false, property.Value));
                        break;

                    default:
                        break;
                    }
                }
            }

            var result = new DHCPv4ScopeProperties(properties);

            foreach (var item in optionsToRemove)
            {
                result.RemoveFromInheritance(item);
            }

            return(result);
        }
Пример #3
0
        private void GenerateScopeTree(
            Double randomValue, Random random, List <Guid> parents,
            ICollection <DomainEvent> events
            )
        {
            if (randomValue > 0)
            {
                return;
            }

            Int32 scopeAmount    = random.Next(3, 10);
            Guid  directParentId = parents.Last();

            for (int i = 0; i < scopeAmount; i++)
            {
                Guid        scopeId  = Guid.NewGuid();
                IPv4Address start    = random.GetIPv4Address();
                IPv4Address end      = start + 100;
                var         excluded = new[] { start + 1, start + 3 };

                DHCPv4ScopeProperties properties = null;
                if (random.NextBoolean() == true)
                {
                    DHCPv4AddressListScopeProperty gwAddress = new(
                        DHCPv4OptionTypes.Router, new[] { start + 0, start + 30 });
                    properties = new DHCPv4ScopeProperties(gwAddress);
                }
                else
                {
                    properties = new();
                }

                events.Add(new DHCPv4ScopeAddedEvent(new DHCPv4ScopeCreateInstruction
                {
                    Id                = scopeId,
                    Name              = random.GetAlphanumericString(),
                    ParentId          = directParentId,
                    AddressProperties = new DHCPv4ScopeAddressProperties(start, end, excluded,
                                                                         maskLength: random.NextBoolean() == true ? (Byte)random.Next(0, 32) : null),
                    ScopeProperties = properties
                }));

                List <Guid> newParentList = new List <Guid>(parents)
                {
                    scopeId
                };

                GenerateScopeTree(
                    randomValue + random.NextDouble(), random,
                    newParentList, events);
            }
        }
Пример #4
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var info = serializer.Deserialize <EeasySerialibleVersionOfDHCPv4ScopeProperties>(reader);

            DHCPv4ScopeProperties result = new DHCPv4ScopeProperties(info.Properties);

            foreach (var item in info.ExcludedFromInheritance ?? Array.Empty <Int32>())
            {
                result.RemoveFromInheritance((Byte)item);
            }

            return(result);
        }
Пример #5
0
        public void GetScopesAsList()
        {
            Random random = new Random();

            var         events          = new List <DomainEvent>();
            Int32       rootScopeAmount = random.Next(10, 30);
            List <Guid> rootScopeIds    = new List <Guid>(rootScopeAmount);

            for (int i = 0; i < rootScopeAmount; i++)
            {
                Guid        scopeId  = Guid.NewGuid();
                IPv4Address start    = random.GetIPv4Address();
                IPv4Address end      = start + 100;
                var         excluded = new[] { start + 1, start + 3 };

                DHCPv4ScopeProperties properties = null;
                if (random.NextBoolean() == true)
                {
                    DHCPv4AddressListScopeProperty gwAddress = new(
                        DHCPv4OptionTypes.Router, new[] { start + 0, start + 30 });
                    properties = new DHCPv4ScopeProperties(gwAddress);
                }
                else
                {
                    properties = new();
                }

                events.Add(new DHCPv4ScopeAddedEvent(new DHCPv4ScopeCreateInstruction
                {
                    Id   = scopeId,
                    Name = random.GetAlphanumericString(),
                    AddressProperties = new DHCPv4ScopeAddressProperties(start, end, excluded,
                                                                         maskLength: random.NextBoolean() == true ? (Byte)random.Next(0, 32) : null),
                    ScopeProperties = properties
                }));

                rootScopeIds.Add(scopeId);

                GenerateScopeTree(
                    random.NextDouble(), random,
                    new List <Guid> {
                    scopeId
                }, events);
            }

            var scopeResolverMock = new Mock <IScopeResolverManager <DHCPv4Packet, IPv4Address> >(MockBehavior.Strict);

            scopeResolverMock.Setup(x => x.InitializeResolver(It.IsAny <CreateScopeResolverInformation>())).Returns(Mock.Of <IScopeResolver <DHCPv4Packet, IPv4Address> >());

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

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

            DHCPv4RootScope rootScope = new DHCPv4RootScope(random.NextGuid(), scopeResolverMock.Object, factoryMock.Object);

            rootScope.Load(events);

            var controller = new DHCPv4ScopeController(
                Mock.Of <IMediator>(MockBehavior.Strict),
                Mock.Of <IScopeResolverManager <DHCPv4Packet, IPv4Address> >(MockBehavior.Strict),
                rootScope);
            var actionResult = controller.GetScopesAsList();
            var result       = actionResult.EnsureOkObjectResult <IEnumerable <DHCPv4ScopeItem> >(true);

            Assert.Equal(events.Count, result.Count());
            for (int i = 0; i < events.Count; i++)
            {
                var scope  = result.ElementAt(i);
                var @event = (DHCPv4ScopeAddedEvent)events[i];
                Assert.Equal(@event.Instructions.Name, scope.Name);
                Assert.Equal(@event.Instructions.Id, scope.Id);
                Assert.Equal(@event.Instructions.AddressProperties.Start.ToString(), scope.StartAddress);
                Assert.Equal(@event.Instructions.AddressProperties.End.ToString(), scope.EndAddress);
                Assert.Equal(@event.Instructions.AddressProperties.ExcludedAddresses.Select(x => x.ToString()).ToArray(), scope.ExcludedAddresses);
                Assert.Equal((@event.Instructions.ScopeProperties?.Properties ?? Array.Empty <DHCPv4ScopeProperty>()).Where(x => x.OptionIdentifier == (Byte)DHCPv4OptionTypes.Router).Cast <DHCPv4AddressListScopeProperty>().Select(x => x.Addresses.First().ToString()).FirstOrDefault(), scope.FirstGatewayAddress);
            }
        }
Пример #6
0
        public void GetScopesAsTreeView()
        {
            Random random = new Random();

            var         events          = new List <DomainEvent>();
            Int32       rootScopeAmount = random.Next(10, 30);
            List <Guid> rootScopeIds    = new List <Guid>(rootScopeAmount);

            for (int i = 0; i < rootScopeAmount; i++)
            {
                Guid        scopeId  = Guid.NewGuid();
                IPv4Address start    = random.GetIPv4Address();
                IPv4Address end      = start + 100;
                var         excluded = new[] { start + 1, start + 3 };

                DHCPv4ScopeProperties properties = null;
                if (random.NextBoolean() == true)
                {
                    DHCPv4AddressListScopeProperty gwAddress = new(
                        DHCPv4OptionTypes.Router, new[] { start + 0, start + 30 });
                    properties = new DHCPv4ScopeProperties(gwAddress);
                }
                else
                {
                    properties = new();
                }

                events.Add(new DHCPv4ScopeAddedEvent(new DHCPv4ScopeCreateInstruction
                {
                    Id   = scopeId,
                    Name = random.GetAlphanumericString(),
                    AddressProperties = new DHCPv4ScopeAddressProperties(start, end, excluded,
                                                                         maskLength: random.NextBoolean() == true ? (Byte)random.Next(0, 32) : null),
                    ScopeProperties = properties
                }));

                rootScopeIds.Add(scopeId);

                GenerateScopeTree(
                    random.NextDouble(), random,
                    new List <Guid> {
                    scopeId
                }, events);
            }

            var scopeResolverMock = new Mock <IScopeResolverManager <DHCPv4Packet, IPv4Address> >(MockBehavior.Strict);

            scopeResolverMock.Setup(x => x.InitializeResolver(It.IsAny <CreateScopeResolverInformation>())).Returns(Mock.Of <IScopeResolver <DHCPv4Packet, IPv4Address> >());

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

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

            DHCPv4RootScope rootScope = new DHCPv4RootScope(random.NextGuid(), scopeResolverMock.Object, factoryMock.Object);

            rootScope.Load(events);

            var controller = new DHCPv4ScopeController(
                Mock.Of <IMediator>(MockBehavior.Strict),
                Mock.Of <IScopeResolverManager <DHCPv4Packet, IPv4Address> >(MockBehavior.Strict),
                rootScope);
            var actionResult = controller.GetScopesAsTreeView();
            var result       = actionResult.EnsureOkObjectResult <IEnumerable <DHCPv4ScopeTreeViewItem> >(true);

            Assert.Equal(rootScopeAmount, result.Count());
            Int32 index = 0;

            foreach (var item in rootScope.GetRootScopes())
            {
                var scope = result.ElementAt(index);

                CheckTreeItem(item, scope);

                index++;
            }
        }
Пример #7
0
        public void DHCPv4Scope_ScopePropertiesInherientce()
        {
            Random random = new Random();

            Byte onylGrandParentOptionIdentifier   = 47;
            Byte onlyParentOptionIdentifier        = 55;
            Byte onlyChildOptionIdentifier         = 90;
            Byte overridenByParentOptionIdentifier = 100;
            Byte overridenByChildOptionIdentifier  = 110;

            Dictionary <Byte, IPv4Address> inputs = new Dictionary <byte, IPv4Address>
            {
                { onylGrandParentOptionIdentifier, random.GetIPv4Address() },
                { onlyParentOptionIdentifier, random.GetIPv4Address() },
                { onlyChildOptionIdentifier, random.GetIPv4Address() },
                { overridenByParentOptionIdentifier, random.GetIPv4Address() },
                { overridenByChildOptionIdentifier, random.GetIPv4Address() },
            };

            DHCPv4ScopeProperties grantParentProperties = new DHCPv4ScopeProperties(
                new DHCPv4AddressScopeProperty(onylGrandParentOptionIdentifier, inputs[onylGrandParentOptionIdentifier]),
                new DHCPv4AddressScopeProperty(overridenByParentOptionIdentifier, random.GetIPv4Address()),
                new DHCPv4AddressScopeProperty(overridenByChildOptionIdentifier, random.GetIPv4Address())
                );

            DHCPv4ScopeProperties parentProperties = new DHCPv4ScopeProperties(
                new DHCPv4AddressScopeProperty(onlyParentOptionIdentifier, inputs[onlyParentOptionIdentifier]),
                new DHCPv4AddressScopeProperty(overridenByParentOptionIdentifier, inputs[overridenByParentOptionIdentifier])
                );

            DHCPv4ScopeProperties childProperties = new DHCPv4ScopeProperties(
                new DHCPv4AddressScopeProperty(onlyChildOptionIdentifier, inputs[onlyChildOptionIdentifier]),
                new DHCPv4AddressScopeProperty(overridenByChildOptionIdentifier, inputs[overridenByChildOptionIdentifier])
                );

            DHCPv4ScopeProperties expectedProperties = new DHCPv4ScopeProperties(
                new DHCPv4AddressScopeProperty(onylGrandParentOptionIdentifier, inputs[onylGrandParentOptionIdentifier]),
                new DHCPv4AddressScopeProperty(onlyParentOptionIdentifier, inputs[onlyParentOptionIdentifier]),
                new DHCPv4AddressScopeProperty(onlyChildOptionIdentifier, inputs[onlyChildOptionIdentifier]),
                new DHCPv4AddressScopeProperty(overridenByParentOptionIdentifier, inputs[overridenByParentOptionIdentifier]),
                new DHCPv4AddressScopeProperty(overridenByChildOptionIdentifier, inputs[overridenByChildOptionIdentifier])
                );

            Guid grantParentId = Guid.NewGuid();
            Guid parentId      = Guid.NewGuid();
            Guid childId       = Guid.NewGuid();

            List <DomainEvent> events = new List <DomainEvent>
            {
                new DHCPv4ScopeAddedEvent(new DHCPv4ScopeCreateInstruction
                {
                    Id = grantParentId,
                    ScopeProperties = grantParentProperties,
                }),
                new DHCPv4ScopeAddedEvent(new DHCPv4ScopeCreateInstruction
                {
                    Id              = parentId,
                    ParentId        = grantParentId,
                    ScopeProperties = parentProperties,
                }),
                new DHCPv4ScopeAddedEvent(new DHCPv4ScopeCreateInstruction
                {
                    Id              = childId,
                    ParentId        = parentId,
                    ScopeProperties = childProperties,
                }),
            };

            DHCPv4RootScope rootScope = GetRootScope();

            rootScope.Load(events);

            DHCPv4Scope           scope            = rootScope.GetScopeById(childId);
            DHCPv4ScopeProperties actualProperties = scope.GetScopeProperties();

            Assert.Equal(expectedProperties, actualProperties);
        }