github.com/leeclow-ops/gophercloud@v1.2.1/acceptance/openstack/identity/v3/limits_test.go (about) 1 //go:build acceptance 2 // +build acceptance 3 4 package v3 5 6 import ( 7 "os" 8 "testing" 9 10 "github.com/leeclow-ops/gophercloud/acceptance/clients" 11 "github.com/leeclow-ops/gophercloud/acceptance/tools" 12 "github.com/leeclow-ops/gophercloud/openstack/identity/v3/limits" 13 "github.com/leeclow-ops/gophercloud/openstack/identity/v3/services" 14 th "github.com/leeclow-ops/gophercloud/testhelper" 15 ) 16 17 func TestGetEnforcementModel(t *testing.T) { 18 clients.RequireAdmin(t) 19 20 client, err := clients.NewIdentityV3Client() 21 th.AssertNoErr(t, err) 22 23 model, err := limits.GetEnforcementModel(client).Extract() 24 th.AssertNoErr(t, err) 25 26 tools.PrintResource(t, model) 27 } 28 29 func TestLimitsList(t *testing.T) { 30 clients.RequireAdmin(t) 31 32 client, err := clients.NewIdentityV3Client() 33 th.AssertNoErr(t, err) 34 35 listOpts := limits.ListOpts{} 36 37 allPages, err := limits.List(client, listOpts).AllPages() 38 th.AssertNoErr(t, err) 39 40 _, err = limits.ExtractLimits(allPages) 41 th.AssertNoErr(t, err) 42 } 43 44 func TestCreateLimits(t *testing.T) { 45 // TODO: After https://github.com/gophercloud/gophercloud/issues/2290 is implemented 46 // use registered limits API to create global registered limit and then overwrite it with limit. 47 // Current solution (using glance limit) only works with Openstack Xena and above. 48 clients.SkipReleasesBelow(t, "stable/xena") 49 50 err := os.Setenv("OS_SYSTEM_SCOPE", "all") 51 th.AssertNoErr(t, err) 52 defer os.Unsetenv("OS_SYSTEM_SCOPE") 53 54 limitDescription := tools.RandomString("TESTLIMITS-DESC-", 8) 55 resourceLimit := tools.RandomInt(1, 100) 56 resourceName := "image_size_total" 57 58 clients.RequireAdmin(t) 59 60 client, err := clients.NewIdentityV3Client() 61 th.AssertNoErr(t, err) 62 63 project, err := CreateProject(t, client, nil) 64 th.AssertNoErr(t, err) 65 66 // Find image service (glance on Devstack) which has precreated registered limits. 67 allPages, err := services.List(client, nil).AllPages() 68 th.AssertNoErr(t, err) 69 70 svList, err := services.ExtractServices(allPages) 71 serviceID := "" 72 for _, service := range svList { 73 if service.Type == "image" { 74 serviceID = service.ID 75 break 76 } 77 } 78 th.AssertIntGreaterOrEqual(t, len(serviceID), 1) 79 80 createOpts := limits.BatchCreateOpts{ 81 limits.CreateOpts{ 82 ServiceID: serviceID, 83 ProjectID: project.ID, 84 ResourceName: resourceName, 85 ResourceLimit: resourceLimit, 86 Description: limitDescription, 87 RegionID: "RegionOne", 88 }, 89 } 90 91 createdLimits, err := limits.BatchCreate(client, createOpts).Extract() 92 th.AssertNoErr(t, err) 93 th.AssertIntGreaterOrEqual(t, 1, len(createdLimits)) 94 th.AssertEquals(t, limitDescription, createdLimits[0].Description) 95 th.AssertEquals(t, resourceLimit, createdLimits[0].ResourceLimit) 96 th.AssertEquals(t, resourceName, createdLimits[0].ResourceName) 97 th.AssertEquals(t, serviceID, createdLimits[0].ServiceID) 98 th.AssertEquals(t, project.ID, createdLimits[0].ProjectID) 99 100 }