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  }