update unit and acceptance tests
diff --git a/acceptance/openstack/blockstorage/v1/snapshots_test.go b/acceptance/openstack/blockstorage/v1/snapshots_test.go
index 0d9d5c7..5835048 100644
--- a/acceptance/openstack/blockstorage/v1/snapshots_test.go
+++ b/acceptance/openstack/blockstorage/v1/snapshots_test.go
@@ -3,65 +3,85 @@
 package v1
 
 import (
-	"fmt"
-	"os"
 	"testing"
-	"time"
 
 	"github.com/rackspace/gophercloud"
-	"github.com/rackspace/gophercloud/openstack/blockStorage/v1/snapshots"
+	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/snapshots"
+	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/volumes"
 )
 
-func waitForSnapshot(client *gophercloud.ServiceClient, id string) error {
-	for secondsSlept := 0; secondsSlept < 240; secondsSlept++ {
-		fmt.Printf("Seconds slept waiting for snapshot: %d\n", secondsSlept)
-		gss, err := snapshots.Get(client, id).ExtractSnapshot()
-		if err != nil {
-			return err
-		}
-		if gss.Status == "available" {
-			return nil
-		}
-		if gss.Status == "error" {
-			return fmt.Errorf("Error waiting for snapshot to create. Snapshot status is 'error'.")
-		}
-		time.Sleep(1 * time.Second)
-	}
-	gss, err := snapshots.Get(client, id).ExtractSnapshot()
-	if err != nil {
-		return err
-	}
-	return fmt.Errorf("Time out waiting for snapshot to become available: %+v", gss)
-}
-
 func TestSnapshots(t *testing.T) {
 
-	volumeID := os.Getenv("OS_VOLUME_ID")
-	if volumeID == "" {
-		t.Errorf("Expect OS_VOLUME_ID environment variable. Skipping create and delete snapshot functions.")
-		return
-	}
-
 	client, err := newClient()
 	if err != nil {
 		t.Fatalf("Failed to create Block Storage v1 client: %v", err)
 	}
 
-	css, err := snapshots.Create(client, snapshots.CreateOpts{
+	v, err := volumes.Create(client, &volumes.CreateOpts{
+		Name: "gophercloud-test-volume",
+		Size: 1,
+	}).Extract()
+	if err != nil {
+		t.Fatalf("Failed to create volume: %v\n", err)
+	}
+
+	err = volumes.WaitForStatus(client, v.ID, "available", 120)
+	if err != nil {
+		t.Fatalf("Failed to create volume: %v\n", err)
+	}
+
+	t.Logf("Created volume: %v\n", v)
+
+	ss, err := snapshots.Create(client, &snapshots.CreateOpts{
 		Name:     "gophercloud-test-snapshot",
-		VolumeID: volumeID,
+		VolumeID: v.ID,
+	}).Extract()
+	if err != nil {
+		t.Fatalf("Failed to create snapshot: %v\n", err)
+	}
+
+	err = snapshots.WaitForStatus(client, ss.ID, "available", 120)
+	if err != nil {
+		t.Fatalf("Failed to create snapshot: %v\n", err)
+	}
+
+	t.Logf("Created snapshot: %+v\n", ss)
+
+	err = snapshots.Delete(client, ss.ID)
+	if err != nil {
+		t.Fatalf("Failed to delete snapshot: %v", err)
+	}
+
+	err = gophercloud.WaitFor(120, func() (bool, error) {
+		_, err := snapshots.Get(client, ss.ID).Extract()
+		if err != nil {
+			return true, nil
+		}
+
+		return false, nil
 	})
 	if err != nil {
-		t.Errorf("Failed to create snapshot: %v\n", err)
+		t.Fatalf("Failed to delete snapshot: %v", err)
 	}
 
-	err = waitForSnapshot(client, css.ID)
+	t.Log("Deleted snapshot\n")
+
+	err = volumes.Delete(client, v.ID)
 	if err != nil {
-		t.Errorf("Failed to create snapshot: %v\n", err)
+		t.Errorf("Failed to delete volume: %v", err)
 	}
 
-	err = waitForSnapshot(client, css.ID)
+	err = gophercloud.WaitFor(120, func() (bool, error) {
+		_, err := volumes.Get(client, v.ID).Extract()
+		if err != nil {
+			return true, nil
+		}
 
-	t.Logf("Created snapshots: %+v\n", *css)
+		return false, nil
+	})
+	if err != nil {
+		t.Errorf("Failed to delete volume: %v", err)
+	}
 
+	t.Log("Deleted volume\n")
 }