github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/blockstorage/v3/qos_test.go (about)

     1  //go:build acceptance || blockstorage || qos
     2  
     3  package v3
     4  
     5  import (
     6  	"context"
     7  	"testing"
     8  
     9  	"github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients"
    10  	"github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools"
    11  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/blockstorage/v3/qos"
    12  	"github.com/vnpaycloud-console/gophercloud/v2/pagination"
    13  	th "github.com/vnpaycloud-console/gophercloud/v2/testhelper"
    14  )
    15  
    16  func TestQoS(t *testing.T) {
    17  	clients.RequireAdmin(t)
    18  
    19  	client, err := clients.NewBlockStorageV3Client()
    20  	th.AssertNoErr(t, err)
    21  
    22  	qos1, err := CreateQoS(t, client)
    23  	th.AssertNoErr(t, err)
    24  	defer DeleteQoS(t, client, qos1)
    25  
    26  	qos2, err := CreateQoS(t, client)
    27  	th.AssertNoErr(t, err)
    28  	defer DeleteQoS(t, client, qos2)
    29  
    30  	getQoS2, err := qos.Get(context.TODO(), client, qos2.ID).Extract()
    31  	th.AssertNoErr(t, err)
    32  	th.AssertDeepEquals(t, qos2, getQoS2)
    33  
    34  	err = qos.DeleteKeys(context.TODO(), client, qos2.ID, qos.DeleteKeysOpts{"read_iops_sec"}).ExtractErr()
    35  	th.AssertNoErr(t, err)
    36  
    37  	updateOpts := qos.UpdateOpts{
    38  		Consumer: qos.ConsumerBack,
    39  		Specs: map[string]string{
    40  			"read_iops_sec":  "40000",
    41  			"write_iops_sec": "40000",
    42  		},
    43  	}
    44  
    45  	expectedQosSpecs := map[string]string{
    46  		"consumer":       "back-end",
    47  		"read_iops_sec":  "40000",
    48  		"write_iops_sec": "40000",
    49  	}
    50  
    51  	updatedQosSpecs, err := qos.Update(context.TODO(), client, qos2.ID, updateOpts).Extract()
    52  	th.AssertNoErr(t, err)
    53  	th.AssertDeepEquals(t, updatedQosSpecs, expectedQosSpecs)
    54  
    55  	listOpts := qos.ListOpts{
    56  		Limit: 1,
    57  	}
    58  
    59  	err = qos.List(client, listOpts).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
    60  		actual, err := qos.ExtractQoS(page)
    61  		th.AssertNoErr(t, err)
    62  		th.AssertEquals(t, 1, len(actual))
    63  
    64  		var found bool
    65  		for _, q := range actual {
    66  			if q.ID == qos1.ID || q.ID == qos2.ID {
    67  				found = true
    68  			}
    69  		}
    70  
    71  		th.AssertEquals(t, found, true)
    72  
    73  		return true, nil
    74  	})
    75  
    76  	th.AssertNoErr(t, err)
    77  
    78  }
    79  
    80  func TestQoSAssociations(t *testing.T) {
    81  	clients.RequireAdmin(t)
    82  
    83  	client, err := clients.NewBlockStorageV3Client()
    84  	th.AssertNoErr(t, err)
    85  
    86  	qos1, err := CreateQoS(t, client)
    87  	th.AssertNoErr(t, err)
    88  	defer DeleteQoS(t, client, qos1)
    89  
    90  	vt, err := CreateVolumeType(t, client)
    91  	th.AssertNoErr(t, err)
    92  	defer DeleteVolumeType(t, client, vt)
    93  
    94  	associateOpts := qos.AssociateOpts{
    95  		VolumeTypeID: vt.ID,
    96  	}
    97  
    98  	err = qos.Associate(context.TODO(), client, qos1.ID, associateOpts).ExtractErr()
    99  	th.AssertNoErr(t, err)
   100  
   101  	allQosAssociations, err := qos.ListAssociations(client, qos1.ID).AllPages(context.TODO())
   102  	th.AssertNoErr(t, err)
   103  
   104  	allAssociations, err := qos.ExtractAssociations(allQosAssociations)
   105  	th.AssertNoErr(t, err)
   106  	tools.PrintResource(t, allAssociations)
   107  	th.AssertEquals(t, 1, len(allAssociations))
   108  	th.AssertEquals(t, vt.ID, allAssociations[0].ID)
   109  
   110  	disassociateOpts := qos.DisassociateOpts{
   111  		VolumeTypeID: vt.ID,
   112  	}
   113  
   114  	err = qos.Disassociate(context.TODO(), client, qos1.ID, disassociateOpts).ExtractErr()
   115  	th.AssertNoErr(t, err)
   116  
   117  	allQosAssociations, err = qos.ListAssociations(client, qos1.ID).AllPages(context.TODO())
   118  	th.AssertNoErr(t, err)
   119  
   120  	allAssociations, err = qos.ExtractAssociations(allQosAssociations)
   121  	th.AssertNoErr(t, err)
   122  	tools.PrintResource(t, allAssociations)
   123  	th.AssertEquals(t, 0, len(allAssociations))
   124  
   125  	err = qos.Associate(context.TODO(), client, qos1.ID, associateOpts).ExtractErr()
   126  	th.AssertNoErr(t, err)
   127  
   128  	err = qos.DisassociateAll(context.TODO(), client, qos1.ID).ExtractErr()
   129  	th.AssertNoErr(t, err)
   130  }