private async Task RunCacheAsync(FeatureFlagCacheService target, int refreshes, Action <int> callback = null) { var count = 0; _options.RefreshInterval = TimeSpan.FromMilliseconds(100); using (var cancellationTokenSource = new CancellationTokenSource()) { _storage .Setup(s => s.GetAsync()) .Callback(() => { count++; if (count == refreshes) { cancellationTokenSource.Cancel(); } callback?.Invoke(count); }) .ReturnsAsync(_latestFlags); // Act await target.RunAsync(cancellationTokenSource.Token); } }
public FactsBase() { _storage = new Mock <IFeatureFlagStorageService>(); _telemetry = new Mock <IFeatureFlagTelemetryService>(); _options = new FeatureFlagOptions(); _target = new FeatureFlagCacheService( _storage.Object, _options, _telemetry.Object, Mock.Of <ILogger <FeatureFlagCacheService> >()); _latestFlags = FeatureFlagStateBuilder .Create() .WithFeature("Foo", FeatureStatus.Enabled) .Build(); _stalenessMetrics = new List <TimeSpan>(); _telemetry .Setup(t => t.TrackFeatureFlagStaleness(It.IsAny <TimeSpan>())) .Callback((TimeSpan staleness) => { _stalenessMetrics.Add(staleness); }); }
public async Task AllowsNullTelemetryService() { // Arrange var target = new FeatureFlagCacheService( _storage.Object, _options, telemetryService: null, logger: Mock.Of <ILogger <FeatureFlagCacheService> >()); await RunCacheAsync(target, refreshes : 2); // Act var result = target.GetLatestFlagsOrNull(); // Assert Assert.Same(_latestFlags, result); _storage.Verify(s => s.GetAsync(), Times.Exactly(2)); }