private async Task <Boolean> UpdateEndToDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e, ReasonToEndLease reason) => await UpdateLastestDHCPv6LeaseEntry(e, (leaseEntry) => { leaseEntry.End = e.Timestamp; leaseEntry.EndReason = reason; leaseEntry.IsActive = false; });
private async Task <Boolean> RemoveDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e) { DHCPv6LeaseEntryDataModel entry = await GetLatestDHCPv6LeaseEntry(e); if (entry != null) { return(false); } DHCPv6LeaseEntries.Remove(entry); return(true); }
private async Task <Boolean> UpdateLastestDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e, Action <DHCPv6LeaseEntryDataModel> updater) { DHCPv6LeaseEntryDataModel entry = await GetLatestDHCPv6LeaseEntry(e); if (entry != null) { updater(entry); return(true); } return(false); }
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); }
private async Task <DHCPv6LeaseEntryDataModel> GetLatestDHCPv6LeaseEntry(DHCPv6ScopeRelatedEvent e) => await DHCPv6LeaseEntries.AsQueryable().Where(x => x.LeaseId == e.EntityId).OrderByDescending(x => x.Timestamp).FirstOrDefaultAsync();