private async Task <Boolean> UpdateEndToDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e, ReasonToEndLease reason) => await UpdateLastestDHCPv4LeaseEntry(e, (leaseEntry) => { leaseEntry.End = e.Timestamp; leaseEntry.EndReason = reason; leaseEntry.IsActive = false; });
private async Task <Boolean> RemoveDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e) { DHCPv4LeaseEntryDataModel entry = await GetLatestDHCPv4LeaseEntry(e); if (entry != null) { return(false); } DHCPv4LeaseEntries.Remove(entry); return(true); }
private async Task <Boolean> UpdateLastestDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e, Action <DHCPv4LeaseEntryDataModel> updater) { DHCPv4LeaseEntryDataModel entry = await GetLatestDHCPv4LeaseEntry(e); if (entry != null) { updater(entry); return(true); } return(false); }
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); }
private async Task <DHCPv4LeaseEntryDataModel> GetLatestDHCPv4LeaseEntry(DHCPv4ScopeRelatedEvent e) => await DHCPv4LeaseEntries.AsQueryable().Where(x => x.LeaseId == e.EntityId).OrderByDescending(x => x.Timestamp).FirstOrDefaultAsync();