Observed behavior
In some situations, provider Init may be called after openfeature.Shutdown() call. Additionally, a provider that was not received Init call may got a Shutdown call.
Expected Behavior
No response
Steps to reproduce
func TestProviderInitShutdown(t *testing.T) {
p := &ttprovider{t: t}
err := openfeature.SetProvider(p)
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
openfeature.Shutdown()
time.Sleep(time.Second)
}
var _ openfeature.StateHandler = (*ttprovider)(nil)
type ttprovider struct {
openfeature.NoopProvider
halted atomic.Bool
t testing.TB
}
func (a *ttprovider) Init(openfeature.EvaluationContext) error {
if a.halted.Load() {
a.t.Fatal("unexpected init call after Shutdown")
}
return nil
}
func (a *ttprovider) Shutdown() {
if a.halted.CompareAndSwap(false, true) {
a.t.Log("Shutdown was called")
}
}
Observed behavior
In some situations, provider Init may be called after openfeature.Shutdown() call. Additionally, a provider that was not received
Initcall may got aShutdowncall.Expected Behavior
No response
Steps to reproduce