github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/compute/v2/quotaset_test.go (about)

     1  //go:build acceptance || compute || quotasets
     2  // +build acceptance compute quotasets
     3  
     4  package v2
     5  
     6  import (
     7  	"fmt"
     8  	"os"
     9  	"testing"
    10  
    11  	"github.com/gophercloud/gophercloud"
    12  	"github.com/gophercloud/gophercloud/internal/acceptance/clients"
    13  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
    14  	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/quotasets"
    15  	"github.com/gophercloud/gophercloud/openstack/identity/v3/projects"
    16  	th "github.com/gophercloud/gophercloud/testhelper"
    17  )
    18  
    19  func TestQuotasetGet(t *testing.T) {
    20  	client, err := clients.NewComputeV2Client()
    21  	th.AssertNoErr(t, err)
    22  
    23  	identityClient, err := clients.NewIdentityV3Client()
    24  	th.AssertNoErr(t, err)
    25  
    26  	projectID, err := getProjectID(t, identityClient)
    27  	th.AssertNoErr(t, err)
    28  
    29  	quotaSet, err := quotasets.Get(client, projectID).Extract()
    30  	th.AssertNoErr(t, err)
    31  
    32  	tools.PrintResource(t, quotaSet)
    33  
    34  	th.AssertEquals(t, quotaSet.FixedIPs, -1)
    35  }
    36  
    37  func getProjectID(t *testing.T, client *gophercloud.ServiceClient) (string, error) {
    38  	allPages, err := projects.ListAvailable(client).AllPages()
    39  	th.AssertNoErr(t, err)
    40  
    41  	allProjects, err := projects.ExtractProjects(allPages)
    42  	th.AssertNoErr(t, err)
    43  
    44  	for _, project := range allProjects {
    45  		return project.ID, nil
    46  	}
    47  
    48  	return "", fmt.Errorf("Unable to get project ID")
    49  }
    50  
    51  func getProjectIDByName(t *testing.T, client *gophercloud.ServiceClient, name string) (string, error) {
    52  	allPages, err := projects.List(client, nil).AllPages()
    53  	th.AssertNoErr(t, err)
    54  
    55  	allProjects, err := projects.ExtractProjects(allPages)
    56  	th.AssertNoErr(t, err)
    57  
    58  	for _, project := range allProjects {
    59  		if project.Name == name {
    60  			return project.ID, nil
    61  		}
    62  	}
    63  
    64  	return "", fmt.Errorf("Unable to get project ID")
    65  }
    66  
    67  // What will be sent as desired Quotas to the Server
    68  var UpdateQuotaOpts = quotasets.UpdateOpts{
    69  	FixedIPs:                 gophercloud.IntToPointer(10),
    70  	FloatingIPs:              gophercloud.IntToPointer(10),
    71  	InjectedFileContentBytes: gophercloud.IntToPointer(10240),
    72  	InjectedFilePathBytes:    gophercloud.IntToPointer(255),
    73  	InjectedFiles:            gophercloud.IntToPointer(5),
    74  	KeyPairs:                 gophercloud.IntToPointer(10),
    75  	MetadataItems:            gophercloud.IntToPointer(128),
    76  	RAM:                      gophercloud.IntToPointer(20000),
    77  	SecurityGroupRules:       gophercloud.IntToPointer(20),
    78  	SecurityGroups:           gophercloud.IntToPointer(10),
    79  	Cores:                    gophercloud.IntToPointer(10),
    80  	Instances:                gophercloud.IntToPointer(4),
    81  	ServerGroups:             gophercloud.IntToPointer(2),
    82  	ServerGroupMembers:       gophercloud.IntToPointer(3),
    83  }
    84  
    85  // What the Server hopefully returns as the new Quotas
    86  var UpdatedQuotas = quotasets.QuotaSet{
    87  	FixedIPs:                 10,
    88  	FloatingIPs:              10,
    89  	InjectedFileContentBytes: 10240,
    90  	InjectedFilePathBytes:    255,
    91  	InjectedFiles:            5,
    92  	KeyPairs:                 10,
    93  	MetadataItems:            128,
    94  	RAM:                      20000,
    95  	SecurityGroupRules:       20,
    96  	SecurityGroups:           10,
    97  	Cores:                    10,
    98  	Instances:                4,
    99  	ServerGroups:             2,
   100  	ServerGroupMembers:       3,
   101  }
   102  
   103  func TestQuotasetUpdateDelete(t *testing.T) {
   104  	clients.RequireAdmin(t)
   105  
   106  	client, err := clients.NewComputeV2Client()
   107  	th.AssertNoErr(t, err)
   108  
   109  	idclient, err := clients.NewIdentityV3Client()
   110  	th.AssertNoErr(t, err)
   111  
   112  	projectid, err := getProjectIDByName(t, idclient, os.Getenv("OS_PROJECT_NAME"))
   113  	th.AssertNoErr(t, err)
   114  
   115  	// save original quotas
   116  	orig, err := quotasets.Get(client, projectid).Extract()
   117  	th.AssertNoErr(t, err)
   118  
   119  	// Test Update
   120  	res, err := quotasets.Update(client, projectid, UpdateQuotaOpts).Extract()
   121  	th.AssertNoErr(t, err)
   122  	th.AssertEquals(t, UpdatedQuotas, *res)
   123  
   124  	// Test Delete
   125  	_, err = quotasets.Delete(client, projectid).Extract()
   126  	th.AssertNoErr(t, err)
   127  
   128  	// We dont know the default quotas, so just check if the quotas are not the same as before
   129  	newres, err := quotasets.Get(client, projectid).Extract()
   130  	th.AssertNoErr(t, err)
   131  	if newres.RAM == res.RAM {
   132  		t.Fatalf("Failed to update quotas")
   133  	}
   134  
   135  	restore := quotasets.UpdateOpts{}
   136  	FillUpdateOptsFromQuotaSet(*orig, &restore)
   137  
   138  	// restore original quotas
   139  	res, err = quotasets.Update(client, projectid, restore).Extract()
   140  	th.AssertNoErr(t, err)
   141  
   142  	orig.ID = ""
   143  	th.AssertDeepEquals(t, orig, res)
   144  }