github.com/gophercloud/gophercloud@v1.11.0/internal/acceptance/openstack/blockstorage/v2/volumes_test.go (about) 1 //go:build acceptance || blockstorage 2 // +build acceptance blockstorage 3 4 package v2 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/extensions/volumeactions" 12 "github.com/gophercloud/gophercloud/openstack/blockstorage/v2/snapshots" 13 "github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes" 14 th "github.com/gophercloud/gophercloud/testhelper" 15 ) 16 17 func TestVolumesCreateDestroy(t *testing.T) { 18 clients.SkipReleasesAbove(t, "stable/ocata") 19 clients.RequireLong(t) 20 21 client, err := clients.NewBlockStorageV2Client() 22 th.AssertNoErr(t, err) 23 24 volume, err := CreateVolume(t, client) 25 th.AssertNoErr(t, err) 26 defer DeleteVolume(t, client, volume) 27 28 newVolume, err := volumes.Get(client, volume.ID).Extract() 29 th.AssertNoErr(t, err) 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, volume.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 allPages, err := volumes.List(client, volumes.ListOpts{}).AllPages() 46 th.AssertNoErr(t, err) 47 48 allVolumes, err := volumes.ExtractVolumes(allPages) 49 th.AssertNoErr(t, err) 50 51 var found bool 52 for _, v := range allVolumes { 53 tools.PrintResource(t, volume) 54 if v.ID == newVolume.ID { 55 found = true 56 } 57 } 58 59 th.AssertEquals(t, found, true) 60 } 61 62 func TestVolumesCreateForceDestroy(t *testing.T) { 63 clients.SkipReleasesAbove(t, "stable/ocata") 64 clients.RequireLong(t) 65 66 client, err := clients.NewBlockStorageV2Client() 67 th.AssertNoErr(t, err) 68 69 volume, err := CreateVolume(t, client) 70 th.AssertNoErr(t, err) 71 72 newVolume, err := volumes.Get(client, volume.ID).Extract() 73 th.AssertNoErr(t, err) 74 75 tools.PrintResource(t, newVolume) 76 77 err = volumeactions.ForceDelete(client, newVolume.ID).ExtractErr() 78 th.AssertNoErr(t, err) 79 } 80 81 func TestVolumesCascadeDelete(t *testing.T) { 82 clients.SkipReleasesAbove(t, "stable/ocata") 83 clients.RequireLong(t) 84 85 client, err := clients.NewBlockStorageV2Client() 86 th.AssertNoErr(t, err) 87 88 vol, err := CreateVolume(t, client) 89 th.AssertNoErr(t, err) 90 91 err = volumes.WaitForStatus(client, vol.ID, "available", 60) 92 th.AssertNoErr(t, err) 93 94 snapshot1, err := CreateSnapshot(t, client, vol) 95 th.AssertNoErr(t, err) 96 97 snapshot2, err := CreateSnapshot(t, client, vol) 98 th.AssertNoErr(t, err) 99 100 t.Logf("Attempting to delete volume: %s", vol.ID) 101 102 deleteOpts := volumes.DeleteOpts{Cascade: true} 103 err = volumes.Delete(client, vol.ID, deleteOpts).ExtractErr() 104 if err != nil { 105 t.Fatalf("Unable to delete volume %s: %v", vol.ID, err) 106 } 107 108 for _, sid := range []string{snapshot1.ID, snapshot2.ID} { 109 err := tools.WaitFor(func() (bool, error) { 110 _, err := snapshots.Get(client, sid).Extract() 111 if err != nil { 112 return true, nil 113 } 114 return false, nil 115 }) 116 th.AssertNoErr(t, err) 117 t.Logf("Successfully deleted snapshot: %s", sid) 118 } 119 120 err = tools.WaitFor(func() (bool, error) { 121 _, err := volumes.Get(client, vol.ID).Extract() 122 if err != nil { 123 return true, nil 124 } 125 return false, nil 126 }) 127 th.AssertNoErr(t, err) 128 129 t.Logf("Successfully deleted volume: %s", vol.ID) 130 131 }