@@ -14,6 +14,7 @@ import (
14
14
type MockProvider struct {
15
15
oft.TestProvider
16
16
InitCount * int
17
+ ShutCount * int
17
18
}
18
19
19
20
func (m * MockProvider ) Init (evalCtx openfeature.EvaluationContext ) error {
@@ -22,19 +23,22 @@ func (m *MockProvider) Init(evalCtx openfeature.EvaluationContext) error {
22
23
}
23
24
24
25
func (m * MockProvider ) Shutdown () {
26
+ * m .ShutCount += 1
25
27
}
26
28
27
- func NewMockProvider (initCount * int ) * MockProvider {
29
+ func NewMockProvider (initCount * int , shutCount * int ) * MockProvider {
28
30
return & MockProvider {
29
31
TestProvider : oft .NewTestProvider (),
30
- InitCount : initCount ,
32
+ InitCount : initCount ,
33
+ ShutCount : shutCount ,
31
34
}
32
35
}
33
36
34
37
// MockProviderDelay utilizes openfeature's TestProvider to add testable Init & Shutdown methods to test the MultiProvider functionality with a small delay making sure the the go routines properly wait.
35
38
type MockProviderDelay struct {
36
39
oft.TestProvider
37
40
InitCount * int
41
+ ShutCount * int
38
42
}
39
43
40
44
func (m * MockProviderDelay ) Init (evalCtx openfeature.EvaluationContext ) error {
@@ -44,12 +48,15 @@ func (m *MockProviderDelay) Init(evalCtx openfeature.EvaluationContext) error {
44
48
}
45
49
46
50
func (m * MockProviderDelay ) Shutdown () {
51
+ time .Sleep (2 * time .Millisecond )
52
+ * m .ShutCount += 1
47
53
}
48
54
49
- func NewMockProviderDelay (initCount * int ) * MockProviderDelay {
55
+ func NewMockProviderDelay (initCount * int , shutCount * int ) * MockProviderDelay {
50
56
return & MockProviderDelay {
51
57
TestProvider : oft .NewTestProvider (),
52
- InitCount : initCount ,
58
+ InitCount : initCount ,
59
+ ShutCount : shutCount ,
53
60
}
54
61
}
55
62
@@ -223,10 +230,11 @@ func TestMultiProvider_MetaData(t *testing.T) {
223
230
224
231
func TestMultiProvider_Init (t * testing.T ) {
225
232
initializations := 0
233
+ shutdowns := 0
226
234
227
- testProvider1 := NewMockProvider (& initializations )
235
+ testProvider1 := NewMockProvider (& initializations , & shutdowns )
228
236
testProvider2 := oft .NewTestProvider ()
229
- testProvider3 := NewMockProviderDelay (& initializations )
237
+ testProvider3 := NewMockProviderDelay (& initializations , & shutdowns )
230
238
231
239
defaultLogger , err := hooks .NewLoggingHook (false )
232
240
if err != nil {
@@ -240,7 +248,7 @@ func TestMultiProvider_Init(t *testing.T) {
240
248
}, {
241
249
Provider : testProvider2 ,
242
250
UniqueName : "provider2" ,
243
- },{
251
+ }, {
244
252
Provider : testProvider3 ,
245
253
UniqueName : "provider3" ,
246
254
},
@@ -270,6 +278,47 @@ func TestMultiProvider_Init(t *testing.T) {
270
278
271
279
}
272
280
281
+ func TestMultiProvider_Shutdown (t * testing.T ) {
282
+ initializations := 0
283
+ shutdowns := 0
284
+
285
+ testProvider1 := NewMockProvider (& initializations , & shutdowns )
286
+ testProvider2 := oft .NewTestProvider ()
287
+ testProvider3 := NewMockProviderDelay (& initializations , & shutdowns )
288
+
289
+ defaultLogger , err := hooks .NewLoggingHook (false )
290
+ if err != nil {
291
+ t .Errorf ("Issue setting up logger,'%s'" , err )
292
+ }
293
+
294
+ mp , err := NewMultiProvider ([]UniqueNameProvider {
295
+ {
296
+ Provider : testProvider1 ,
297
+ UniqueName : "provider1" ,
298
+ }, {
299
+ Provider : testProvider2 ,
300
+ UniqueName : "provider2" ,
301
+ }, {
302
+ Provider : testProvider3 ,
303
+ UniqueName : "provider3" ,
304
+ },
305
+ }, "test" , defaultLogger )
306
+
307
+ if err != nil {
308
+ t .Errorf ("Expected the multiprovider to successfully make an instance, '%s'" , err )
309
+ }
310
+
311
+ mp .Shutdown ()
312
+
313
+ if shutdowns == 0 {
314
+ t .Errorf ("Expected there to be shutdowns, but none were ran." )
315
+ }
316
+
317
+ if shutdowns != 2 {
318
+ t .Errorf ("Expected there to be '2' shutdown steps ran, but got: '%d'." , shutdowns )
319
+ }
320
+ }
321
+
273
322
func TestNewMultiProvider_ProviderUniqueNames (t * testing.T ) {
274
323
testProvider1 := memprovider .NewInMemoryProvider (map [string ]memprovider.InMemoryFlag {
275
324
"boolFlag" : {
0 commit comments