github.com/sacloud/iaas-api-go@v1.12.0/test/container_registry_op_test.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package test 16 17 import ( 18 "testing" 19 20 "github.com/sacloud/iaas-api-go" 21 "github.com/sacloud/iaas-api-go/testutil" 22 "github.com/sacloud/iaas-api-go/types" 23 sacloudtestutil "github.com/sacloud/packages-go/testutil" 24 ) 25 26 func TestContainerRegistryOp_CRUD(t *testing.T) { 27 testutil.RunCRUD(t, &testutil.CRUDTestCase{ 28 Parallel: true, 29 SetupAPICallerFunc: singletonAPICaller, 30 Create: &testutil.CRUDTestFunc{ 31 Func: testContainerRegistryCreate, 32 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 33 ExpectValue: createContainerRegistryExpected, 34 IgnoreFields: ignoreContainerRegistryFields, 35 }), 36 }, 37 38 Read: &testutil.CRUDTestFunc{ 39 Func: testContainerRegistryRead, 40 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 41 ExpectValue: createContainerRegistryExpected, 42 IgnoreFields: ignoreContainerRegistryFields, 43 }), 44 }, 45 46 Updates: []*testutil.CRUDTestFunc{ 47 { 48 Func: testContainerRegistryUpdate, 49 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 50 ExpectValue: updateContainerRegistryExpected, 51 IgnoreFields: ignoreContainerRegistryFields, 52 }), 53 }, 54 { 55 Func: testContainerRegistryUpdateSettings, 56 CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{ 57 ExpectValue: updateContainerRegistrySettingsExpected, 58 IgnoreFields: ignoreContainerRegistryFields, 59 }), 60 }, 61 { 62 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 63 registryOp := iaas.NewContainerRegistryOp(caller) 64 err := registryOp.AddUser(ctx, ctx.ID, &iaas.ContainerRegistryUserCreateRequest{ 65 UserName: "user1", 66 Password: "password", 67 Permission: types.ContainerRegistryPermissions.ReadWrite, 68 }) 69 if err != nil { 70 return nil, err 71 } 72 err = registryOp.AddUser(ctx, ctx.ID, &iaas.ContainerRegistryUserCreateRequest{ 73 UserName: "user2", 74 Password: "password", 75 Permission: types.ContainerRegistryPermissions.ReadOnly, 76 }) 77 if err != nil { 78 return nil, err 79 } 80 return registryOp.ListUsers(ctx, ctx.ID) 81 }, 82 CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, value interface{}) error { 83 users := value.(*iaas.ContainerRegistryUsers).Users 84 return testutil.DoAsserts( 85 testutil.AssertLenFunc(t, users, 2, "ContainerRegistry.Users"), 86 testutil.AssertEqualFunc(t, "user1", users[0].UserName, "ContainerRegistry.Users"), 87 testutil.AssertEqualFunc(t, types.ContainerRegistryPermissions.ReadWrite, users[0].Permission, "ContainerRegistry.Permission"), 88 testutil.AssertEqualFunc(t, "user2", users[1].UserName, "ContainerRegistry.Users"), 89 testutil.AssertEqualFunc(t, types.ContainerRegistryPermissions.ReadOnly, users[1].Permission, "ContainerRegistry.Permission"), 90 ) 91 }, 92 SkipExtractID: true, 93 }, 94 { 95 Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 96 registryOp := iaas.NewContainerRegistryOp(caller) 97 if err := registryOp.DeleteUser(ctx, ctx.ID, "user1"); err != nil { 98 return nil, err 99 } 100 return registryOp.ListUsers(ctx, ctx.ID) 101 }, 102 CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, value interface{}) error { 103 users := value.(*iaas.ContainerRegistryUsers).Users 104 return testutil.DoAsserts( 105 testutil.AssertLenFunc(t, users, 1, "ContainerRegistry.Users"), 106 ) 107 }, 108 SkipExtractID: true, 109 }, 110 }, 111 112 Delete: &testutil.CRUDTestDeleteFunc{ 113 Func: testContainerRegistryDelete, 114 }, 115 }) 116 } 117 118 var ( 119 ignoreContainerRegistryFields = []string{ 120 "ID", 121 "Class", 122 "SettingsHash", 123 "CreatedAt", 124 "ModifiedAt", 125 } 126 createContainerRegistryParam = &iaas.ContainerRegistryCreateRequest{ 127 Name: testutil.ResourceName("container-registry"), 128 Description: "desc", 129 Tags: []string{"tag1", "tag2"}, 130 VirtualDomain: "libsacloud-test.usacloud.jp", 131 AccessLevel: types.ContainerRegistryAccessLevels.ReadWrite, 132 SubDomainLabel: sacloudtestutil.RandomName(testutil.TestResourcePrefix, 45, sacloudtestutil.CharSetAlpha), 133 } 134 createContainerRegistryExpected = &iaas.ContainerRegistry{ 135 Name: createContainerRegistryParam.Name, 136 Description: createContainerRegistryParam.Description, 137 Tags: createContainerRegistryParam.Tags, 138 Availability: types.Availabilities.Available, 139 AccessLevel: createContainerRegistryParam.AccessLevel, 140 VirtualDomain: createContainerRegistryParam.VirtualDomain, 141 SubDomainLabel: createContainerRegistryParam.SubDomainLabel, 142 FQDN: createContainerRegistryParam.SubDomainLabel + ".sakuracr.jp", 143 } 144 updateContainerRegistryParam = &iaas.ContainerRegistryUpdateRequest{ 145 Name: testutil.ResourceName("container-registry-upd"), 146 Description: "desc-upd", 147 Tags: []string{"tag1-upd", "tag2-upd"}, 148 IconID: testIconID, 149 VirtualDomain: "libsacloud-test-upd.usacloud.jp", 150 AccessLevel: types.ContainerRegistryAccessLevels.ReadOnly, 151 } 152 updateContainerRegistryExpected = &iaas.ContainerRegistry{ 153 Name: updateContainerRegistryParam.Name, 154 Description: updateContainerRegistryParam.Description, 155 Tags: updateContainerRegistryParam.Tags, 156 Availability: types.Availabilities.Available, 157 IconID: testIconID, 158 VirtualDomain: updateContainerRegistryParam.VirtualDomain, 159 AccessLevel: updateContainerRegistryParam.AccessLevel, 160 SubDomainLabel: createContainerRegistryParam.SubDomainLabel, 161 FQDN: createContainerRegistryParam.SubDomainLabel + ".sakuracr.jp", 162 } 163 164 updateContainerRegistrySettingsParam = &iaas.ContainerRegistryUpdateSettingsRequest{ 165 AccessLevel: types.ContainerRegistryAccessLevels.None, 166 } 167 updateContainerRegistrySettingsExpected = &iaas.ContainerRegistry{ 168 Name: updateContainerRegistryParam.Name, 169 Description: updateContainerRegistryParam.Description, 170 Tags: updateContainerRegistryParam.Tags, 171 Availability: types.Availabilities.Available, 172 IconID: testIconID, 173 VirtualDomain: "", 174 AccessLevel: updateContainerRegistrySettingsParam.AccessLevel, 175 SubDomainLabel: createContainerRegistryParam.SubDomainLabel, 176 FQDN: createContainerRegistryParam.SubDomainLabel + ".sakuracr.jp", 177 } 178 ) 179 180 func testContainerRegistryCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 181 client := iaas.NewContainerRegistryOp(caller) 182 return client.Create(ctx, createContainerRegistryParam) 183 } 184 185 func testContainerRegistryRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 186 client := iaas.NewContainerRegistryOp(caller) 187 return client.Read(ctx, ctx.ID) 188 } 189 190 func testContainerRegistryUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 191 client := iaas.NewContainerRegistryOp(caller) 192 return client.Update(ctx, ctx.ID, updateContainerRegistryParam) 193 } 194 195 func testContainerRegistryUpdateSettings(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) { 196 client := iaas.NewContainerRegistryOp(caller) 197 return client.UpdateSettings(ctx, ctx.ID, updateContainerRegistrySettingsParam) 198 } 199 200 func testContainerRegistryDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error { 201 client := iaas.NewContainerRegistryOp(caller) 202 return client.Delete(ctx, ctx.ID) 203 }