github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/compute/v2/flavors_test.go (about) 1 //go:build acceptance || compute || flavors 2 // +build acceptance compute flavors 3 4 package v2 5 6 import ( 7 "testing" 8 9 "github.com/gophercloud/gophercloud/internal/acceptance/clients" 10 identity "github.com/gophercloud/gophercloud/internal/acceptance/openstack/identity/v3" 11 "github.com/gophercloud/gophercloud/internal/acceptance/tools" 12 "github.com/gophercloud/gophercloud/openstack/compute/v2/flavors" 13 th "github.com/gophercloud/gophercloud/testhelper" 14 ) 15 16 func TestFlavorsList(t *testing.T) { 17 client, err := clients.NewComputeV2Client() 18 th.AssertNoErr(t, err) 19 20 choices, err := clients.AcceptanceTestChoicesFromEnv() 21 th.AssertNoErr(t, err) 22 23 allPages, err := flavors.ListDetail(client, nil).AllPages() 24 th.AssertNoErr(t, err) 25 26 allFlavors, err := flavors.ExtractFlavors(allPages) 27 th.AssertNoErr(t, err) 28 29 var found bool 30 for _, flavor := range allFlavors { 31 tools.PrintResource(t, flavor) 32 33 if flavor.ID == choices.FlavorID { 34 found = true 35 } 36 } 37 38 th.AssertEquals(t, found, true) 39 } 40 41 func TestFlavorsAccessTypeList(t *testing.T) { 42 client, err := clients.NewComputeV2Client() 43 th.AssertNoErr(t, err) 44 45 flavorAccessTypes := map[string]flavors.AccessType{ 46 "public": flavors.PublicAccess, 47 "private": flavors.PrivateAccess, 48 "all": flavors.AllAccess, 49 } 50 51 for flavorTypeName, flavorAccessType := range flavorAccessTypes { 52 t.Logf("** %s flavors: **", flavorTypeName) 53 allPages, err := flavors.ListDetail(client, flavors.ListOpts{AccessType: flavorAccessType}).AllPages() 54 th.AssertNoErr(t, err) 55 56 allFlavors, err := flavors.ExtractFlavors(allPages) 57 th.AssertNoErr(t, err) 58 59 for _, flavor := range allFlavors { 60 tools.PrintResource(t, flavor) 61 } 62 } 63 } 64 65 func TestFlavorsGet(t *testing.T) { 66 client, err := clients.NewComputeV2Client() 67 th.AssertNoErr(t, err) 68 69 choices, err := clients.AcceptanceTestChoicesFromEnv() 70 th.AssertNoErr(t, err) 71 72 flavor, err := flavors.Get(client, choices.FlavorID).Extract() 73 th.AssertNoErr(t, err) 74 75 tools.PrintResource(t, flavor) 76 77 th.AssertEquals(t, flavor.ID, choices.FlavorID) 78 } 79 80 func TestFlavorsCreateDelete(t *testing.T) { 81 clients.RequireAdmin(t) 82 83 client, err := clients.NewComputeV2Client() 84 th.AssertNoErr(t, err) 85 86 flavor, err := CreateFlavor(t, client) 87 th.AssertNoErr(t, err) 88 defer DeleteFlavor(t, client, flavor) 89 90 tools.PrintResource(t, flavor) 91 } 92 93 func TestFlavorsCreateUpdateDelete(t *testing.T) { 94 clients.RequireAdmin(t) 95 96 client, err := clients.NewComputeV2Client() 97 th.AssertNoErr(t, err) 98 99 flavor, err := CreateFlavor(t, client) 100 th.AssertNoErr(t, err) 101 defer DeleteFlavor(t, client, flavor) 102 103 tools.PrintResource(t, flavor) 104 105 newFlavorDescription := "This is the new description" 106 updateOpts := flavors.UpdateOpts{ 107 Description: newFlavorDescription, 108 } 109 110 flavor, err = flavors.Update(client, flavor.ID, updateOpts).Extract() 111 th.AssertNoErr(t, err) 112 th.AssertEquals(t, flavor.Description, newFlavorDescription) 113 114 tools.PrintResource(t, flavor) 115 } 116 117 func TestFlavorsAccessesList(t *testing.T) { 118 clients.RequireAdmin(t) 119 120 client, err := clients.NewComputeV2Client() 121 th.AssertNoErr(t, err) 122 123 flavor, err := CreatePrivateFlavor(t, client) 124 th.AssertNoErr(t, err) 125 defer DeleteFlavor(t, client, flavor) 126 127 allPages, err := flavors.ListAccesses(client, flavor.ID).AllPages() 128 th.AssertNoErr(t, err) 129 130 allAccesses, err := flavors.ExtractAccesses(allPages) 131 th.AssertNoErr(t, err) 132 133 th.AssertEquals(t, len(allAccesses), 0) 134 } 135 136 func TestFlavorsAccessCRUD(t *testing.T) { 137 clients.RequireAdmin(t) 138 139 client, err := clients.NewComputeV2Client() 140 th.AssertNoErr(t, err) 141 142 identityClient, err := clients.NewIdentityV3Client() 143 th.AssertNoErr(t, err) 144 145 project, err := identity.CreateProject(t, identityClient, nil) 146 th.AssertNoErr(t, err) 147 defer identity.DeleteProject(t, identityClient, project.ID) 148 149 flavor, err := CreatePrivateFlavor(t, client) 150 th.AssertNoErr(t, err) 151 defer DeleteFlavor(t, client, flavor) 152 153 addAccessOpts := flavors.AddAccessOpts{ 154 Tenant: project.ID, 155 } 156 157 accessList, err := flavors.AddAccess(client, flavor.ID, addAccessOpts).Extract() 158 th.AssertNoErr(t, err) 159 160 th.AssertEquals(t, len(accessList), 1) 161 th.AssertEquals(t, accessList[0].TenantID, project.ID) 162 th.AssertEquals(t, accessList[0].FlavorID, flavor.ID) 163 164 for _, access := range accessList { 165 tools.PrintResource(t, access) 166 } 167 168 removeAccessOpts := flavors.RemoveAccessOpts{ 169 Tenant: project.ID, 170 } 171 172 accessList, err = flavors.RemoveAccess(client, flavor.ID, removeAccessOpts).Extract() 173 th.AssertNoErr(t, err) 174 175 th.AssertEquals(t, len(accessList), 0) 176 } 177 178 func TestFlavorsExtraSpecsCRUD(t *testing.T) { 179 clients.RequireAdmin(t) 180 181 client, err := clients.NewComputeV2Client() 182 th.AssertNoErr(t, err) 183 184 flavor, err := CreatePrivateFlavor(t, client) 185 th.AssertNoErr(t, err) 186 defer DeleteFlavor(t, client, flavor) 187 188 createOpts := flavors.ExtraSpecsOpts{ 189 "hw:cpu_policy": "CPU-POLICY", 190 "hw:cpu_thread_policy": "CPU-THREAD-POLICY", 191 } 192 createdExtraSpecs, err := flavors.CreateExtraSpecs(client, flavor.ID, createOpts).Extract() 193 th.AssertNoErr(t, err) 194 195 tools.PrintResource(t, createdExtraSpecs) 196 197 th.AssertEquals(t, len(createdExtraSpecs), 2) 198 th.AssertEquals(t, createdExtraSpecs["hw:cpu_policy"], "CPU-POLICY") 199 th.AssertEquals(t, createdExtraSpecs["hw:cpu_thread_policy"], "CPU-THREAD-POLICY") 200 201 err = flavors.DeleteExtraSpec(client, flavor.ID, "hw:cpu_policy").ExtractErr() 202 th.AssertNoErr(t, err) 203 204 updateOpts := flavors.ExtraSpecsOpts{ 205 "hw:cpu_thread_policy": "CPU-THREAD-POLICY-BETTER", 206 } 207 updatedExtraSpec, err := flavors.UpdateExtraSpec(client, flavor.ID, updateOpts).Extract() 208 th.AssertNoErr(t, err) 209 210 tools.PrintResource(t, updatedExtraSpec) 211 212 allExtraSpecs, err := flavors.ListExtraSpecs(client, flavor.ID).Extract() 213 th.AssertNoErr(t, err) 214 215 tools.PrintResource(t, allExtraSpecs) 216 217 th.AssertEquals(t, len(allExtraSpecs), 1) 218 th.AssertEquals(t, allExtraSpecs["hw:cpu_thread_policy"], "CPU-THREAD-POLICY-BETTER") 219 220 spec, err := flavors.GetExtraSpec(client, flavor.ID, "hw:cpu_thread_policy").Extract() 221 th.AssertNoErr(t, err) 222 223 tools.PrintResource(t, spec) 224 225 th.AssertEquals(t, spec["hw:cpu_thread_policy"], "CPU-THREAD-POLICY-BETTER") 226 }