@@ -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
4445func 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