blob: e9060b43f9ad36098497032186cb7b1d4d419fc5 [file] [log] [blame]
package v2
import (
"encoding/json"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/acceptance/clients"
"github.com/gophercloud/gophercloud/openstack/sharedfilesystems/v2/shares"
"testing"
)
// CreateShare will create a share with a name, and a size of 1Gb. An
// error will be returned if the share could not be created
func CreateShare(t *testing.T, client *gophercloud.ServiceClient) (*shares.Share, error) {
if testing.Short() {
t.Skip("Skipping test that requres share creation in short mode.")
}
choices, err := clients.AcceptanceTestChoicesFromEnv()
if err != nil {
t.Fatalf("Unable to fetch environment information")
}
t.Logf("Share network id %s", choices.ShareNetworkID)
createOpts := shares.CreateOpts{
Size: 1,
Name: "My Test Share",
ShareProto: "NFS",
ShareNetworkID: choices.ShareNetworkID,
}
share, err := shares.Create(client, createOpts).Extract()
if err != nil {
return share, err
}
err = waitForStatus(client, share.ID, "available", 60)
if err != nil {
return share, err
}
return share, nil
}
// DeleteShare will delete a share. A fatal error will occur if the share
// failed to be deleted. This works best when used as a deferred function.
func DeleteShare(t *testing.T, client *gophercloud.ServiceClient, share *shares.Share) {
err := shares.Delete(client, share.ID).ExtractErr()
if err != nil {
t.Fatalf("Unable to delete share %s: %v", share.ID, err)
}
t.Logf("Deleted share: %s", share.ID)
}
// PrintShare prints some information of the share
func PrintShare(t *testing.T, share *shares.Share) {
asJSON, err := json.MarshalIndent(share, "", " ")
if err != nil {
t.Logf("Cannot print the contents of %s", share.ID)
}
t.Logf("Share %s", string(asJSON))
}
func waitForStatus(c *gophercloud.ServiceClient, id, status string, secs int) error {
return gophercloud.WaitFor(secs, func() (bool, error) {
current, err := shares.Get(c, id).Extract()
if err != nil {
return false, err
}
if current.Status == status {
return true, nil
}
return false, nil
})
}