Added Cinder Storage Pools API

Change-Id: I9b57058c313ae961fa90bc02f69dfd4be6afef03
diff --git a/openstack/blockstorage/extensions/schedulerstats/testing/fixtures.go b/openstack/blockstorage/extensions/schedulerstats/testing/fixtures.go
new file mode 100644
index 0000000..39e5618
--- /dev/null
+++ b/openstack/blockstorage/extensions/schedulerstats/testing/fixtures.go
@@ -0,0 +1,106 @@
+package testing
+
+import (
+	"fmt"
+	"math"
+	"net/http"
+	"testing"
+
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/blockstorage/extensions/schedulerstats"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper/client"
+)
+
+const StoragePoolsListBody = `
+{
+    "pools": [
+        {
+            "name": "rbd:cinder.volumes.ssd@cinder.volumes.ssd#cinder.volumes.ssd"
+        },
+        {
+            "name": "rbd:cinder.volumes.hdd@cinder.volumes#cinder.volumes.hdd"
+        }
+    ]
+}
+`
+
+const StoragePoolsListBodyDetail = `
+{
+    "pools": [
+        {
+            "capabilities": {
+                "driver_version": "1.2.0",
+                "filter_function": null,
+                "free_capacity_gb": 64765,
+                "goodness_function": null,
+                "multiattach": false,
+                "reserved_percentage": 0,
+                "storage_protocol": "ceph",
+                "timestamp": "2016-11-24T10:33:51.248360",
+                "total_capacity_gb": 787947.93,
+                "vendor_name": "Open Source",
+                "volume_backend_name": "cinder.volumes.ssd"
+            },
+            "name": "rbd:cinder.volumes.ssd@cinder.volumes.ssd#cinder.volumes.ssd"
+        },
+        {
+            "capabilities": {
+                "driver_version": "1.2.0",
+                "filter_function": null,
+                "free_capacity_gb": "unknown",
+                "goodness_function": null,
+                "multiattach": false,
+                "reserved_percentage": 0,
+                "storage_protocol": "ceph",
+                "timestamp": "2016-11-24T10:33:43.138628",
+                "total_capacity_gb": "infinite",
+                "vendor_name": "Open Source",
+                "volume_backend_name": "cinder.volumes.hdd"
+            },
+            "name": "rbd:cinder.volumes.hdd@cinder.volumes.hdd#cinder.volumes.hdd"
+        }
+    ]
+}
+`
+
+var (
+	StoragePoolFake1 = schedulerstats.StoragePool{
+		Name: "rbd:cinder.volumes.ssd@cinder.volumes.ssd#cinder.volumes.ssd",
+		Capabilities: schedulerstats.Capabilities{
+			DriverVersion:     "1.2.0",
+			FreeCapacityGB:    64765,
+			StorageProtocol:   "ceph",
+			TotalCapacityGB:   787947.93,
+			VendorName:        "Open Source",
+			VolumeBackendName: "cinder.volumes.ssd",
+		},
+	}
+
+	StoragePoolFake2 = schedulerstats.StoragePool{
+		Name: "rbd:cinder.volumes.hdd@cinder.volumes.hdd#cinder.volumes.hdd",
+		Capabilities: schedulerstats.Capabilities{
+			DriverVersion:     "1.2.0",
+			FreeCapacityGB:    0.0,
+			StorageProtocol:   "ceph",
+			TotalCapacityGB:   math.Inf(1),
+			VendorName:        "Open Source",
+			VolumeBackendName: "cinder.volumes.hdd",
+		},
+	}
+)
+
+func HandleStoragePoolsListSuccessfully(t *testing.T) {
+	testhelper.Mux.HandleFunc("/scheduler-stats/get_pools", func(w http.ResponseWriter, r *http.Request) {
+		testhelper.TestMethod(t, r, "GET")
+		testhelper.TestHeader(t, r, "X-Auth-Token", client.TokenID)
+
+		w.Header().Add("Content-Type", "application/json")
+
+		r.ParseForm()
+		if r.FormValue("detail") == "true" {
+			fmt.Fprintf(w, StoragePoolsListBodyDetail)
+		} else {
+			fmt.Fprintf(w, StoragePoolsListBody)
+		}
+	})
+}
diff --git a/openstack/blockstorage/extensions/schedulerstats/testing/requests_test.go b/openstack/blockstorage/extensions/schedulerstats/testing/requests_test.go
new file mode 100644
index 0000000..810a9da
--- /dev/null
+++ b/openstack/blockstorage/extensions/schedulerstats/testing/requests_test.go
@@ -0,0 +1,38 @@
+package testing
+
+import (
+	"testing"
+
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/blockstorage/extensions/schedulerstats"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper"
+	"gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper/client"
+)
+
+func TestListStoragePoolsDetail(t *testing.T) {
+	testhelper.SetupHTTP()
+	defer testhelper.TeardownHTTP()
+	HandleStoragePoolsListSuccessfully(t)
+
+	pages := 0
+	err := schedulerstats.List(client.ServiceClient(), schedulerstats.ListOpts{Detail: true}).EachPage(func(page pagination.Page) (bool, error) {
+		pages++
+
+		actual, err := schedulerstats.ExtractStoragePools(page)
+		testhelper.AssertNoErr(t, err)
+
+		if len(actual) != 2 {
+			t.Fatalf("Expected 2 backends, got %d", len(actual))
+		}
+		testhelper.CheckDeepEquals(t, StoragePoolFake1, actual[0])
+		testhelper.CheckDeepEquals(t, StoragePoolFake2, actual[1])
+
+		return true, nil
+	})
+
+	testhelper.AssertNoErr(t, err)
+
+	if pages != 1 {
+		t.Errorf("Expected 1 page, saw %d", pages)
+	}
+}