Test images.Get.
diff --git a/openstack/compute/v2/images/images.go b/openstack/compute/v2/images/images.go
index 778b9bf..76143d8 100644
--- a/openstack/compute/v2/images/images.go
+++ b/openstack/compute/v2/images/images.go
@@ -41,7 +41,10 @@
// ExtractImage converts the result of a Get call into a more usable Image structure.
func ExtractImage(result GetResult) (Image, error) {
- var decoded Image
+ var decoded struct {
+ Image Image `mapstructure:"image"`
+ }
+
err := mapstructure.Decode(result, &decoded)
- return decoded, err
+ return decoded.Image, err
}
diff --git a/openstack/compute/v2/images/images_test.go b/openstack/compute/v2/images/images_test.go
index 6d50fc2..0dfae1e 100644
--- a/openstack/compute/v2/images/images_test.go
+++ b/openstack/compute/v2/images/images_test.go
@@ -117,3 +117,56 @@
t.Errorf("Expected one page, got %d", pages)
}
}
+
+func TestGetImage(t *testing.T) {
+ testhelper.SetupHTTP()
+ defer testhelper.TeardownHTTP()
+
+ testhelper.Mux.HandleFunc("/images/12345678", func(w http.ResponseWriter, r *http.Request) {
+ testhelper.TestMethod(t, r, "GET")
+ testhelper.TestHeader(t, r, "X-Auth-Token", tokenID)
+
+ w.Header().Add("Content-Type", "application/json")
+ fmt.Fprintf(w, `
+ {
+ "image": {
+ "status": "ACTIVE",
+ "updated": "2014-09-23T12:54:56Z",
+ "id": "f3e4a95d-1f4f-4989-97ce-f3a1fb8c04d7",
+ "OS-EXT-IMG-SIZE:size": 476704768,
+ "name": "F17-x86_64-cfntools",
+ "created": "2014-09-23T12:54:52Z",
+ "minDisk": 0,
+ "progress": 100,
+ "minRam": 0,
+ "metadata": {}
+ }
+ }
+ `)
+ })
+
+ client := serviceClient()
+ result, err := Get(client, "12345678")
+ if err != nil {
+ t.Fatalf("Unexpected error from Get: %v", err)
+ }
+ actual, err := ExtractImage(result)
+ if err != nil {
+ t.Fatalf("Unexpected error extracting image: %v", err)
+ }
+
+ expected := Image{
+ Status: "ACTIVE",
+ Updated: "2014-09-23T12:54:56Z",
+ ID: "f3e4a95d-1f4f-4989-97ce-f3a1fb8c04d7",
+ Name: "F17-x86_64-cfntools",
+ Created: "2014-09-23T12:54:52Z",
+ MinDisk: 0,
+ Progress: 100,
+ MinRAM: 0,
+ }
+
+ if !reflect.DeepEqual(expected, actual) {
+ t.Errorf("Expected %#v, but got %#v", expected, actual)
+ }
+}