Ejemplo n.º 1
0
            public Facts(ITestOutputHelper output)
            {
                Options      = new Mock <IOptionsSnapshot <FeatureFlagConfiguration> >();
                CacheService = new Mock <IFeatureFlagCacheService>();
                Logger       = new LoggerFactory().AddXunit(output).CreateLogger <FeatureFlagRefresher>();

                IsCacheServiceInitialized = false;
                Config = new FeatureFlagConfiguration
                {
                    ConnectionString = "some-connection-string",
                    RefreshInternal  = TimeSpan.FromSeconds(5),
                };
                FeatureFlags = new NuGet.Services.FeatureFlags.FeatureFlags(
                    new Dictionary <string, FeatureStatus>(),
                    new Dictionary <string, Flight>());

                Options.Setup(x => x.Value).Returns(() => Config);
                LazyCacheService = new Lazy <IFeatureFlagCacheService>(() =>
                {
                    IsCacheServiceInitialized = true;
                    return(CacheService.Object);
                });

                Operations = new ConcurrentQueue <string>();
                CacheService
                .Setup(x => x.GetLatestFlagsOrNull())
                .Returns(() => FeatureFlags)
                .Callback(() => Operations.Enqueue(nameof(IFeatureFlagCacheService.GetLatestFlagsOrNull)));
                CacheService
                .Setup(x => x.RefreshAsync())
                .Returns(Task.CompletedTask)
                .Callback(() => Operations.Enqueue(nameof(IFeatureFlagCacheService.RefreshAsync)));
                CacheService
                .Setup(x => x.RunAsync(It.IsAny <CancellationToken>()))
                .Returns <CancellationToken>(async token =>
                {
                    // We use a delay here to simulate a real long running task. We don't want to delay for too
                    // long so that if there is a test or product bug we don't want to hang. This is enough time
                    // for test logic to complete.
                    try
                    {
                        await Task.Delay(TimeSpan.FromSeconds(30), token);
                    }
                    catch (OperationCanceledException)
                    {
                        Cancelled = true;
                    }
                })
                .Callback(() => Operations.Enqueue(nameof(IFeatureFlagCacheService.RunAsync)));

                Target = new FeatureFlagRefresher(
                    Options.Object,
                    LazyCacheService,
                    Logger);
            }
 public FeatureFlagsAndRefreshTime(FeatureFlags featureFlags, DateTimeOffset refreshTime)
 {
     FeatureFlags     = featureFlags;
     RefreshStartTime = refreshTime;
 }