github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/identity/v3/limits_test.go (about) 1 //go:build acceptance || identity || limits 2 3 package v3 4 5 import ( 6 "context" 7 "os" 8 "testing" 9 10 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients" 11 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools" 12 "github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/limits" 13 "github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/registeredlimits" 14 "github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/services" 15 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 16 ) 17 18 func TestGetEnforcementModel(t *testing.T) { 19 clients.RequireAdmin(t) 20 21 client, err := clients.NewIdentityV3Client() 22 th.AssertNoErr(t, err) 23 24 model, err := limits.GetEnforcementModel(context.TODO(), client).Extract() 25 th.AssertNoErr(t, err) 26 27 tools.PrintResource(t, model) 28 } 29 30 func TestLimitsList(t *testing.T) { 31 clients.RequireAdmin(t) 32 33 client, err := clients.NewIdentityV3Client() 34 th.AssertNoErr(t, err) 35 36 listOpts := limits.ListOpts{} 37 38 allPages, err := limits.List(client, listOpts).AllPages(context.TODO()) 39 th.AssertNoErr(t, err) 40 41 _, err = limits.ExtractLimits(allPages) 42 th.AssertNoErr(t, err) 43 } 44 45 func TestLimitsCRUD(t *testing.T) { 46 err := os.Setenv("OS_SYSTEM_SCOPE", "all") 47 th.AssertNoErr(t, err) 48 defer os.Unsetenv("OS_SYSTEM_SCOPE") 49 50 clients.RequireAdmin(t) 51 52 client, err := clients.NewIdentityV3Client() 53 th.AssertNoErr(t, err) 54 55 project, err := CreateProject(t, client, nil) 56 th.AssertNoErr(t, err) 57 58 // Get the service to register the limit against. 59 allPages, err := services.List(client, nil).AllPages(context.TODO()) 60 th.AssertNoErr(t, err) 61 62 svList, err := services.ExtractServices(allPages) 63 th.AssertNoErr(t, err) 64 serviceID := "" 65 for _, service := range svList { 66 serviceID = service.ID 67 break 68 } 69 th.AssertIntGreaterOrEqual(t, len(serviceID), 1) 70 71 // Create global registered limit 72 description := tools.RandomString("GLOBALLIMIT-DESC-", 8) 73 defaultLimit := tools.RandomInt(1, 100) 74 globalResourceName := tools.RandomString("GLOBALLIMIT-", 8) 75 76 createRegisteredLimitsOpts := registeredlimits.BatchCreateOpts{ 77 registeredlimits.CreateOpts{ 78 ServiceID: serviceID, 79 ResourceName: globalResourceName, 80 DefaultLimit: defaultLimit, 81 Description: description, 82 RegionID: "RegionOne", 83 }, 84 } 85 86 createdRegisteredLimits, err := registeredlimits.BatchCreate(context.TODO(), client, createRegisteredLimitsOpts).Extract() 87 th.AssertNoErr(t, err) 88 tools.PrintResource(t, createdRegisteredLimits[0]) 89 th.AssertIntGreaterOrEqual(t, 1, len(createdRegisteredLimits)) 90 91 // Override global limit in specific project 92 limitDescription := tools.RandomString("TESTLIMITS-DESC-", 8) 93 resourceLimit := tools.RandomInt(1, 1000) 94 95 createOpts := limits.BatchCreateOpts{ 96 limits.CreateOpts{ 97 ServiceID: serviceID, 98 ProjectID: project.ID, 99 ResourceName: globalResourceName, 100 ResourceLimit: resourceLimit, 101 Description: limitDescription, 102 RegionID: "RegionOne", 103 }, 104 } 105 106 createdLimits, err := limits.BatchCreate(context.TODO(), client, createOpts).Extract() 107 th.AssertNoErr(t, err) 108 th.AssertIntGreaterOrEqual(t, 1, len(createdLimits)) 109 th.AssertEquals(t, limitDescription, createdLimits[0].Description) 110 th.AssertEquals(t, resourceLimit, createdLimits[0].ResourceLimit) 111 th.AssertEquals(t, globalResourceName, createdLimits[0].ResourceName) 112 th.AssertEquals(t, serviceID, createdLimits[0].ServiceID) 113 th.AssertEquals(t, project.ID, createdLimits[0].ProjectID) 114 115 limitID := createdLimits[0].ID 116 117 limit, err := limits.Get(context.TODO(), client, limitID).Extract() 118 th.AssertNoErr(t, err) 119 th.AssertDeepEquals(t, createdLimits[0], *limit) 120 121 newLimitDescription := tools.RandomString("TESTLIMITS-DESC-CHNGD-", 8) 122 newResourceLimit := tools.RandomInt(1, 100) 123 updateOpts := limits.UpdateOpts{ 124 Description: &newLimitDescription, 125 ResourceLimit: &newResourceLimit, 126 } 127 128 updatedLimit, err := limits.Update(context.TODO(), client, limitID, updateOpts).Extract() 129 th.AssertNoErr(t, err) 130 th.AssertEquals(t, newLimitDescription, updatedLimit.Description) 131 th.AssertEquals(t, newResourceLimit, updatedLimit.ResourceLimit) 132 133 // Verify Deleting registered limit fails as it has project specific limit associated with it 134 del_err := registeredlimits.Delete(context.TODO(), client, createdRegisteredLimits[0].ID).ExtractErr() 135 th.AssertErr(t, del_err) 136 137 // Delete project specific limit 138 err = limits.Delete(context.TODO(), client, limitID).ExtractErr() 139 th.AssertNoErr(t, err) 140 141 _, err = limits.Get(context.TODO(), client, limitID).Extract() 142 th.AssertErr(t, err) 143 144 // Delete registered limit 145 err = registeredlimits.Delete(context.TODO(), client, createdRegisteredLimits[0].ID).ExtractErr() 146 th.AssertNoErr(t, err) 147 }