Feature/filestorage securityservices list (#134)
* sfs: Add support for security services List
* sfs: Add acceptance tests for security service List
* sfs: Remove extra parameters for security service list
After taking a closer look at the code, some parameters
seem to be filtered out during the list request. They
have now been filtered out.
* sfs: Fix unit tests
* sfs: Use SecurityServiceType for ListOpts Type
diff --git a/openstack/sharedfilesystems/v2/securityservices/testing/fixtures.go b/openstack/sharedfilesystems/v2/securityservices/testing/fixtures.go
index e6b101a..c6b5f70 100644
--- a/openstack/sharedfilesystems/v2/securityservices/testing/fixtures.go
+++ b/openstack/sharedfilesystems/v2/securityservices/testing/fixtures.go
@@ -58,3 +58,80 @@
w.WriteHeader(http.StatusAccepted)
})
}
+
+func MockListResponse(t *testing.T) {
+ th.Mux.HandleFunc("/security-services/detail", func(w http.ResponseWriter, r *http.Request) {
+ th.TestMethod(t, r, "GET")
+ th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+
+ w.Header().Add("Content-Type", "application/json")
+ w.WriteHeader(http.StatusOK)
+
+ fmt.Fprintf(w, `
+ {
+ "security_services": [
+ {
+ "status": "new",
+ "domain": null,
+ "project_id": "16e1ab15c35a457e9c2b2aa189f544e1",
+ "name": "SecServ1",
+ "created_at": "2015-09-07T12:19:10.000000",
+ "description": "Creating my first Security Service",
+ "updated_at": null,
+ "server": null,
+ "dns_ip": "10.0.0.0/24",
+ "user": "demo",
+ "password": "supersecret",
+ "type": "kerberos",
+ "id": "3c829734-0679-4c17-9637-801da48c0d5f"
+ },
+ {
+ "status": "new",
+ "domain": null,
+ "project_id": "16e1ab15c35a457e9c2b2aa189f544e1",
+ "name": "SecServ2",
+ "created_at": "2015-09-07T12:25:03.000000",
+ "description": "Creating my second Security Service",
+ "updated_at": null,
+ "server": null,
+ "dns_ip": "10.0.0.0/24",
+ "user": null,
+ "password": null,
+ "type": "ldap",
+ "id": "5a1d3a12-34a7-4087-8983-50e9ed03509a"
+ }
+ ]
+ }`)
+ })
+}
+
+func MockFilteredListResponse(t *testing.T) {
+ th.Mux.HandleFunc("/security-services/detail", func(w http.ResponseWriter, r *http.Request) {
+ th.TestMethod(t, r, "GET")
+ th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+
+ w.Header().Add("Content-Type", "application/json")
+ w.WriteHeader(http.StatusOK)
+
+ fmt.Fprintf(w, `
+ {
+ "security_services": [
+ {
+ "status": "new",
+ "domain": null,
+ "project_id": "16e1ab15c35a457e9c2b2aa189f544e1",
+ "name": "SecServ1",
+ "created_at": "2015-09-07T12:19:10.000000",
+ "description": "Creating my first Security Service",
+ "updated_at": null,
+ "server": null,
+ "dns_ip": "10.0.0.0/24",
+ "user": "demo",
+ "password": "supersecret",
+ "type": "kerberos",
+ "id": "3c829734-0679-4c17-9637-801da48c0d5f"
+ }
+ ]
+ }`)
+ })
+}
diff --git a/openstack/sharedfilesystems/v2/securityservices/testing/requests_test.go b/openstack/sharedfilesystems/v2/securityservices/testing/requests_test.go
index 8ef88ee..9feff53 100644
--- a/openstack/sharedfilesystems/v2/securityservices/testing/requests_test.go
+++ b/openstack/sharedfilesystems/v2/securityservices/testing/requests_test.go
@@ -2,6 +2,7 @@
import (
"testing"
+ "time"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack/sharedfilesystems/v2/securityservices"
@@ -62,3 +63,88 @@
res := securityservices.Delete(client.ServiceClient(), "securityServiceID")
th.AssertNoErr(t, res.Err)
}
+
+// Verifies that security services can be listed correctly
+func TestList(t *testing.T) {
+ th.SetupHTTP()
+ defer th.TeardownHTTP()
+
+ MockListResponse(t)
+
+ allPages, err := securityservices.List(client.ServiceClient(), &securityservices.ListOpts{}).AllPages()
+ th.AssertNoErr(t, err)
+ actual, err := securityservices.ExtractSecurityServices(allPages)
+ th.AssertNoErr(t, err)
+ var nilTime time.Time
+ expected := []securityservices.SecurityService{
+ {
+ Status: "new",
+ Domain: "",
+ ProjectID: "16e1ab15c35a457e9c2b2aa189f544e1",
+ Name: "SecServ1",
+ CreatedAt: time.Date(2015, 9, 7, 12, 19, 10, 0, time.UTC),
+ Description: "Creating my first Security Service",
+ UpdatedAt: nilTime,
+ Server: "",
+ DNSIP: "10.0.0.0/24",
+ User: "demo",
+ Password: "supersecret",
+ Type: "kerberos",
+ ID: "3c829734-0679-4c17-9637-801da48c0d5f",
+ },
+ {
+ Status: "new",
+ Domain: "",
+ ProjectID: "16e1ab15c35a457e9c2b2aa189f544e1",
+ Name: "SecServ2",
+ CreatedAt: time.Date(2015, 9, 7, 12, 25, 03, 0, time.UTC),
+ Description: "Creating my second Security Service",
+ UpdatedAt: nilTime,
+ Server: "",
+ DNSIP: "10.0.0.0/24",
+ User: "",
+ Password: "",
+ Type: "ldap",
+ ID: "5a1d3a12-34a7-4087-8983-50e9ed03509a",
+ },
+ }
+
+ th.CheckDeepEquals(t, expected, actual)
+}
+
+// Verifies that security services list can be called with query parameters
+func TestFilteredList(t *testing.T) {
+ th.SetupHTTP()
+ defer th.TeardownHTTP()
+
+ MockFilteredListResponse(t)
+
+ options := &securityservices.ListOpts{
+ Type: "kerberos",
+ }
+
+ allPages, err := securityservices.List(client.ServiceClient(), options).AllPages()
+ th.AssertNoErr(t, err)
+ actual, err := securityservices.ExtractSecurityServices(allPages)
+ th.AssertNoErr(t, err)
+ var nilTime time.Time
+ expected := []securityservices.SecurityService{
+ {
+ Status: "new",
+ Domain: "",
+ ProjectID: "16e1ab15c35a457e9c2b2aa189f544e1",
+ Name: "SecServ1",
+ CreatedAt: time.Date(2015, 9, 7, 12, 19, 10, 0, time.UTC),
+ Description: "Creating my first Security Service",
+ UpdatedAt: nilTime,
+ Server: "",
+ DNSIP: "10.0.0.0/24",
+ User: "demo",
+ Password: "supersecret",
+ Type: "kerberos",
+ ID: "3c829734-0679-4c17-9637-801da48c0d5f",
+ },
+ }
+
+ th.CheckDeepEquals(t, expected, actual)
+}