Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 8477643

Browse filesBrowse files
blockstorage: acceptance test for manage/unmanage volume
Added acceptance test for managing a existing volume and unmanaging a volume api calls. Signed-off-by: TOMOFUMI-KONDO <ugax2kontomo0314@gmail.com>
1 parent 7903a45 commit 8477643
Copy full SHA for 8477643

File tree

2 files changed

+128
-0
lines changed
Filter options

2 files changed

+128
-0
lines changed

‎internal/acceptance/openstack/blockstorage/v3/blockstorage.go

Copy file name to clipboardExpand all lines: internal/acceptance/openstack/blockstorage/v3/blockstorage.go
+71Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/gophercloud/gophercloud/v2"
1515
"github.com/gophercloud/gophercloud/v2/internal/acceptance/tools"
1616
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/backups"
17+
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/manageablevolumes"
1718
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/qos"
1819
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/snapshots"
1920
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/volumes"
@@ -779,3 +780,73 @@ func ReImage(t *testing.T, client *gophercloud.ServiceClient, volume *volumes.Vo
779780

780781
return nil
781782
}
783+
784+
func Unmanage(t *testing.T, client *gophercloud.ServiceClient, volume *volumes.Volume) error {
785+
t.Logf("Attempting to unmanage volume %s", volume.ID)
786+
787+
err := volumes.Unmanage(context.TODO(), client, volume.ID).ExtractErr()
788+
if err != nil {
789+
return err
790+
}
791+
792+
gophercloud.WaitFor(context.TODO(), func(ctx context.Context) (bool, error) {
793+
if _, err := volumes.Get(ctx, client, volume.ID).Extract(); err != nil {
794+
if _, ok := err.(gophercloud.ErrResourceNotFound); ok {
795+
return true, nil
796+
}
797+
return false, err
798+
}
799+
return false, nil
800+
})
801+
802+
t.Logf("Successfully unmanaged volume %s", volume.ID)
803+
804+
return nil
805+
}
806+
807+
func ManageExisting(t *testing.T, client *gophercloud.ServiceClient, volume *volumes.Volume) (*volumes.Volume, error) {
808+
t.Logf("Attempting to manage existing volume %s", volume.Name)
809+
810+
manageOpts := manageablevolumes.ManageExistingOpts{
811+
Host: volume.Host,
812+
Ref: map[string]string{
813+
"source-name": fmt.Sprintf("volume-%s", volume.ID),
814+
},
815+
Name: volume.Name,
816+
AvailabilityZone: volume.AvailabilityZone,
817+
Description: volume.Description,
818+
VolumeType: volume.VolumeType,
819+
Bootable: volume.Bootable == "true",
820+
Metadata: volume.Metadata,
821+
}
822+
823+
managed, err := manageablevolumes.ManageExisting(context.TODO(), client, manageOpts).Extract()
824+
if err != nil {
825+
return managed, err
826+
}
827+
828+
ctx, cancel := context.WithTimeout(context.TODO(), 60*time.Second)
829+
defer cancel()
830+
831+
if err := volumes.WaitForStatus(ctx, client, managed.ID, "available"); err != nil {
832+
return managed, err
833+
}
834+
835+
managed, err = volumes.Get(context.TODO(), client, managed.ID).Extract()
836+
if err != nil {
837+
return managed, err
838+
}
839+
840+
tools.PrintResource(t, managed)
841+
th.AssertEquals(t, managed.Host, volume.Host)
842+
th.AssertEquals(t, managed.Name, volume.Name)
843+
th.AssertEquals(t, managed.AvailabilityZone, volume.AvailabilityZone)
844+
th.AssertEquals(t, managed.Description, volume.Description)
845+
th.AssertEquals(t, managed.VolumeType, volume.VolumeType)
846+
th.AssertEquals(t, managed.Bootable, volume.Bootable)
847+
th.AssertDeepEquals(t, managed.Metadata, volume.Metadata)
848+
849+
t.Logf("Successfully managed existing volume %s", managed.ID)
850+
851+
return managed, nil
852+
}
+57Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
//go:build acceptance || blockstorage || volumes
2+
3+
package v3
4+
5+
import (
6+
"context"
7+
"testing"
8+
9+
"github.com/gophercloud/gophercloud/v2/internal/acceptance/clients"
10+
"github.com/gophercloud/gophercloud/v2/openstack/blockstorage/v3/volumes"
11+
th "github.com/gophercloud/gophercloud/v2/testhelper"
12+
)
13+
14+
func TestManageableVolumes(t *testing.T) {
15+
clients.RequireLong(t)
16+
17+
client, err := clients.NewBlockStorageV3Client()
18+
th.AssertNoErr(t, err)
19+
20+
client.Microversion = "3.8"
21+
22+
volume1, err := CreateVolume(t, client)
23+
th.AssertNoErr(t, err)
24+
25+
err = Unmanage(t, client, volume1)
26+
if err != nil {
27+
DeleteVolume(t, client, volume1)
28+
}
29+
th.AssertNoErr(t, err)
30+
31+
managed1, err := ManageExisting(t, client, volume1)
32+
th.AssertNoErr(t, err)
33+
defer DeleteVolume(t, client, managed1)
34+
35+
th.CheckEquals(t, volume1.Host, managed1.Host)
36+
th.AssertEquals(t, volume1.Name, managed1.Name)
37+
th.AssertEquals(t, volume1.AvailabilityZone, managed1.AvailabilityZone)
38+
th.AssertEquals(t, volume1.Description, managed1.Description)
39+
th.AssertEquals(t, volume1.VolumeType, managed1.VolumeType)
40+
th.AssertEquals(t, volume1.Bootable, managed1.Bootable)
41+
th.AssertDeepEquals(t, volume1.Metadata, managed1.Metadata)
42+
th.AssertEquals(t, volume1.Size, managed1.Size)
43+
44+
allPages, err := volumes.List(client, volumes.ListOpts{}).AllPages(context.TODO())
45+
th.AssertNoErr(t, err)
46+
allVolumes, err := volumes.ExtractVolumes(allPages)
47+
th.AssertNoErr(t, err)
48+
49+
var found bool
50+
for _, v := range allVolumes {
51+
if v.ID == managed1.ID {
52+
found = true
53+
break
54+
}
55+
}
56+
th.AssertEquals(t, true, found)
57+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.