From 6108d452d6c8a5c70c18b45ea9dd2e13612370ec Mon Sep 17 00:00:00 2001 From: Todd Baert Date: Wed, 24 Apr 2024 15:56:08 -0400 Subject: [PATCH] fix: provider status incorrect (#187) Signed-off-by: Todd Baert --- .../FlagdProvider.cs | 10 ++++---- .../FlagdProviderTest.cs | 23 +++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/OpenFeature.Contrib.Providers.Flagd/FlagdProvider.cs b/src/OpenFeature.Contrib.Providers.Flagd/FlagdProvider.cs index 11bdd302..dc457da5 100644 --- a/src/OpenFeature.Contrib.Providers.Flagd/FlagdProvider.cs +++ b/src/OpenFeature.Contrib.Providers.Flagd/FlagdProvider.cs @@ -16,7 +16,7 @@ public sealed class FlagdProvider : FeatureProvider { const string ProviderName = "flagd Provider"; private readonly FlagdConfig _config; - private ProviderStatus _status; + private ProviderStatus _status = ProviderStatus.NotReady; private readonly Metadata _providerMetadata = new Metadata(ProviderName); private readonly Resolver.Resolver _resolver; @@ -118,11 +118,13 @@ public override Task Initialize(EvaluationContext context) { await _resolver.Init(); _status = ProviderStatus.Ready; - }).ContinueWith((t) => { - _status = ProviderStatus.Error; - if (t.IsFaulted) throw t.Exception; + if (t.IsFaulted) + { + _status = ProviderStatus.Error; + throw t.Exception; + }; }); } diff --git a/test/OpenFeature.Contrib.Providers.Flagd.Test/FlagdProviderTest.cs b/test/OpenFeature.Contrib.Providers.Flagd.Test/FlagdProviderTest.cs index e796ac90..70314b77 100644 --- a/test/OpenFeature.Contrib.Providers.Flagd.Test/FlagdProviderTest.cs +++ b/test/OpenFeature.Contrib.Providers.Flagd.Test/FlagdProviderTest.cs @@ -5,6 +5,7 @@ using Google.Protobuf.WellKnownTypes; using Grpc.Core; using NSubstitute; +using NSubstitute.ExceptionExtensions; using NSubstitute.ReceivedExtensions; using OpenFeature.Constant; using OpenFeature.Contrib.Providers.Flagd.Resolver.InProcess; @@ -525,6 +526,28 @@ public async Task TestCacheAsync() mockGrpcClient.Received(Quantity.AtLeastOne()).EventStream(Arg.Any(), null, null, CancellationToken.None); } + [Fact] + public async Task TestResolverInit_Success_Ready() + { + var mockResolver = Substitute.For(); + mockResolver.Init().Returns(Task.CompletedTask); + var provider = new FlagdProvider(resolver: mockResolver); + await provider.Initialize(EvaluationContext.Empty); + + Assert.Equal(ProviderStatus.Ready, provider.GetStatus()); + } + + [Fact] + public async Task TestResolverInit_Failure_Error() + { + var mockResolver = Substitute.For(); + mockResolver.Init().ThrowsAsync(new Exception("fake exception")); + var provider = new FlagdProvider(resolver: mockResolver); + await Assert.ThrowsAsync(() => provider.Initialize(EvaluationContext.Empty)); + + Assert.Equal(ProviderStatus.Error, provider.GetStatus()); + } + [Fact] public async Task TestCacheHitAsync() {