github.com/leeclow-ops/gophercloud@v1.2.1/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/leeclow-ops/gophercloud/acceptance/clients"
    10  	"github.com/leeclow-ops/gophercloud/acceptance/tools"
    11  	"github.com/leeclow-ops/gophercloud/openstack/blockstorage/v3/snapshots"
    12  	"github.com/leeclow-ops/gophercloud/openstack/blockstorage/v3/volumes"
    13  	"github.com/leeclow-ops/gophercloud/pagination"
    14  	th "github.com/leeclow-ops/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.RequireLong(t)
    71  
    72  	client, err := clients.NewBlockStorageV3Client()
    73  	th.AssertNoErr(t, err)
    74  
    75  	volumeName := tools.RandomString("ACPTTEST", 16)
    76  
    77  	volOpts := volumes.CreateOpts{
    78  		Size:        1,
    79  		Name:        volumeName,
    80  		Description: "Testing creation of multiattach enabled volume",
    81  		Multiattach: true,
    82  	}
    83  
    84  	vol, err := volumes.Create(client, volOpts).Extract()
    85  	th.AssertNoErr(t, err)
    86  
    87  	err = volumes.WaitForStatus(client, vol.ID, "available", 60)
    88  	th.AssertNoErr(t, err)
    89  
    90  	th.AssertEquals(t, vol.Multiattach, true)
    91  
    92  	err = volumes.Delete(client, vol.ID, volumes.DeleteOpts{}).ExtractErr()
    93  	th.AssertNoErr(t, err)
    94  }
    95  
    96  func TestVolumesCascadeDelete(t *testing.T) {
    97  	clients.RequireLong(t)
    98  
    99  	client, err := clients.NewBlockStorageV3Client()
   100  	th.AssertNoErr(t, err)
   101  
   102  	vol, err := CreateVolume(t, client)
   103  	th.AssertNoErr(t, err)
   104  
   105  	err = volumes.WaitForStatus(client, vol.ID, "available", 60)
   106  	th.AssertNoErr(t, err)
   107  
   108  	snapshot1, err := CreateSnapshot(t, client, vol)
   109  	th.AssertNoErr(t, err)
   110  
   111  	snapshot2, err := CreateSnapshot(t, client, vol)
   112  	th.AssertNoErr(t, err)
   113  
   114  	t.Logf("Attempting to delete volume: %s", vol.ID)
   115  
   116  	deleteOpts := volumes.DeleteOpts{Cascade: true}
   117  	err = volumes.Delete(client, vol.ID, deleteOpts).ExtractErr()
   118  	if err != nil {
   119  		t.Fatalf("Unable to delete volume %s: %v", vol.ID, err)
   120  	}
   121  
   122  	for _, sid := range []string{snapshot1.ID, snapshot2.ID} {
   123  		err := tools.WaitFor(func() (bool, error) {
   124  			_, err := snapshots.Get(client, sid).Extract()
   125  			if err != nil {
   126  				return true, nil
   127  			}
   128  			return false, nil
   129  		})
   130  		th.AssertNoErr(t, err)
   131  		t.Logf("Successfully deleted snapshot: %s", sid)
   132  	}
   133  
   134  	err = tools.WaitFor(func() (bool, error) {
   135  		_, err := volumes.Get(client, vol.ID).Extract()
   136  		if err != nil {
   137  			return true, nil
   138  		}
   139  		return false, nil
   140  	})
   141  	th.AssertNoErr(t, err)
   142  
   143  	t.Logf("Successfully deleted volume: %s", vol.ID)
   144  
   145  }