public void Modify(Uri replica, IList <Uri> allReplicas, IReplicaStorageProvider storageProvider, Request request, ref double weight) { DateTime lastGrayTimestamp; var storage = storageProvider.Obtain <DateTime>(storageKey); if (!storage.TryGetValue(replica, out lastGrayTimestamp)) { return; } var currentTime = timeProvider.GetCurrentTime(); var grayPeriod = grayPeriodProvider.GetGrayPeriod(); if (lastGrayTimestamp + grayPeriod >= currentTime) { weight = 0.0; } else { if (storage.Remove(replica, lastGrayTimestamp)) { LogReplicaIsNoLongerGray(replica); } } }
public void SetUp() { weight = 1.0; request = Request.Get("foo/bar"); replica1 = new Uri("http://replica1"); replica2 = new Uri("http://replica2"); replicas = new List <Uri> { replica1, replica2 }; storage = new ConcurrentDictionary <Uri, DateTime>(); storageProvider = Substitute.For <IReplicaStorageProvider>(); storageProvider.Obtain <DateTime>(Arg.Any <string>()).Returns(storage); periodProvider = Substitute.For <IGrayPeriodProvider>(); periodProvider.GetGrayPeriod().Returns(5.Minutes()); timeProvider = Substitute.For <ITimeProvider>(); timeProvider.GetCurrentTime().Returns(currentTime = DateTime.UtcNow); modifier = new GrayListModifier(periodProvider, timeProvider, new ConsoleLog()); }