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

Commit e3a609c

Browse files
author
Samuel Ortiz
committed
imageservice: Use Go's time for ImageMember timestamps
For at least consistency sake, do not use strings for timestamps. Signed-off-by: Samuel Ortiz <[email protected]>
1 parent 24ef2d6 commit e3a609c

File tree

2 files changed

+102
-19
lines changed

2 files changed

+102
-19
lines changed

openstack/imageservice/v2/members/requests_test.go

Lines changed: 75 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@ package members
33
import (
44
"strings"
55
"testing"
6+
"time"
67

8+
"github.com/rackspace/gophercloud/pagination"
79
th "github.com/rackspace/gophercloud/testhelper"
810
fakeclient "github.com/rackspace/gophercloud/testhelper/client"
911
)
1012

13+
const createdAtString = "2013-09-20T19:22:19Z"
14+
const updatedAtString = "2013-09-20T19:25:31Z"
15+
1116
func TestCreateMemberSuccessfully(t *testing.T) {
1217
th.SetupHTTP()
1318
defer th.TeardownHTTP()
@@ -17,13 +22,19 @@ func TestCreateMemberSuccessfully(t *testing.T) {
1722
"8989447062e04a818baf9e073fd04fa7").Extract()
1823
th.AssertNoErr(t, err)
1924

25+
createdAt, err := time.Parse(time.RFC3339, createdAtString)
26+
th.AssertNoErr(t, err)
27+
28+
updatedAt, err := time.Parse(time.RFC3339, updatedAtString)
29+
th.AssertNoErr(t, err)
30+
2031
th.AssertDeepEquals(t, ImageMember{
21-
CreatedAt: "2013-09-20T19:22:19Z",
32+
CreatedAt: createdAt,
2233
ImageID: "da3b75d9-3f4a-40e7-8a2c-bfab23927dea",
2334
MemberID: "8989447062e04a818baf9e073fd04fa7",
2435
Schema: "/v2/schemas/member",
2536
Status: "pending",
26-
UpdatedAt: "2013-09-20T19:25:31Z",
37+
UpdatedAt: updatedAt,
2738
}, *im)
2839

2940
}
@@ -72,10 +83,28 @@ func TestMemberListSuccessfully(t *testing.T) {
7283

7384
HandleImageMemberList(t)
7485

75-
images, err := List(fakeclient.ServiceClient(), "da3b75d9-3f4a-40e7-8a2c-bfab23927dea").Extract()
86+
pager := List(fakeclient.ServiceClient(), "da3b75d9-3f4a-40e7-8a2c-bfab23927dea")
87+
t.Logf("Pager state %v", pager)
88+
count, pages := 0, 0
89+
err := pager.EachPage(func(page pagination.Page) (bool, error) {
90+
pages++
91+
t.Logf("Page %v", page)
92+
members, err := ExtractMembers(page)
93+
if err != nil {
94+
return false, err
95+
}
96+
97+
for _, i := range members {
98+
t.Logf("%s\t%s\t%s\t%s\t\n", i.ImageID, i.MemberID, i.Status, i.Schema)
99+
count++
100+
}
101+
102+
return true, nil
103+
})
104+
76105
th.AssertNoErr(t, err)
77-
th.AssertNotNil(t, images)
78-
th.AssertEquals(t, 2, len(*images))
106+
th.AssertEquals(t, 1, pages)
107+
th.AssertEquals(t, 2, count)
79108
}
80109

