Example #1
0
        private async Task <Boolean> UpdateEndToDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e, ReasonToEndLease reason) =>

        await UpdateLastestDHCPv6LeaseEntry(e, (leaseEntry) =>
        {
            leaseEntry.End       = e.Timestamp;
            leaseEntry.EndReason = reason;
            leaseEntry.IsActive  = false;
        });
Example #2
0
        private async Task <Boolean> RemoveDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e)
        {
            DHCPv6LeaseEntryDataModel entry = await GetLatestDHCPv6LeaseEntry(e);

            if (entry != null)
            {
                return(false);
            }

            DHCPv6LeaseEntries.Remove(entry);
            return(true);
        }
Example #3
0
        private async Task <Boolean> UpdateLastestDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e, Action <DHCPv6LeaseEntryDataModel> updater)
        {
            DHCPv6LeaseEntryDataModel entry = await GetLatestDHCPv6LeaseEntry(e);

            if (entry != null)
            {
                updater(entry);
                return(true);
            }

            return(false);
        }
Example #4
0
        public static Dictionary <DHCPv6Lease, Boolean> AddEventsForCancelableLeases(
            Random random,
            Guid scopeId,
            DHCPv6RootScope rootScope)
        {
            Dictionary <LeaseStates, Func <Guid, DHCPv6ScopeRelatedEvent> > cancalableStateBuilder = new Dictionary <LeaseStates, Func <Guid, DHCPv6ScopeRelatedEvent> >
            {
                { LeaseStates.Pending, (id) => null },
                { LeaseStates.Active, (id) => new DHCPv6LeaseActivatedEvent(id) },
            };

            Dictionary <LeaseStates, Func <Guid, DHCPv6ScopeRelatedEvent> > nonCancalableStateBuilder = new Dictionary <LeaseStates, Func <Guid, DHCPv6ScopeRelatedEvent> >
            {
                //{ LeaseStates.Inactive, (id) => new DHCPv6LeaseExpiredEvent(id)  },
                //{ LeaseStates.Canceled, (id) => new DHCPv6LeaseCanceledEvent(id)  },
                { LeaseStates.Released, (id) => new DHCPv6LeaseReleasedEvent(id, false) },
                { LeaseStates.Revoked, (id) => new DHCPv6LeaseRevokedEvent(id) },
            };

            Int32 leaseAmount = random.Next(20, 40);
            Dictionary <DHCPv6Lease, Boolean> expectedCancallations = new();

            for (int i = 0; i < leaseAmount; i++)
            {
                Guid leaseId = random.NextGuid();

                rootScope.Load(new[]
                {
                    new DHCPv6LeaseCreatedEvent
                    {
                        ScopeId          = scopeId,
                        EntityId         = leaseId,
                        Address          = random.GetIPv6Address(),
                        ClientIdentifier = new UUIDDUID(random.NextGuid()),
                    }
                });

                DHCPv6Lease lease = rootScope.GetRootScopes().First().Leases.GetLeaseById(leaseId);

                Boolean shouldBeCancelable = random.NextDouble() > 0.5;
                Dictionary <LeaseStates, Func <Guid, DHCPv6ScopeRelatedEvent> > eventCreatorDict = null;
                if (shouldBeCancelable == true)
                {
                    eventCreatorDict = cancalableStateBuilder;
                }
                else
                {
                    eventCreatorDict = nonCancalableStateBuilder;
                }

                var entry = eventCreatorDict.ElementAt(random.Next(0, eventCreatorDict.Count));
                DHCPv6ScopeRelatedEvent stateChangingEvent = entry.Value(leaseId);
                if (stateChangingEvent != null)
                {
                    stateChangingEvent.ScopeId = scopeId;
                    rootScope.Load(new[] { stateChangingEvent });
                }

                expectedCancallations.Add(lease, shouldBeCancelable);
            }

            return(expectedCancallations);
        }
Example #5
0
 private async Task <DHCPv6LeaseEntryDataModel> GetLatestDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e) =>
 await DHCPv6LeaseEntries.AsQueryable().Where(x => x.LeaseId == e.EntityId).OrderByDescending(x => x.Timestamp).FirstOrDefaultAsync();