Skip to content
This repository was archived by the owner on Aug 1, 2023. It is now read-only.

Commit 6ef241d

Browse files
James FisherSamuel Ortiz
authored andcommitted
test update image (failing)
1 parent 8ba815a commit 6ef241d

File tree

4 files changed

+135
-26
lines changed

4 files changed

+135
-26
lines changed

openstack/imageservice/v2/fixtures.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,52 @@ func HandleImageDeleteSuccessfully(t *testing.T) {
8989
w.WriteHeader(http.StatusNoContent)
9090
})
9191
}
92+
93+
func HandleImageUpdateSuccessfully(t *testing.T) {
94+
th.Mux.HandleFunc("/images/da3b75d9-3f4a-40e7-8a2c-bfab23927dea", func(w http.ResponseWriter, r *http.Request) {
95+
th.TestMethod(t, r, "PATCH")
96+
th.TestHeader(t, r, "X-Auth-Token", fakeclient.TokenID)
97+
98+
th.TestJSONRequest(t, r, `[
99+
{
100+
"op": "replace",
101+
"path": "/name",
102+
"value": "Fedora 17"
103+
},
104+
{
105+
"op": "replace",
106+
"path": "/tags",
107+
"value": [
108+
"fedora",
109+
"beefy"
110+
]
111+
}
112+
]`)
113+
114+
w.WriteHeader(http.StatusOK)
115+
w.Header().Add("Content-Type", "application/json")
116+
fmt.Fprintf(w, `{
117+
"id": "da3b75d9-3f4a-40e7-8a2c-bfab23927dea",
118+
"name": "Fedora 17",
119+
"status": "active",
120+
"visibility": "public",
121+
"size": 2254249,
122+
"checksum": "2cec138d7dae2aa59038ef8c9aec2390",
123+
"tags": [
124+
"fedora",
125+
"beefy"
126+
],
127+
"created_at": "2012-08-10T19:23:50Z",
128+
"updated_at": "2012-08-12T11:11:33Z",
129+
"self": "/v2/images/da3b75d9-3f4a-40e7-8a2c-bfab23927dea",
130+
"file": "/v2/images/da3b75d9-3f4a-40e7-8a2c-bfab23927dea/file",
131+
"schema": "/v2/schemas/image",
132+
"owner": "None",
133+
"min_ram": "None",
134+
"min_disk": "None",
135+
"disk_format": "None",
136+
"virtual_size": "None",
137+
"container_format": "None"
138+
}`)
139+
})
140+
}

openstack/imageservice/v2/requests.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -160,17 +160,23 @@ type ReplaceImageName struct {
160160
NewName string
161161
}
162162

