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