github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/compute/v2/flavors_test.go (about) 1 //go:build acceptance || compute || flavors 2 3 package v2 4 5 import ( 6 "context" 7 "testing" 8 9 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients" 10 identity "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/openstack/identity/v3" 11 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools" 12 "github.com/vnpaycloud-console/gophercloud/v2/openstack/compute/v2/flavors" 13 th "github.com/vnpaycloud-console/gophercloud/v2/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(context.TODO()) 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, true, found) 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(context.TODO()) 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(context.TODO(), client, choices.FlavorID).Extract() 73 th.AssertNoErr(t, err) 74 75 tools.PrintResource(t, flavor) 76 77 th.AssertEquals(t, choices.FlavorID, flavor.ID) 78 } 79 80 func TestFlavorExtraSpecsGet(t *testing.T) { 81 clients.RequireAdmin(t) 82 83 client, err := clients.NewComputeV2Client() 84 th.AssertNoErr(t, err) 85 86 // Microversion 2.61 is required to add extra_specs to flavor 87 client.Microversion = "2.61" 88 89 flavor, err := CreatePrivateFlavor(t, client) 90 th.AssertNoErr(t, err) 91 defer DeleteFlavor(t, client, flavor) 92 93 createOpts := flavors.ExtraSpecsOpts{ 94 "hw:cpu_policy": "CPU-POLICY", 95 "hw:cpu_thread_policy": "CPU-THREAD-POLICY", 96 } 97 createdExtraSpecs, err := flavors.CreateExtraSpecs(context.TODO(), client, flavor.ID, createOpts).Extract() 98 th.AssertNoErr(t, err) 99 100 tools.PrintResource(t, createdExtraSpecs) 101 102 flavor, err = flavors.Get(context.TODO(), client, flavor.ID).Extract() 103 th.AssertNoErr(t, err) 104 105 tools.PrintResource(t, flavor) 106 th.AssertEquals(t, 2, len(flavor.ExtraSpecs)) 107 th.AssertEquals(t, "CPU-POLICY", flavor.ExtraSpecs["hw:cpu_policy"]) 108 th.AssertEquals(t, "CPU-THREAD-POLICY", flavor.ExtraSpecs["hw:cpu_thread_policy"]) 109 } 110 111 func TestFlavorsCreateDelete(t *testing.T) { 112 clients.RequireAdmin(t) 113 114 client, err := clients.NewComputeV2Client() 115 th.AssertNoErr(t, err) 116 117 flavor, err := CreateFlavor(t, client) 118 th.AssertNoErr(t, err) 119 defer DeleteFlavor(t, client, flavor) 120 121 tools.PrintResource(t, flavor) 122 } 123 124 func TestFlavorsCreateUpdateDelete(t *testing.T) { 125 clients.RequireAdmin(t) 126 127 client, err := clients.NewComputeV2Client() 128 th.AssertNoErr(t, err) 129 130 flavor, err := CreateFlavor(t, client) 131 th.AssertNoErr(t, err) 132 defer DeleteFlavor(t, client, flavor) 133 134 tools.PrintResource(t, flavor) 135 136 newFlavorDescription := "This is the new description" 137 updateOpts := flavors.UpdateOpts{ 138 Description: newFlavorDescription, 139 } 140 141 flavor, err = flavors.Update(context.TODO(), client, flavor.ID, updateOpts).Extract() 142 th.AssertNoErr(t, err) 143 th.AssertEquals(t, newFlavorDescription, flavor.Description) 144 145 tools.PrintResource(t, flavor) 146 } 147 148 func TestFlavorsAccessesList(t *testing.T) { 149 clients.RequireAdmin(t) 150 151 client, err := clients.NewComputeV2Client() 152 th.AssertNoErr(t, err) 153 154 flavor, err := CreatePrivateFlavor(t, client) 155 th.AssertNoErr(t, err) 156 defer DeleteFlavor(t, client, flavor) 157 158 allPages, err := flavors.ListAccesses(client, flavor.ID).AllPages(context.TODO()) 159 th.AssertNoErr(t, err) 160 161 allAccesses, err := flavors.ExtractAccesses(allPages) 162 th.AssertNoErr(t, err) 163 164 th.AssertEquals(t, 0, len(allAccesses)) 165 } 166 167 func TestFlavorsAccessCRUD(t *testing.T) { 168 clients.RequireAdmin(t) 169 170 client, err := clients.NewComputeV2Client() 171 th.AssertNoErr(t, err) 172 173 identityClient, err := clients.NewIdentityV3Client() 174 th.AssertNoErr(t, err) 175 176 project, err := identity.CreateProject(t, identityClient, nil) 177 th.AssertNoErr(t, err) 178 defer identity.DeleteProject(t, identityClient, project.ID) 179 180 flavor, err := CreatePrivateFlavor(t, client) 181 th.AssertNoErr(t, err) 182 defer DeleteFlavor(t, client, flavor) 183 184 addAccessOpts := flavors.AddAccessOpts{ 185 Tenant: project.ID, 186 } 187 188 accessList, err := flavors.AddAccess(context.TODO(), client, flavor.ID, addAccessOpts).Extract() 189 th.AssertNoErr(t, err) 190 191 th.AssertEquals(t, 1, len(accessList)) 192 th.AssertEquals(t, project.ID, accessList[0].TenantID) 193 th.AssertEquals(t, flavor.ID, accessList[0].FlavorID) 194 195 for _, access := range accessList { 196 tools.PrintResource(t, access) 197 } 198 199 removeAccessOpts := flavors.RemoveAccessOpts{ 200 Tenant: project.ID, 201 } 202 203 accessList, err = flavors.RemoveAccess(context.TODO(), client, flavor.ID, removeAccessOpts).Extract() 204 th.AssertNoErr(t, err) 205 206 th.AssertEquals(t, 0, len(accessList)) 207 } 208 209 func TestFlavorsExtraSpecsCRUD(t *testing.T) { 210 clients.RequireAdmin(t) 211 212 client, err := clients.NewComputeV2Client() 213 th.AssertNoErr(t, err) 214 215 flavor, err := CreatePrivateFlavor(t, client) 216 th.AssertNoErr(t, err) 217 defer DeleteFlavor(t, client, flavor) 218 219 createOpts := flavors.ExtraSpecsOpts{ 220 "hw:cpu_policy": "CPU-POLICY", 221 "hw:cpu_thread_policy": "CPU-THREAD-POLICY", 222 } 223 createdExtraSpecs, err := flavors.CreateExtraSpecs(context.TODO(), client, flavor.ID, createOpts).Extract() 224 th.AssertNoErr(t, err) 225 226 tools.PrintResource(t, createdExtraSpecs) 227 228 th.AssertEquals(t, 2, len(createdExtraSpecs)) 229 th.AssertEquals(t, "CPU-POLICY", createdExtraSpecs["hw:cpu_policy"]) 230 th.AssertEquals(t, "CPU-THREAD-POLICY", createdExtraSpecs["hw:cpu_thread_policy"]) 231 232 err = flavors.DeleteExtraSpec(context.TODO(), client, flavor.ID, "hw:cpu_policy").ExtractErr() 233 th.AssertNoErr(t, err) 234 235 updateOpts := flavors.ExtraSpecsOpts{ 236 "hw:cpu_thread_policy": "CPU-THREAD-POLICY-BETTER", 237 } 238 updatedExtraSpec, err := flavors.UpdateExtraSpec(context.TODO(), client, flavor.ID, updateOpts).Extract() 239 th.AssertNoErr(t, err) 240 241 tools.PrintResource(t, updatedExtraSpec) 242 243 allExtraSpecs, err := flavors.ListExtraSpecs(context.TODO(), client, flavor.ID).Extract() 244 th.AssertNoErr(t, err) 245 246 tools.PrintResource(t, allExtraSpecs) 247 248 th.AssertEquals(t, 1, len(allExtraSpecs)) 249 th.AssertEquals(t, "CPU-THREAD-POLICY-BETTER", allExtraSpecs["hw:cpu_thread_policy"]) 250 251 spec, err := flavors.GetExtraSpec(context.TODO(), client, flavor.ID, "hw:cpu_thread_policy").Extract() 252 th.AssertNoErr(t, err) 253 254 tools.PrintResource(t, spec) 255 256 th.AssertEquals(t, "CPU-THREAD-POLICY-BETTER", spec["hw:cpu_thread_policy"]) 257 }