163-
func (r *ReplaceImageName) ToImagePatchMap() map[string]interface{} {
163+
func (r ReplaceImageName) ToImagePatchMap() map[string]interface{} {
164164
m := map[string]interface{}{}
165165
m["op"] = "replace"
166166
m["path"] = "/name"
167167
m["value"] = r.NewName
168168
return m
169169
}
170170

171-
// Things implementing Patch can also implement UpdateOptsBuilder.
172-
// Unfortunately we have to specify each of these manually.
171+
// implements Patch
172+
type ReplaceImageTags struct {
173+
NewTags []string
174+
}
173175

174-
func (r *ReplaceImageName) ToImageUpdateMap() map[string]interface{} {
175-
return r.ToImagePatchMap()
176+
func (r ReplaceImageTags) ToImagePatchMap() map[string]interface{} {
177+
m := map[string]interface{}{}
178+
m["op"] = "replace"
179+
m["path"] = "/tags"
180+
m["value"] = r.NewTags
181+
return m
176182
}

openstack/imageservice/v2/requests_test.go

Lines changed: 60 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,21 @@ func TestCreateImage(t *testing.T) {
2727

2828
th.AssertNoErr(t, err)
2929

30+
container_format := "bare"
31+
disk_format := "qcow2"
32+
owner := "b4eedccc6fb74fa8a7ad6b08382b852b"
33+
3034
expectedImage := Image{
3135
Id: "e7db3b45-8db7-47ad-8109-3fb55c2c24fd",
3236
Name: "Ubuntu 12.10",
3337
Tags: []string{"ubuntu", "quantal"},
3438

3539
Status: ImageStatusQueued,
3640

37-
ContainerFormat: "bare",
38-
DiskFormat: "qcow2",
41+
ContainerFormat: &container_format,
42+
DiskFormat: &disk_format,
3943

40-
Owner: "b4eedccc6fb74fa8a7ad6b08382b852b",
44+
Owner: &owner,
4145

4246
Visibility: ImageVisibilityPrivate,
4347

@@ -59,7 +63,12 @@ func TestGetImage(t *testing.T) {
5963
th.AssertNoErr(t, err)
6064

6165
checksum := "64d7c1cd2b6f60c92c14662941cb7913"
62-
sizebytes := 13167616
66+
size_bytes := 13167616
67+
container_format := "bare"
68+
disk_format := "qcow2"
69+
min_disk_gigabytes := 0
70+
min_ram_megabytes := 0
71+
owner := "5ef70662f8b34079a6eddb8da9d75fe8"
6372

6473
expectedImage := Image{
6574
Id: "1bea47ed-f6a9-463b-b423-14b9cca9ad27",
@@ -68,19 +77,19 @@ func TestGetImage(t *testing.T) {
6877

6978
Status: ImageStatusActive,
7079

71-
ContainerFormat: "bare",
72-
DiskFormat: "qcow2",
80+
ContainerFormat: &container_format,
81+
DiskFormat: &disk_format,
7382

74-
MinDiskGigabytes: 0,
75-
MinRamMegabytes: 0,
83+
MinDiskGigabytes: &min_disk_gigabytes,
84+
MinRamMegabytes: &min_ram_megabytes,
7685

77-
Owner: "5ef70662f8b34079a6eddb8da9d75fe8",
86+
Owner: &owner,
7887

7988
Protected: false,
8089
Visibility: ImageVisibilityPublic,
8190

8291
Checksum: &checksum,
83-
SizeBytes: &sizebytes,
92+
SizeBytes: &size_bytes,
8493

8594
Metadata: make(map[string]string),
8695
Properties: make(map[string]string),
@@ -98,3 +107,44 @@ func TestDeleteImage(t *testing.T) {
98107
Delete(fakeclient.ServiceClient(), "1bea47ed-f6a9-463b-b423-14b9cca9ad27")
99108
// TODO
100109
}
110+
111+
func TestUpdateImage(t *testing.T) {
112+
th.SetupHTTP()
113+
defer th.TeardownHTTP()
114+
115+
HandleImageUpdateSuccessfully(t)
116+
117+
actualImage, err := Update(fakeclient.ServiceClient(), "da3b75d9-3f4a-40e7-8a2c-bfab23927dea", UpdateOpts{
118+
ReplaceImageName{NewName: "Fedora 17"},
119+
ReplaceImageTags{NewTags: []string{"fedora", "beefy"}, },
120+
}).Extract()
121+
122+
th.AssertNoErr(t, err)
123+
124+
sizebytes := 2254249
125+
checksum := "2cec138d7dae2aa59038ef8c9aec2390"
126+
127+
expectedImage := Image{
128+
Id: "da3b75d9-3f4a-40e7-8a2c-bfab23927dea",
129+
Name: "Fedora 17",
130+
Status: ImageStatusActive,
131+
Visibility: ImageVisibilityPublic,
132+
133+
SizeBytes: &sizebytes,
134+
Checksum: &checksum,
135+
136+
Tags: []string{
137+
"fedora",
138+
"beefy",
139+
},
140+
141+
Owner: nil,
142+
MinRamMegabytes: nil,
143+
MinDiskGigabytes: nil,
144+
145+
DiskFormat: nil,
146+
ContainerFormat: nil,
147+
}
148+
149+
th.AssertDeepEquals(t, &expectedImage, actualImage)
150+
}

openstack/imageservice/v2/results.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ type Image struct {
1919

2020
Tags []string
2121

22-
ContainerFormat string
23-
DiskFormat string
22+
ContainerFormat *string
23+
DiskFormat *string
2424

25-
MinDiskGigabytes int
26-
MinRamMegabytes int
25+
MinDiskGigabytes *int
26+
MinRamMegabytes *int
2727

28-
Owner string
28+
Owner *string
2929

3030
Protected bool
3131
Visibility ImageVisibility
@@ -251,23 +251,23 @@ func extractImage(res gophercloud.ErrResult) (*Image, error) {
251251
return nil, err
252252
}
253253

254-
if image.ContainerFormat, err = extractStringAtKey(body, "container_format"); err != nil {
254+
if image.ContainerFormat, err = extractNoneableStringAtKey(body, "container_format"); err != nil {
255255
return nil, err
256256
}
257257

258-
if image.DiskFormat, err = extractStringAtKey(body, "disk_format"); err != nil {
258+
if image.DiskFormat, err = extractNoneableStringAtKey(body, "disk_format"); err != nil {
259259
return nil, err
260260
}
261261

262-
if image.MinDiskGigabytes, err = extractIntAtKey(body, "min_disk"); err != nil {
262+
if image.MinDiskGigabytes, err = extractNoneableIntegerAtKey(body, "min_disk"); err != nil {
263263
return nil, err
264264
}
265265

266-
if image.MinRamMegabytes, err = extractIntAtKey(body, "min_ram"); err != nil {
266+
if image.MinRamMegabytes, err = extractNoneableIntegerAtKey(body, "min_ram"); err != nil {
267267
return nil, err
268268
}
269269

270-
if image.Owner, err = extractStringAtKey(body, "owner"); err != nil {
270+
if image.Owner, err = extractNoneableStringAtKey(body, "owner"); err != nil {
271271
return nil, err
272272
}
273273

@@ -291,7 +291,7 @@ func extractImage(res gophercloud.ErrResult) (*Image, error) {
291291
return nil, err
292292
}
293293

294-
if image.Properties, err = extractMapStringStringAtKeyOptional(body, "properies", make(map[string]string)); err != nil {
294+
if image.Properties, err = extractMapStringStringAtKeyOptional(body, "properties", make(map[string]string)); err != nil {
295295
return nil, err
296296
}
297297

@@ -317,3 +317,7 @@ func (c GetResult) Extract() (*Image, error) {
317317
type UpdateResult struct {
318318
gophercloud.ErrResult
319319
}
320+
321+
func (u UpdateResult) Extract() (*Image, error) {
322+
return extractImage(u.ErrResult)
323+
}

0 commit comments

Comments
 (0)