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/acceptance/openstack/sharedfilesystems/v2/securityservices_test.go b/acceptance/openstack/sharedfilesystems/v2/securityservices_test.go
index 0249733..5e2b45e 100644
--- a/acceptance/openstack/sharedfilesystems/v2/securityservices_test.go
+++ b/acceptance/openstack/sharedfilesystems/v2/securityservices_test.go
@@ -4,6 +4,7 @@
 	"testing"
 
 	"github.com/gophercloud/gophercloud/acceptance/clients"
+	"github.com/gophercloud/gophercloud/openstack/sharedfilesystems/v2/securityservices"
 )
 
 func TestSecurityServiceCreateDelete(t *testing.T) {
@@ -21,3 +22,66 @@
 
 	defer DeleteSecurityService(t, client, securityService)
 }
+
+func TestSecurityServiceList(t *testing.T) {
+	client, err := clients.NewSharedFileSystemV2Client()
+	if err != nil {
+		t.Fatalf("Unable to create a shared file system client: %v", err)
+	}
+
+	allPages, err := securityservices.List(client, securityservices.ListOpts{}).AllPages()
+	if err != nil {
+		t.Fatalf("Unable to retrieve security services: %v", err)
+	}
+
+	allSecurityServices, err := securityservices.ExtractSecurityServices(allPages)
+	if err != nil {
+		t.Fatalf("Unable to extract security services: %v", err)
+	}
+
+	for _, securityService := range allSecurityServices {
+		PrintSecurityService(t, &securityService)
+	}
+}
+
+// The test creates 2 security services and verifies that only the one(s) with
+// a particular name are being listed
+func TestSecurityServiceListFiltering(t *testing.T) {
+	client, err := clients.NewSharedFileSystemV2Client()
+	if err != nil {
+		t.Fatalf("Unable to create a shared file system client: %v", err)
+	}
+
+	securityService, err := CreateSecurityService(t, client)
+	if err != nil {
+		t.Fatalf("Unable to create security service: %v", err)
+	}
+	defer DeleteSecurityService(t, client, securityService)
+
+	securityService, err = CreateSecurityService(t, client)
+	if err != nil {
+		t.Fatalf("Unable to create security service: %v", err)
+	}
+	defer DeleteSecurityService(t, client, securityService)
+
+	options := securityservices.ListOpts{
+		Name: securityService.Name,
+	}
+
+	allPages, err := securityservices.List(client, options).AllPages()
+	if err != nil {
+		t.Fatalf("Unable to retrieve security services: %v", err)
+	}
+
+	allSecurityServices, err := securityservices.ExtractSecurityServices(allPages)
+	if err != nil {
+		t.Fatalf("Unable to extract security services: %v", err)
+	}
+
+	for _, listedSecurityService := range allSecurityServices {
+		if listedSecurityService.Name != securityService.Name {
+			t.Fatalf("The name of the security service was expected to be %s", securityService.Name)
+		}
+		PrintSecurityService(t, &listedSecurityService)
+	}
+}