github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/identity/v3/groups_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/groups" 12 th "github.com/gophercloud/gophercloud/testhelper" 13 ) 14 15 func TestGroupCRUD(t *testing.T) { 16 clients.RequireAdmin(t) 17 18 client, err := clients.NewIdentityV3Client() 19 th.AssertNoErr(t, err) 20 21 description := "Test Groups" 22 domainID := "default" 23 createOpts := groups.CreateOpts{ 24 Description: description, 25 DomainID: domainID, 26 Extra: map[string]interface{}{ 27 "email": "testgroup@example.com", 28 }, 29 } 30 31 // Create Group in the default domain 32 group, err := CreateGroup(t, client, &createOpts) 33 th.AssertNoErr(t, err) 34 defer DeleteGroup(t, client, group.ID) 35 36 tools.PrintResource(t, group) 37 tools.PrintResource(t, group.Extra) 38 39 th.AssertEquals(t, group.Description, description) 40 th.AssertEquals(t, group.DomainID, domainID) 41 th.AssertDeepEquals(t, group.Extra, createOpts.Extra) 42 43 description = "" 44 updateOpts := groups.UpdateOpts{ 45 Description: &description, 46 Extra: map[string]interface{}{ 47 "email": "thetestgroup@example.com", 48 }, 49 } 50 51 newGroup, err := groups.Update(client, group.ID, updateOpts).Extract() 52 th.AssertNoErr(t, err) 53 54 tools.PrintResource(t, newGroup) 55 tools.PrintResource(t, newGroup.Extra) 56 57 th.AssertEquals(t, newGroup.Description, description) 58 th.AssertDeepEquals(t, newGroup.Extra, updateOpts.Extra) 59 60 listOpts := groups.ListOpts{ 61 DomainID: "default", 62 } 63 64 // List all Groups in default domain 65 allPages, err := groups.List(client, listOpts).AllPages() 66 th.AssertNoErr(t, err) 67 68 allGroups, err := groups.ExtractGroups(allPages) 69 th.AssertNoErr(t, err) 70 71 for _, g := range allGroups { 72 tools.PrintResource(t, g) 73 tools.PrintResource(t, g.Extra) 74 } 75 76 var found bool 77 for _, group := range allGroups { 78 tools.PrintResource(t, group) 79 tools.PrintResource(t, group.Extra) 80 81 if group.Name == newGroup.Name { 82 found = true 83 } 84 } 85 86 th.AssertEquals(t, found, true) 87 88 listOpts.Filters = map[string]string{ 89 "name__contains": "TEST", 90 } 91 92 allPages, err = groups.List(client, listOpts).AllPages() 93 th.AssertNoErr(t, err) 94 95 allGroups, err = groups.ExtractGroups(allPages) 96 th.AssertNoErr(t, err) 97 98 found = false 99 for _, group := range allGroups { 100 tools.PrintResource(t, group) 101 tools.PrintResource(t, group.Extra) 102 103 if group.Name == newGroup.Name { 104 found = true 105 } 106 } 107 108 th.AssertEquals(t, found, true) 109 110 listOpts.Filters = map[string]string{ 111 "name__contains": "foo", 112 } 113 114 allPages, err = groups.List(client, listOpts).AllPages() 115 th.AssertNoErr(t, err) 116 117 allGroups, err = groups.ExtractGroups(allPages) 118 th.AssertNoErr(t, err) 119 120 found = false 121 for _, group := range allGroups { 122 tools.PrintResource(t, group) 123 tools.PrintResource(t, group.Extra) 124 125 if group.Name == newGroup.Name { 126 found = true 127 } 128 } 129 130 th.AssertEquals(t, found, false) 131 132 // Get the recently created group by ID 133 p, err := groups.Get(client, group.ID).Extract() 134 th.AssertNoErr(t, err) 135 136 tools.PrintResource(t, p) 137 }