@@ -2,64 +2,59 @@ import { OpenFeature } from '@openfeature/server-sdk';
2
2
import { FlagdContainer } from '../tests/flagdContainer' ;
3
3
import { State , Steps } from './state' ;
4
4
import { FlagdProvider } from '../../lib/flagd-provider' ;
5
-
6
- type Containers = Record < string , FlagdContainer > & { default : FlagdContainer } ;
5
+ import { waitFor } from "./utils" ;
7
6
8
7
export const providerSteps : Steps =
9
8
( state : State ) =>
10
9
( { given, when, then } ) => {
11
- const containers : Containers = {
12
- default : FlagdContainer . build ( ) ,
13
- } ;
10
+ const container : FlagdContainer = FlagdContainer . build ( ) ;
14
11
beforeAll ( async ( ) => {
15
12
console . log ( 'Setting flagd provider...' ) ;
16
13
17
- const promises = [ ] ;
18
-
19
- for ( const container of Object . values ( containers ) ) {
20
- promises . push ( container . start ( ) ) ;
21
- }
22
-
23
- return Promise . all ( promises ) ;
14
+ return container . start ( ) ;
24
15
} , 50000 ) ;
25
16
26
17
afterAll ( async ( ) => {
27
18
await OpenFeature . close ( ) ;
28
- for ( const container of Object . values ( containers ) ) {
29
- await container . stop ( ) ;
30
- }
19
+ await container . stop ( ) ;
31
20
} ) ;
32
21
33
22
beforeEach ( async ( ) => {
34
- const promises = [ ] ;
35
-
36
- for ( const container of Object . values ( containers ) ) {
37
- promises . push ( container . start ( ) ) ;
23
+ if ( container . isStarted ( ) ) {
24
+ return container . start ( ) ;
38
25
}
39
-
40
- return Promise . all ( promises ) ;
26
+ return Promise . resolve ( ) ;
41
27
} , 50000 ) ;
42
-
43
- function getContainer ( providerType : string ) : FlagdContainer {
44
- if ( Object . hasOwn ( containers , providerType ) ) {
45
- return containers [ providerType ] ;
28
+ afterEach ( async ( ) => {
29
+ if ( state . client ) {
30
+ await fetch ( 'http://' + container . getLaunchpadUrl ( ) + '/stop' ) ;
31
+ await new Promise ( ( r ) => setTimeout ( r , 100 ) ) ;
46
32
}
47
- return containers . default ;
48
- }
33
+ return Promise . resolve ( ) ;
34
+ } , 50000 ) ;
49
35
50
36
given ( / a ( .* ) f l a g d p r o v i d e r / , async ( providerType : string ) => {
51
- const container = getContainer ( providerType ) ;
52
37
const flagdOptions : Record < string , unknown > = {
53
38
resolverType : state . resolverType ,
39
+ deadline : 2000 ,
54
40
} ;
41
+ let type = 'default' ;
55
42
switch ( providerType ) {
56
43
default :
57
44
flagdOptions [ 'port' ] = container . getPort ( state . resolverType ) ;
58
45
break ;
59
46
case 'unavailable' :
60
47
flagdOptions [ 'port' ] = 9999 ;
61
48
break ;
49
+ case 'ssl' :
50
+ // todo: configure properly
51
+ flagdOptions [ 'port' ] = container . getPort ( state . resolverType ) ;
52
+ type = 'ssl' ;
53
+ break ;
62
54
}
55
+
56
+ await fetch ( 'http://' + container . getLaunchpadUrl ( ) + '/start?config=' + type ) ;
57
+ await new Promise ( ( r ) => setTimeout ( r , 500 ) ) ;
63
58
if ( providerType == 'unavailable' ) {
64
59
OpenFeature . setProvider ( providerType , new FlagdProvider ( flagdOptions ) ) ;
65
60
} else {
@@ -71,8 +66,13 @@ export const providerSteps: Steps =
71
66
} ) ;
72
67
73
68
when ( / ^ t h e c o n n e c t i o n i s l o s t f o r ( \d + ) s $ / , async ( time ) => {
74
- const container = getContainer ( state . providerType ! ) ;
75
- await container . stop ( ) ;
76
- setTimeout ( ( ) => container . start ( ) , time * 1000 ) ;
69
+ console . log ( 'stopping flagd' ) ;
70
+ await fetch ( 'http://' + container . getLaunchpadUrl ( ) + '/restart?seconds=' + time ) ;
71
+ await new Promise ( ( r ) => setTimeout ( r , 50 ) ) ;
72
+ } ) ;
73
+
74
+ when ( 'the flag was modified' , async ( ) => {
75
+ await fetch ( 'http://' + container . getLaunchpadUrl ( ) + '/change' ) ;
76
+ await new Promise ( ( r ) => setTimeout ( r , 50 ) ) ;
77
77
} ) ;
78
78
} ;
0 commit comments