github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/compute/v2/quotaset_test.go (about) 1 //go:build acceptance || compute || quotasets 2 // +build acceptance compute quotasets 3 4 package v2 5 6 import ( 7 "fmt" 8 "os" 9 "testing" 10 11 "github.com/gophercloud/gophercloud" 12 "github.com/gophercloud/gophercloud/internal/acceptance/clients" 13 "github.com/gophercloud/gophercloud/internal/acceptance/tools" 14 "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/quotasets" 15 "github.com/gophercloud/gophercloud/openstack/identity/v3/projects" 16 th "github.com/gophercloud/gophercloud/testhelper" 17 ) 18 19 func TestQuotasetGet(t *testing.T) { 20 client, err := clients.NewComputeV2Client() 21 th.AssertNoErr(t, err) 22 23 identityClient, err := clients.NewIdentityV3Client() 24 th.AssertNoErr(t, err) 25 26 projectID, err := getProjectID(t, identityClient) 27 th.AssertNoErr(t, err) 28 29 quotaSet, err := quotasets.Get(client, projectID).Extract() 30 th.AssertNoErr(t, err) 31 32 tools.PrintResource(t, quotaSet) 33 34 th.AssertEquals(t, quotaSet.FixedIPs, -1) 35 } 36 37 func getProjectID(t *testing.T, client *gophercloud.ServiceClient) (string, error) { 38 allPages, err := projects.ListAvailable(client).AllPages() 39 th.AssertNoErr(t, err) 40 41 allProjects, err := projects.ExtractProjects(allPages) 42 th.AssertNoErr(t, err) 43 44 for _, project := range allProjects { 45 return project.ID, nil 46 } 47 48 return "", fmt.Errorf("Unable to get project ID") 49 } 50 51 func getProjectIDByName(t *testing.T, client *gophercloud.ServiceClient, name string) (string, error) { 52 allPages, err := projects.List(client, nil).AllPages() 53 th.AssertNoErr(t, err) 54 55 allProjects, err := projects.ExtractProjects(allPages) 56 th.AssertNoErr(t, err) 57 58 for _, project := range allProjects { 59 if project.Name == name { 60 return project.ID, nil 61 } 62 } 63 64 return "", fmt.Errorf("Unable to get project ID") 65 } 66 67 // What will be sent as desired Quotas to the Server 68 var UpdateQuotaOpts = quotasets.UpdateOpts{ 69 FixedIPs: gophercloud.IntToPointer(10), 70 FloatingIPs: gophercloud.IntToPointer(10), 71 InjectedFileContentBytes: gophercloud.IntToPointer(10240), 72 InjectedFilePathBytes: gophercloud.IntToPointer(255), 73 InjectedFiles: gophercloud.IntToPointer(5), 74 KeyPairs: gophercloud.IntToPointer(10), 75 MetadataItems: gophercloud.IntToPointer(128), 76 RAM: gophercloud.IntToPointer(20000), 77 SecurityGroupRules: gophercloud.IntToPointer(20), 78 SecurityGroups: gophercloud.IntToPointer(10), 79 Cores: gophercloud.IntToPointer(10), 80 Instances: gophercloud.IntToPointer(4), 81 ServerGroups: gophercloud.IntToPointer(2), 82 ServerGroupMembers: gophercloud.IntToPointer(3), 83 } 84 85 // What the Server hopefully returns as the new Quotas 86 var UpdatedQuotas = quotasets.QuotaSet{ 87 FixedIPs: 10, 88 FloatingIPs: 10, 89 InjectedFileContentBytes: 10240, 90 InjectedFilePathBytes: 255, 91 InjectedFiles: 5, 92 KeyPairs: 10, 93 MetadataItems: 128, 94 RAM: 20000, 95 SecurityGroupRules: 20, 96 SecurityGroups: 10, 97 Cores: 10, 98 Instances: 4, 99 ServerGroups: 2, 100 ServerGroupMembers: 3, 101 } 102 103 func TestQuotasetUpdateDelete(t *testing.T) { 104 clients.RequireAdmin(t) 105 106 client, err := clients.NewComputeV2Client() 107 th.AssertNoErr(t, err) 108 109 idclient, err := clients.NewIdentityV3Client() 110 th.AssertNoErr(t, err) 111 112 projectid, err := getProjectIDByName(t, idclient, os.Getenv("OS_PROJECT_NAME")) 113 th.AssertNoErr(t, err) 114 115 // save original quotas 116 orig, err := quotasets.Get(client, projectid).Extract() 117 th.AssertNoErr(t, err) 118 119 // Test Update 120 res, err := quotasets.Update(client, projectid, UpdateQuotaOpts).Extract() 121 th.AssertNoErr(t, err) 122 th.AssertEquals(t, UpdatedQuotas, *res) 123 124 // Test Delete 125 _, err = quotasets.Delete(client, projectid).Extract() 126 th.AssertNoErr(t, err) 127 128 // We dont know the default quotas, so just check if the quotas are not the same as before 129 newres, err := quotasets.Get(client, projectid).Extract() 130 th.AssertNoErr(t, err) 131 if newres.RAM == res.RAM { 132 t.Fatalf("Failed to update quotas") 133 } 134 135 restore := quotasets.UpdateOpts{} 136 FillUpdateOptsFromQuotaSet(*orig, &restore) 137 138 // restore original quotas 139 res, err = quotasets.Update(client, projectid, restore).Extract() 140 th.AssertNoErr(t, err) 141 142 orig.ID = "" 143 th.AssertDeepEquals(t, orig, res) 144 }