github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/blockstorage/v3/qos_test.go (about)

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