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

     1  //go:build acceptance || compute || flavors
     2  // +build acceptance compute flavors
     3  
     4  package v2
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/gophercloud/gophercloud/internal/acceptance/clients"
    10  	identity "github.com/gophercloud/gophercloud/internal/acceptance/openstack/identity/v3"
    11  	"github.com/gophercloud/gophercloud/internal/acceptance/tools"
    12  	"github.com/gophercloud/gophercloud/openstack/compute/v2/flavors"
    13  	th "github.com/gophercloud/gophercloud/testhelper"
    14  )
    15  
    16  func TestFlavorsList(t *testing.T) {
    17  	client, err := clients.NewComputeV2Client()
    18  	th.AssertNoErr(t, err)
    19  
    20  	choices, err := clients.AcceptanceTestChoicesFromEnv()
    21  	th.AssertNoErr(t, err)
    22  
    23  	allPages, err := flavors.ListDetail(client, nil).AllPages()
    24  	th.AssertNoErr(t, err)
    25  
    26  	allFlavors, err := flavors.ExtractFlavors(allPages)
    27  	th.AssertNoErr(t, err)
    28  
    29  	var found bool
    30  	for _, flavor := range allFlavors {
    31  		tools.PrintResource(t, flavor)
    32  
    33  		if flavor.ID == choices.FlavorID {
    34  			found = true
    35  		}
    36  	}
    37  
    38  	th.AssertEquals(t, found, true)
    39  }
    40  
    41  func TestFlavorsAccessTypeList(t *testing.T) {
    42  	client, err := clients.NewComputeV2Client()
    43  	th.AssertNoErr(t, err)
    44  
    45  	flavorAccessTypes := map[string]flavors.AccessType{
    46  		"public":  flavors.PublicAccess,
    47  		"private": flavors.PrivateAccess,
    48  		"all":     flavors.AllAccess,
    49  	}
    50  
    51  	for flavorTypeName, flavorAccessType := range flavorAccessTypes {
    52  		t.Logf("** %s flavors: **", flavorTypeName)
    53  		allPages, err := flavors.ListDetail(client, flavors.ListOpts{AccessType: flavorAccessType}).AllPages()
    54  		th.AssertNoErr(t, err)
    55  
    56  		allFlavors, err := flavors.ExtractFlavors(allPages)
    57  		th.AssertNoErr(t, err)
    58  
    59  		for _, flavor := range allFlavors {
    60  			tools.PrintResource(t, flavor)
    61  		}
    62  	}
    63  }
    64  
    65  func TestFlavorsGet(t *testing.T) {
    66  	client, err := clients.NewComputeV2Client()
    67  	th.AssertNoErr(t, err)
    68  
    69  	choices, err := clients.AcceptanceTestChoicesFromEnv()
    70  	th.AssertNoErr(t, err)
    71  
    72  	flavor, err := flavors.Get(client, choices.FlavorID).Extract()
    73  	th.AssertNoErr(t, err)
    74  
    75  	tools.PrintResource(t, flavor)
    76  
    77  	th.AssertEquals(t, flavor.ID, choices.FlavorID)
    78  }
    79  
    80  func TestFlavorsCreateDelete(t *testing.T) {
    81  	clients.RequireAdmin(t)
    82  
    83  	client, err := clients.NewComputeV2Client()
    84  	th.AssertNoErr(t, err)
    85  
    86  	flavor, err := CreateFlavor(t, client)
    87  	th.AssertNoErr(t, err)
    88  	defer DeleteFlavor(t, client, flavor)
    89  
    90  	tools.PrintResource(t, flavor)
    91  }
    92  
    93  func TestFlavorsCreateUpdateDelete(t *testing.T) {
    94  	clients.RequireAdmin(t)
    95  
    96  	client, err := clients.NewComputeV2Client()
    97  	th.AssertNoErr(t, err)
    98  
    99  	flavor, err := CreateFlavor(t, client)
   100  	th.AssertNoErr(t, err)
   101  	defer DeleteFlavor(t, client, flavor)
   102  
   103  	tools.PrintResource(t, flavor)
   104  
   105  	newFlavorDescription := "This is the new description"
   106  	updateOpts := flavors.UpdateOpts{
   107  		Description: newFlavorDescription,
   108  	}
   109  
   110  	flavor, err = flavors.Update(client, flavor.ID, updateOpts).Extract()
   111  	th.AssertNoErr(t, err)
   112  	th.AssertEquals(t, flavor.Description, newFlavorDescription)
   113  
   114  	tools.PrintResource(t, flavor)
   115  }
   116  
   117  func TestFlavorsAccessesList(t *testing.T) {
   118  	clients.RequireAdmin(t)
   119  
   120  	client, err := clients.NewComputeV2Client()
   121  	th.AssertNoErr(t, err)
   122  
   123  	flavor, err := CreatePrivateFlavor(t, client)
   124  	th.AssertNoErr(t, err)
   125  	defer DeleteFlavor(t, client, flavor)
   126  
   127  	allPages, err := flavors.ListAccesses(client, flavor.ID).AllPages()
   128  	th.AssertNoErr(t, err)
   129  
   130  	allAccesses, err := flavors.ExtractAccesses(allPages)
   131  	th.AssertNoErr(t, err)
   132  
   133  	th.AssertEquals(t, len(allAccesses), 0)
   134  }
   135  
   136  func TestFlavorsAccessCRUD(t *testing.T) {
   137  	clients.RequireAdmin(t)
   138  
   139  	client, err := clients.NewComputeV2Client()
   140  	th.AssertNoErr(t, err)
   141  
   142  	identityClient, err := clients.NewIdentityV3Client()
   143  	th.AssertNoErr(t, err)
   144  
   145  	project, err := identity.CreateProject(t, identityClient, nil)
   146  	th.AssertNoErr(t, err)
   147  	defer identity.DeleteProject(t, identityClient, project.ID)
   148  
   149  	flavor, err := CreatePrivateFlavor(t, client)
   150  	th.AssertNoErr(t, err)
   151  	defer DeleteFlavor(t, client, flavor)
   152  
   153  	addAccessOpts := flavors.AddAccessOpts{
   154  		Tenant: project.ID,
   155  	}
   156  
   157  	accessList, err := flavors.AddAccess(client, flavor.ID, addAccessOpts).Extract()
   158  	th.AssertNoErr(t, err)
   159  
   160  	th.AssertEquals(t, len(accessList), 1)
   161  	th.AssertEquals(t, accessList[0].TenantID, project.ID)
   162  	th.AssertEquals(t, accessList[0].FlavorID, flavor.ID)
   163  
   164  	for _, access := range accessList {
   165  		tools.PrintResource(t, access)
   166  	}
   167  
   168  	removeAccessOpts := flavors.RemoveAccessOpts{
   169  		Tenant: project.ID,
   170  	}
   171  
   172  	accessList, err = flavors.RemoveAccess(client, flavor.ID, removeAccessOpts).Extract()
   173  	th.AssertNoErr(t, err)
   174  
   175  	th.AssertEquals(t, len(accessList), 0)
   176  }
   177  
   178  func TestFlavorsExtraSpecsCRUD(t *testing.T) {
   179  	clients.RequireAdmin(t)
   180  
   181  	client, err := clients.NewComputeV2Client()
   182  	th.AssertNoErr(t, err)
   183  
   184  	flavor, err := CreatePrivateFlavor(t, client)
   185  	th.AssertNoErr(t, err)
   186  	defer DeleteFlavor(t, client, flavor)
   187  
   188  	createOpts := flavors.ExtraSpecsOpts{
   189  		"hw:cpu_policy":        "CPU-POLICY",
   190  		"hw:cpu_thread_policy": "CPU-THREAD-POLICY",
   191  	}
   192  	createdExtraSpecs, err := flavors.CreateExtraSpecs(client, flavor.ID, createOpts).Extract()
   193  	th.AssertNoErr(t, err)
   194  
   195  	tools.PrintResource(t, createdExtraSpecs)
   196  
   197  	th.AssertEquals(t, len(createdExtraSpecs), 2)
   198  	th.AssertEquals(t, createdExtraSpecs["hw:cpu_policy"], "CPU-POLICY")
   199  	th.AssertEquals(t, createdExtraSpecs["hw:cpu_thread_policy"], "CPU-THREAD-POLICY")
   200  
   201  	err = flavors.DeleteExtraSpec(client, flavor.ID, "hw:cpu_policy").ExtractErr()
   202  	th.AssertNoErr(t, err)
   203  
   204  	updateOpts := flavors.ExtraSpecsOpts{
   205  		"hw:cpu_thread_policy": "CPU-THREAD-POLICY-BETTER",
   206  	}
   207  	updatedExtraSpec, err := flavors.UpdateExtraSpec(client, flavor.ID, updateOpts).Extract()
   208  	th.AssertNoErr(t, err)
   209  
   210  	tools.PrintResource(t, updatedExtraSpec)
   211  
   212  	allExtraSpecs, err := flavors.ListExtraSpecs(client, flavor.ID).Extract()
   213  	th.AssertNoErr(t, err)
   214  
   215  	tools.PrintResource(t, allExtraSpecs)
   216  
   217  	th.AssertEquals(t, len(allExtraSpecs), 1)
   218  	th.AssertEquals(t, allExtraSpecs["hw:cpu_thread_policy"], "CPU-THREAD-POLICY-BETTER")
   219  
   220  	spec, err := flavors.GetExtraSpec(client, flavor.ID, "hw:cpu_thread_policy").Extract()
   221  	th.AssertNoErr(t, err)
   222  
   223  	tools.PrintResource(t, spec)
   224  
   225  	th.AssertEquals(t, spec["hw:cpu_thread_policy"], "CPU-THREAD-POLICY-BETTER")
   226  }