move unit tests into 'testing' directories
diff --git a/openstack/compute/v2/extensions/quotasets/results.go b/openstack/compute/v2/extensions/quotasets/results.go
index cbf4d6b..f6c4e5a 100644
--- a/openstack/compute/v2/extensions/quotasets/results.go
+++ b/openstack/compute/v2/extensions/quotasets/results.go
@@ -1,39 +1,38 @@
 package quotasets
 
 import (
-	"github.com/mitchellh/mapstructure"
-	"github.com/rackspace/gophercloud"
-	"github.com/rackspace/gophercloud/pagination"
+	"github.com/gophercloud/gophercloud"
+	"github.com/gophercloud/gophercloud/pagination"
 )
 
 // QuotaSet is a set of operational limits that allow for control of compute usage.
 type QuotaSet struct {
 	//ID is tenant associated with this quota_set
-	ID string `mapstructure:"id"`
+	ID string `json:"id"`
 	//FixedIps is number of fixed ips alloted this quota_set
-	FixedIps int `mapstructure:"fixed_ips"`
+	FixedIps int `json:"fixed_ips"`
 	// FloatingIps is number of floating ips alloted this quota_set
-	FloatingIps int `mapstructure:"floating_ips"`
+	FloatingIps int `json:"floating_ips"`
 	// InjectedFileContentBytes is content bytes allowed for each injected file
-	InjectedFileContentBytes int `mapstructure:"injected_file_content_bytes"`
+	InjectedFileContentBytes int `json:"injected_file_content_bytes"`
 	// InjectedFilePathBytes is allowed bytes for each injected file path
-	InjectedFilePathBytes int `mapstructure:"injected_file_path_bytes"`
+	InjectedFilePathBytes int `json:"injected_file_path_bytes"`
 	// InjectedFiles is injected files allowed for each project
-	InjectedFiles int `mapstructure:"injected_files"`
+	InjectedFiles int `json:"injected_files"`
 	// KeyPairs is number of ssh keypairs
-	KeyPairs int `mapstructure:"keypairs"`
+	KeyPairs int `json:"keypairs"`
 	// MetadataItems is number of metadata items allowed for each instance
-	MetadataItems int `mapstructure:"metadata_items"`
+	MetadataItems int `json:"metadata_items"`
 	// Ram is megabytes allowed for each instance
-	Ram int `mapstructure:"ram"`
+	Ram int `json:"ram"`
 	// SecurityGroupRules is rules allowed for each security group
-	SecurityGroupRules int `mapstructure:"security_group_rules"`
+	SecurityGroupRules int `json:"security_group_rules"`
 	// SecurityGroups security groups allowed for each project
-	SecurityGroups int `mapstructure:"security_groups"`
+	SecurityGroups int `json:"security_groups"`
 	// Cores is number of instance cores allowed for each project
-	Cores int `mapstructure:"cores"`
+	Cores int `json:"cores"`
 	// Instances is number of instances allowed for each project
-	Instances int `mapstructure:"instances"`
+	Instances int `json:"instances"`
 }
 
 // QuotaSetPage stores a single, only page of QuotaSet results from a List call.
@@ -48,17 +47,12 @@
 }
 
 // ExtractQuotaSets interprets a page of results as a slice of QuotaSets.
-func ExtractQuotaSets(page pagination.Page) ([]QuotaSet, error) {
-	var resp struct {
-		QuotaSets []QuotaSet `mapstructure:"quotas"`
+func ExtractQuotaSets(r pagination.Page) ([]QuotaSet, error) {
+	var s struct {
+		QuotaSets []QuotaSet `json:"quotas"`
 	}
-
-	err := mapstructure.Decode(page.(QuotaSetPage).Body, &resp)
-	results := make([]QuotaSet, len(resp.QuotaSets))
-	for i, q := range resp.QuotaSets {
-		results[i] = q
-	}
-	return results, err
+	err := (r.(QuotaSetPage)).ExtractInto(&s)
+	return s.QuotaSets, err
 }
 
 type quotaResult struct {
@@ -67,16 +61,11 @@
 
 // Extract is a method that attempts to interpret any QuotaSet resource response as a QuotaSet struct.
 func (r quotaResult) Extract() (*QuotaSet, error) {
-	if r.Err != nil {
-		return nil, r.Err
+	var s struct {
+		QuotaSet *QuotaSet `json:"quota_set"`
 	}
-
-	var res struct {
-		QuotaSet *QuotaSet `json:"quota_set" mapstructure:"quota_set"`
-	}
-
-	err := mapstructure.Decode(r.Body, &res)
-	return res.QuotaSet, err
+	err := r.ExtractInto(&s)
+	return s.QuotaSet, err
 }
 
 // GetResult is the response from a Get operation. Call its Extract method to interpret it