github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/identity/v3/roles/testing/requests_test.go (about) 1 package testing 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/roles" 8 "github.com/vnpaycloud-console/gophercloud/v2/pagination" 9 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 10 "github.com/vnpaycloud-console/gophercloud/v2/testhelper/client" 11 ) 12 13 func TestListRoles(t *testing.T) { 14 th.SetupHTTP() 15 defer th.TeardownHTTP() 16 HandleListRolesSuccessfully(t) 17 18 count := 0 19 err := roles.List(client.ServiceClient(), nil).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 20 count++ 21 22 actual, err := roles.ExtractRoles(page) 23 th.AssertNoErr(t, err) 24 25 th.CheckDeepEquals(t, ExpectedRolesSlice, actual) 26 27 return true, nil 28 }) 29 th.AssertNoErr(t, err) 30 th.CheckEquals(t, count, 1) 31 } 32 33 func TestListRolesAllPages(t *testing.T) { 34 th.SetupHTTP() 35 defer th.TeardownHTTP() 36 HandleListRolesSuccessfully(t) 37 38 allPages, err := roles.List(client.ServiceClient(), nil).AllPages(context.TODO()) 39 th.AssertNoErr(t, err) 40 actual, err := roles.ExtractRoles(allPages) 41 th.AssertNoErr(t, err) 42 th.CheckDeepEquals(t, ExpectedRolesSlice, actual) 43 th.AssertEquals(t, ExpectedRolesSlice[1].Extra["description"], "read-only support role") 44 } 45 46 func TestListUsersFiltersCheck(t *testing.T) { 47 type test struct { 48 filterName string 49 wantErr bool 50 } 51 tests := []test{ 52 {"foo__contains", false}, 53 {"foo", true}, 54 {"foo_contains", true}, 55 {"foo__", true}, 56 {"__foo", true}, 57 } 58 59 var listOpts roles.ListOpts 60 for _, _test := range tests { 61 listOpts.Filters = map[string]string{_test.filterName: "bar"} 62 _, err := listOpts.ToRoleListQuery() 63 64 if !_test.wantErr { 65 th.AssertNoErr(t, err) 66 } else { 67 switch _t := err.(type) { 68 case nil: 69 t.Fatal("error expected but got a nil") 70 case roles.InvalidListFilter: 71 default: 72 t.Fatalf("unexpected error type: [%T]", _t) 73 } 74 } 75 } 76 } 77 78 func TestGetRole(t *testing.T) { 79 th.SetupHTTP() 80 defer th.TeardownHTTP() 81 HandleGetRoleSuccessfully(t) 82 83 actual, err := roles.Get(context.TODO(), client.ServiceClient(), "9fe1d3").Extract() 84 85 th.AssertNoErr(t, err) 86 th.CheckDeepEquals(t, SecondRole, *actual) 87 } 88 89 func TestCreateRole(t *testing.T) { 90 th.SetupHTTP() 91 defer th.TeardownHTTP() 92 HandleCreateRoleSuccessfully(t) 93 94 createOpts := roles.CreateOpts{ 95 Name: "support", 96 DomainID: "1789d1", 97 Extra: map[string]any{ 98 "description": "read-only support role", 99 }, 100 } 101 102 actual, err := roles.Create(context.TODO(), client.ServiceClient(), createOpts).Extract() 103 th.AssertNoErr(t, err) 104 th.CheckDeepEquals(t, SecondRole, *actual) 105 } 106 107 func TestUpdateRole(t *testing.T) { 108 th.SetupHTTP() 109 defer th.TeardownHTTP() 110 HandleUpdateRoleSuccessfully(t) 111 112 updateOpts := roles.UpdateOpts{ 113 Extra: map[string]any{ 114 "description": "admin read-only support role", 115 }, 116 } 117 118 actual, err := roles.Update(context.TODO(), client.ServiceClient(), "9fe1d3", updateOpts).Extract() 119 th.AssertNoErr(t, err) 120 th.CheckDeepEquals(t, SecondRoleUpdated, *actual) 121 } 122 123 func TestDeleteRole(t *testing.T) { 124 th.SetupHTTP() 125 defer th.TeardownHTTP() 126 HandleDeleteRoleSuccessfully(t) 127 128 res := roles.Delete(context.TODO(), client.ServiceClient(), "9fe1d3") 129 th.AssertNoErr(t, res.Err) 130 } 131 132 func TestListAssignmentsSinglePage(t *testing.T) { 133 th.SetupHTTP() 134 defer th.TeardownHTTP() 135 HandleListRoleAssignmentsSuccessfully(t) 136 137 count := 0 138 err := roles.ListAssignments(client.ServiceClient(), roles.ListAssignmentsOpts{}).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 139 count++ 140 actual, err := roles.ExtractRoleAssignments(page) 141 th.AssertNoErr(t, err) 142 143 th.CheckDeepEquals(t, ExpectedRoleAssignmentsSlice, actual) 144 145 return true, nil 146 }) 147 th.AssertNoErr(t, err) 148 th.CheckEquals(t, count, 1) 149 } 150 151 func TestListAssignmentsWithNamesSinglePage(t *testing.T) { 152 th.SetupHTTP() 153 defer th.TeardownHTTP() 154 HandleListRoleAssignmentsWithNamesSuccessfully(t) 155 156 var includeNames = true 157 listOpts := roles.ListAssignmentsOpts{ 158 IncludeNames: &includeNames, 159 } 160 161 count := 0 162 err := roles.ListAssignments(client.ServiceClient(), listOpts).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 163 count++ 164 actual, err := roles.ExtractRoleAssignments(page) 165 th.AssertNoErr(t, err) 166 167 th.CheckDeepEquals(t, ExpectedRoleAssignmentsWithNamesSlice, actual) 168 169 return true, nil 170 }) 171 th.AssertNoErr(t, err) 172 th.CheckEquals(t, count, 1) 173 } 174 175 func TestListAssignmentsWithSubtreeSinglePage(t *testing.T) { 176 th.SetupHTTP() 177 defer th.TeardownHTTP() 178 HandleListRoleAssignmentsWithSubtreeSuccessfully(t) 179 180 var includeSubtree = true 181 listOpts := roles.ListAssignmentsOpts{ 182 IncludeSubtree: &includeSubtree, 183 } 184 185 count := 0 186 err := roles.ListAssignments(client.ServiceClient(), listOpts).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 187 count++ 188 actual, err := roles.ExtractRoleAssignments(page) 189 th.AssertNoErr(t, err) 190 191 th.CheckDeepEquals(t, ExpectedRoleAssignmentsSlice, actual) 192 193 return true, nil 194 }) 195 th.AssertNoErr(t, err) 196 th.CheckEquals(t, count, 1) 197 } 198 199 func TestListAssignmentsOnResource_ProjectsUsers(t *testing.T) { 200 th.SetupHTTP() 201 defer th.TeardownHTTP() 202 HandleListAssignmentsOnResourceSuccessfully_ProjectsUsers(t) 203 204 count := 0 205 err := roles.ListAssignmentsOnResource(client.ServiceClient(), roles.ListAssignmentsOnResourceOpts{ 206 UserID: "{user_id}", 207 ProjectID: "{project_id}", 208 }).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 209 count++ 210 211 actual, err := roles.ExtractRoles(page) 212 th.AssertNoErr(t, err) 213 th.CheckDeepEquals(t, ExpectedRolesOnResourceSlice, actual) 214 215 return true, nil 216 }) 217 th.AssertNoErr(t, err) 218 th.CheckEquals(t, count, 1) 219 } 220 221 func TestListAssignmentsOnResource_DomainsUsers(t *testing.T) { 222 th.SetupHTTP() 223 defer th.TeardownHTTP() 224 HandleListAssignmentsOnResourceSuccessfully_DomainsUsers(t) 225 226 count := 0 227 err := roles.ListAssignmentsOnResource(client.ServiceClient(), roles.ListAssignmentsOnResourceOpts{ 228 UserID: "{user_id}", 229 DomainID: "{domain_id}", 230 }).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 231 count++ 232 233 actual, err := roles.ExtractRoles(page) 234 th.AssertNoErr(t, err) 235 th.CheckDeepEquals(t, ExpectedRolesOnResourceSlice, actual) 236 237 return true, nil 238 }) 239 th.AssertNoErr(t, err) 240 th.CheckEquals(t, count, 1) 241 } 242 243 func TestListAssignmentsOnResource_ProjectsGroups(t *testing.T) { 244 th.SetupHTTP() 245 defer th.TeardownHTTP() 246 HandleListAssignmentsOnResourceSuccessfully_ProjectsGroups(t) 247 248 count := 0 249 err := roles.ListAssignmentsOnResource(client.ServiceClient(), roles.ListAssignmentsOnResourceOpts{ 250 GroupID: "{group_id}", 251 ProjectID: "{project_id}", 252 }).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 253 count++ 254 255 actual, err := roles.ExtractRoles(page) 256 th.AssertNoErr(t, err) 257 th.CheckDeepEquals(t, ExpectedRolesOnResourceSlice, actual) 258 259 return true, nil 260 }) 261 th.AssertNoErr(t, err) 262 th.CheckEquals(t, count, 1) 263 } 264 265 func TestListAssignmentsOnResource_DomainsGroups(t *testing.T) { 266 th.SetupHTTP() 267 defer th.TeardownHTTP() 268 HandleListAssignmentsOnResourceSuccessfully_DomainsGroups(t) 269 270 count := 0 271 err := roles.ListAssignmentsOnResource(client.ServiceClient(), roles.ListAssignmentsOnResourceOpts{ 272 GroupID: "{group_id}", 273 DomainID: "{domain_id}", 274 }).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 275 count++ 276 277 actual, err := roles.ExtractRoles(page) 278 th.AssertNoErr(t, err) 279 th.CheckDeepEquals(t, ExpectedRolesOnResourceSlice, actual) 280 281 return true, nil 282 }) 283 th.AssertNoErr(t, err) 284 th.CheckEquals(t, count, 1) 285 } 286 287 func TestAssign(t *testing.T) { 288 th.SetupHTTP() 289 defer th.TeardownHTTP() 290 HandleAssignSuccessfully(t) 291 292 err := roles.Assign(context.TODO(), client.ServiceClient(), "{role_id}", roles.AssignOpts{ 293 UserID: "{user_id}", 294 ProjectID: "{project_id}", 295 }).ExtractErr() 296 th.AssertNoErr(t, err) 297 298 err = roles.Assign(context.TODO(), client.ServiceClient(), "{role_id}", roles.AssignOpts{ 299 UserID: "{user_id}", 300 DomainID: "{domain_id}", 301 }).ExtractErr() 302 th.AssertNoErr(t, err) 303 304 err = roles.Assign(context.TODO(), client.ServiceClient(), "{role_id}", roles.AssignOpts{ 305 GroupID: "{group_id}", 306 ProjectID: "{project_id}", 307 }).ExtractErr() 308 th.AssertNoErr(t, err) 309 310 err = roles.Assign(context.TODO(), client.ServiceClient(), "{role_id}", roles.AssignOpts{ 311 GroupID: "{group_id}", 312 DomainID: "{domain_id}", 313 }).ExtractErr() 314 th.AssertNoErr(t, err) 315 } 316 317 func TestUnassign(t *testing.T) { 318 th.SetupHTTP() 319 defer th.TeardownHTTP() 320 HandleUnassignSuccessfully(t) 321 322 err := roles.Unassign(context.TODO(), client.ServiceClient(), "{role_id}", roles.UnassignOpts{ 323 UserID: "{user_id}", 324 ProjectID: "{project_id}", 325 }).ExtractErr() 326 th.AssertNoErr(t, err) 327 328 err = roles.Unassign(context.TODO(), client.ServiceClient(), "{role_id}", roles.UnassignOpts{ 329 UserID: "{user_id}", 330 DomainID: "{domain_id}", 331 }).ExtractErr() 332 th.AssertNoErr(t, err) 333 334 err = roles.Unassign(context.TODO(), client.ServiceClient(), "{role_id}", roles.UnassignOpts{ 335 GroupID: "{group_id}", 336 ProjectID: "{project_id}", 337 }).ExtractErr() 338 th.AssertNoErr(t, err) 339 340 err = roles.Unassign(context.TODO(), client.ServiceClient(), "{role_id}", roles.UnassignOpts{ 341 GroupID: "{group_id}", 342 DomainID: "{domain_id}", 343 }).ExtractErr() 344 th.AssertNoErr(t, err) 345 } 346 347 func TestCreateRoleInferenceRule(t *testing.T) { 348 th.SetupHTTP() 349 defer th.TeardownHTTP() 350 HandleCreateRoleInferenceRule(t) 351 352 actual, err := roles.CreateRoleInferenceRule(context.TODO(), client.ServiceClient(), "7ceab6192ea34a548cc71b24f72e762c", "97e2f5d38bc94842bc3da818c16762ed").Extract() 353 th.AssertNoErr(t, err) 354 th.CheckDeepEquals(t, expectedRoleInferenceRule, *actual) 355 } 356 357 func TestListRoleInferenceRules(t *testing.T) { 358 th.SetupHTTP() 359 defer th.TeardownHTTP() 360 HandleListRoleInferenceRules(t) 361 362 actual, err := roles.ListRoleInferenceRules(context.TODO(), client.ServiceClient()).Extract() 363 th.AssertNoErr(t, err) 364 th.CheckDeepEquals(t, expectedRoleInferenceRuleList, *actual) 365 } 366 367 func TestDeleteRoleInferenceRule(t *testing.T) { 368 th.SetupHTTP() 369 defer th.TeardownHTTP() 370 HandleDeleteRoleInferenceRule(t) 371 372 err := roles.DeleteRoleInferenceRule(context.TODO(), client.ServiceClient(), "7ceab6192ea34a548cc71b24f72e762c", "97e2f5d38bc94842bc3da818c16762ed").ExtractErr() 373 th.AssertNoErr(t, err) 374 } 375 376 func TestGetInferenceRule(t *testing.T) { 377 th.SetupHTTP() 378 defer th.TeardownHTTP() 379 HandleGetRoleInferenceRule(t) 380 381 actual, err := roles.GetRoleInferenceRule(context.TODO(), client.ServiceClient(), "7ceab6192ea34a548cc71b24f72e762c", "97e2f5d38bc94842bc3da818c16762ed").Extract() 382 th.AssertNoErr(t, err) 383 th.CheckDeepEquals(t, expectedRoleInferenceRule, *actual) 384 }