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(), }); }
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); }
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); } }
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); }
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); } }
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++; } }
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); }