@@ -19,11 +19,13 @@ type testCtxKey struct{}
1919var testCtx = context .WithValue (context .Background (), testCtxKey {}, "foo" )
2020var testClient = & secretsmanager.APIClient {}
2121var testProjectId = uuid .NewString ()
22+ var testInstanceId = uuid .NewString ()
2223
2324func fixtureFlagValues (mods ... func (flagValues map [string ]string )) map [string ]string {
2425 flagValues := map [string ]string {
2526 projectIdFlag : testProjectId ,
2627 instanceNameFlag : "example" ,
28+ aclFlag : "198.51.100.14/24" ,
2729 }
2830 for _ , mod := range mods {
2931 mod (flagValues )
@@ -37,6 +39,7 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
3739 ProjectId : testProjectId ,
3840 },
3941 InstanceName : utils .Ptr ("example" ),
42+ Acls : utils .Ptr ([]string {"198.51.100.14/24" }),
4043 }
4144 for _ , mod := range mods {
4245 mod (model )
@@ -55,10 +58,24 @@ func fixtureRequest(mods ...func(request *secretsmanager.ApiCreateInstanceReques
5558 return request
5659}
5760
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+
5874func TestParseInput (t * testing.T ) {
5975 tests := []struct {
6076 description string
6177 flagValues map [string ]string
78+ aclValues []string
6279 isValid bool
6380 expectedModel * inputModel
6481 }{
@@ -94,6 +111,55 @@ func TestParseInput(t *testing.T) {
94111 }),
95112 isValid : false ,
96113 },
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+ },
97163 {
98164 description : "project id missing" ,
99165 flagValues : fixtureFlagValues (func (flagValues map [string ]string ) {
@@ -135,6 +201,16 @@ func TestParseInput(t *testing.T) {
135201 }
136202 }
137203
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+
138214 err = cmd .ValidateRequiredFlags ()
139215 if err != nil {
140216 if ! tt .isValid {
@@ -162,7 +238,7 @@ func TestParseInput(t *testing.T) {
162238 }
163239}
164240
165- func TestBuildRequest (t * testing.T ) {
241+ func TestBuildCreateInstanceRequest (t * testing.T ) {
166242 tests := []struct {
167243 description string
168244 model * inputModel
@@ -177,7 +253,45 @@ func TestBuildRequest(t *testing.T) {
177253
178254 for _ , tt := range tests {
179255 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 )
181295
182296 diff := cmp .Diff (request , tt .expectedRequest ,
183297 cmp .AllowUnexported (tt .expectedRequest ),
0 commit comments