Merge pull request #267 from smashwilson/unbreak-acceptance

Unbreak Acceptance Again
diff --git a/acceptance/openstack/objectstorage/v1/accounts_test.go b/acceptance/openstack/objectstorage/v1/accounts_test.go
index b55f2a6..f7c01a7 100644
--- a/acceptance/openstack/objectstorage/v1/accounts_test.go
+++ b/acceptance/openstack/objectstorage/v1/accounts_test.go
@@ -13,12 +13,11 @@
 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()
-	th.AssertNoErr(t, err)
+	client := newClient(t)
 
 	// Update an account's metadata.
-	res = accounts.Update(client, accounts.UpdateOpts{Metadata: metadata})
-	th.AssertNoErr(t, res.Err)
+	updateres := accounts.Update(client, accounts.UpdateOpts{Metadata: metadata})
+	th.AssertNoErr(t, updateres.Err)
 
 	// Defer the deletion of the metadata set above.
 	defer func() {
@@ -26,15 +25,16 @@
 		for k := range metadata {
 			tempMap[k] = ""
 		}
-		res = accounts.Update(client, accounts.UpdateOpts{Metadata: tempMap})
-		th.AssertNoErr(t, res.Err)
+		updateres = accounts.Update(client, accounts.UpdateOpts{Metadata: tempMap})
+		th.AssertNoErr(t, updateres.Err)
 	}()
 
 	// Retrieve account metadata.
-	res := accounts.Get(client, accounts.GetOpts{})
-	th.AssertNoErr(res.Err)
+	getres := accounts.Get(client, nil)
+	th.AssertNoErr(t, getres.Err)
 	// Extract the custom metadata from the 'Get' response.
