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 }