81110
func TestMemberListEmpty(t *testing.T) {
@@ -84,10 +113,28 @@ func TestMemberListEmpty(t *testing.T) {
84113

85114
HandleImageMemberEmptyList(t)
86115

87-
images, err := List(fakeclient.ServiceClient(), "da3b75d9-3f4a-40e7-8a2c-bfab23927dea").Extract()
116+
pager := List(fakeclient.ServiceClient(), "da3b75d9-3f4a-40e7-8a2c-bfab23927dea")
117+
t.Logf("Pager state %v", pager)
118+
count, pages := 0, 0
119+
err := pager.EachPage(func(page pagination.Page) (bool, error) {
120+
pages++
121+
t.Logf("Page %v", page)
122+
members, err := ExtractMembers(page)
123+
if err != nil {
124+
return false, err
125+
}
126+
127+
for _, i := range members {
128+
t.Logf("%s\t%s\t%s\t%s\t\n", i.ImageID, i.MemberID, i.Status, i.Schema)
129+
count++
130+
}
131+
132+
return true, nil
133+
})
134+
88135
th.AssertNoErr(t, err)
89-
th.AssertNotNil(t, images)
90-
th.AssertEquals(t, 0, len(*images))
136+
th.AssertEquals(t, 0, pages)
137+
th.AssertEquals(t, 0, count)
91138
}
92139

93140
func TestShowMemberDetails(t *testing.T) {
@@ -102,13 +149,19 @@ func TestShowMemberDetails(t *testing.T) {
102149
th.AssertNoErr(t, err)
103150
th.AssertNotNil(t, md)
104151

152+
createdAt, err := time.Parse(time.RFC3339, "2013-11-26T07:21:21Z")
153+
th.AssertNoErr(t, err)
154+
155+
updatedAt, err := time.Parse(time.RFC3339, "2013-11-26T07:21:21Z")
156+
th.AssertNoErr(t, err)
157+
105158
th.AssertDeepEquals(t, ImageMember{
106-
CreatedAt: "2013-11-26T07:21:21Z",
159+
CreatedAt: createdAt,
107160
ImageID: "da3b75d9-3f4a-40e7-8a2c-bfab23927dea",
108161
MemberID: "8989447062e04a818baf9e073fd04fa7",
109162
Schema: "/v2/schemas/member",
110163
Status: "pending",
111-
UpdatedAt: "2013-11-26T07:21:21Z",
164+
UpdatedAt: updatedAt,
112165
}, *md)
113166
}
114167

@@ -150,17 +203,26 @@ func TestMemberUpdateSuccessfully(t *testing.T) {
150203

151204
counter := HandleImageMemberUpdate(t)
152205
im, err := Update(fakeclient.ServiceClient(), "da3b75d9-3f4a-40e7-8a2c-bfab23927dea",
153-
"8989447062e04a818baf9e073fd04fa7", "accepted").Extract()
206+
"8989447062e04a818baf9e073fd04fa7",
207+
UpdateOpts{
208+
Status: "accepted",
209+
}).Extract()
154210
th.AssertEquals(t, 1, counter.Counter)
155211
th.AssertNoErr(t, err)
156212

213+
createdAt, err := time.Parse(time.RFC3339, "2013-11-26T07:21:21Z")
214+
th.AssertNoErr(t, err)
215+
216+
updatedAt, err := time.Parse(time.RFC3339, "2013-11-26T07:21:21Z")
217+
th.AssertNoErr(t, err)
218+
157219
th.AssertDeepEquals(t, ImageMember{
158-
CreatedAt: "2013-11-26T07:21:21Z",
220+
CreatedAt: createdAt,
159221
ImageID: "da3b75d9-3f4a-40e7-8a2c-bfab23927dea",
160222
MemberID: "8989447062e04a818baf9e073fd04fa7",
161223
Schema: "/v2/schemas/member",
162224
Status: "accepted",
163-
UpdatedAt: "2013-11-26T07:21:21Z",
225+
UpdatedAt: updatedAt,
164226
}, *im)
165227

166228
}

openstack/imageservice/v2/members/results.go

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
package members
22

33
import (
4+
"time"
5+
46
"github.com/mitchellh/mapstructure"
57
"github.com/rackspace/gophercloud"
68
)
79

810
// ImageMember model
911
type ImageMember struct {
10-
CreatedAt string `mapstructure:"created_at"`
11-
ImageID string `mapstructure:"image_id"`
12-
MemberID string `mapstructure:"member_id"`
12+
CreatedAt time.Time `mapstructure:"-"`
13+
ImageID string `mapstructure:"image_id"`
14+
MemberID string `mapstructure:"member_id"`
1315
Schema string
1416
// Status could be one of pending, accepted, reject
1517
Status string
16-
UpdatedAt string `mapstructure:"updated_at"`
18+
UpdatedAt time.Time `mapstructure:"-"`
1719
}
1820

1921
// CreateMemberResult result model
@@ -29,8 +31,27 @@ func (cm CreateMemberResult) Extract() (*ImageMember, error) {
2931
casted := cm.Body.(map[string]interface{})
3032
var results ImageMember
3133

32-
err := mapstructure.Decode(casted, &results)
33-
return &results, err
34+
if err := mapstructure.Decode(casted, &results); err != nil {
35+
return nil, err
36+
}
37+
38+
if t, ok := casted["created_at"].(string); ok && t != "" {
39+
createdAt, err := time.Parse(time.RFC3339, t)
40+
if err != nil {
41+
return &results, err
42+
}
43+
results.CreatedAt = createdAt
44+
}
45+
46+
if t, ok := casted["updated_at"].(string); ok && t != "" {
47+
updatedAt, err := time.Parse(time.RFC3339, t)
48+
if err != nil {
49+
return &results, err
50+
}
51+
results.UpdatedAt = updatedAt
52+
}
53+
54+
return &results, nil
3455
}
3556

3657
// ListMembersResult model

0 commit comments

Comments
 (0)