Skip to content

Commit 60157ae

Browse files
Marcel JacekMarcel Jacek
authored andcommitted
adjust waithandler tests to cover state transitions
1 parent 2bbbc05 commit 60157ae

1 file changed

Lines changed: 108 additions & 62 deletions

File tree

services/resourcemanager/v0api/wait/wait_test.go

Lines changed: 108 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,27 @@ type mockSettings struct {
1818
projectState resourcemanager.LifecycleState
1919
}
2020

21-
func newAPIMock(settings mockSettings) resourcemanager.DefaultAPI {
21+
func newAPIMock(settings []mockSettings) resourcemanager.DefaultAPI {
22+
count := 0
2223
return &resourcemanager.DefaultAPIServiceMock{
2324
GetProjectExecuteMock: utils.Ptr(func(_ resourcemanager.ApiGetProjectRequest) (*resourcemanager.GetProjectResponse, error) {
24-
if settings.getFails {
25+
setting := settings[count%len(settings)]
26+
count++
27+
28+
if setting.getFails {
2529
return nil, &oapierror.GenericOpenAPIError{
2630
StatusCode: http.StatusInternalServerError,
2731
}
2832
}
2933

30-
if settings.getNotFound {
34+
if setting.getNotFound {
3135
return nil, &oapierror.GenericOpenAPIError{
3236
StatusCode: http.StatusNotFound,
3337
}
3438
}
3539

3640
return &resourcemanager.GetProjectResponse{
37-
LifecycleState: settings.projectState,
41+
LifecycleState: setting.projectState,
3842
ContainerId: "cid",
3943
}, nil
4044
}),
@@ -43,59 +47,81 @@ func newAPIMock(settings mockSettings) resourcemanager.DefaultAPI {
4347

4448
func TestCreateProjectWaitHandler(t *testing.T) {
4549
tests := []struct {
46-
desc string
47-
getFails bool
48-
projectState resourcemanager.LifecycleState
49-
wantErr bool
50-
wantResp bool
50+
desc string
51+
mockSettings []mockSettings
52+
wantProjectState resourcemanager.LifecycleState
53+
wantErr bool
54+
wantResp bool
5155
}{
5256
{
53-
desc: "create_succeeded",
54-
getFails: false,
55-
projectState: resourcemanager.LIFECYCLESTATE_ACTIVE,
56-
wantErr: false,
57-
wantResp: true,
57+
desc: "create_succeeded",
58+
mockSettings: []mockSettings{
59+
{projectState: resourcemanager.LIFECYCLESTATE_ACTIVE},
60+
},
61+
wantProjectState: resourcemanager.LIFECYCLESTATE_ACTIVE,
62+
wantErr: false,
63+
wantResp: true,
5864
},
5965
{
60-
desc: "creating",
61-
getFails: false,
62-
projectState: resourcemanager.LIFECYCLESTATE_CREATING,
63-
wantErr: true,
64-
wantResp: false,
66+
desc: "creating",
67+
mockSettings: []mockSettings{
68+
{
69+
projectState: resourcemanager.LIFECYCLESTATE_CREATING,
70+
},
71+
{
72+
projectState: resourcemanager.LIFECYCLESTATE_CREATING,
73+
},
74+
{
75+
projectState: resourcemanager.LIFECYCLESTATE_ACTIVE,
76+
},
77+
},
78+
wantProjectState: resourcemanager.LIFECYCLESTATE_ACTIVE,
79+
wantErr: false,
80+
wantResp: true,
6581
},
6682
{
67-
desc: "get_fails",
68-
getFails: true,
69-
projectState: resourcemanager.LifecycleState(""),
70-
wantErr: true,
71-
wantResp: false,
83+
desc: "get_fails",
84+
mockSettings: []mockSettings{
85+
{
86+
projectState: resourcemanager.LIFECYCLESTATE_CREATING,
87+
},
88+
{
89+
projectState: resourcemanager.LIFECYCLESTATE_CREATING,
90+
},
91+
{
92+
getFails: true,
93+
},
94+
},
95+
wantErr: true,
96+
wantResp: false,
7297
},
7398
{
74-
desc: "unknown_state",
75-
getFails: false,
76-
projectState: resourcemanager.LifecycleState("ANOTHER STATE"),
77-
wantErr: true,
78-
wantResp: false,
99+
desc: "unknown_state",
100+
mockSettings: []mockSettings{
101+
{
102+
getFails: false,
103+
projectState: resourcemanager.LifecycleState("ANOTHER STATE"),
104+
},
105+
},
106+
wantErr: true,
107+
wantResp: false,
79108
},
80109
}
81110
for _, tt := range tests {
82111
t.Run(tt.desc, func(t *testing.T) {
83-
apiClient := newAPIMock(mockSettings{
84-
getFails: tt.getFails,
85-
projectState: tt.projectState,
86-
})
112+
apiClient := newAPIMock(tt.mockSettings)
87113

88114
var wantRes *resourcemanager.GetProjectResponse
89115
if tt.wantResp {
90116
wantRes = &resourcemanager.GetProjectResponse{
91-
LifecycleState: tt.projectState,
117+
LifecycleState: tt.wantProjectState,
92118
ContainerId: "cid",
93119
}
94120
}
95121

96122
handler := CreateProjectWaitHandler(context.Background(), apiClient, "cid")
97123

98-
gotRes, err := handler.SetTimeout(10 * time.Millisecond).SetSleepBeforeWait(10 * time.Millisecond).WaitWithContext(context.Background())
124+
gotRes, err := handler.SetTimeout(10 * time.Millisecond).SetSleepBeforeWait(0).SetThrottle(1).WaitWithContext(context.Background())
99125

100126
if (err != nil) != tt.wantErr {
101127
t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr)
@@ -110,49 +136,69 @@ func TestCreateProjectWaitHandler(t *testing.T) {
110136
func TestDeleteProjectWaitHandler(t *testing.T) {
111137
tests := []struct {
112138
desc string
113-
getFails bool
114-
getNotFound bool
115-
projectState resourcemanager.LifecycleState
139+
mockSettings []mockSettings
116140
wantErr bool
117141
}{
118142
{
119-
desc: "delete_succeeded",
120-
getFails: false,
121-
getNotFound: true,
122-
projectState: resourcemanager.LifecycleState(""),
123-
wantErr: false,
143+
desc: "delete_succeeded",
144+
mockSettings: []mockSettings{
145+
{
146+
projectState: resourcemanager.LifecycleState(""),
147+
getFails: false,
148+
getNotFound: true,
149+
},
150+
},
151+
wantErr: false,
124152
},
125153
{
126-
desc: "delete_pending",
127-
getFails: false,
128-
getNotFound: false,
129-
projectState: resourcemanager.LIFECYCLESTATE_DELETING,
130-
wantErr: true,
154+
desc: "delete_pending",
155+
mockSettings: []mockSettings{
156+
{
157+
getFails: false,
158+
getNotFound: false,
159+
projectState: resourcemanager.LIFECYCLESTATE_DELETING,
160+
},
161+
{
162+
getFails: false,
163+
getNotFound: false,
164+
projectState: resourcemanager.LIFECYCLESTATE_DELETING,
165+
},
166+
{
167+
getFails: false,
168+
getNotFound: true,
169+
projectState: resourcemanager.LifecycleState(""),
170+
},
171+
},
172+
wantErr: false,
131173
},
132174
{
133-
desc: "get_fails",
134-
getFails: true,
135-
projectState: "",
136-
wantErr: true,
175+
desc: "get_fails",
176+
mockSettings: []mockSettings{
177+
{
178+
projectState: resourcemanager.LifecycleState(""),
179+
getFails: true,
180+
},
181+
},
182+
wantErr: true,
137183
},
138184
{
139-
desc: "timeout",
140-
getFails: false,
141-
projectState: "ANOTHER STATE",
142-
wantErr: true,
185+
desc: "timeout",
186+
mockSettings: []mockSettings{
187+
{
188+
getFails: false,
189+
projectState: "ANOTHER STATE",
190+
},
191+
},
192+
wantErr: true,
143193
},
144194
}
145195
for _, tt := range tests {
146196
t.Run(tt.desc, func(t *testing.T) {
147-
apiClient := newAPIMock(mockSettings{
148-
getFails: tt.getFails,
149-
getNotFound: tt.getNotFound,
150-
projectState: tt.projectState,
151-
})
197+
apiClient := newAPIMock(tt.mockSettings)
152198

153199
handler := DeleteProjectWaitHandler(context.Background(), apiClient, "cid")
154200

155-
_, err := handler.SetTimeout(10 * time.Millisecond).WaitWithContext(context.Background())
201+
_, err := handler.SetTimeout(10 * time.Millisecond).SetThrottle(1).WaitWithContext(context.Background())
156202

157203
if (err != nil) != tt.wantErr {
158204
t.Fatalf("handler error = %v, wantErr %v", err, tt.wantErr)

0 commit comments

Comments
 (0)