github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/identity/v3/policies_test.go (about) 1 //go:build acceptance 2 // +build acceptance 3 4 package v3 5 6 import ( 7 "testing" 8 9 "github.com/gophercloud/gophercloud/internal/acceptance/clients" 10 "github.com/gophercloud/gophercloud/internal/acceptance/tools" 11 "github.com/gophercloud/gophercloud/openstack/identity/v3/policies" 12 th "github.com/gophercloud/gophercloud/testhelper" 13 ) 14 15 func TestPoliciesList(t *testing.T) { 16 clients.RequireAdmin(t) 17 18 client, err := clients.NewIdentityV3Client() 19 th.AssertNoErr(t, err) 20 21 allPages, err := policies.List(client, policies.ListOpts{}).AllPages() 22 th.AssertNoErr(t, err) 23 24 allPolicies, err := policies.ExtractPolicies(allPages) 25 th.AssertNoErr(t, err) 26 27 for _, policy := range allPolicies { 28 tools.PrintResource(t, policy) 29 } 30 } 31 32 func TestPoliciesCRUD(t *testing.T) { 33 clients.RequireAdmin(t) 34 35 client, err := clients.NewIdentityV3Client() 36 th.AssertNoErr(t, err) 37 38 createOpts := policies.CreateOpts{ 39 Type: "application/json", 40 Blob: []byte("{'foobar_user': 'role:compute-user'}"), 41 Extra: map[string]interface{}{ 42 "description": "policy for foobar_user", 43 }, 44 } 45 46 policy, err := policies.Create(client, &createOpts).Extract() 47 th.AssertNoErr(t, err) 48 49 tools.PrintResource(t, policy) 50 tools.PrintResource(t, policy.Extra) 51 52 th.AssertEquals(t, policy.Type, createOpts.Type) 53 th.AssertEquals(t, policy.Blob, string(createOpts.Blob)) 54 th.AssertEquals(t, policy.Extra["description"], createOpts.Extra["description"]) 55 56 var listOpts policies.ListOpts 57 58 allPages, err := policies.List(client, listOpts).AllPages() 59 th.AssertNoErr(t, err) 60 61 allPolicies, err := policies.ExtractPolicies(allPages) 62 th.AssertNoErr(t, err) 63 64 var found bool 65 for _, p := range allPolicies { 66 tools.PrintResource(t, p) 67 tools.PrintResource(t, p.Extra) 68 69 if p.ID == policy.ID { 70 found = true 71 } 72 } 73 74 th.AssertEquals(t, true, found) 75 76 listOpts.Filters = map[string]string{ 77 "type__contains": "json", 78 } 79 80 allPages, err = policies.List(client, listOpts).AllPages() 81 th.AssertNoErr(t, err) 82 83 allPolicies, err = policies.ExtractPolicies(allPages) 84 th.AssertNoErr(t, err) 85 86 found = false 87 for _, p := range allPolicies { 88 tools.PrintResource(t, p) 89 tools.PrintResource(t, p.Extra) 90 91 if p.ID == policy.ID { 92 found = true 93 } 94 } 95 96 th.AssertEquals(t, true, found) 97 98 listOpts.Filters = map[string]string{ 99 "type__contains": "foobar", 100 } 101 102 allPages, err = policies.List(client, listOpts).AllPages() 103 th.AssertNoErr(t, err) 104 105 allPolicies, err = policies.ExtractPolicies(allPages) 106 th.AssertNoErr(t, err) 107 108 found = false 109 for _, p := range allPolicies { 110 tools.PrintResource(t, p) 111 tools.PrintResource(t, p.Extra) 112 113 if p.ID == policy.ID { 114 found = true 115 } 116 } 117 118 th.AssertEquals(t, false, found) 119 120 gotPolicy, err := policies.Get(client, policy.ID).Extract() 121 th.AssertNoErr(t, err) 122 th.AssertDeepEquals(t, policy, gotPolicy) 123 124 updateOpts := policies.UpdateOpts{ 125 Type: "text/plain", 126 Blob: []byte("'foobar_user': 'role:compute-user'"), 127 Extra: map[string]interface{}{ 128 "description": "updated policy for foobar_user", 129 }, 130 } 131 132 updatedPolicy, err := policies.Update(client, policy.ID, updateOpts).Extract() 133 th.AssertNoErr(t, err) 134 135 tools.PrintResource(t, updatedPolicy) 136 tools.PrintResource(t, updatedPolicy.Extra) 137 138 th.AssertEquals(t, updatedPolicy.Type, updateOpts.Type) 139 th.AssertEquals(t, updatedPolicy.Blob, string(updateOpts.Blob)) 140 th.AssertEquals(t, updatedPolicy.Extra["description"], updateOpts.Extra["description"]) 141 142 err = policies.Delete(client, policy.ID).ExtractErr() 143 th.AssertNoErr(t, err) 144 }