Esempio n. 1
0
 private async Task <Boolean> UpdateEndToDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e, ReasonToEndLease reason) =>
 await UpdateLastestDHCPv4LeaseEntry(e, (leaseEntry) =>
 {
     leaseEntry.End       = e.Timestamp;
     leaseEntry.EndReason = reason;
     leaseEntry.IsActive  = false;
 });
Esempio n. 2
0
        private async Task <Boolean> RemoveDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e)
        {
            DHCPv4LeaseEntryDataModel entry = await GetLatestDHCPv4LeaseEntry(e);

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

            DHCPv4LeaseEntries.Remove(entry);
            return(true);
        }
Esempio n. 3
0
        private async Task <Boolean> UpdateLastestDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e, Action <DHCPv4LeaseEntryDataModel> updater)
        {
            DHCPv4LeaseEntryDataModel entry = await GetLatestDHCPv4LeaseEntry(e);

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

            return(false);
        }
Esempio n. 4
0
        public static Dictionary <DHCPv4Lease, Boolean> AddEventsForCancelableLeases(
            Random random,
            Guid scopeId,
            DHCPv4RootScope scope)
        {
            Dictionary <LeaseStates, Func <Guid, DHCPv4ScopeRelatedEvent> > cancalableStateBuilder = new Dictionary <LeaseStates, Func <Guid, DHCPv4ScopeRelatedEvent> >
            {
                { LeaseStates.Pending, (id) => null },
                { LeaseStates.Active, (id) => new DHCPv4LeaseActivatedEvent(id) },
            };

            Dictionary <LeaseStates, Func <Guid, DHCPv4ScopeRelatedEvent> > nonCancalableStateBuilder = new Dictionary <LeaseStates, Func <Guid, DHCPv4ScopeRelatedEvent> >
            {
                { LeaseStates.Inactive, (id) => new DHCPv4LeaseExpiredEvent(id) },
                { LeaseStates.Canceled, (id) => new DHCPv4LeaseCanceledEvent(id) },
                { LeaseStates.Released, (id) => new DHCPv4LeaseReleasedEvent(id) },
                { LeaseStates.Revoked, (id) => new DHCPv4LeaseRevokedEvent(id) },
            };

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

            for (int i = 0; i < leaseAmount; i++)
            {
                Guid leaseId = Guid.NewGuid();
                scope.Load(new[] {
                    new DHCPv4LeaseCreatedEvent
                    {
                        ScopeId        = scopeId,
                        EntityId       = leaseId,
                        ClientIdenfier = DHCPv4ClientIdentifier.FromHwAddress(random.NextBytes(6)).GetBytes(),
                        Address        = random.GetIPv4Address(),
                    }
                });

                DHCPv4Lease lease = scope.GetRootScopes().First().Leases.GetLeaseById(leaseId);

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

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

                expectedCancallations.Add(lease, shouldBeCancelable);
            }

            return(expectedCancallations);
        }
Esempio n. 5
0
 private async Task <DHCPv4LeaseEntryDataModel> GetLatestDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e) =>
 await DHCPv4LeaseEntries.AsQueryable().Where(x => x.LeaseId == e.EntityId).OrderByDescending(x => x.Timestamp).FirstOrDefaultAsync();