Feature/filestorage sharetype unsetextraspecs (#148)
* sfs: Add support for share type Unset Extra Specs
* sfs: Add acceptance tests for share type Unset Extra Specs
diff --git a/acceptance/openstack/sharedfilesystems/v2/sharetypes_test.go b/acceptance/openstack/sharedfilesystems/v2/sharetypes_test.go
index d54b3f7..1209443 100644
--- a/acceptance/openstack/sharedfilesystems/v2/sharetypes_test.go
+++ b/acceptance/openstack/sharedfilesystems/v2/sharetypes_test.go
@@ -95,6 +95,20 @@
t.Fatal("my_new_key was expected to be equal to my_value")
}
+ err = sharetypes.UnsetExtraSpecs(client, shareType.ID, "my_new_key").ExtractErr()
+ if err != nil {
+ t.Fatalf("Unable to unset extra specs for Share type: %s", shareType.Name)
+ }
+
+ extraSpecs, err = sharetypes.GetExtraSpecs(client, shareType.ID).Extract()
+ if err != nil {
+ t.Fatalf("Unable to retrieve share type: %s", shareType.Name)
+ }
+
+ if _, ok := extraSpecs["my_new_key"]; ok {
+ t.Fatalf("my_new_key was expected to be unset for Share type: %s", shareType.Name)
+ }
+
PrintShareType(t, shareType)
defer DeleteShareType(t, client, shareType)
diff --git a/openstack/sharedfilesystems/v2/sharetypes/requests.go b/openstack/sharedfilesystems/v2/sharetypes/requests.go
index 0b6744b..dca43af 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/requests.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/requests.go
@@ -137,3 +137,9 @@
})
return
}
+
+// UnsetExtraSpecs will unset an extra specification for an existing ShareType.
+func UnsetExtraSpecs(client *gophercloud.ServiceClient, id string, key string) (r UnsetExtraSpecsResult) {
+ _, r.Err = client.Delete(unsetExtraSpecsURL(client, id, key), nil)
+ return
+}
diff --git a/openstack/sharedfilesystems/v2/sharetypes/results.go b/openstack/sharedfilesystems/v2/sharetypes/results.go
index 9388b52..6caac40 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/results.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/results.go
@@ -95,3 +95,8 @@
type SetExtraSpecsResult struct {
extraSpecsResult
}
+
+// UnsetExtraSpecsResult contains the response body and error from a Unset Extra Specs request.
+type UnsetExtraSpecsResult struct {
+ gophercloud.ErrResult
+}
diff --git a/openstack/sharedfilesystems/v2/sharetypes/testing/fixtures.go b/openstack/sharedfilesystems/v2/sharetypes/testing/fixtures.go
index 6565ba5..4450cbf 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/testing/fixtures.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/testing/fixtures.go
@@ -207,3 +207,11 @@
}`)
})
}
+
+func MockUnsetExtraSpecsResponse(t *testing.T) {
+ th.Mux.HandleFunc("/types/shareTypeID/extra_specs/my_key", func(w http.ResponseWriter, r *http.Request) {
+ th.TestMethod(t, r, "DELETE")
+ th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
+ w.WriteHeader(http.StatusAccepted)
+ })
+}
diff --git a/openstack/sharedfilesystems/v2/sharetypes/testing/requests_test.go b/openstack/sharedfilesystems/v2/sharetypes/testing/requests_test.go
index d6576c3..aeb6771 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/testing/requests_test.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/testing/requests_test.go
@@ -151,3 +151,13 @@
th.AssertEquals(t, es["my_key"], "my_value")
}
+
+// Verifies that an extra specification can be unset for a share type
+func TestUnsetExtraSpecs(t *testing.T) {
+ th.SetupHTTP()
+ defer th.TeardownHTTP()
+
+ MockUnsetExtraSpecsResponse(t)
+ res := sharetypes.UnsetExtraSpecs(client.ServiceClient(), "shareTypeID", "my_key")
+ th.AssertNoErr(t, res.Err)
+}
diff --git a/openstack/sharedfilesystems/v2/sharetypes/urls.go b/openstack/sharedfilesystems/v2/sharetypes/urls.go
index 848aac8..8bbc050 100644
--- a/openstack/sharedfilesystems/v2/sharetypes/urls.go
+++ b/openstack/sharedfilesystems/v2/sharetypes/urls.go
@@ -25,3 +25,7 @@
func setExtraSpecsURL(c *gophercloud.ServiceClient, id string) string {
return getExtraSpecsURL(c, id)
}
+
+func unsetExtraSpecsURL(c *gophercloud.ServiceClient, id string, key string) string {
+ return c.ServiceURL("types", id, "extra_specs", key)
+}