Boot From Volume Acceptance Test Cleanup
The following changes were made to the bootfromvolume acceptance tests:
* Renamed tests so tests can selectively be run by substring.
* Created createBootFromVolumeServer function
diff --git a/acceptance/openstack/compute/v2/bootfromvolume_test.go b/acceptance/openstack/compute/v2/bootfromvolume_test.go
index d1607be..6b73347 100644
--- a/acceptance/openstack/compute/v2/bootfromvolume_test.go
+++ b/acceptance/openstack/compute/v2/bootfromvolume_test.go
@@ -1,33 +1,32 @@
-// +build acceptance
+// +build acceptance compute bootfromvolume
package v2
import (
"testing"
+ "github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/acceptance/tools"
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/bootfromvolume"
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
- th "github.com/gophercloud/gophercloud/testhelper"
)
-func TestBootFromVolume(t *testing.T) {
- client, err := newClient()
- th.AssertNoErr(t, err)
-
+func TestBootFromVolumeSingleVolume(t *testing.T) {
if testing.Short() {
t.Skip("Skipping test that requires server creation in short mode.")
}
+ client, err := newClient()
+ if err != nil {
+ t.Fatalf("Unable to create a compute client: %v", err)
+ }
+
choices, err := ComputeChoicesFromEnv()
if err != nil {
t.Fatal(err)
}
- name := tools.RandomString("Gophercloud-", 8)
- t.Logf("Creating server [%s].", name)
-
- bd := []bootfromvolume.BlockDevice{
+ blockDevices := []bootfromvolume.BlockDevice{
bootfromvolume.BlockDevice{
UUID: choices.ImageID,
SourceType: bootfromvolume.Image,
@@ -35,48 +34,41 @@
},
}
- serverCreateOpts := servers.CreateOpts{
- Name: name,
- FlavorRef: choices.FlavorID,
- ImageRef: choices.ImageID,
+ server, err := createBootableVolumeServer(t, client, blockDevices, choices)
+ if err != nil {
+ t.Fatal("Unable to create server: %v", err)
}
- server, err := bootfromvolume.Create(client, bootfromvolume.CreateOptsExt{
- serverCreateOpts,
- bd,
- }).Extract()
- th.AssertNoErr(t, err)
if err = waitForStatus(client, server, "ACTIVE"); err != nil {
- t.Fatal(err)
+ t.Fatal("Unable to wait for server: %v", err)
}
+ defer deleteServer(t, client, server)
- t.Logf("Created server: %+v\n", server)
- defer servers.Delete(client, server.ID)
- t.Logf("Deleting server [%s]...", name)
+ printServer(t, server)
}
-func TestMultiEphemeral(t *testing.T) {
- client, err := newClient()
- th.AssertNoErr(t, err)
-
+func TestBootFromVolumeMultiEphemeral(t *testing.T) {
if testing.Short() {
t.Skip("Skipping test that requires server creation in short mode.")
}
+ client, err := newClient()
+ if err != nil {
+ t.Fatalf("Unable to create a compute client: %v", err)
+ }
+
choices, err := ComputeChoicesFromEnv()
if err != nil {
t.Fatal(err)
}
- name := tools.RandomString("Gophercloud-", 8)
- t.Logf("Creating server [%s].", name)
-
- bd := []bootfromvolume.BlockDevice{
+ blockDevices := []bootfromvolume.BlockDevice{
bootfromvolume.BlockDevice{
BootIndex: 0,
UUID: choices.ImageID,
SourceType: bootfromvolume.Image,
DestinationType: "local",
DeleteOnTermination: true,
+ VolumeSize: 5,
},
bootfromvolume.BlockDevice{
BootIndex: -1,
@@ -96,21 +88,48 @@
},
}
+ server, err := createBootableVolumeServer(t, client, blockDevices, choices)
+ if err != nil {
+ t.Fatalf("Unable to create server: %v", err)
+ }
+ if err = waitForStatus(client, server, "ACTIVE"); err != nil {
+ t.Fatalf("Unable to wait for server: %v", err)
+ }
+ defer deleteServer(t, client, server)
+
+ printServer(t, server)
+}
+
+func createBootableVolumeServer(t *testing.T, client *gophercloud.ServiceClient, blockDevices []bootfromvolume.BlockDevice, choices *ComputeChoices) (*servers.Server, error) {
+ if testing.Short() {
+ t.Skip("Skipping test that requires server creation in short mode.")
+ }
+
+ networkID, err := getNetworkIDFromTenantNetworks(t, client, choices.NetworkName)
+ if err != nil {
+ t.Fatalf("Failed to obtain network ID: %v", err)
+ }
+
+ name := tools.RandomString("ACPTTEST", 16)
+ t.Logf("Attempting to create bootable volume server: %s", name)
+
serverCreateOpts := servers.CreateOpts{
Name: name,
FlavorRef: choices.FlavorID,
ImageRef: choices.ImageID,
- }
- server, err := bootfromvolume.Create(client, bootfromvolume.CreateOptsExt{
- serverCreateOpts,
- bd,
- }).Extract()
- th.AssertNoErr(t, err)
- if err = waitForStatus(client, server, "ACTIVE"); err != nil {
- t.Fatal(err)
+ Networks: []servers.Network{
+ servers.Network{UUID: networkID},
+ },
}
- t.Logf("Created server: %+v\n", server)
- defer servers.Delete(client, server.ID)
- t.Logf("Deleting server [%s]...", name)
+ server, err := bootfromvolume.Create(client, bootfromvolume.CreateOptsExt{
+ serverCreateOpts,
+ blockDevices,
+ }).Extract()
+
+ if err != nil {
+ return server, err
+ }
+
+ return server, nil
}