Skip to content

Commit 6108d45

Browse files
authored
fix: provider status incorrect (#187)
Signed-off-by: Todd Baert <[email protected]>
1 parent 65461c1 commit 6108d45

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

Diff for: src/OpenFeature.Contrib.Providers.Flagd/FlagdProvider.cs

+6-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public sealed class FlagdProvider : FeatureProvider
1616
{
1717
const string ProviderName = "flagd Provider";
1818
private readonly FlagdConfig _config;
19-
private ProviderStatus _status;
19+
private ProviderStatus _status = ProviderStatus.NotReady;
2020
private readonly Metadata _providerMetadata = new Metadata(ProviderName);
2121

2222
private readonly Resolver.Resolver _resolver;
@@ -118,11 +118,13 @@ public override Task Initialize(EvaluationContext context)
118118
{
119119
await _resolver.Init();
120120
_status = ProviderStatus.Ready;
121-
122121
}).ContinueWith((t) =>
123122
{
124-
_status = ProviderStatus.Error;
125-
if (t.IsFaulted) throw t.Exception;
123+
if (t.IsFaulted)
124+
{
125+
_status = ProviderStatus.Error;
126+
throw t.Exception;
127+
};
126128
});
127129
}
128130

Diff for: test/OpenFeature.Contrib.Providers.Flagd.Test/FlagdProviderTest.cs

+23
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Google.Protobuf.WellKnownTypes;
66
using Grpc.Core;
77
using NSubstitute;
8+
using NSubstitute.ExceptionExtensions;
89
using NSubstitute.ReceivedExtensions;
910
using OpenFeature.Constant;
1011
using OpenFeature.Contrib.Providers.Flagd.Resolver.InProcess;
@@ -525,6 +526,28 @@ public async Task TestCacheAsync()
525526
mockGrpcClient.Received(Quantity.AtLeastOne()).EventStream(Arg.Any<EventStreamRequest>(), null, null, CancellationToken.None);
526527
}
527528

529+
[Fact]
530+
public async Task TestResolverInit_Success_Ready()
531+
{
532+
var mockResolver = Substitute.For<Resolver.Resolver>();
533+
mockResolver.Init().Returns(Task.CompletedTask);
534+
var provider = new FlagdProvider(resolver: mockResolver);
535+
await provider.Initialize(EvaluationContext.Empty);
536+
537+
Assert.Equal(ProviderStatus.Ready, provider.GetStatus());
538+
}
539+
540+
[Fact]
541+
public async Task TestResolverInit_Failure_Error()
542+
{
543+
var mockResolver = Substitute.For<Resolver.Resolver>();
544+
mockResolver.Init().ThrowsAsync(new Exception("fake exception"));
545+
var provider = new FlagdProvider(resolver: mockResolver);
546+
await Assert.ThrowsAsync<AggregateException>(() => provider.Initialize(EvaluationContext.Empty));
547+
548+
Assert.Equal(ProviderStatus.Error, provider.GetStatus());
549+
}
550+
528551
[Fact]
529552
public async Task TestCacheHitAsync()
530553
{

0 commit comments

Comments
 (0)