@@ -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 opensearch "github.com/stackitcloud/stackit-sdk-go/services/opensearch/v1api"
1416)
1517
@@ -77,7 +79,7 @@ func newAPIMock(settings *mockSettings) opensearch.DefaultAPI {
7779 }
7880}
7981
80- func TestCreateInstanceWaitHandler (t * testing.T ) {
82+ func TestCreateOrUpdateInstanceWaitHandler (t * testing.T ) {
8183 tests := []struct {
8284 desc string
8385 getFails bool
@@ -86,14 +88,14 @@ func TestCreateInstanceWaitHandler(t *testing.T) {
8688 wantResp bool
8789 }{
8890 {
89- desc : "create_succeeded " ,
91+ desc : "succeeded " ,
9092 getFails : false ,
9193 resourceState : utils .Ptr (INSTANCESTATUS_ACTIVE ),
9294 wantErr : false ,
9395 wantResp : true ,
9496 },
9597 {
96- desc : "create_failed " ,
98+ desc : "failed " ,
9799 getFails : false ,
98100 resourceState : utils .Ptr (INSTANCESTATUS_FAILED ),
99101 wantErr : true ,
@@ -113,108 +115,46 @@ func TestCreateInstanceWaitHandler(t *testing.T) {
113115 wantResp : false ,
114116 },
115117 }
116- for _ , tt := range tests {
117- t .Run (tt .desc , func (t * testing.T ) {
118- synctest .Test (t , func (t * testing.T ) {
119- instanceId := "foo-bar"
120-
121- apiClient := newAPIMock (& mockSettings {
122- instanceGetFails : tt .getFails ,
123- instanceResourceId : instanceId ,
124- instanceResourceState : tt .resourceState ,
125- })
126-
127- var wantRes * opensearch.Instance
128- if tt .wantResp {
129- wantRes = & opensearch.Instance {
130- InstanceId : & instanceId ,
131- Status : tt .resourceState ,
132- }
133- }
134-
135- handler := CreateInstanceWaitHandler (context .Background (), apiClient , "pid" , instanceId )
136-
137- gotRes , err := handler .SetTimeout (10 * time .Millisecond ).WaitWithContext (context .Background ())
138-
139- if (err != nil ) != tt .wantErr {
140- t .Fatalf ("handler error = %v, wantErr %v" , err , tt .wantErr )
141- }
142- diff := cmp .Diff (gotRes , wantRes )
143- if diff != "" {
144- t .Fatalf ("handler gotRes = %+v\n want %+v\n diff = %s" , gotRes , wantRes , diff )
145- }
146- })
147- })
148- }
149- }
150118
151- func TestUpdateInstanceWaitHandler (t * testing.T ) {
152- tests := []struct {
153- desc string
154- getFails bool
155- resourceState * string
156- wantErr bool
157- wantResp bool
158- }{
159- {
160- desc : "update_succeeded" ,
161- getFails : false ,
162- resourceState : utils .Ptr (INSTANCESTATUS_ACTIVE ),
163- wantErr : false ,
164- wantResp : true ,
165- },
166- {
167- desc : "update_failed" ,
168- getFails : false ,
169- resourceState : utils .Ptr (INSTANCESTATUS_FAILED ),
170- wantErr : true ,
171- wantResp : true ,
172- },
173- {
174- desc : "get_fails" ,
175- getFails : true ,
176- wantErr : true ,
177- wantResp : false ,
178- },
179- {
180- desc : "timeout" ,
181- getFails : false ,
182- resourceState : utils .Ptr ("ANOTHER STATE" ),
183- wantErr : true ,
184- wantResp : false ,
185- },
119+ handlers := map [string ]func (context.Context , opensearch.DefaultAPI , string , string ) * wait.AsyncActionHandler [opensearch.Instance ]{
120+ "common logic" : createOrUpdateInstanceWaitHandler ,
121+ "create" : CreateInstanceWaitHandler ,
122+ "update" : PartialUpdateInstanceWaitHandler ,
186123 }
187- for _ , tt := range tests {
188- t .Run (tt .desc , func (t * testing.T ) {
189- synctest .Test (t , func (t * testing.T ) {
190- instanceId := "foo-bar"
191-
192- apiClient := newAPIMock (& mockSettings {
193- instanceGetFails : tt .getFails ,
194- instanceResourceId : instanceId ,
195- instanceResourceState : tt .resourceState ,
196- })
197124
198- var wantRes * opensearch.Instance
199- if tt .wantResp {
200- wantRes = & opensearch.Instance {
201- InstanceId : & instanceId ,
202- Status : tt .resourceState ,
125+ for handlerDesc , handlerFn := range handlers {
126+ for _ , tt := range tests {
127+ t .Run (fmt .Sprintf ("%s - %s" , handlerDesc , tt .desc ), func (t * testing.T ) {
128+ synctest .Test (t , func (t * testing.T ) {
129+ instanceId := "foo-bar"
130+
131+ apiClient := newAPIMock (& mockSettings {
132+ instanceGetFails : tt .getFails ,
133+ instanceResourceId : instanceId ,
134+ instanceResourceState : tt .resourceState ,
135+ })
136+
137+ var wantRes * opensearch.Instance
138+ if tt .wantResp {
139+ wantRes = & opensearch.Instance {
140+ InstanceId : & instanceId ,
141+ Status : tt .resourceState ,
142+ }
203143 }
204- }
205144
206- handler := PartialUpdateInstanceWaitHandler (context .Background (), apiClient , "" , instanceId )
145+ handler := handlerFn (context .Background (), apiClient , "pid" , instanceId )
146+ gotRes , err := handler .SetTimeout (10 * time .Millisecond ).WaitWithContext (context .Background ())
207147
208- gotRes , err := handler . SetTimeout ( 10 * time . Millisecond ). WaitWithContext ( context . Background ())
209-
210- if ( err != nil ) != tt . wantErr {
211- t . Fatalf ( "handler error = %v, wantErr %v" , err , tt . wantErr )
212- }
213- if ! cmp . Equal ( gotRes , wantRes ) {
214- t . Fatalf ( "handler gotRes = %v, want %v" , gotRes , wantRes )
215- }
148+ if ( err != nil ) != tt . wantErr {
149+ t . Fatalf ( "handler error = %v, wantErr %v" , err , tt . wantErr )
150+ }
151+ diff := cmp . Diff ( gotRes , wantRes )
152+ if diff != "" {
153+ t . Fatalf ( "handler gotRes = %+v \n want %+v \n diff = %s" , gotRes , wantRes , diff )
154+ }
155+ })
216156 })
217- })
157+ }
218158 }
219159}
220160
0 commit comments