-	am := accounts.ExtractMetadata(gr)
+	am, err := getres.ExtractMetadata()
+	th.AssertNoErr(t, err)
 	for k := range metadata {
 		if am[k] != metadata[strings.Title(k)] {
 			t.Errorf("Expected custom metadata with key: %s", k)
diff --git a/acceptance/openstack/objectstorage/v1/common.go b/acceptance/openstack/objectstorage/v1/common.go
index fd1deda..1eac681 100644
--- a/acceptance/openstack/objectstorage/v1/common.go
+++ b/acceptance/openstack/objectstorage/v1/common.go
@@ -4,6 +4,7 @@
 
 import (
 	"os"
+	"testing"
 
 	"github.com/rackspace/gophercloud"
 	"github.com/rackspace/gophercloud/openstack"
@@ -12,14 +13,16 @@
 
 var metadata = map[string]string{"gopher": "cloud"}
 
-func newClient() (*gophercloud.ServiceClient, error) {
+func newClient(t *testing.T) *gophercloud.ServiceClient {
 	ao, err := openstack.AuthOptionsFromEnv()
 	th.AssertNoErr(t, err)
 
 	client, err := openstack.AuthenticatedClient(ao)
 	th.AssertNoErr(t, err)
 
-	return openstack.NewObjectStorageV1(client, gophercloud.EndpointOpts{
+	c, err := openstack.NewObjectStorageV1(client, gophercloud.EndpointOpts{
 		Region: os.Getenv("OS_REGION_NAME"),
-	}), nil
+	})
+	th.AssertNoErr(t, err)
+	return c
 }
diff --git a/acceptance/openstack/objectstorage/v1/containers_test.go b/acceptance/openstack/objectstorage/v1/containers_test.go
index b2c91c5..d6832f1 100644
--- a/acceptance/openstack/objectstorage/v1/containers_test.go
+++ b/acceptance/openstack/objectstorage/v1/containers_test.go
@@ -17,8 +17,7 @@
 
 func TestContainers(t *testing.T) {
 	// Create a new client to execute the HTTP requests. See common.go for newClient body.
-	client, err := newClient()
-	th.AssertNoErr(err)
+	client := newClient(t)
 
 	// Create a slice of random container names.
 	cNames := make([]string, numContainers)
@@ -29,21 +28,21 @@
 	// Create numContainers containers.
 	for i := 0; i < len(cNames); i++ {
 		res := containers.Create(client, cNames[i], nil)
-		th.AssertNoErr(res.Err)
+		th.AssertNoErr(t, res.Err)
 	}
 	// Delete the numContainers containers after function completion.
 	defer func() {
 		for i := 0; i < len(cNames); i++ {
-			res = containers.Delete(client, cNames[i])
-			th.AssertNoErr(res.Err)
+			res := containers.Delete(client, cNames[i])
+			th.AssertNoErr(t, res.Err)
 		}
 	}()
 
 	// List the numContainer names that were just created. To just list those,
 	// the 'prefix' parameter is used.
-	err = containers.List(client, &containers.ListOpts{Full: true, Prefix: "gophercloud-test-container-"}).EachPage(func(page pagination.Page) (bool, error) {
+	err := containers.List(client, &containers.ListOpts{Full: true, Prefix: "gophercloud-test-container-"}).EachPage(func(page pagination.Page) (bool, error) {
 		containerList, err := containers.ExtractInfo(page)
-		th.AssertNoErr(err)
+		th.AssertNoErr(t, err)
 
 		for _, n := range containerList {
 			t.Logf("Container: Name [%s] Count [%d] Bytes [%d]",
@@ -52,36 +51,36 @@
 
 		return true, nil
 	})
-	th.AssertNoErr(err)
+	th.AssertNoErr(t, err)
 
 	// List the info for the numContainer containers that were created.
 	err = containers.List(client, &containers.ListOpts{Full: false, Prefix: "gophercloud-test-container-"}).EachPage(func(page pagination.Page) (bool, error) {
 		containerList, err := containers.ExtractNames(page)
-		th.AssertNoErr(err)
+		th.AssertNoErr(t, err)
 		for _, n := range containerList {
 			t.Logf("Container: Name [%s]", n)
 		}
 
 		return true, nil
 	})
-	th.AssertNoErr(err)
+	th.AssertNoErr(t, err)
 
 	// Update one of the numContainer container metadata.
-	res = containers.Update(client, cNames[0], &containers.UpdateOpts{Metadata: metadata})
-	th.AssertNoErr(res.Err)
+	updateres := containers.Update(client, cNames[0], &containers.UpdateOpts{Metadata: metadata})
+	th.AssertNoErr(t, updateres.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] = ""
 		}
-		res = containers.Update(client, cNames[0], &containers.UpdateOpts{Metadata: tempMap})
-		th.AssertNoErr(res.Err)
+		res := containers.Update(client, cNames[0], &containers.UpdateOpts{Metadata: tempMap})
+		th.AssertNoErr(t, res.Err)
 	}()
 
 	// Retrieve a container's metadata.
 	cm, err := containers.Get(client, cNames[0]).ExtractMetadata()
-	th.AssertNoErr(err)
+	th.AssertNoErr(t, 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
index 1454063..987f733 100644
--- a/acceptance/openstack/objectstorage/v1/objects_test.go
+++ b/acceptance/openstack/objectstorage/v1/objects_test.go
@@ -20,8 +20,7 @@
 func TestObjects(t *testing.T) {
 	// Create a provider client for executing the HTTP request.
 	// See common.go for more information.
-	client, err := newClient()
-	th.AssertNoErr(err)
+	client := newClient(t)
 
 	// Make a slice of length numObjects to hold the random object names.
 	oNames := make([]string, numObjects)
@@ -31,79 +30,71 @@
 
 	// Create a container to hold the test objects.
 	cName := tools.RandomString("test-container-", 8)
-	res = containers.Create(client, cName, nil)
-	th.AssertNoErr(res.Err)
+	createres := containers.Create(client, cName, nil)
+	th.AssertNoErr(t, createres.Err)
 
 	// Defer deletion of the container until after testing.
 	defer func() {
-		res = containers.Delete(client, cName)
-		th.AssertNoErr(res.Err)
+		res := containers.Delete(client, cName)
+		th.AssertNoErr(t, res.Err)
 	}()
 
 	// 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)))
-		res = objects.Create(client, cName, oNames[i], oContents[i], nil)
-		th.AssertNoErr(res.Err)
+		res := objects.Create(client, cName, oNames[i], oContents[i], nil)
+		th.AssertNoErr(t, res.Err)
 	}
 	// Delete the objects after testing.
 	defer func() {
 		for i := 0; i < numObjects; i++ {
-			res = objects.Delete(client, cName, oNames[i], nil)
+			res := objects.Delete(client, cName, oNames[i], nil)
+			th.AssertNoErr(t, res.Err)
 		}
 	}()
 
 	ons := make([]string, 0, len(oNames))
-	err = objects.List(client, cName, &objects.ListOpts{Full: false, Prefix: "test-object-"}).EachPage(func(page pagination.Page) (bool, error) {
+	err := objects.List(client, cName, &objects.ListOpts{Full: false, Prefix: "test-object-"}).EachPage(func(page pagination.Page) (bool, error) {
 		names, err := objects.ExtractNames(page)
-		th.AssertNoErr(err)
+		th.AssertNoErr(t, err)
 		ons = append(ons, names...)
 
 		return true, nil
 	})
-	th.AssertNoErr(err)
-	if len(ons) != len(oNames) {
-		t.Errorf("Expected %d names and got %d", len(oNames), len(ons))
-		return
-	}
+	th.AssertNoErr(t, err)
+	th.AssertEquals(t, len(ons), len(oNames))
 
 	ois := make([]objects.Object, 0, len(oNames))
 	err = objects.List(client, cName, &objects.ListOpts{Full: true, Prefix: "test-object-"}).EachPage(func(page pagination.Page) (bool, error) {
 		info, err := objects.ExtractInfo(page)
-		th.AssertNoErr(err)
+		th.AssertNoErr(t, err)
 
 		ois = append(ois, info...)
 
 		return true, nil
 	})
-	th.AssertNoErr(err)
-	if len(ois) != len(oNames) {
-		t.Errorf("Expected %d containers and got %d", len(oNames), len(ois))
-		return
-	}
+	th.AssertNoErr(t, err)
+	th.AssertEquals(t, len(ois), len(oNames))
 
 	// Copy the contents of one object to another.
-	res = objects.Copy(client, cName, oNames[0], &objects.CopyOpts{Destination: cName + "/" + oNames[1]})
-	th.AssertNoErr(res.Err)
+	copyres := objects.Copy(client, cName, oNames[0], &objects.CopyOpts{Destination: cName + "/" + oNames[1]})
+	th.AssertNoErr(t, copyres.Err)
 
 	// Download one of the objects that was created above.
 	o1Content, err := objects.Download(client, cName, oNames[0], nil).ExtractContent()
-	th.AssertNoErr(err)
+	th.AssertNoErr(t, err)
 
 	// Download the another object that was create above.
 	o2Content, err := objects.Download(client, cName, oNames[1], nil).ExtractContent()
-	th.AssertNoErr(err)
+	th.AssertNoErr(t, err)
 
 	// 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
-	}
+	th.AssertEquals(t, string(o2Content), string(o1Content))
 
 	// Update an object's metadata.
-	res = objects.Update(client, cName, oNames[0], &objects.UpdateOpts{Metadata: metadata})
-	th.AssertNoErr(res.Err)
+	updateres := objects.Update(client, cName, oNames[0], &objects.UpdateOpts{Metadata: metadata})
+	th.AssertNoErr(t, updateres.Err)
 
 	// Delete the object's metadata after testing.
 	defer func() {
@@ -111,13 +102,13 @@
 		for k := range metadata {
 			tempMap[k] = ""
 		}
-		res = objects.Update(client, cName, oNames[0], &objects.UpdateOpts{Metadata: tempMap})
-		th.AssertNoErr(res.Err)
+		res := objects.Update(client, cName, oNames[0], &objects.UpdateOpts{Metadata: tempMap})
+		th.AssertNoErr(t, res.Err)
 	}()
 
 	// Retrieve an object's metadata.
 	om, err := objects.Get(client, cName, oNames[0], nil).ExtractMetadata()
-	th.AssertNoErr(err)
+	th.AssertNoErr(t, err)
 	for k := range metadata {
 		if om[k] != metadata[strings.Title(k)] {
 			t.Errorf("Expected custom metadata with key: %s", k)
diff --git a/acceptance/rackspace/identity/v2/identity_test.go b/acceptance/rackspace/identity/v2/identity_test.go
index 576e40f..1182982 100644
--- a/acceptance/rackspace/identity/v2/identity_test.go
+++ b/acceptance/rackspace/identity/v2/identity_test.go
@@ -6,6 +6,7 @@
 	"testing"
 
 	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/acceptance/tools"
 	"github.com/rackspace/gophercloud/rackspace"
 	th "github.com/rackspace/gophercloud/testhelper"
 )
diff --git a/acceptance/rackspace/objectstorage/v1/accounts_test.go b/acceptance/rackspace/objectstorage/v1/accounts_test.go
index 3a05646..145e4e0 100644
--- a/acceptance/rackspace/objectstorage/v1/accounts_test.go
+++ b/acceptance/rackspace/objectstorage/v1/accounts_test.go
@@ -13,23 +13,19 @@
 	c, err := createClient(t, false)
 	th.AssertNoErr(t, err)
 
-	headers, err := raxAccounts.Update(c, raxAccounts.UpdateOpts{Metadata: map[string]string{"white": "mountains"}}).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Update Account request: %+v\n", headers)
+	updateres := raxAccounts.Update(c, raxAccounts.UpdateOpts{Metadata: map[string]string{"white": "mountains"}})
+	th.AssertNoErr(t, updateres.Err)
+	t.Logf("Headers from Update Account request: %+v\n", updateres.Header)
 	defer func() {
-		_, err := raxAccounts.Update(c, raxAccounts.UpdateOpts{Metadata: map[string]string{"white": ""}}).ExtractHeaders()
-		th.AssertNoErr(t, err)
+		updateres = raxAccounts.Update(c, raxAccounts.UpdateOpts{Metadata: map[string]string{"white": ""}})
+		th.AssertNoErr(t, updateres.Err)
 		metadata, err := raxAccounts.Get(c).ExtractMetadata()
 		th.AssertNoErr(t, err)
 		t.Logf("Metadata from Get Account request (after update reverted): %+v\n", metadata)
 		th.CheckEquals(t, metadata["White"], "")
 	}()
 
-	getResult := raxAccounts.Get(c)
-	headers, err = getResult.ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Get Account request (after update): %+v\n", headers)
-	metadata, err := getResult.ExtractMetadata()
+	metadata, err := raxAccounts.Get(c).ExtractMetadata()
 	th.AssertNoErr(t, err)
 	t.Logf("Metadata from Get Account request (after update): %+v\n", metadata)
 
diff --git a/acceptance/rackspace/objectstorage/v1/cdncontainers_test.go b/acceptance/rackspace/objectstorage/v1/cdncontainers_test.go
index 2765f00..e1bf38b 100644
--- a/acceptance/rackspace/objectstorage/v1/cdncontainers_test.go
+++ b/acceptance/rackspace/objectstorage/v1/cdncontainers_test.go
@@ -16,20 +16,20 @@
 	raxClient, err := createClient(t, false)
 	th.AssertNoErr(t, err)
 
-	headers, err := raxContainers.Create(raxClient, "gophercloud-test", nil).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Create Container request: %+v\n", headers)
+	createres := raxContainers.Create(raxClient, "gophercloud-test", nil)
+	th.AssertNoErr(t, createres.Err)
+	t.Logf("Headers from Create Container request: %+v\n", createres.Header)
 	defer func() {
-		_, err := raxContainers.Delete(raxClient, "gophercloud-test").ExtractHeaders()
-		th.AssertNoErr(t, err)
+		res := raxContainers.Delete(raxClient, "gophercloud-test")
+		th.AssertNoErr(t, res.Err)
 	}()
 
 	raxCDNClient, err := createClient(t, true)
 	th.AssertNoErr(t, err)
 
-	headers, err = raxCDNContainers.Enable(raxCDNClient, "gophercloud-test", raxCDNContainers.EnableOpts{CDNEnabled: true, TTL: 900}).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Enable CDN Container request: %+v\n", headers)
+	r := raxCDNContainers.Enable(raxCDNClient, "gophercloud-test", raxCDNContainers.EnableOpts{CDNEnabled: true, TTL: 900})
+	th.AssertNoErr(t, r.Err)
+	t.Logf("Headers from Enable CDN Container request: %+v\n", r.Header)
 
 	t.Logf("Container Names available to the currently issued token:")
 	count := 0
@@ -48,14 +48,14 @@
 	})
 	th.AssertNoErr(t, err)
 	if count == 0 {
-		t.Errorf("No containers listed for your current token.")
+		t.Errorf("No CDN containers listed for your current token.")
 	}
 
-	headers, err = raxCDNContainers.Update(raxCDNClient, "gophercloud-test", raxCDNContainers.UpdateOpts{CDNEnabled: false}).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Update CDN Container request: %+v\n", headers)
+	updateres := raxCDNContainers.Update(raxCDNClient, "gophercloud-test", raxCDNContainers.UpdateOpts{CDNEnabled: false})
+	th.AssertNoErr(t, updateres.Err)
+	t.Logf("Headers from Update CDN Container request: %+v\n", updateres.Header)
 
-	headers, err = raxCDNContainers.Get(raxCDNClient, "gophercloud-test").ExtractHeaders()
+	metadata, err := raxCDNContainers.Get(raxCDNClient, "gophercloud-test").ExtractMetadata()
 	th.AssertNoErr(t, err)
-	t.Logf("Headers from Get CDN Container request (after update): %+v\n", headers)
+	t.Logf("Headers from Get CDN Container request (after update): %+v\n", metadata)
 }
diff --git a/acceptance/rackspace/objectstorage/v1/cdnobjects_test.go b/acceptance/rackspace/objectstorage/v1/cdnobjects_test.go
index 2d816f0..dfc2dca 100644
--- a/acceptance/rackspace/objectstorage/v1/cdnobjects_test.go
+++ b/acceptance/rackspace/objectstorage/v1/cdnobjects_test.go
@@ -17,30 +17,30 @@
 	raxClient, err := createClient(t, false)
 	th.AssertNoErr(t, err)
 
-	headers, err := raxContainers.Create(raxClient, "gophercloud-test", nil).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Create Container request: %+v\n", headers)
+	createContResult := raxContainers.Create(raxClient, "gophercloud-test", nil)
+	th.AssertNoErr(t, createContResult.Err)
+	t.Logf("Headers from Create Container request: %+v\n", createContResult.Header)
 	defer func() {
-		_, err := raxContainers.Delete(raxClient, "gophercloud-test").ExtractHeaders()
-		th.AssertNoErr(t, err)
+		deleteResult := raxContainers.Delete(raxClient, "gophercloud-test")
+		th.AssertNoErr(t, deleteResult.Err)
 	}()
 
-	headers, err = raxObjects.Create(raxClient, "gophercloud-test", "test-object", bytes.NewBufferString("gophercloud cdn test"), nil).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Create Object request: %+v\n", headers)
+	createObjResult := raxObjects.Create(raxClient, "gophercloud-test", "test-object", bytes.NewBufferString("gophercloud cdn test"), nil)
+	th.AssertNoErr(t, createObjResult.Err)
+	t.Logf("Headers from Create Object request: %+v\n", createObjResult.Header)
 	defer func() {
-		_, err := raxObjects.Delete(raxClient, "gophercloud-test", "test-object", nil).ExtractHeaders()
-		th.AssertNoErr(t, err)
+		deleteResult := raxObjects.Delete(raxClient, "gophercloud-test", "test-object", nil)
+		th.AssertNoErr(t, deleteResult.Err)
 	}()
 
 	raxCDNClient, err := createClient(t, true)
 	th.AssertNoErr(t, err)
 
-	headers, err = raxCDNContainers.Enable(raxCDNClient, "gophercloud-test", raxCDNContainers.EnableOpts{CDNEnabled: true, TTL: 900}).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Enable CDN Container request: %+v\n", headers)
+	enableResult := raxCDNContainers.Enable(raxCDNClient, "gophercloud-test", raxCDNContainers.EnableOpts{CDNEnabled: true, TTL: 900})
+	th.AssertNoErr(t, enableResult.Err)
+	t.Logf("Headers from Enable CDN Container request: %+v\n", enableResult.Header)
 
-	headers, err = raxCDNObjects.Delete(raxCDNClient, "gophercloud-test", "test-object", nil).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Delete CDN Object request: %+v\n", headers)
+	deleteResult := raxCDNObjects.Delete(raxCDNClient, "gophercloud-test", "test-object", nil)
+	th.AssertNoErr(t, deleteResult.Err)
+	t.Logf("Headers from Delete CDN Object request: %+v\n", deleteResult.Err)
 }
diff --git a/acceptance/rackspace/objectstorage/v1/common.go b/acceptance/rackspace/objectstorage/v1/common.go
index 59457c1..1ae0727 100644
--- a/acceptance/rackspace/objectstorage/v1/common.go
+++ b/acceptance/rackspace/objectstorage/v1/common.go
@@ -7,6 +7,7 @@
 	"testing"
 
 	"github.com/rackspace/gophercloud"
+	"github.com/rackspace/gophercloud/acceptance/tools"
 	"github.com/rackspace/gophercloud/rackspace"
 	th "github.com/rackspace/gophercloud/testhelper"
 )
diff --git a/acceptance/rackspace/objectstorage/v1/containers_test.go b/acceptance/rackspace/objectstorage/v1/containers_test.go
index d22057b..a7339cf 100644
--- a/acceptance/rackspace/objectstorage/v1/containers_test.go
+++ b/acceptance/rackspace/objectstorage/v1/containers_test.go
@@ -57,30 +57,28 @@
 		t.Errorf("No containers listed for your current token.")
 	}
 
-	headers, err := raxContainers.Create(c, "gophercloud-test", nil).ExtractHeaders()
-	th.AssertNoErr(t, err)
+	createres := raxContainers.Create(c, "gophercloud-test", nil)
+	th.AssertNoErr(t, createres.Err)
 	defer func() {
-		_, err := raxContainers.Delete(c, "gophercloud-test").ExtractHeaders()
-		th.AssertNoErr(t, err)
+		res := raxContainers.Delete(c, "gophercloud-test")
+		th.AssertNoErr(t, res.Err)
 	}()
 
-	headers, err = raxContainers.Update(c, "gophercloud-test", raxContainers.UpdateOpts{Metadata: map[string]string{"white": "mountains"}}).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Update Account request: %+v\n", headers)
+	updateres := raxContainers.Update(c, "gophercloud-test", raxContainers.UpdateOpts{Metadata: map[string]string{"white": "mountains"}})
+	th.AssertNoErr(t, updateres.Err)
+	t.Logf("Headers from Update Account request: %+v\n", updateres.Header)
 	defer func() {
-		_, err := raxContainers.Update(c, "gophercloud-test", raxContainers.UpdateOpts{Metadata: map[string]string{"white": ""}}).ExtractHeaders()
-		th.AssertNoErr(t, err)
+		res := raxContainers.Update(c, "gophercloud-test", raxContainers.UpdateOpts{Metadata: map[string]string{"white": ""}})
+		th.AssertNoErr(t, res.Err)
 		metadata, err := raxContainers.Get(c, "gophercloud-test").ExtractMetadata()
 		th.AssertNoErr(t, err)
 		t.Logf("Metadata from Get Account request (after update reverted): %+v\n", metadata)
 		th.CheckEquals(t, metadata["White"], "")
 	}()
 
-	getResult := raxContainers.Get(c, "gophercloud-test")
-	headers, err = getResult.ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Get Account request (after update): %+v\n", headers)
-	metadata, err := getResult.ExtractMetadata()
+	getres := raxContainers.Get(c, "gophercloud-test")
+	t.Logf("Headers from Get Account request (after update): %+v\n", getres.Header)
+	metadata, err := getres.ExtractMetadata()
 	th.AssertNoErr(t, err)
 	t.Logf("Metadata from Get Account request (after update): %+v\n", metadata)
 	th.CheckEquals(t, metadata["White"], "mountains")
diff --git a/acceptance/rackspace/objectstorage/v1/objects_test.go b/acceptance/rackspace/objectstorage/v1/objects_test.go
index 749f6d3..462f284 100644
--- a/acceptance/rackspace/objectstorage/v1/objects_test.go
+++ b/acceptance/rackspace/objectstorage/v1/objects_test.go
@@ -17,21 +17,21 @@
 	c, err := createClient(t, false)
 	th.AssertNoErr(t, err)
 
-	_, err = raxContainers.Create(c, "gophercloud-test", nil).ExtractHeaders()
-	th.AssertNoErr(t, err)
+	res := raxContainers.Create(c, "gophercloud-test", nil)
+	th.AssertNoErr(t, res.Err)
 
 	defer func() {
-		_, err := raxContainers.Delete(c, "gophercloud-test").ExtractHeaders()
-		th.AssertNoErr(t, err)
+		res := raxContainers.Delete(c, "gophercloud-test")
+		th.AssertNoErr(t, res.Err)
 	}()
 
 	content := bytes.NewBufferString("Lewis Carroll")
 	options := &osObjects.CreateOpts{ContentType: "text/plain"}
-	_, err = raxObjects.Create(c, "gophercloud-test", "o1", content, options).ExtractHeaders()
-	th.AssertNoErr(t, err)
+	createres := raxObjects.Create(c, "gophercloud-test", "o1", content, options)
+	th.AssertNoErr(t, createres.Err)
 	defer func() {
-		_, err := raxObjects.Delete(c, "gophercloud-test", "o1", nil).ExtractHeaders()
-		th.AssertNoErr(t, err)
+		res := raxObjects.Delete(c, "gophercloud-test", "o1", nil)
+		th.AssertNoErr(t, res.Err)
 	}()
 
 	t.Logf("Objects Info available to the currently issued token:")
@@ -77,11 +77,11 @@
 		t.Errorf("No objects listed for your current token.")
 	}
 
-	_, err = raxObjects.Copy(c, "gophercloud-test", "o1", &raxObjects.CopyOpts{Destination: "gophercloud-test/o2"}).ExtractHeaders()
-	th.AssertNoErr(t, err)
+	copyres := raxObjects.Copy(c, "gophercloud-test", "o1", &raxObjects.CopyOpts{Destination: "gophercloud-test/o2"})
+	th.AssertNoErr(t, copyres.Err)
 	defer func() {
-		_, err := raxObjects.Delete(c, "gophercloud-test", "o2", nil).ExtractHeaders()
-		th.AssertNoErr(t, err)
+		res := raxObjects.Delete(c, "gophercloud-test", "o2", nil)
+		th.AssertNoErr(t, res.Err)
 	}()
 
 	o1Content, err := raxObjects.Download(c, "gophercloud-test", "o1", nil).ExtractContent()
@@ -90,23 +90,22 @@
 	th.AssertNoErr(t, err)
 	th.AssertEquals(t, string(o2Content), string(o1Content))
 
-	headers, err := raxObjects.Update(c, "gophercloud-test", "o2", osObjects.UpdateOpts{Metadata: map[string]string{"white": "mountains"}}).ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Update Account request: %+v\n", headers)
+	updateres := raxObjects.Update(c, "gophercloud-test", "o2", osObjects.UpdateOpts{Metadata: map[string]string{"white": "mountains"}})
+	th.AssertNoErr(t, updateres.Err)
+	t.Logf("Headers from Update Account request: %+v\n", updateres.Header)
 	defer func() {
-		_, err := raxObjects.Update(c, "gophercloud-test", "o2", osObjects.UpdateOpts{Metadata: map[string]string{"white": ""}}).ExtractHeaders()
-		th.AssertNoErr(t, err)
+		res := raxObjects.Update(c, "gophercloud-test", "o2", osObjects.UpdateOpts{Metadata: map[string]string{"white": ""}})
+		th.AssertNoErr(t, res.Err)
 		metadata, err := raxObjects.Get(c, "gophercloud-test", "o2", nil).ExtractMetadata()
 		th.AssertNoErr(t, err)
 		t.Logf("Metadata from Get Account request (after update reverted): %+v\n", metadata)
 		th.CheckEquals(t, metadata["White"], "")
 	}()
 
-	getResult := raxObjects.Get(c, "gophercloud-test", "o2", nil)
-	headers, err = getResult.ExtractHeaders()
-	th.AssertNoErr(t, err)
-	t.Logf("Headers from Get Account request (after update): %+v\n", headers)
-	metadata, err := getResult.ExtractMetadata()
+	getres := raxObjects.Get(c, "gophercloud-test", "o2", nil)
+	th.AssertNoErr(t, getres.Err)
+	t.Logf("Headers from Get Account request (after update): %+v\n", getres.Header)
+	metadata, err := getres.ExtractMetadata()
 	th.AssertNoErr(t, err)
 	t.Logf("Metadata from Get Account request (after update): %+v\n", metadata)
 	th.CheckEquals(t, metadata["White"], "mountains")
diff --git a/openstack/objectstorage/v1/accounts/requests_test.go b/openstack/objectstorage/v1/accounts/requests_test.go
index 0ad8d33..d6dc26b 100644
--- a/openstack/objectstorage/v1/accounts/requests_test.go
+++ b/openstack/objectstorage/v1/accounts/requests_test.go
@@ -15,8 +15,8 @@
 	HandleGetAccountSuccessfully(t)
 
 	options := &UpdateOpts{Metadata: map[string]string{"gophercloud-test": "accounts"}}
-	_, err := Update(fake.ServiceClient(), options).Extract()
-	th.AssertNoErr(t, err)
+	res := Update(fake.ServiceClient(), options)
+	th.AssertNoErr(t, res.Err)
 }
 
 func TestGetAccount(t *testing.T) {
diff --git a/openstack/objectstorage/v1/accounts/results.go b/openstack/objectstorage/v1/accounts/results.go
index e42577a..ba379eb 100644
--- a/openstack/objectstorage/v1/accounts/results.go
+++ b/openstack/objectstorage/v1/accounts/results.go
@@ -1,7 +1,6 @@
 package accounts
 
 import (
-	"net/http"
 	"strings"
 
 	"github.com/rackspace/gophercloud"
@@ -33,9 +32,3 @@
 type UpdateResult struct {
 	gophercloud.Result
 }
-
-// Extract returns the unmodified HTTP headers and any error conditions encountered during the
-// metadata update.
-func (ur UpdateResult) Extract() (http.Header, error) {
-	return ur.Header, ur.Err
-}
diff --git a/openstack/objectstorage/v1/containers/results.go b/openstack/objectstorage/v1/containers/results.go
index 780d4ae..c00a4bc 100644
--- a/openstack/objectstorage/v1/containers/results.go
+++ b/openstack/objectstorage/v1/containers/results.go
@@ -2,7 +2,6 @@
 
 import (
 	"fmt"
-	"net/http"
 	"strings"
 
 	"github.com/rackspace/gophercloud"
@@ -97,9 +96,13 @@
 	}
 }
 
+type commonResult struct {
+	gophercloud.Result
+}
+
 // GetResult represents the result of a get operation.
 type GetResult struct {
-	gophercloud.Result
+	commonResult
 }
 
 // ExtractMetadata is a function that takes a GetResult (of type *http.Response)
@@ -118,32 +121,23 @@
 	return metadata, nil
 }
 
-type headerResult struct {
-	gophercloud.Result
-}
-
-// Extract pulls the unmodified headers from a Create, Update, or Delete result.
-func (result headerResult) Extract() (http.Header, error) {
-	return result.Header, result.Err
-}
-
 // CreateResult represents the result of a create operation. To extract the
 // the headers from the HTTP response, you can invoke the 'ExtractHeaders'
 // method on the result struct.
 type CreateResult struct {
-	headerResult
+	commonResult
 }
 
 // UpdateResult represents the result of an update operation. To extract the
 // the headers from the HTTP response, you can invoke the 'ExtractHeaders'
 // method on the result struct.
 type UpdateResult struct {
-	headerResult
+	commonResult
 }
 
 // DeleteResult represents the result of a delete operation. To extract the
 // the headers from the HTTP response, you can invoke the 'ExtractHeaders'
 // method on the result struct.
 type DeleteResult struct {
-	headerResult
+	commonResult
 }
diff --git a/openstack/objectstorage/v1/objects/results.go b/openstack/objectstorage/v1/objects/results.go
index e662b69..f85f1ac 100644
--- a/openstack/objectstorage/v1/objects/results.go
+++ b/openstack/objectstorage/v1/objects/results.go
@@ -2,7 +2,6 @@
 
 import (
 	"fmt"
-	"net/http"
 	"strings"
 
 	"github.com/rackspace/gophercloud"
@@ -96,9 +95,13 @@
 	}
 }
 
+type commonResult struct {
+	gophercloud.Result
+}
+
 // DownloadResult is a *http.Response that is returned from a call to the Download function.
 type DownloadResult struct {
-	gophercloud.Result
+	commonResult
 }
 
 // ExtractContent is a function that takes a DownloadResult (of type *http.Response)
@@ -112,7 +115,7 @@
 
 // GetResult is a *http.Response that is returned from a call to the Get function.
 type GetResult struct {
-	gophercloud.Result
+	commonResult
 }
 
 // ExtractMetadata is a function that takes a GetResult (of type *http.Response)
@@ -131,32 +134,22 @@
 	return metadata, nil
 }
 
-type headerResult struct {
-	gophercloud.Result
-}
-
-// Extract returns the unmodified HTTP response headers from a Create, Update, or Delete call, as
-// well as any errors that occurred during the call.
-func (result headerResult) Extract() (http.Header, error) {
-	return result.Header, result.Err
-}
-
 // CreateResult represents the result of a create operation.
 type CreateResult struct {
-	headerResult
+	commonResult
 }
 
 // UpdateResult represents the result of an update operation.
 type UpdateResult struct {
-	headerResult
+	commonResult
 }
 
 // DeleteResult represents the result of a delete operation.
 type DeleteResult struct {
-	headerResult
+	commonResult
 }
 
 // CopyResult represents the result of a copy operation.
 type CopyResult struct {
-	headerResult
+	commonResult
 }