github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/identity/v3/federation_test.go (about) 1 //go:build acceptance || identity || federation 2 3 package v3 4 5 import ( 6 "context" 7 "net/http" 8 "testing" 9 10 "github.com/vnpaycloud-console/gophercloud/v2" 11 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients" 12 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools" 13 "github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/federation" 14 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 15 ) 16 17 func TestListMappings(t *testing.T) { 18 clients.RequireAdmin(t) 19 20 client, err := clients.NewIdentityV3Client() 21 th.AssertNoErr(t, err) 22 23 allPages, err := federation.ListMappings(client).AllPages(context.TODO()) 24 th.AssertNoErr(t, err) 25 26 mappings, err := federation.ExtractMappings(allPages) 27 th.AssertNoErr(t, err) 28 29 tools.PrintResource(t, mappings) 30 } 31 32 func TestMappingsCRUD(t *testing.T) { 33 clients.RequireAdmin(t) 34 35 mappingName := tools.RandomString("TESTMAPPING-", 8) 36 37 client, err := clients.NewIdentityV3Client() 38 th.AssertNoErr(t, err) 39 40 createOpts := federation.CreateMappingOpts{ 41 Rules: []federation.MappingRule{ 42 { 43 Local: []federation.RuleLocal{ 44 { 45 User: &federation.RuleUser{ 46 Name: "{0}", 47 }, 48 }, 49 { 50 Group: &federation.Group{ 51 ID: "0cd5e9", 52 }, 53 }, 54 }, 55 Remote: []federation.RuleRemote{ 56 { 57 Type: "UserName", 58 }, 59 { 60 Type: "orgPersonType", 61 NotAnyOf: []string{ 62 "Contractor", 63 "Guest", 64 }, 65 }, 66 }, 67 }, 68 }, 69 } 70 71 createdMapping, err := federation.CreateMapping(context.TODO(), client, mappingName, createOpts).Extract() 72 th.AssertNoErr(t, err) 73 th.AssertEquals(t, len(createOpts.Rules), len(createdMapping.Rules)) 74 th.CheckDeepEquals(t, createOpts.Rules[0], createdMapping.Rules[0]) 75 76 mapping, err := federation.GetMapping(context.TODO(), client, mappingName).Extract() 77 th.AssertNoErr(t, err) 78 th.AssertEquals(t, len(createOpts.Rules), len(mapping.Rules)) 79 th.CheckDeepEquals(t, createOpts.Rules[0], mapping.Rules[0]) 80 81 updateOpts := federation.UpdateMappingOpts{ 82 Rules: []federation.MappingRule{ 83 { 84 Local: []federation.RuleLocal{ 85 { 86 User: &federation.RuleUser{ 87 Name: "{0}", 88 }, 89 }, 90 { 91 Group: &federation.Group{ 92 ID: "0cd5e9", 93 }, 94 }, 95 }, 96 Remote: []federation.RuleRemote{ 97 { 98 Type: "UserName", 99 }, 100 { 101 Type: "orgPersonType", 102 AnyOneOf: []string{ 103 "Contractor", 104 "SubContractor", 105 }, 106 }, 107 }, 108 }, 109 }, 110 } 111 112 updatedMapping, err := federation.UpdateMapping(context.TODO(), client, mappingName, updateOpts).Extract() 113 th.AssertNoErr(t, err) 114 th.AssertEquals(t, len(updateOpts.Rules), len(updatedMapping.Rules)) 115 th.CheckDeepEquals(t, updateOpts.Rules[0], updatedMapping.Rules[0]) 116 117 err = federation.DeleteMapping(context.TODO(), client, mappingName).ExtractErr() 118 th.AssertNoErr(t, err) 119 120 resp := federation.GetMapping(context.TODO(), client, mappingName) 121 th.AssertEquals(t, true, gophercloud.ResponseCodeIs(resp.Err, http.StatusNotFound)) 122 }