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 }