|  | 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 | 
|  | }) | 
|  | } |