github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/compute/v2/flavors_test.go (about)

     1  //go:build acceptance || compute || flavors
     2  
     3  package v2
     4  
     5  import (
     6  	"context"
     7  	"testing"
     8  
     9  	"github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients"
    10  	identity "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/openstack/identity/v3"
    11  	"github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools"
    12  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/compute/v2/flavors"
    13  	th "github.com/vnpaycloud-console/gophercloud/v2/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(context.TODO())
    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, true, found)
    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(context.TODO())
    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(context.TODO(), client, choices.FlavorID).Extract()
    73  	th.AssertNoErr(t, err)
    74  
    75  	tools.PrintResource(t, flavor)
    76  
    77  	th.AssertEquals(t, choices.FlavorID, flavor.ID)
    78  }
    79  
    80  func TestFlavorExtraSpecsGet(t *testing.T) {
    81  	clients.RequireAdmin(t)
    82  
    83  	client, err := clients.NewComputeV2Client()
    84  	th.AssertNoErr(t, err)
    85  
    86  	// Microversion 2.61 is required to add extra_specs to flavor
    87  	client.Microversion = "2.61"
    88  
    89  	flavor, err := CreatePrivateFlavor(t, client)
    90  	th.AssertNoErr(t, err)
    91  	defer DeleteFlavor(t, client, flavor)
    92  
    93  	createOpts := flavors.ExtraSpecsOpts{
    94  		"hw:cpu_policy":        "CPU-POLICY",
    95  		"hw:cpu_thread_policy": "CPU-THREAD-POLICY",
    96  	}
    97  	createdExtraSpecs, err := flavors.CreateExtraSpecs(context.TODO(), client, flavor.ID, createOpts).Extract()
    98  	th.AssertNoErr(t, err)
    99  
   100  	tools.PrintResource(t, createdExtraSpecs)
   101  
   102  	flavor, err = flavors.Get(context.TODO(), client, flavor.ID).Extract()
   103  	th.AssertNoErr(t, err)
   104  
   105  	tools.PrintResource(t, flavor)
   106  	th.AssertEquals(t, 2, len(flavor.ExtraSpecs))
   107  	th.AssertEquals(t, "CPU-POLICY", flavor.ExtraSpecs["hw:cpu_policy"])
   108  	th.AssertEquals(t, "CPU-THREAD-POLICY", flavor.ExtraSpecs["hw:cpu_thread_policy"])
   109  }
   110  
   111  func TestFlavorsCreateDelete(t *testing.T) {
   112  	clients.RequireAdmin(t)
   113  
   114  	client, err := clients.NewComputeV2Client()
   115  	th.AssertNoErr(t, err)
   116  
   117  	flavor, err := CreateFlavor(t, client)
   118  	th.AssertNoErr(t, err)
   119  	defer DeleteFlavor(t, client, flavor)
   120  
   121  	tools.PrintResource(t, flavor)
   122  }
   123  
   124  func TestFlavorsCreateUpdateDelete(t *testing.T) {
   125  	clients.RequireAdmin(t)
   126  
   127  	client, err := clients.NewComputeV2Client()
   128  	th.AssertNoErr(t, err)
   129  
   130  	flavor, err := CreateFlavor(t, client)
   131  	th.AssertNoErr(t, err)
   132  	defer DeleteFlavor(t, client, flavor)
   133  
   134  	tools.PrintResource(t, flavor)
   135  
   136  	newFlavorDescription := "This is the new description"
   137  	updateOpts := flavors.UpdateOpts{
   138  		Description: newFlavorDescription,
   139  	}
   140  
   141  	flavor, err = flavors.Update(context.TODO(), client, flavor.ID, updateOpts).Extract()
   142  	th.AssertNoErr(t, err)
   143  	th.AssertEquals(t, newFlavorDescription, flavor.Description)
   144  
   145  	tools.PrintResource(t, flavor)
   146  }
   147  
   148  func TestFlavorsAccessesList(t *testing.T) {
   149  	clients.RequireAdmin(t)
   150  
   151  	client, err := clients.NewComputeV2Client()
   152  	th.AssertNoErr(t, err)
   153  
   154  	flavor, err := CreatePrivateFlavor(t, client)
   155  	th.AssertNoErr(t, err)
   156  	defer DeleteFlavor(t, client, flavor)
   157  
   158  	allPages, err := flavors.ListAccesses(client, flavor.ID).AllPages(context.TODO())
   159  	th.AssertNoErr(t, err)
   160  
   161  	allAccesses, err := flavors.ExtractAccesses(allPages)
   162  	th.AssertNoErr(t, err)
   163  
   164  	th.AssertEquals(t, 0, len(allAccesses))
   165  }
   166  
   167  func TestFlavorsAccessCRUD(t *testing.T) {
   168  	clients.RequireAdmin(t)
   169  
   170  	client, err := clients.NewComputeV2Client()
   171  	th.AssertNoErr(t, err)
   172  
   173  	identityClient, err := clients.NewIdentityV3Client()
   174  	th.AssertNoErr(t, err)
   175  
   176  	project, err := identity.CreateProject(t, identityClient, nil)
   177  	th.AssertNoErr(t, err)
   178  	defer identity.DeleteProject(t, identityClient, project.ID)
   179  
   180  	flavor, err := CreatePrivateFlavor(t, client)
   181  	th.AssertNoErr(t, err)
   182  	defer DeleteFlavor(t, client, flavor)
   183  
   184  	addAccessOpts := flavors.AddAccessOpts{
   185  		Tenant: project.ID,
   186  	}
   187  
   188  	accessList, err := flavors.AddAccess(context.TODO(), client, flavor.ID, addAccessOpts).Extract()
   189  	th.AssertNoErr(t, err)
   190  
   191  	th.AssertEquals(t, 1, len(accessList))
   192  	th.AssertEquals(t, project.ID, accessList[0].TenantID)
   193  	th.AssertEquals(t, flavor.ID, accessList[0].FlavorID)
   194  
   195  	for _, access := range accessList {
   196  		tools.PrintResource(t, access)
   197  	}
   198  
   199  	removeAccessOpts := flavors.RemoveAccessOpts{
   200  		Tenant: project.ID,
   201  	}
   202  
   203  	accessList, err = flavors.RemoveAccess(context.TODO(), client, flavor.ID, removeAccessOpts).Extract()
   204  	th.AssertNoErr(t, err)
   205  
   206  	th.AssertEquals(t, 0, len(accessList))
   207  }
   208  
   209  func TestFlavorsExtraSpecsCRUD(t *testing.T) {
   210  	clients.RequireAdmin(t)
   211  
   212  	client, err := clients.NewComputeV2Client()
   213  	th.AssertNoErr(t, err)
   214  
   215  	flavor, err := CreatePrivateFlavor(t, client)
   216  	th.AssertNoErr(t, err)
   217  	defer DeleteFlavor(t, client, flavor)
   218  
   219  	createOpts := flavors.ExtraSpecsOpts{
   220  		"hw:cpu_policy":        "CPU-POLICY",
   221  		"hw:cpu_thread_policy": "CPU-THREAD-POLICY",
   222  	}
   223  	createdExtraSpecs, err := flavors.CreateExtraSpecs(context.TODO(), client, flavor.ID, createOpts).Extract()
   224  	th.AssertNoErr(t, err)
   225  
   226  	tools.PrintResource(t, createdExtraSpecs)
   227  
   228  	th.AssertEquals(t, 2, len(createdExtraSpecs))
   229  	th.AssertEquals(t, "CPU-POLICY", createdExtraSpecs["hw:cpu_policy"])
   230  	th.AssertEquals(t, "CPU-THREAD-POLICY", createdExtraSpecs["hw:cpu_thread_policy"])
   231  
   232  	err = flavors.DeleteExtraSpec(context.TODO(), client, flavor.ID, "hw:cpu_policy").ExtractErr()
   233  	th.AssertNoErr(t, err)
   234  
   235  	updateOpts := flavors.ExtraSpecsOpts{
   236  		"hw:cpu_thread_policy": "CPU-THREAD-POLICY-BETTER",
   237  	}
   238  	updatedExtraSpec, err := flavors.UpdateExtraSpec(context.TODO(), client, flavor.ID, updateOpts).Extract()
   239  	th.AssertNoErr(t, err)
   240  
   241  	tools.PrintResource(t, updatedExtraSpec)
   242  
   243  	allExtraSpecs, err := flavors.ListExtraSpecs(context.TODO(), client, flavor.ID).Extract()
   244  	th.AssertNoErr(t, err)
   245  
   246  	tools.PrintResource(t, allExtraSpecs)
   247  
   248  	th.AssertEquals(t, 1, len(allExtraSpecs))
   249  	th.AssertEquals(t, "CPU-THREAD-POLICY-BETTER", allExtraSpecs["hw:cpu_thread_policy"])
   250  
   251  	spec, err := flavors.GetExtraSpec(context.TODO(), client, flavor.ID, "hw:cpu_thread_policy").Extract()
   252  	th.AssertNoErr(t, err)
   253  
   254  	tools.PrintResource(t, spec)
   255  
   256  	th.AssertEquals(t, "CPU-THREAD-POLICY-BETTER", spec["hw:cpu_thread_policy"])
   257  }