Пример #1
0
        public IEnumerable <DHCPv6Listener> GetPossibleListeners()
        {
            List <DHCPv6Listener> result = new List <DHCPv6Listener>();

            foreach (var nic in NetworkInterface.GetAllNetworkInterfaces())
            {
                var properites = nic.GetIPProperties();
                if (properites == null)
                {
                    continue;
                }

                foreach (var ipAddress in properites.UnicastAddresses)
                {
                    if (ipAddress.Address.AddressFamily != System.Net.Sockets.AddressFamily.InterNetworkV6)
                    {
                        continue;
                    }

                    if (ipAddress.Address.IsIPv6LinkLocal == true)
                    {
                        continue;
                    }

                    DHCPv6Listener listener = DHCPv6Listener.FromNIC(nic, ipAddress.Address);
                    result.Add(listener);
                }
            }

            return(result);
        }
Пример #2
0
        public async Task <Guid?> Handle(CreateDHCPv6InterfaceListenerCommand request, CancellationToken cancellationToken)
        {
            _logger.LogDebug("Handle started");

            DHCPv6Listener listener = DHCPv6Listener.Create(
                request.NicId,
                DHCPListenerName.FromString(request.Name),
                IPv6Address.FromString(request.IPv6Addres));

            var possibleListeners = _interfaceEngine.GetPossibleListeners();

            if (possibleListeners.Count(x => x.Address == listener.Address && x.PhysicalInterfaceId == listener.PhysicalInterfaceId) == 0)
            {
                return(null);
            }

            var activeListeners = await _interfaceEngine.GetActiveListeners();

            if (activeListeners.Count(x => x.Address == listener.Address && x.PhysicalInterfaceId == listener.PhysicalInterfaceId) > 0)
            {
                return(null);
            }

            if (await _storageEngine.Save(listener) == false)
            {
                return(null);
            }

            _interfaceEngine.OpenListener(listener);

            return(listener.Id);
        }
Пример #3
0
        public void FromNIC()
        {
            foreach (var nic in NetworkInterface.GetAllNetworkInterfaces())
            {
                var properites = nic.GetIPProperties();
                if (properites == null)
                {
                    continue;
                }

                foreach (var ipAddress in properites.UnicastAddresses)
                {
                    if (ipAddress.Address.AddressFamily != System.Net.Sockets.AddressFamily.InterNetworkV6)
                    {
                        continue;
                    }

                    if (ipAddress.Address.IsIPv6LinkLocal == true)
                    {
                        continue;
                    }

                    DHCPv6Listener listener = DHCPv6Listener.FromNIC(nic, ipAddress.Address);
                    Assert.NotNull(listener);

                    Assert.Equal(nic.GetPhysicalAddress().GetAddressBytes(), listener.PhysicalAddress);
                    Assert.Equal(nic.Description, listener.Interfacename);
                    Assert.Equal(nic.Id, listener.PhysicalInterfaceId);
                    Assert.Equal(ipAddress.Address.GetAddressBytes(), listener.Address.GetBytes());
                    Assert.True(String.IsNullOrEmpty(listener.Name));
                }
            }
        }
Пример #4
0
        public void Delete()
        {
            Random random = new Random();
            Guid   id     = random.NextGuid();

            DHCPv6Listener listener = new DHCPv6Listener();

            listener.Load(new DomainEvent[] {
                new DHCPv6ListenerCreatedEvent
                {
                    Id      = id,
                    Address = random.GetIPv6Address().ToString(),
                }
            });

            Assert.False(listener.IsDeleted);

            listener.Delete();

            Assert.True(listener.IsDeleted);

            var @event = GetFirstEvent <DHCPListenerDeletedEvent>(listener);

            Assert.Equal(id, @event.Id);
        }
Пример #5
0
        public async Task <IEnumerable <DHCPv6Listener> > GetDHCPv6Listener()
        {
            var result = await DHCPv6Interfaces.AsQueryable()
                         .OrderBy(x => x.Name).ToListAsync();

            List <DHCPv6Listener> listeners = new List <DHCPv6Listener>(result.Count);

            foreach (var item in result)
            {
                DHCPv6Listener listener = new DHCPv6Listener();
                listener.Load(new DomainEvent[]
                {
                    new DHCPv6ListenerCreatedEvent {
                        Id          = item.Id,
                        Name        = item.Name,
                        InterfaceId = item.InterfaceId,
                        Address     = item.IPv6Address,
                    }
                });

                listeners.Add(listener);
            }

            return(listeners);
        }
Пример #6
0
        public async Task Handle_Failed_NotSaved()
        {
            Random random = new Random();
            Guid   id     = random.NextGuid();

            DHCPv6Listener listener = new DHCPv6Listener();

            listener.Load(new DomainEvent[] {
                new DHCPv6ListenerCreatedEvent
                {
                    Id      = id,
                    Address = random.GetIPv6Address().ToString(),
                }
            });

            var command = new DeleteDHCPv6InterfaceListenerCommand(id);

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

            storageMock.Setup(x => x.CheckIfAggrerootExists <DHCPv6Listener>(id)).ReturnsAsync(true).Verifiable();
            storageMock.Setup(x => x.GetAggregateRoot <DHCPv6Listener>(id)).ReturnsAsync(listener).Verifiable();
            storageMock.Setup(x => x.Save(listener)).ReturnsAsync(false).Verifiable();

            var handler = new DeleteDHCPv6InterfaceListenerCommandHandler(
                Mock.Of <IDHCPv6InterfaceEngine>(MockBehavior.Strict), storageMock.Object, Mock.Of <ILogger <DeleteDHCPv6InterfaceListenerCommandHandler> >());

            Boolean actual = await handler.Handle(command, CancellationToken.None);

            Assert.False(actual);

            storageMock.Verify();
        }
Пример #7
0
        public async Task <Boolean> Handle(DeleteDHCPv6InterfaceListenerCommand request, CancellationToken cancellationToken)
        {
            _logger.LogDebug("Handle started");

            if (await _storageEngine.CheckIfAggrerootExists <DHCPv6Listener>(request.Id) == false)
            {
                return(false);
            }

            DHCPv6Listener listener = await _storageEngine.GetAggregateRoot <DHCPv6Listener>(request.Id);

            listener.Delete();

            if (await _storageEngine.Save(listener) == false)
            {
                return(false);
            }

            _interfaceEngine.CloseListener(listener);

            return(true);
        }
Пример #8
0
        public void Create()
        {
            Random      random        = new Random();
            String      interfaceId   = random.NextGuid().ToString();
            IPv6Address address       = random.GetIPv6Address();
            String      interfaceName = random.GetAlphanumericString();

            DHCPv6Listener listener = DHCPv6Listener.Create(interfaceId, DHCPListenerName.FromString(interfaceName), address);

            Assert.NotNull(listener);

            Assert.NotEqual(Guid.Empty, listener.Id);
            Assert.Equal(address, listener.Address);
            Assert.Equal(interfaceName, listener.Name);
            Assert.Equal(interfaceId, listener.PhysicalInterfaceId);

            var @event = GetFirstEvent <DHCPListenerCreatedEvent>(listener);

            Assert.Equal(address.ToString(), @event.Address);
            Assert.Equal(listener.Id, @event.Id);
            Assert.Equal(interfaceId, @event.InterfaceId);
            Assert.Equal(interfaceName, @event.Name);
        }