rename 'blockstorage' to 'blockStorage' for consistency
diff --git a/acceptance/openstack/blockStorage/v1/blockstorage_test.go.bak b/acceptance/openstack/blockStorage/v1/blockstorage_test.go.bak
new file mode 100644
index 0000000..aaabac1
--- /dev/null
+++ b/acceptance/openstack/blockStorage/v1/blockstorage_test.go.bak
@@ -0,0 +1,213 @@
+// +build acceptance
+
+package openstack
+
+import (
+	"fmt"
+	blockstorage "github.com/rackspace/gophercloud/openstack/blockstorage/v1"
+	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/snapshots"
+	"github.com/rackspace/gophercloud/openstack/blockstorage/v1/volumes"
+	identity "github.com/rackspace/gophercloud/openstack/identity/v2"
+	"github.com/rackspace/gophercloud/openstack/utils"
+	"os"
+	"strconv"
+	"testing"
+	"time"
+)
+
+var numVols = 2
+
+func getClient() (*blockstorage.Client, error) {
+	ao, err := utils.AuthOptions()
+	if err != nil {
+		return nil, err
+	}
+
+	r, err := identity.Authenticate(ao)
+	if err != nil {
+		return nil, err
+	}
+
+	sc, err := identity.GetServiceCatalog(r)
+	if err != nil {
+		return nil, err
+	}
+
+	ces, err := sc.CatalogEntries()
+	if err != nil {
+		return nil, err
+	}
+
+	var eps []identity.Endpoint
+	for _, ce := range ces {
+		if ce.Type == "volume" {
+			eps = ce.Endpoints
+		}
+	}
+
+	region := os.Getenv("OS_REGION_NAME")
+	rep := ""
+	for _, ep := range eps {
+		if ep.Region == region {
+			rep = ep.PublicURL
+		}
+	}
+
+	client := blockstorage.NewClient(rep, r, ao)
+
+	return client, nil
+
+}
+
+func TestVolumes(t *testing.T) {
+	client, err := getClient()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+
+	var cv volumes.Volume
+	for i := 0; i < numVols; i++ {
+		cv, err := volumes.Create(client, volumes.CreateOpts{
+			"size":         1,
+			"display_name": "test-volume" + strconv.Itoa(i),
+		})
+		if err != nil {
+			t.Error(err)
+			return
+		}
+		defer func() {
+			time.Sleep(10000 * time.Millisecond)
+			err = volumes.Delete(client, volumes.DeleteOpts{
+				"id": cv.Id,
+			})
+			if err != nil {
+				t.Error(err)
+				return
+			}
+		}()
+	}
+
+	vols, err := volumes.List(client, volumes.ListOpts{
+		"full": true,
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	if len(vols) != numVols {
+		t.Errorf("Expected %d volumes, got %d", numVols, len(vols))
+		return
+	}
+
+	vols, err = volumes.List(client, volumes.ListOpts{
+		"full": false,
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	if len(vols) != numVols {
+		t.Errorf("Expected %d volumes, got %d", numVols, len(vols))
+		return
+	}
+
+	_, err = volumes.Get(client, volumes.GetOpts{
+		"id": cv.Id,
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+
+}
+
+func TestSnapshots(t *testing.T) {
+	client, err := getClient()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+
+	var css snapshots.Snapshot
+
+	cv, err := volumes.Create(client, volumes.CreateOpts{
+		"size":         1,
+		"display_name": "test-volume",
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	defer func() {
+		for i := 0; i < 60; i++ {
+			gss, _ := snapshots.Get(client, snapshots.GetOpts{
+				"id": css.Id,
+			})
+			if gss.Status == "" {
+				err = volumes.Delete(client, volumes.DeleteOpts{
+					"id": cv.Id,
+				})
+				if err != nil {
+					t.Error(err)
+					return
+				}
+				break
+			}
+			time.Sleep(5000 * time.Millisecond)
+		}
+	}()
+
+	for i := 0; i < 60; i++ {
+		gv, err := volumes.Get(client, volumes.GetOpts{
+			"id": cv.Id,
+		})
+		if err != nil {
+			t.Error(err)
+			return
+		}
+		if gv.Status == "available" {
+			break
+		}
+		time.Sleep(2000 * time.Millisecond)
+	}
+
+	css, err = snapshots.Create(client, snapshots.CreateOpts{
+		"volume_id":    cv.Id,
+		"display_name": "test-snapshot",
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	defer func() {
+		for i := 0; i < 60; i++ {
+			gss, err := snapshots.Get(client, snapshots.GetOpts{
+				"id": css.Id,
+			})
+			if err != nil {
+				t.Error(err)
+				return
+			}
+			if gss.Status == "available" {
+				err = snapshots.Delete(client, snapshots.DeleteOpts{
+					"id": css.Id,
+				})
+				if err != nil {
+					t.Error(err)
+					return
+				}
+				break
+			}
+			time.Sleep(2000 * time.Millisecond)
+		}
+	}()
+
+	lss, err := snapshots.List(client, snapshots.ListOpts{
+		Full: true,
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+}
diff --git a/acceptance/openstack/blockStorage/v1/snapshots_test.go b/acceptance/openstack/blockStorage/v1/snapshots_test.go
new file mode 100644
index 0000000..0d9d5c7
--- /dev/null
+++ b/acceptance/openstack/blockStorage/v1/snapshots_test.go
@@ -0,0 +1,67 @@
+// +build acceptance
+
+package v1
+
+import (
+	"fmt"
+	"os"
+	"testing"
+	"time"
+
+	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack/blockStorage/v1/snapshots"
+)
+
+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{
+		Name:     "gophercloud-test-snapshot",
+		VolumeID: volumeID,
+	})
+	if err != nil {
+		t.Errorf("Failed to create snapshot: %v\n", err)
+	}
+
+	err = waitForSnapshot(client, css.ID)
+	if err != nil {
+		t.Errorf("Failed to create snapshot: %v\n", err)
+	}
+
+	err = waitForSnapshot(client, css.ID)
+
+	t.Logf("Created snapshots: %+v\n", *css)
+
+}
diff --git a/acceptance/openstack/blockStorage/v1/volumeTypes_test.go b/acceptance/openstack/blockStorage/v1/volumeTypes_test.go
new file mode 100644
index 0000000..ad6526a
--- /dev/null
+++ b/acceptance/openstack/blockStorage/v1/volumeTypes_test.go
@@ -0,0 +1,72 @@
+// +build acceptance
+
+package v1
+
+import (
+	"strconv"
+	"testing"
+	"time"
+
+	"github.com/rackspace/gophercloud/openstack/blockStorage/v1/volumeTypes"
+	"github.com/rackspace/gophercloud/pagination"
+)
+
+var numVolTypes = 1
+
+func TestVolumeTypes(t *testing.T) {
+	client, err := newClient()
+	if err != nil {
+		t.Fatalf("Failed to create Block Storage v1 client: %v", err)
+	}
+
+	var cvt *volumeTypes.VolumeType
+	for i := 0; i < numVolTypes; i++ {
+		cvt, err = volumeTypes.Create(client, volumeTypes.CreateOpts{
+			ExtraSpecs: map[string]interface{}{
+				"capabilities": "gpu",
+				"priority":     3,
+			},
+			Name: "gophercloud-test-volumeType-" + strconv.Itoa(i),
+		})
+		if err != nil {
+			t.Error(err)
+			return
+		}
+		defer func() {
+			time.Sleep(10000 * time.Millisecond)
+			err = volumeTypes.Delete(client, cvt.ID)
+			if err != nil {
+				t.Error(err)
+				return
+			}
+		}()
+		t.Logf("Created volume type: %+v\n", cvt)
+	}
+
+	gr, err := volumeTypes.Get(client, cvt.ID)
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	v, err := volumeTypes.ExtractVolumeType(gr)
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	t.Logf("Got volume type: %+v\n", v)
+
+	pager := volumeTypes.List(client, volumeTypes.ListOpts{})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+		volTypes, err := volumeTypes.ExtractVolumeTypes(page)
+		if len(volTypes) != numVolTypes {
+			t.Errorf("Expected %d volume types, got %d", numVolTypes, len(volTypes))
+		}
+		t.Logf("Listing volume types: %+v\n", volTypes)
+		return true, err
+	})
+
+}
diff --git a/acceptance/openstack/blockStorage/v1/volumes_test.go b/acceptance/openstack/blockStorage/v1/volumes_test.go
new file mode 100644
index 0000000..22d9653
--- /dev/null
+++ b/acceptance/openstack/blockStorage/v1/volumes_test.go
@@ -0,0 +1,95 @@
+// +build acceptance blockstorage
+
+package v1
+
+import (
+	"fmt"
+	"os"
+	"strconv"
+	"testing"
+	"time"
+
+	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack"
+	"github.com/rackspace/gophercloud/openstack/blockStorage/v1/volumes"
+	"github.com/rackspace/gophercloud/openstack/utils"
+	"github.com/rackspace/gophercloud/pagination"
+)
+
+var numVols = 1
+
+func newClient() (*gophercloud.ServiceClient, error) {
+	ao, err := utils.AuthOptions()
+	if err != nil {
+		return nil, err
+	}
+
+	client, err := openstack.AuthenticatedClient(ao)
+	if err != nil {
+		return nil, err
+	}
+
+	return openstack.NewBlockStorageV1(client, gophercloud.EndpointOpts{
+		Region: os.Getenv("OS_REGION_NAME"),
+	})
+}
+
+func TestVolumes(t *testing.T) {
+	client, err := newClient()
+	if err != nil {
+		t.Fatalf("Failed to create Block Storage v1 client: %v", err)
+	}
+
+	var cv *volumes.Volume
+	for i := 0; i < numVols; i++ {
+		cv, err = volumes.Create(client, volumes.CreateOpts{
+			Size: 1,
+			Name: "gophercloud-test-volume-" + strconv.Itoa(i),
+		})
+		if err != nil {
+			t.Error(err)
+			return
+		}
+		defer func() {
+			time.Sleep(10000 * time.Millisecond)
+			err = volumes.Delete(client, cv.ID)
+			if err != nil {
+				t.Error(err)
+				return
+			}
+		}()
+
+	}
+
+	_, err = volumes.Update(client, cv.ID, volumes.UpdateOpts{
+		Name: "gophercloud-updated-volume",
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+
+	v, err := volumes.Get(client, cv.ID).ExtractVolume()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	fmt.Printf("Got volume: %+v\n", v)
+
+	if v.Name != "gophercloud-updated-volume" {
+		t.Errorf("Unable to update volume: Expected name: gophercloud-updated-volume\nActual name: %s", v.Name)
+	}
+
+	pager := volumes.List(client, volumes.ListOpts{})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+		vols, err := volumes.ExtractVolumes(page)
+		if len(vols) != numVols {
+			t.Errorf("Expected %d volumes, got %d", numVols, len(vols))
+		}
+		return true, err
+	})
+}