rename directory from 'storage' to 'objectStorage'; add fix for handling 'text/html' content-type response from 'ListNames'
diff --git a/acceptance/openstack/objectStorage/v1/accounts_test.go b/acceptance/openstack/objectStorage/v1/accounts_test.go
new file mode 100644
index 0000000..7a3b046
--- /dev/null
+++ b/acceptance/openstack/objectStorage/v1/accounts_test.go
@@ -0,0 +1,58 @@
+// +build acceptance
+
+package v1
+
+import (
+	"strings"
+	"testing"
+
+	"github.com/rackspace/gophercloud/openstack/objectStorage/v1/accounts"
+)
+
+func TestAccounts(t *testing.T) {
+	// Create a provider client for making the HTTP requests.
+	// See common.go in this directory for more information.
+	client, err := newClient()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+
+	// Update an account's metadata.
+	err = accounts.Update(client, accounts.UpdateOpts{
+		Metadata: metadata,
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	// Defer the deletion of the metadata set above.
+	defer func() {
+		tempMap := make(map[string]string)
+		for k := range metadata {
+			tempMap[k] = ""
+		}
+		err = accounts.Update(client, accounts.UpdateOpts{
+			Metadata: tempMap,
+		})
+		if err != nil {
+			t.Error(err)
+			return
+		}
+	}()
+
+	// Retrieve account metadata.
+	gr, err := accounts.Get(client, accounts.GetOpts{})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	// Extract the custom metadata from the 'Get' response.
+	am := accounts.ExtractMetadata(gr)
+	for k := range metadata {
+		if am[k] != metadata[strings.Title(k)] {
+			t.Errorf("Expected custom metadata with key: %s", k)
+			return
+		}
+	}
+}
diff --git a/acceptance/openstack/objectStorage/v1/common.go b/acceptance/openstack/objectStorage/v1/common.go
new file mode 100644
index 0000000..08065a4
--- /dev/null
+++ b/acceptance/openstack/objectStorage/v1/common.go
@@ -0,0 +1,28 @@
+// +build acceptance
+
+package v1
+
+import (
+	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/openstack"
+	"github.com/rackspace/gophercloud/openstack/utils"
+	"os"
+)
+
+var metadata = map[string]string{"gopher": "cloud"}
+
+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.NewStorageV1(client, gophercloud.EndpointOpts{
+		Region: os.Getenv("OS_REGION_NAME"),
+	})
+}
diff --git a/acceptance/openstack/objectStorage/v1/containers_test.go b/acceptance/openstack/objectStorage/v1/containers_test.go
new file mode 100644
index 0000000..1c6393f
--- /dev/null
+++ b/acceptance/openstack/objectStorage/v1/containers_test.go
@@ -0,0 +1,114 @@
+// +build acceptance
+
+package v1
+
+import (
+	"strings"
+	"testing"
+
+	"github.com/rackspace/gophercloud/acceptance/tools"
+	"github.com/rackspace/gophercloud/openstack/objectStorage/v1/containers"
+	"github.com/rackspace/gophercloud/pagination"
+)
+
+// numContainers is the number of containers to create for testing.
+var numContainers = 2
+
+func TestContainers(t *testing.T) {
+	// Create a new client to execute the HTTP requests. See common.go for newClient body.
+	client, err := newClient()
+	if err != nil {
+		t.Error(err)
+	}
+
+	// Create a slice of random container names.
+	cNames := make([]string, numContainers)
+	for i := 0; i < numContainers; i++ {
+		cNames[i] = tools.RandomString("gophercloud-test-container-", 8)
+	}
+
+	// Create numContainers containers.
+	for i := 0; i < len(cNames); i++ {
+		_, err := containers.Create(client, cNames[i], containers.CreateOpts{})
+		if err != nil {
+			t.Error(err)
+		}
+	}
+	// Delete the numContainers containers after function completion.
+	defer func() {
+		for i := 0; i < len(cNames); i++ {
+			err = containers.Delete(client, cNames[i])
+			if err != nil {
+				t.Error(err)
+			}
+		}
+	}()
+
+	// List the numContainer names that were just created. To just list those,
+	// the 'prefix' parameter is used.
+	pager := containers.List(client, containers.ListOpts{Full: true, Prefix: "gophercloud-test-container-"})
+	if pager.Err != nil {
+		t.Error(err)
+		return
+	}
+	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+		containerList, err := containers.ExtractInfo(page)
+		if err != nil {
+			t.Error(err)
+		}
+		for _, n := range containerList {
+			t.Logf("Container: Name [%s] Count [%d] Bytes [%d]",
+				n.Name, n.Count, n.Bytes)
+		}
+
+		return true, nil
+	})
+	if err != nil {
+		t.Error(err)
+	}
+
+	// List the info for the numContainer containers that were created.
+	pager = containers.List(client, containers.ListOpts{Full: false, Prefix: "gophercloud-test-container-"})
+	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+		containerList, err := containers.ExtractNames(page)
+		if err != nil {
+			return false, err
+		}
+		for _, n := range containerList {
+			t.Logf("Container: Name [%s]", n)
+		}
+
+		return true, nil
+	})
+	if err != nil {
+		t.Error(err)
+	}
+
+	// Update one of the numContainer container metadata.
+	err = containers.Update(client, cNames[0], containers.UpdateOpts{Metadata: metadata})
+	if err != nil {
+		t.Error(err)
+	}
+	// After the tests are done, delete the metadata that was set.
+	defer func() {
+		tempMap := make(map[string]string)
+		for k := range metadata {
+			tempMap[k] = ""
+		}
+		err = containers.Update(client, cNames[0], containers.UpdateOpts{Metadata: tempMap})
+		if err != nil {
+			t.Error(err)
+		}
+	}()
+
+	// Retrieve a container's metadata.
+	cm, err := containers.Get(client, cNames[0]).ExtractMetadata()
+	if err != nil {
+		t.Error(err)
+	}
+	for k := range metadata {
+		if cm[k] != metadata[strings.Title(k)] {
+			t.Errorf("Expected custom metadata with key: %s", k)
+		}
+	}
+}
diff --git a/acceptance/openstack/objectStorage/v1/objects_test.go b/acceptance/openstack/objectStorage/v1/objects_test.go
new file mode 100644
index 0000000..5eae02e
--- /dev/null
+++ b/acceptance/openstack/objectStorage/v1/objects_test.go
@@ -0,0 +1,170 @@
+// +build acceptance
+
+package v1
+
+import (
+	"bytes"
+	"strings"
+	"testing"
+
+	"github.com/rackspace/gophercloud/acceptance/tools"
+	"github.com/rackspace/gophercloud/openstack/objectStorage/v1/containers"
+	"github.com/rackspace/gophercloud/openstack/objectStorage/v1/objects"
+	"github.com/rackspace/gophercloud/pagination"
+)
+
+// numObjects is the number of objects to create for testing.
+var numObjects = 2
+
+func TestObjects(t *testing.T) {
+	// Create a provider client for executing the HTTP request.
+	// See common.go for more information.
+	client, err := newClient()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+
+	// Make a slice of length numObjects to hold the random object names.
+	oNames := make([]string, numObjects)
+	for i := 0; i < len(oNames); i++ {
+		oNames[i] = tools.RandomString("test-object-", 8)
+	}
+
+	// Create a container to hold the test objects.
+	cName := tools.RandomString("test-container-", 8)
+	_, err = containers.Create(client, cName, containers.CreateOpts{})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	// Defer deletion of the container until after testing.
+	defer func() {
+		err = containers.Delete(client, cName)
+		if err != nil {
+			t.Error(err)
+			return
+		}
+	}()
+
+	// Create a slice of buffers to hold the test object content.
+	oContents := make([]*bytes.Buffer, numObjects)
+	for i := 0; i < numObjects; i++ {
+		oContents[i] = bytes.NewBuffer([]byte(tools.RandomString("", 10)))
+		err = objects.Create(client, cName, oNames[i], oContents[i], objects.CreateOpts{})
+		if err != nil {
+			t.Error(err)
+			return
+		}
+	}
+	// Delete the objects after testing.
+	defer func() {
+		for i := 0; i < numObjects; i++ {
+			err = objects.Delete(client, cName, oNames[i], objects.DeleteOpts{})
+		}
+	}()
+
+	pager := objects.List(client, cName, objects.ListOpts{Full: false, Prefix: "test-object-"})
+	if pager.Err != nil {
+		t.Fatalf("Pager error: %v", pager.Err)
+	}
+	ons := make([]string, 0, len(oNames))
+	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+		names, err := objects.ExtractNames(page)
+		if err != nil {
+			return false, err
+		}
+		ons = append(ons, names...)
+
+		return true, nil
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	if len(ons) != len(oNames) {
+		t.Errorf("Expected %d names and got %d", len(oNames), len(ons))
+		return
+	}
+
+	pager = objects.List(client, cName, objects.ListOpts{Full: true, Prefix: "test-object-"})
+	if pager.Err != nil {
+		t.Fatalf("Pager error: %v", pager.Err)
+	}
+	ois := make([]objects.Object, 0, len(oNames))
+	err = pager.EachPage(func(page pagination.Page) (bool, error) {
+		info, err := objects.ExtractInfo(page)
+		if err != nil {
+			return false, nil
+		}
+
+		ois = append(ois, info...)
+
+		return true, nil
+	})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	if len(ois) != len(oNames) {
+		t.Errorf("Expected %d containers and got %d", len(oNames), len(ois))
+		return
+	}
+
+	// Copy the contents of one object to another.
+	err = objects.Copy(client, cName, oNames[0], objects.CopyOpts{Destination: cName + "/" + oNames[1]})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+
+	// Download one of the objects that was created above.
+	o1Content, err := objects.Download(client, cName, oNames[0], objects.DownloadOpts{}).ExtractContent()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	// Download the another object that was create above.
+	o2Content, err := objects.Download(client, cName, oNames[1], objects.DownloadOpts{}).ExtractContent()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	// Compare the two object's contents to test that the copy worked.
+	if string(o2Content) != string(o1Content) {
+		t.Errorf("Copy failed. Expected\n%s\nand got\n%s", string(o1Content), string(o2Content))
+		return
+	}
+
+	// Update an object's metadata.
+	err = objects.Update(client, cName, oNames[0], objects.UpdateOpts{Metadata: metadata})
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	// Delete the object's metadata after testing.
+	defer func() {
+		tempMap := make(map[string]string)
+		for k := range metadata {
+			tempMap[k] = ""
+		}
+		err = objects.Update(client, cName, oNames[0], objects.UpdateOpts{Metadata: tempMap})
+		if err != nil {
+			t.Error(err)
+			return
+		}
+	}()
+
+	// Retrieve an object's metadata.
+	om, err := objects.Get(client, cName, oNames[0], objects.GetOpts{}).ExtractMetadata()
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	for k := range metadata {
+		if om[k] != metadata[strings.Title(k)] {
+			t.Errorf("Expected custom metadata with key: %s", k)
+			return
+		}
+	}
+}