@@ -2,6 +2,7 @@ package wait
22
33import (
44 "context"
5+ "fmt"
56 "testing"
67 "testing/synctest"
78 "time"
@@ -10,6 +11,7 @@ import (
1011
1112 "github.com/stackitcloud/stackit-sdk-go/core/oapierror"
1213 "github.com/stackitcloud/stackit-sdk-go/core/utils"
14+ "github.com/stackitcloud/stackit-sdk-go/core/wait"
1315 sqlserverflex "github.com/stackitcloud/stackit-sdk-go/services/sqlserverflex/v2api"
1416)
1517
@@ -46,88 +48,7 @@ func newAPIMock(settings mockSettings) sqlserverflex.DefaultAPI {
4648 }
4749}
4850
49- func TestCreateInstanceWaitHandler (t * testing.T ) {
50- tests := []struct {
51- desc string
52- instanceGetFails bool
53- instanceState string
54- usersGetErrorStatus int
55- wantErr bool
56- wantResp bool
57- }{
58- {
59- desc : "create_succeeded" ,
60- instanceGetFails : false ,
61- instanceState : InstanceStateSuccess ,
62- wantErr : false ,
63- wantResp : true ,
64- },
65- {
66- desc : "create_failed" ,
67- instanceGetFails : false ,
68- instanceState : InstanceStateFailed ,
69- wantErr : true ,
70- wantResp : true ,
71- },
72- {
73- desc : "create_failed_2" ,
74- instanceGetFails : false ,
75- instanceState : InstanceStateEmpty ,
76- wantErr : true ,
77- wantResp : true ,
78- },
79- {
80- desc : "instance_get_fails" ,
81- instanceGetFails : true ,
82- wantErr : true ,
83- wantResp : false ,
84- },
85- {
86- desc : "timeout" ,
87- instanceGetFails : false ,
88- instanceState : InstanceStateProcessing ,
89- wantErr : true ,
90- wantResp : true ,
91- },
92- }
93- for _ , tt := range tests {
94- t .Run (tt .desc , func (t * testing.T ) {
95- synctest .Test (t , func (t * testing.T ) {
96- instanceId := "foo-bar"
97- instanceState := tt .instanceState
98-
99- apiClient := newAPIMock (mockSettings {
100- instanceId : & instanceId ,
101- instanceState : & instanceState ,
102- instanceGetFails : tt .instanceGetFails ,
103- })
104-
105- var wantRes * sqlserverflex.GetInstanceResponse
106- if tt .wantResp {
107- wantRes = & sqlserverflex.GetInstanceResponse {
108- Item : & sqlserverflex.Instance {
109- Id : & instanceId ,
110- Status : utils .Ptr (tt .instanceState ),
111- },
112- }
113- }
114-
115- handler := CreateInstanceWaitHandler (context .Background (), apiClient , "" , instanceId , "" )
116-
117- gotRes , err := handler .SetTimeout (10 * time .Millisecond ).SetSleepBeforeWait (1 * time .Millisecond ).WaitWithContext (context .Background ())
118-
119- if (err != nil ) != tt .wantErr {
120- t .Fatalf ("handler error = %v, wantErr %v" , err , tt .wantErr )
121- }
122- if ! cmp .Equal (gotRes , wantRes ) {
123- t .Fatalf ("handler gotRes = %v, want %v" , gotRes , wantRes )
124- }
125- })
126- })
127- }
128- }
129-
130- func TestUpdateInstanceWaitHandler (t * testing.T ) {
51+ func TestCreateOrUpdateInstanceWaitHandler (t * testing.T ) {
13152 tests := []struct {
13253 desc string
13354 instanceGetFails bool
@@ -136,28 +57,28 @@ func TestUpdateInstanceWaitHandler(t *testing.T) {
13657 wantResp bool
13758 }{
13859 {
139- desc : "update_succeeded " ,
60+ desc : "create_or_update_succeeded " ,
14061 instanceGetFails : false ,
14162 instanceState : InstanceStateSuccess ,
14263 wantErr : false ,
14364 wantResp : true ,
14465 },
14566 {
146- desc : "update_failed " ,
67+ desc : "create_or_update_failed " ,
14768 instanceGetFails : false ,
14869 instanceState : InstanceStateFailed ,
14970 wantErr : true ,
15071 wantResp : true ,
15172 },
15273 {
153- desc : "update_failed_2 " ,
74+ desc : "create_or_update_failed_2 " ,
15475 instanceGetFails : false ,
15576 instanceState : InstanceStateEmpty ,
15677 wantErr : true ,
15778 wantResp : true ,
15879 },
15980 {
160- desc : "get_fails " ,
81+ desc : "instance_get_fails " ,
16182 instanceGetFails : true ,
16283 wantErr : true ,
16384 wantResp : false ,
@@ -167,43 +88,51 @@ func TestUpdateInstanceWaitHandler(t *testing.T) {
16788 instanceGetFails : false ,
16889 instanceState : InstanceStateProcessing ,
16990 wantErr : true ,
170- wantResp : true ,
91+ wantResp : false ,
17192 },
17293 }
173- for _ , tt := range tests {
174- t .Run (tt .desc , func (t * testing.T ) {
175- synctest .Test (t , func (t * testing.T ) {
176- instanceId := "foo-bar"
177- instanceState := tt .instanceState
17894
179- apiClient := newAPIMock ( mockSettings {
180- instanceId : & instanceId ,
181- instanceState : & instanceState ,
182- instanceGetFails : tt . instanceGetFails ,
183- })
95+ handlers := map [ string ] func (context. Context , sqlserverflex. DefaultAPI , string , string , string ) * wait. AsyncActionHandler [sqlserverflex. GetInstanceResponse ] {
96+ "common logic" : createOrUpdateInstanceWaitHandler ,
97+ "create" : CreateInstanceWaitHandler ,
98+ "update" : UpdateInstanceWaitHandler ,
99+ }
184100
185- var wantRes * sqlserverflex.GetInstanceResponse
186- if tt .wantResp {
187- wantRes = & sqlserverflex.GetInstanceResponse {
188- Item : & sqlserverflex.Instance {
189- Id : & instanceId ,
190- Status : utils .Ptr (tt .instanceState ),
191- },
101+ for handlerDesc , handlerFn := range handlers {
102+ for _ , tt := range tests {
103+ t .Run (fmt .Sprintf ("%s - %s" , handlerDesc , tt .desc ), func (t * testing.T ) {
104+ synctest .Test (t , func (t * testing.T ) {
105+ instanceId := "foo-bar"
106+
107+ apiClient := newAPIMock (mockSettings {
108+ instanceGetFails : tt .instanceGetFails ,
109+ instanceId : & instanceId ,
110+ instanceState : & tt .instanceState ,
111+ })
112+
113+ var wantRes * sqlserverflex.GetInstanceResponse
114+ if tt .wantResp {
115+ wantRes = & sqlserverflex.GetInstanceResponse {
116+ Item : & sqlserverflex.Instance {
117+ Id : & instanceId ,
118+ Status : utils .Ptr (tt .instanceState ),
119+ },
120+ }
192121 }
193- }
194122
195- handler := UpdateInstanceWaitHandler (context .Background (), apiClient , "" , instanceId , "" )
123+ handler := handlerFn (context .Background (), apiClient , "" , instanceId , "" )
124+ gotRes , err := handler .SetTimeout (10 * time .Millisecond ).SetSleepBeforeWait (1 * time .Millisecond ).WaitWithContext (context .Background ())
196125
197- gotRes , err := handler . SetTimeout ( 10 * time . Millisecond ). SetSleepBeforeWait ( 1 * time . Millisecond ). WaitWithContext ( context . Background ())
198-
199- if ( err != nil ) != tt . wantErr {
200- t . Fatalf ( "handler error = %v, wantErr %v" , err , tt . wantErr )
201- }
202- if ! cmp . Equal ( gotRes , wantRes ) {
203- t . Fatalf ( "handler gotRes = %v, want %v" , gotRes , wantRes )
204- }
126+ if ( err != nil ) != tt . wantErr {
127+ t . Fatalf ( "handler error = %v, wantErr %v" , err , tt . wantErr )
128+ }
129+ diff := cmp . Diff ( gotRes , wantRes )
130+ if diff != "" {
131+ t . Fatalf ( "handler gotRes = %+v \n want %+v \n diff = %s" , gotRes , wantRes , diff )
132+ }
133+ })
205134 })
206- })
135+ }
207136 }
208137}
209138
0 commit comments