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  }