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() {