Skip to content

Commit 0bda0ef

Browse files
committed
Limits: Fix ToDo to create registered limit and use it
Since we have API to create a registered limit, we can use it in the acceptance test to create and then override the same in project. Also simplified fetching service logic since we didn't be depending on glance service anymore.
1 parent 7097b89 commit 0bda0ef

1 file changed

Lines changed: 39 additions & 16 deletions

File tree

acceptance/openstack/identity/v3/limits_test.go

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/gophercloud/gophercloud/acceptance/clients"
1111
"github.com/gophercloud/gophercloud/acceptance/tools"
1212
"github.com/gophercloud/gophercloud/openstack/identity/v3/limits"
13+
"github.com/gophercloud/gophercloud/openstack/identity/v3/registeredlimits"
1314
"github.com/gophercloud/gophercloud/openstack/identity/v3/services"
1415
th "github.com/gophercloud/gophercloud/testhelper"
1516
)
@@ -42,19 +43,10 @@ func TestLimitsList(t *testing.T) {
4243
}
4344

4445
func TestLimitsCRUD(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-
5046
err := os.Setenv("OS_SYSTEM_SCOPE", "all")
5147
th.AssertNoErr(t, err)
5248
defer os.Unsetenv("OS_SYSTEM_SCOPE")
5349

54-
limitDescription := tools.RandomString("TESTLIMITS-DESC-", 8)
55-
resourceLimit := tools.RandomInt(1, 100)
56-
resourceName := "image_size_total"
57-
5850
clients.RequireAdmin(t)
5951

6052
client, err := clients.NewIdentityV3Client()
@@ -63,25 +55,47 @@ func TestLimitsCRUD(t *testing.T) {
6355
project, err := CreateProject(t, client, nil)
6456
th.AssertNoErr(t, err)
6557

66-
// Find image service (glance on Devstack) which has precreated registered limits.
58+
// Get the service to register the limit against.
6759
allPages, err := services.List(client, nil).AllPages()
6860
th.AssertNoErr(t, err)
6961

7062
svList, err := services.ExtractServices(allPages)
7163
serviceID := ""
7264
for _, service := range svList {
73-
if service.Type == "image" {
74-
serviceID = service.ID
75-
break
76-
}
65+
serviceID = service.ID
66+
break
7767
}
7868
th.AssertIntGreaterOrEqual(t, len(serviceID), 1)
7969

70+
// Create global registered limit
71+
description := tools.RandomString("GLOBALLIMIT-DESC-", 8)
72+
defaultLimit := tools.RandomInt(1, 100)
73+
globalResourceName := tools.RandomString("GLOBALLIMIT-", 8)
74+
75+
createRegisteredLimitsOpts := registeredlimits.BatchCreateOpts{
76+
registeredlimits.CreateOpts{
77+
ServiceID: serviceID,
78+
ResourceName: globalResourceName,
79+
DefaultLimit: defaultLimit,
80+
Description: description,
81+
RegionID: "RegionOne",
82+
},
83+
}
84+
85+
createdRegisteredLimits, err := registeredlimits.BatchCreate(client, createRegisteredLimitsOpts).Extract()
86+
th.AssertNoErr(t, err)
87+
tools.PrintResource(t, createdRegisteredLimits[0])
88+
th.AssertIntGreaterOrEqual(t, 1, len(createdRegisteredLimits))
89+
90+
// Override global limit in specific project
91+
limitDescription := tools.RandomString("TESTLIMITS-DESC-", 8)
92+
resourceLimit := tools.RandomInt(1, 1000)
93+
8094
createOpts := limits.BatchCreateOpts{
8195
limits.CreateOpts{
8296
ServiceID: serviceID,
8397
ProjectID: project.ID,
84-
ResourceName: resourceName,
98+
ResourceName: globalResourceName,
8599
ResourceLimit: resourceLimit,
86100
Description: limitDescription,
87101
RegionID: "RegionOne",
@@ -93,7 +107,7 @@ func TestLimitsCRUD(t *testing.T) {
93107
th.AssertIntGreaterOrEqual(t, 1, len(createdLimits))
94108
th.AssertEquals(t, limitDescription, createdLimits[0].Description)
95109
th.AssertEquals(t, resourceLimit, createdLimits[0].ResourceLimit)
96-
th.AssertEquals(t, resourceName, createdLimits[0].ResourceName)
110+
th.AssertEquals(t, globalResourceName, createdLimits[0].ResourceName)
97111
th.AssertEquals(t, serviceID, createdLimits[0].ServiceID)
98112
th.AssertEquals(t, project.ID, createdLimits[0].ProjectID)
99113

@@ -115,9 +129,18 @@ func TestLimitsCRUD(t *testing.T) {
115129
th.AssertEquals(t, newLimitDescription, updatedLimit.Description)
116130
th.AssertEquals(t, newResourceLimit, updatedLimit.ResourceLimit)
117131

132+
// Verify Deleting registered limit fails as it has project specific limit associated with it
133+
del_err := registeredlimits.Delete(client, createdRegisteredLimits[0].ID).ExtractErr()
134+
th.AssertErr(t, del_err)
135+
136+
// Delete project specific limit
118137
err = limits.Delete(client, limitID).ExtractErr()
119138
th.AssertNoErr(t, err)
120139

121140
_, err = limits.Get(client, limitID).Extract()
122141
th.AssertErr(t, err)
142+
143+
// Delete registered limit
144+
err = registeredlimits.Delete(client, createdRegisteredLimits[0].ID).ExtractErr()
145+
th.AssertNoErr(t, err)
123146
}

0 commit comments

Comments
 (0)