move unit tests into 'testing' directories
diff --git a/openstack/compute/v2/extensions/secgroups/testing/doc.go b/openstack/compute/v2/extensions/secgroups/testing/doc.go
new file mode 100644
index 0000000..7603f83
--- /dev/null
+++ b/openstack/compute/v2/extensions/secgroups/testing/doc.go
@@ -0,0 +1 @@
+package testing
diff --git a/openstack/compute/v2/extensions/secgroups/fixtures.go b/openstack/compute/v2/extensions/secgroups/testing/fixtures.go
similarity index 99%
rename from openstack/compute/v2/extensions/secgroups/fixtures.go
rename to openstack/compute/v2/extensions/secgroups/testing/fixtures.go
index e4ca587..8a83ca8 100644
--- a/openstack/compute/v2/extensions/secgroups/fixtures.go
+++ b/openstack/compute/v2/extensions/secgroups/testing/fixtures.go
@@ -1,6 +1,4 @@
-// +build fixtures
-
-package secgroups
+package testing
 
 import (
 	"fmt"
diff --git a/openstack/compute/v2/extensions/secgroups/requests_test.go b/openstack/compute/v2/extensions/secgroups/testing/requests_test.go
similarity index 65%
rename from openstack/compute/v2/extensions/secgroups/requests_test.go
rename to openstack/compute/v2/extensions/secgroups/testing/requests_test.go
index bdbedcd..b7ffa20 100644
--- a/openstack/compute/v2/extensions/secgroups/requests_test.go
+++ b/openstack/compute/v2/extensions/secgroups/testing/requests_test.go
@@ -1,8 +1,9 @@
-package secgroups
+package testing
 
 import (
 	"testing"
 
+	"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/secgroups"
 	"github.com/gophercloud/gophercloud/pagination"
 	th "github.com/gophercloud/gophercloud/testhelper"
 	"github.com/gophercloud/gophercloud/testhelper/client"
@@ -22,20 +23,20 @@
 
 	count := 0
 
-	err := List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
+	err := secgroups.List(client.ServiceClient()).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractSecurityGroups(page)
+		actual, err := secgroups.ExtractSecurityGroups(page)
 		if err != nil {
 			t.Errorf("Failed to extract users: %v", err)
 			return false, err
 		}
 
-		expected := []SecurityGroup{
-			SecurityGroup{
+		expected := []secgroups.SecurityGroup{
+			{
 				ID:          groupID,
 				Description: "default",
 				Name:        "default",
-				Rules:       []Rule{},
+				Rules:       []secgroups.Rule{},
 				TenantID:    "openstack",
 			},
 		}
@@ -57,20 +58,20 @@
 
 	count := 0
 
-	err := ListByServer(client.ServiceClient(), serverID).EachPage(func(page pagination.Page) (bool, error) {
+	err := secgroups.ListByServer(client.ServiceClient(), serverID).EachPage(func(page pagination.Page) (bool, error) {
 		count++
-		actual, err := ExtractSecurityGroups(page)
+		actual, err := secgroups.ExtractSecurityGroups(page)
 		if err != nil {
 			t.Errorf("Failed to extract users: %v", err)
 			return false, err
 		}
 
-		expected := []SecurityGroup{
-			SecurityGroup{
+		expected := []secgroups.SecurityGroup{
+			{
 				ID:          groupID,
 				Description: "default",
 				Name:        "default",
-				Rules:       []Rule{},
+				Rules:       []secgroups.Rule{},
 				TenantID:    "openstack",
 			},
 		}
@@ -90,20 +91,20 @@
 
 	mockCreateGroupResponse(t)
 
-	opts := CreateOpts{
+	opts := secgroups.CreateOpts{
 		Name:        "test",
 		Description: "something",
 	}
 
-	group, err := Create(client.ServiceClient(), opts).Extract()
+	group, err := secgroups.Create(client.ServiceClient(), opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &SecurityGroup{
+	expected := &secgroups.SecurityGroup{
 		ID:          groupID,
 		Name:        "test",
 		Description: "something",
 		TenantID:    "openstack",
-		Rules:       []Rule{},
+		Rules:       []secgroups.Rule{},
 	}
 	th.AssertDeepEquals(t, expected, group)
 }
@@ -114,20 +115,20 @@
 
 	mockUpdateGroupResponse(t, groupID)
 
-	opts := UpdateOpts{
+	opts := secgroups.UpdateOpts{
 		Name:        "new_name",
 		Description: "new_desc",
 	}
 
-	group, err := Update(client.ServiceClient(), groupID, opts).Extract()
+	group, err := secgroups.Update(client.ServiceClient(), groupID, opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &SecurityGroup{
+	expected := &secgroups.SecurityGroup{
 		ID:          groupID,
 		Name:        "new_name",
 		Description: "something",
 		TenantID:    "openstack",
-		Rules:       []Rule{},
+		Rules:       []secgroups.Rule{},
 	}
 	th.AssertDeepEquals(t, expected, group)
 }
@@ -138,21 +139,21 @@
 
 	mockGetGroupsResponse(t, groupID)
 
-	group, err := Get(client.ServiceClient(), groupID).Extract()
+	group, err := secgroups.Get(client.ServiceClient(), groupID).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &SecurityGroup{
+	expected := &secgroups.SecurityGroup{
 		ID:          groupID,
 		Description: "default",
 		Name:        "default",
 		TenantID:    "openstack",
-		Rules: []Rule{
-			Rule{
+		Rules: []secgroups.Rule{
+			{
 				FromPort:      80,
 				ToPort:        85,
 				IPProtocol:    "TCP",
-				IPRange:       IPRange{CIDR: "0.0.0.0"},
-				Group:         Group{TenantID: "openstack", Name: "default"},
+				IPRange:       secgroups.IPRange{CIDR: "0.0.0.0"},
+				Group:         secgroups.Group{TenantID: "openstack", Name: "default"},
 				ParentGroupID: groupID,
 				ID:            ruleID,
 			},
@@ -170,10 +171,10 @@
 
 	mockGetNumericIDGroupResponse(t, numericGroupID)
 
-	group, err := Get(client.ServiceClient(), "12345").Extract()
+	group, err := secgroups.Get(client.ServiceClient(), "12345").Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &SecurityGroup{ID: "12345"}
+	expected := &secgroups.SecurityGroup{ID: "12345"}
 	th.AssertDeepEquals(t, expected, group)
 }
 
@@ -183,7 +184,7 @@
 
 	mockDeleteGroupResponse(t, groupID)
 
-	err := Delete(client.ServiceClient(), groupID).ExtractErr()
+	err := secgroups.Delete(client.ServiceClient(), groupID).ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -193,7 +194,7 @@
 
 	mockAddRuleResponse(t)
 
-	opts := CreateRuleOpts{
+	opts := secgroups.CreateRuleOpts{
 		ParentGroupID: groupID,
 		FromPort:      22,
 		ToPort:        22,
@@ -201,16 +202,16 @@
 		CIDR:          "0.0.0.0/0",
 	}
 
-	rule, err := CreateRule(client.ServiceClient(), opts).Extract()
+	rule, err := secgroups.CreateRule(client.ServiceClient(), opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &Rule{
+	expected := &secgroups.Rule{
 		FromPort:      22,
 		ToPort:        22,
-		Group:         Group{},
+		Group:         secgroups.Group{},
 		IPProtocol:    "TCP",
 		ParentGroupID: groupID,
-		IPRange:       IPRange{CIDR: "0.0.0.0/0"},
+		IPRange:       secgroups.IPRange{CIDR: "0.0.0.0/0"},
 		ID:            ruleID,
 	}
 
@@ -223,7 +224,7 @@
 
 	mockAddRuleResponseICMPZero(t)
 
-	opts := CreateRuleOpts{
+	opts := secgroups.CreateRuleOpts{
 		ParentGroupID: groupID,
 		FromPort:      0,
 		ToPort:        0,
@@ -231,16 +232,16 @@
 		CIDR:          "0.0.0.0/0",
 	}
 
-	rule, err := CreateRule(client.ServiceClient(), opts).Extract()
+	rule, err := secgroups.CreateRule(client.ServiceClient(), opts).Extract()
 	th.AssertNoErr(t, err)
 
-	expected := &Rule{
+	expected := &secgroups.Rule{
 		FromPort:      0,
 		ToPort:        0,
-		Group:         Group{},
+		Group:         secgroups.Group{},
 		IPProtocol:    "ICMP",
 		ParentGroupID: groupID,
-		IPRange:       IPRange{CIDR: "0.0.0.0/0"},
+		IPRange:       secgroups.IPRange{CIDR: "0.0.0.0/0"},
 		ID:            ruleID,
 	}
 
@@ -253,7 +254,7 @@
 
 	mockDeleteRuleResponse(t, ruleID)
 
-	err := DeleteRule(client.ServiceClient(), ruleID).ExtractErr()
+	err := secgroups.DeleteRule(client.ServiceClient(), ruleID).ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -263,7 +264,7 @@
 
 	mockAddServerToGroupResponse(t, serverID)
 
-	err := AddServer(client.ServiceClient(), serverID, "test").ExtractErr()
+	err := secgroups.AddServer(client.ServiceClient(), serverID, "test").ExtractErr()
 	th.AssertNoErr(t, err)
 }
 
@@ -273,6 +274,6 @@
 
 	mockRemoveServerFromGroupResponse(t, serverID)
 
-	err := RemoveServer(client.ServiceClient(), serverID, "test").ExtractErr()
+	err := secgroups.RemoveServer(client.ServiceClient(), serverID, "test").ExtractErr()
 	th.AssertNoErr(t, err)
 }