Make change-admin-password acceptence test autonomous
Up to this commit, 09-change-admin-password.go required human
intervention to run.
diff --git a/acceptance/04-create-server.go b/acceptance/04-create-server.go
index 9377b75..06c541b 100644
--- a/acceptance/04-create-server.go
+++ b/acceptance/04-create-server.go
@@ -46,7 +46,7 @@
panic(err)
}
- err = createServer(servers, *imageRef, *flavorRef, *serverName, *adminPass)
+ _, err = createServer(servers, *imageRef, *flavorRef, *serverName, *adminPass)
if err != nil {
panic(err)
}
diff --git a/acceptance/09-change-admin-password.go b/acceptance/09-change-admin-password.go
index 4804726..2ce7bbe 100644
--- a/acceptance/09-change-admin-password.go
+++ b/acceptance/09-change-admin-password.go
@@ -4,6 +4,7 @@
"flag"
"fmt"
"github.com/rackspace/gophercloud"
+ "time"
)
var quiet = flag.Bool("quiet", false, "Quiet mode, for acceptance testing. $? still indicates errors though.")
@@ -14,14 +15,6 @@
provider, username, password := getCredentials()
flag.Parse()
- if *serverId == "" {
- panic("Server ID expected [use -i option]")
- }
-
- if *newPass == "" {
- panic("Password expected [use -p option]")
- }
-
acc, err := gophercloud.Authenticate(
provider,
gophercloud.AuthOptions{
@@ -43,6 +36,32 @@
panic(err)
}
+ // If user doesn't explicitly provide a server ID, create one dynamically.
+ if *serverId == "" {
+ var err error
+ *serverId, err = createServer(api, "", "", "", "")
+ if err != nil {
+ panic(err)
+ }
+
+ // Wait for server to finish provisioning.
+ for {
+ s, err := api.ServerById(*serverId)
+ if err != nil {
+ panic(err)
+ }
+ if s.Status == "ACTIVE" {
+ break
+ }
+ time.Sleep(10 * time.Second)
+ }
+ }
+
+ // If no password is provided, create one dynamically.
+ if *newPass == "" {
+ *newPass = randomString("", 16)
+ }
+
err = api.SetAdminPassword(*serverId, *newPass)
if err != nil {
panic(err)
diff --git a/acceptance/libargs.go b/acceptance/libargs.go
index 99d128f..405938a 100644
--- a/acceptance/libargs.go
+++ b/acceptance/libargs.go
@@ -92,7 +92,7 @@
// A blank admin password will cause a password to be automatically generated; however,
// at present no means of recovering this password exists, as no acceptance tests yet require
// this data.
-func createServer(servers gophercloud.CloudServersProvider, imageRef, flavorRef, name, adminPass string) error {
+func createServer(servers gophercloud.CloudServersProvider, imageRef, flavorRef, name, adminPass string) (string, error) {
if imageRef == "" {
imageRef = aSuitableImage(servers)
}
@@ -109,12 +109,16 @@
name = fmt.Sprintf("ACPTTEST--%s", name)
}
- _, err := servers.CreateServer(gophercloud.NewServer{
+ newServer, err := servers.CreateServer(gophercloud.NewServer{
Name: name,
ImageRef: imageRef,
FlavorRef: flavorRef,
AdminPass: adminPass,
})
- return err
+ if err != nil {
+ return "", err
+ }
+
+ return newServer.Id, nil
}