github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/blockstorage/v3/volumes_test.go (about) 1 //go:build acceptance || blockstorage 2 // +build acceptance blockstorage 3 4 package v3 5 6 import ( 7 "testing" 8 9 "github.com/gophercloud/gophercloud/internal/acceptance/clients" 10 "github.com/gophercloud/gophercloud/internal/acceptance/tools" 11 "github.com/gophercloud/gophercloud/openstack/blockstorage/v3/snapshots" 12 "github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes" 13 "github.com/gophercloud/gophercloud/pagination" 14 th "github.com/gophercloud/gophercloud/testhelper" 15 ) 16 17 func TestVolumes(t *testing.T) { 18 clients.RequireLong(t) 19 20 client, err := clients.NewBlockStorageV3Client() 21 th.AssertNoErr(t, err) 22 23 volume1, err := CreateVolume(t, client) 24 th.AssertNoErr(t, err) 25 defer DeleteVolume(t, client, volume1) 26 27 volume2, err := CreateVolume(t, client) 28 th.AssertNoErr(t, err) 29 defer DeleteVolume(t, client, volume2) 30 31 // Update volume 32 updatedVolumeName := "" 33 updatedVolumeDescription := "" 34 updateOpts := volumes.UpdateOpts{ 35 Name: &updatedVolumeName, 36 Description: &updatedVolumeDescription, 37 } 38 updatedVolume, err := volumes.Update(client, volume1.ID, updateOpts).Extract() 39 th.AssertNoErr(t, err) 40 41 tools.PrintResource(t, updatedVolume) 42 th.AssertEquals(t, updatedVolume.Name, updatedVolumeName) 43 th.AssertEquals(t, updatedVolume.Description, updatedVolumeDescription) 44 45 listOpts := volumes.ListOpts{ 46 Limit: 1, 47 } 48 49 err = volumes.List(client, listOpts).EachPage(func(page pagination.Page) (bool, error) { 50 actual, err := volumes.ExtractVolumes(page) 51 th.AssertNoErr(t, err) 52 th.AssertEquals(t, 1, len(actual)) 53 54 var found bool 55 for _, v := range actual { 56 if v.ID == volume1.ID || v.ID == volume2.ID { 57 found = true 58 } 59 } 60 61 th.AssertEquals(t, found, true) 62 63 return true, nil 64 }) 65 66 th.AssertNoErr(t, err) 67 } 68 69 func TestVolumesMultiAttach(t *testing.T) { 70 clients.RequireAdmin(t) 71 clients.RequireLong(t) 72 73 client, err := clients.NewBlockStorageV3Client() 74 th.AssertNoErr(t, err) 75 76 vt, err := CreateVolumeTypeMultiAttach(t, client) 77 th.AssertNoErr(t, err) 78 defer DeleteVolumeType(t, client, vt) 79 80 volumeName := tools.RandomString("ACPTTEST", 16) 81 82 volOpts := volumes.CreateOpts{ 83 Size: 1, 84 Name: volumeName, 85 Description: "Testing creation of multiattach enabled volume", 86 VolumeType: vt.ID, 87 } 88 89 vol, err := volumes.Create(client, volOpts).Extract() 90 th.AssertNoErr(t, err) 91 defer DeleteVolume(t, client, vol) 92 93 err = volumes.WaitForStatus(client, vol.ID, "available", 60) 94 th.AssertNoErr(t, err) 95 96 th.AssertEquals(t, vol.Multiattach, true) 97 } 98 99 func TestVolumesCascadeDelete(t *testing.T) { 100 clients.RequireLong(t) 101 102 client, err := clients.NewBlockStorageV3Client() 103 th.AssertNoErr(t, err) 104 105 vol, err := CreateVolume(t, client) 106 th.AssertNoErr(t, err) 107 108 err = volumes.WaitForStatus(client, vol.ID, "available", 60) 109 th.AssertNoErr(t, err) 110 111 snapshot1, err := CreateSnapshot(t, client, vol) 112 th.AssertNoErr(t, err) 113 114 snapshot2, err := CreateSnapshot(t, client, vol) 115 th.AssertNoErr(t, err) 116 117 t.Logf("Attempting to delete volume: %s", vol.ID) 118 119 deleteOpts := volumes.DeleteOpts{Cascade: true} 120 err = volumes.Delete(client, vol.ID, deleteOpts).ExtractErr() 121 if err != nil { 122 t.Fatalf("Unable to delete volume %s: %v", vol.ID, err) 123 } 124 125 for _, sid := range []string{snapshot1.ID, snapshot2.ID} { 126 err := tools.WaitFor(func() (bool, error) { 127 _, err := snapshots.Get(client, sid).Extract() 128 if err != nil { 129 return true, nil 130 } 131 return false, nil 132 }) 133 th.AssertNoErr(t, err) 134 t.Logf("Successfully deleted snapshot: %s", sid) 135 } 136 137 err = tools.WaitFor(func() (bool, error) { 138 _, err := volumes.Get(client, vol.ID).Extract() 139 if err != nil { 140 return true, nil 141 } 142 return false, nil 143 }) 144 th.AssertNoErr(t, err) 145 146 t.Logf("Successfully deleted volume: %s", vol.ID) 147 148 }