@@ -19,11 +19,13 @@ type testCtxKey struct{}
19
19
var testCtx = context .WithValue (context .Background (), testCtxKey {}, "foo" )
20
20
var testClient = & secretsmanager.APIClient {}
21
21
var testProjectId = uuid .NewString ()
22
+ var testInstanceId = uuid .NewString ()
22
23
23
24
func fixtureFlagValues (mods ... func (flagValues map [string ]string )) map [string ]string {
24
25
flagValues := map [string ]string {
25
26
projectIdFlag : testProjectId ,
26
27
instanceNameFlag : "example" ,
28
+ aclFlag : "198.51.100.14/24" ,
27
29
}
28
30
for _ , mod := range mods {
29
31
mod (flagValues )
@@ -37,6 +39,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
37
39
ProjectId : testProjectId ,
38
40
},
39
41
InstanceName : utils .Ptr ("example" ),
42
+ Acls : utils .Ptr ([]string {"198.51.100.14/24" }),
40
43
}
41
44
for _ , mod := range mods {
42
45
mod (model )
@@ -55,10 +58,24 @@ func fixtureRequest(mods ...func(request *secretsmanager.ApiCreateInstanceReques
55
58
return request
56
59
}
57
60
61
+ func fixtureUpdateACLsRequest (mods ... func (request * secretsmanager.ApiUpdateACLsRequest )) secretsmanager.ApiUpdateACLsRequest {
62
+ request := testClient .UpdateACLs (testCtx , testProjectId , testInstanceId )
63
+ request = request .UpdateACLsPayload (secretsmanager.UpdateACLsPayload {
64
+ Cidrs : utils .Ptr ([]secretsmanager.AclUpdate {
65
+ {Cidr : utils .Ptr ("198.51.100.14/24" )},
66
+ })})
67
+
68
+ for _ , mod := range mods {
69
+ mod (& request )
70
+ }
71
+ return request
72
+ }
73
+
58
74
func TestParseInput (t * testing.T ) {
59
75
tests := []struct {
60
76
description string
61
77
flagValues map [string ]string
78
+ aclValues []string
62
79
isValid bool
63
80
expectedModel * inputModel
64
81
}{
@@ -94,6 +111,55 @@ func TestParseInput(t *testing.T) {
94
111
}),
95
112
isValid : false ,
96
113
},
114
+ {
115
+ description : "acl missing" ,
116
+ flagValues : fixtureFlagValues (func (flagValues map [string ]string ) {
117
+ delete (flagValues , aclFlag )
118
+ }),
119
+ isValid : true ,
120
+ expectedModel : fixtureInputModel (func (model * inputModel ) {
121
+ model .Acls = nil
122
+ }),
123
+ },
124
+ {
125
+ description : "acl empty" ,
126
+ flagValues : fixtureFlagValues (func (flagValues map [string ]string ) {
127
+ flagValues [aclFlag ] = ""
128
+ }),
129
+ isValid : false ,
130
+ },
131
+ {
132
+ description : "repeated acl flags" ,
133
+ flagValues : fixtureFlagValues (),
134
+ aclValues : []string {"198.51.100.14/24" , "198.51.100.14/32" },
135
+ isValid : true ,
136
+ expectedModel : fixtureInputModel (func (model * inputModel ) {
137
+ model .Acls = utils .Ptr (
138
+ append (* model .Acls , "198.51.100.14/24" , "198.51.100.14/32" ),
139
+ )
140
+ }),
141
+ },
142
+ {
143
+ description : "repeated acl flag with list value" ,
144
+ flagValues : fixtureFlagValues (),
145
+ aclValues : []string {"198.51.100.14/24,198.51.100.14/32" },
146
+ isValid : true ,
147
+ expectedModel : fixtureInputModel (func (model * inputModel ) {
148
+ model .Acls = utils .Ptr (
149
+ append (* model .Acls , "198.51.100.14/24" , "198.51.100.14/32" ),
150
+ )
151
+ }),
152
+ },
153
+ {
154
+ description : "multiple acls" ,
155
+ flagValues : fixtureFlagValues (func (flagValues map [string ]string ) {
156
+ flagValues [aclFlag ] = "198.51.100.14/24,1.2.3.4/32"
157
+ }),
158
+ isValid : true ,
159
+ expectedModel : fixtureInputModel (func (model * inputModel ) {
160
+ * model .Acls = append (* model .Acls , "1.2.3.4/32" )
161
+ }),
162
+ },
97
163
{
98
164
description : "project id missing" ,
99
165
flagValues : fixtureFlagValues (func (flagValues map [string ]string ) {
@@ -135,6 +201,16 @@ func TestParseInput(t *testing.T) {
135
201
}
136
202
}
137
203
204
+ for _ , value := range tt .aclValues {
205
+ err := cmd .Flags ().Set (aclFlag , value )
206
+ if err != nil {
207
+ if ! tt .isValid {
208
+ return
209
+ }
210
+ t .Fatalf ("setting flag --%s=%s: %v" , aclFlag , value , err )
211
+ }
212
+ }
213
+
138
214
err = cmd .ValidateRequiredFlags ()
139
215
if err != nil {
140
216
if ! tt .isValid {
@@ -162,7 +238,7 @@ func TestParseInput(t *testing.T) {
162
238
}
163
239
}
164
240
165
- func TestBuildRequest (t * testing.T ) {
241
+ func TestBuildCreateInstanceRequest (t * testing.T ) {
166
242
tests := []struct {
167
243
description string
168
244
model * inputModel
@@ -177,7 +253,45 @@ func TestBuildRequest(t *testing.T) {
177
253
178
254
for _ , tt := range tests {
179
255
t .Run (tt .description , func (t * testing.T ) {
180
- request := buildRequest (testCtx , tt .model , testClient )
256
+ request := buildCreateInstanceRequest (testCtx , tt .model , testClient )
257
+
258
+ diff := cmp .Diff (request , tt .expectedRequest ,
259
+ cmp .AllowUnexported (tt .expectedRequest ),
260
+ cmpopts .EquateComparable (testCtx ),
261
+ )
262
+ if diff != "" {
263
+ t .Fatalf ("Data does not match: %s" , diff )
264
+ }
265
+ })
266
+ }
267
+ }
268
+ func TestBuildCreateACLRequests (t * testing.T ) {
269
+ tests := []struct {
270
+ description string
271
+ model * inputModel
272
+ expectedRequest secretsmanager.ApiUpdateACLsRequest
273
+ }{
274
+ {
275
+ description : "base" ,
276
+ model : fixtureInputModel (),
277
+ expectedRequest : fixtureUpdateACLsRequest (),
278
+ },
279
+ {
280
+ description : "multiple ACLs" ,
281
+ model : fixtureInputModel (func (model * inputModel ) {
282
+ * model .Acls = append (* model .Acls , "1.2.3.4/32" )
283
+ }),
284
+ expectedRequest : fixtureUpdateACLsRequest ().UpdateACLsPayload (secretsmanager.UpdateACLsPayload {
285
+ Cidrs : utils .Ptr ([]secretsmanager.AclUpdate {
286
+ {Cidr : utils .Ptr ("198.51.100.14/24" )},
287
+ {Cidr : utils .Ptr ("1.2.3.4/32" )},
288
+ })}),
289
+ },
290
+ }
291
+
292
+ for _ , tt := range tests {
293
+ t .Run (tt .description , func (t * testing.T ) {
294
+ request := buildUpdateACLsRequest (testCtx , tt .model , testInstanceId , testClient )
181
295
182
296
diff := cmp .Diff (request , tt .expectedRequest ,
183
297
cmp .AllowUnexported (tt .expectedRequest ),
0 commit comments