diff --git a/openstack/storage/v1/objects/objects_test.go b/openstack/storage/v1/objects/objects_test.go
new file mode 100644
index 0000000..31fa837
--- /dev/null
+++ b/openstack/storage/v1/objects/objects_test.go
@@ -0,0 +1,96 @@
+package objects
+
+import (
+	"bytes"
+	"encoding/json"
+	"io/ioutil"
+	"net/http"
+	"reflect"
+	"testing"
+)
+
+func TestExtractObjectMetadata(t *testing.T) {
+	getResult := &http.Response{}
+
+	expected := map[string]string{}
+
+	actual := ExtractMetadata(getResult)
+
+	if !reflect.DeepEqual(expected, actual) {
+		t.Errorf("Expected: %+v\nActual:%+v", expected, actual)
+	}
+}
+
+func TestExtractContent(t *testing.T) {
+	responseBody := "'Twas brillig, and the slithy toves"
+	downloadResult := &http.Response{
+		Body: ioutil.NopCloser(bytes.NewBufferString(responseBody)),
+	}
+	expected := []byte("'Twas brillig, and the slithy toves")
+	actual, err := ExtractContent(downloadResult)
+	if err != nil {
+		t.Errorf("Error extracting object content: %s", err)
+	}
+	if !reflect.DeepEqual(actual, expected) {
+		t.Errorf("Expected: %+v\nActual:%+v", expected, actual)
+	}
+}
+
+func TestExtractObjectInfo(t *testing.T) {
+	responseBody := `
+		[
+		    {
+				"hash": "451e372e48e0f6b1114fa0724aa79fa1",
+		        "last_modified": "2014-01-15T16:41:49.390270",
+				"bytes": 14,
+				"name": "goodbye",
+				"content_type": "application/octet-stream"
+			},
+			{
+		        "hash": "ed076287532e86365e841e92bfc50d8c",
+			    "last_modified": "2014-01-15T16:37:43.427570",
+				"bytes": 12,
+				"name": "helloworld",
+				"content_type": "application/octet-stream"
+			}
+		]	
+	`
+
+	listResult := &http.Response{
+		Body: ioutil.NopCloser(bytes.NewBufferString(responseBody)),
+	}
+
+	var expected []Object
+	err := json.Unmarshal([]byte(responseBody), &expected)
+	if err != nil {
+		t.Errorf("Error unmarshaling JSON: %s", err)
+	}
+
+	actual, err := ExtractInfo(listResult)
+	if err != nil {
+		t.Errorf("Error extracting objects info: %s", err)
+	}
+
+	if !reflect.DeepEqual(expected, actual) {
+		t.Errorf("Expected: %+v\nActual: %+v", expected, actual)
+	}
+}
+
+func TestExtractObjectNames(t *testing.T) {
+	responseBody := "goodbye\nhelloworld\n"
+
+	listResult := &http.Response{
+		Body: ioutil.NopCloser(bytes.NewBufferString(responseBody)),
+	}
+
+	expected := []string{"goodbye", "helloworld"}
+
+	actual, err := ExtractNames(listResult)
+	if err != nil {
+		t.Errorf("Error extracting object names: %s", err)
+	}
+
+	if !reflect.DeepEqual(expected, actual) {
+		t.Errorf("Expected: %+v\nActual:%+v", expected, actual)
+	}
+}
diff --git a/openstack/storage/v1/objects/requests_test.go b/openstack/storage/v1/objects/requests_test.go
new file mode 100644
index 0000000..ca829ae
--- /dev/null
+++ b/openstack/storage/v1/objects/requests_test.go
@@ -0,0 +1,193 @@
+package objects
+
+import (
+	"bytes"
+	"net/http"
+	"testing"
+
+	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/testhelper"
+)
+
+const ( 
+	tokenId = "abcabcabcabc"
+)
+
+var metadata = map[string]string{"gophercloud-test": "objects"}
+
+func serviceClient() *gophercloud.ServiceClient {
+	return &gophercloud.ServiceClient{
+		Provider: &gophercloud.ProviderClient{TokenID: tokenId},
+		Endpoint: testhelper.Endpoint(),
+	}
+}
+
+func TestDownloadObject(t * testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+	
+	testhelper.Mux.HandleFunc("/testContainer/testObject", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "GET")
+		testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
+		testhelper.TestHeader(t, r, "Accept", "application/json")
+	})
+
+	client := serviceClient()
+	_, err := Download(client, DownloadOpts{
+		Container: "testContainer",
+		Name: "testObject",
+	})
+	if err != nil {
+		t.Fatalf("Unexpected error downloading object: %v", err)
+	}
+}
+
+func TestListObjectInfo(t *testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+
+	testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "GET")
+		testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
+		testhelper.TestHeader(t, r, "Accept", "application/json")
+	})
+
+	client := serviceClient()
+	_, err := List(client, ListOpts{
+		Full: true,
+		Container: "testContainer",
+	})
+	if err != nil {
+		t.Fatalf("Unexpected error listing objects info: %v", err)
+	}
+}
+
+func TestListObjectNames(t *testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+
+	testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "GET")
+		testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
+		testhelper.TestHeader(t, r, "Accept", "text/plain")
+	})
+
+	client := serviceClient()
+	_, err := List(client, ListOpts{
+		Container: "testContainer",
+	})
+	if err != nil {
+		t.Fatalf("Unexpected error listing object names: %v", err)
+	}
+}
+
+func TestCreateObject(t *testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+
+	testhelper.Mux.HandleFunc("/testContainer/testObject", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "PUT")
+		testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
+		testhelper.TestHeader(t, r, "Accept", "application/json")
+		w.WriteHeader(http.StatusCreated)
+	})
+
+	client := serviceClient()
+	err := Create(client, CreateOpts{
+		Content: bytes.NewBufferString("Did gyre and gimble in the wabe:"),
+		Container: "testContainer",
+		Name: "testObject",
+	})
+	if err != nil {
+		t.Fatalf("Unexpected error creating object: %v", err)
+	}
+}
+
+func TestCopyObject(t *testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+
+	testhelper.Mux.HandleFunc("/testContainer/testObject", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "COPY")
+		testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
+		testhelper.TestHeader(t, r, "Accept", "application/json")
+		testhelper.TestHeader(t, r, "Destination", "/newTestContainer/newTestObject")
+		w.WriteHeader(http.StatusCreated)
+	})
+
+	client := serviceClient()
+	err := Copy(client, CopyOpts{
+		NewContainer: "newTestContainer",
+		NewName: "newTestObject",
+		Container: "testContainer",
+		Name: "testObject",
+	})
+	if err != nil {
+		t.Fatalf("Unexpected error copying object: %v", err)
+	}
+}
+
+func TestDeleteObject(t *testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+
+	testhelper.Mux.HandleFunc("/testContainer/testObject", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "DELETE")
+		testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
+		testhelper.TestHeader(t, r, "Accept", "application/json")
+		w.WriteHeader(http.StatusNoContent)
+	})
+
+	client := serviceClient()
+	err := Delete(client, DeleteOpts{
+		Container: "testContainer",
+		Name: "testObject",
+	})
+	if err != nil {
+		t.Fatalf("Unexpected error deleting object: %v", err)
+	}
+}
+
+func TestUpateObjectMetadata(t *testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+
+	testhelper.Mux.HandleFunc("/testContainer/testObject", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "POST")
+		testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
+		testhelper.TestHeader(t, r, "Accept", "application/json")
+		testhelper.TestHeader(t, r, "X-Object-Meta-Gophercloud-Test", "objects")
+		w.WriteHeader(http.StatusAccepted)
+	})
+
+	client := serviceClient()
+	err := Update(client, UpdateOpts{
+		Container: "testContainer",
+		Name: "testObject",
+		Metadata: metadata,
+	})
+	if err != nil {
+		t.Fatalf("Unexpected error updating object metadata: %v", err)
+	}
+}
+
+func TestGetContainer(t *testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+
+	testhelper.Mux.HandleFunc("/testContainer/testObject", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "HEAD")
+		testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
+		testhelper.TestHeader(t, r, "Accept", "application/json")
+		w.WriteHeader(http.StatusNoContent)
+	})
+
+	client := serviceClient()
+	_, err := Get(client, GetOpts{
+			Container: "testContainer",
+			Name: "testObject",
+	})
+	if err != nil {
+		t.Fatalf("Unexpected error getting object metadata: %v", err)
+	}
+}
diff --git a/openstack/storage/v1/objects/urls_test.go b/openstack/storage/v1/objects/urls_test.go
new file mode 100644
index 0000000..89d1cb1
--- /dev/null
+++ b/openstack/storage/v1/objects/urls_test.go
@@ -0,0 +1,28 @@
+package objects
+
+import (
+	"testing"
+	"github.com/rackspace/gophercloud"
+)
+
+func TestContainerURL(t *testing.T) {
+	client := gophercloud.ServiceClient{
+		Endpoint: "http://localhost:5000/v1/",
+	}
+	expected := "http://localhost:5000/v1/testContainer"
+	actual := containerURL(&client, "testContainer")
+	if actual != expected {
+		t.Errorf("Unexpected service URL generated: %s", actual)
+	}
+}
+
+func TestObjectURL(t *testing.T) {
+	client := gophercloud.ServiceClient{
+		Endpoint: "http://localhost:5000/v1/",
+	}
+	expected := "http://localhost:5000/v1/testContainer/testObject"
+	actual := objectURL(&client, "testContainer", "testObject")
+	if actual != expected {
+		t.Errorf("Unexpected service URL generated: %s", actual)
+	}
+}
