Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: service/rawdatastore/properties_test.go

Issue 1259593005: Add 'user friendly' datastore API. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: 100% coverage of new code Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package rawdatastore
6
7 import (
8 "math"
9 "testing"
10 "time"
11
12 "github.com/luci/gae/service/blobstore"
13 . "github.com/smartystreets/goconvey/convey"
14 )
15
16 type myint int
17 type mybool bool
18 type mystring string
19 type myfloat float32
20
21 func TestProperties(t *testing.T) {
22 t.Parallel()
23
24 Convey("Test Property", t, func() {
25 Convey("Construction", func() {
26 Convey("empty", func() {
27 pv := Property{}
28 So(pv.Value(), ShouldBeNil)
29 So(pv.IndexSetting(), ShouldEqual, ShouldIndex)
30 So(pv.Type().String(), ShouldEqual, "PTNull")
31 })
32 Convey("set", func() {
33 pv := MkPropertyNI(100)
34 So(pv.Value(), ShouldHaveSameTypeAs, int64(100))
35 So(pv.Value(), ShouldEqual, 100)
36 So(pv.IndexSetting(), ShouldEqual, NoIndex)
37 So(pv.Type().String(), ShouldEqual, "PTInt")
38
39 pv.SetValue(nil, ShouldIndex)
40 So(pv.Value(), ShouldBeNil)
41 So(pv.IndexSetting(), ShouldEqual, ShouldIndex)
42 So(pv.Type().String(), ShouldEqual, "PTNull")
43 })
44 Convey("derived types", func() {
45 Convey("int", func() {
46 pv := MkProperty(19)
47 So(pv.Value(), ShouldHaveSameTypeAs, int 64(19))
48 So(pv.Value(), ShouldEqual, 19)
49 So(pv.IndexSetting(), ShouldEqual, Shoul dIndex)
50 So(pv.Type().String(), ShouldEqual, "PTI nt")
51 })
52 Convey("bool (true)", func() {
53 pv := MkProperty(mybool(true))
54 So(pv.Value(), ShouldBeTrue)
55 So(pv.IndexSetting(), ShouldEqual, Shoul dIndex)
56 So(pv.Type().String(), ShouldEqual, "PTB oolTrue")
57 })
58 Convey("string", func() {
59 pv := MkProperty(mystring("sup"))
60 So(pv.Value(), ShouldEqual, "sup")
61 So(pv.IndexSetting(), ShouldEqual, Shoul dIndex)
62 So(pv.Type().String(), ShouldEqual, "PTS tring")
63 })
64 Convey("blobstore.Key is distinquished", func() {
65 pv := MkProperty(blobstore.Key("sup"))
66 So(pv.Value(), ShouldEqual, blobstore.Ke y("sup"))
67 So(pv.IndexSetting(), ShouldEqual, Shoul dIndex)
68 So(pv.Type().String(), ShouldEqual, "PTB lobKey")
69 })
70 Convey("float", func() {
71 pv := Property{}
72 pv.SetValue(myfloat(19.7), ShouldIndex)
73 So(pv.Value(), ShouldHaveSameTypeAs, flo at64(19.7))
74 So(pv.Value(), ShouldEqual, float32(19.7 ))
75 So(pv.IndexSetting(), ShouldEqual, Shoul dIndex)
76 So(pv.Type().String(), ShouldEqual, "PTF loat")
77 })
78 })
79 Convey("bad type", func() {
80 pv := Property{}
81 err := pv.SetValue(complex(100, 29), ShouldIndex )
82 So(err.Error(), ShouldContainSubstring, "has bad type complex")
83 So(pv.Value(), ShouldBeNil)
84 So(pv.IndexSetting(), ShouldEqual, ShouldIndex)
85 So(pv.Type().String(), ShouldEqual, "PTNull")
86 })
87 Convey("invalid GeoPoint", func() {
88 pv := Property{}
89 err := pv.SetValue(GeoPoint{-1000, 0}, ShouldInd ex)
90 So(err.Error(), ShouldContainSubstring, "invalid GeoPoint value")
91 So(pv.Value(), ShouldBeNil)
92 So(pv.IndexSetting(), ShouldEqual, ShouldIndex)
93 So(pv.Type().String(), ShouldEqual, "PTNull")
94 })
95 Convey("invalid time", func() {
96 pv := Property{}
97 err := pv.SetValue(time.Now(), ShouldIndex)
98 So(err.Error(), ShouldContainSubstring, "time va lue has wrong Location")
99
100 err = pv.SetValue(time.Unix(math.MaxInt64, 0).UT C(), ShouldIndex)
101 So(err.Error(), ShouldContainSubstring, "time va lue out of range")
102 So(pv.Value(), ShouldBeNil)
103 So(pv.IndexSetting(), ShouldEqual, ShouldIndex)
104 So(pv.Type().String(), ShouldEqual, "PTNull")
105 })
106 Convey("time gets rounded", func() {
107 pv := Property{}
108 now := time.Now().In(time.UTC)
109 now = now.Round(time.Microsecond).Add(time.Nanos econd * 313)
110 pv.SetValue(now, ShouldIndex)
111 So(pv.Value(), ShouldHappenBefore, now)
112 So(pv.IndexSetting(), ShouldEqual, ShouldIndex)
113 So(pv.Type().String(), ShouldEqual, "PTTime")
114 })
115 Convey("[]byte coerces IndexSetting", func() {
116 pv := Property{}
117 pv.SetValue([]byte("hello"), ShouldIndex)
118 So(pv.Value(), ShouldResemble, []byte("hello"))
119 So(pv.IndexSetting(), ShouldEqual, NoIndex)
120 So(pv.Type().String(), ShouldEqual, "PTBytes")
121 })
122 Convey("ByteString allows !IndexSetting", func() {
123 pv := Property{}
124 pv.SetValue(ByteString("hello"), ShouldIndex)
125 So(pv.Value(), ShouldResemble, ByteString("hello "))
126 So(pv.IndexSetting(), ShouldEqual, ShouldIndex)
127 So(pv.Type().String(), ShouldEqual, "PTBytes")
128 })
129 })
130 })
131 }
132
133 func TestDSPropertyMapImpl(t *testing.T) {
134 t.Parallel()
135
136 Convey("PropertyMap load/save err conditions", t, func() {
137 Convey("empty", func() {
138 pm := PropertyMap{}
139 err := pm.Load(PropertyMap{"hello": {Property{}}})
140 So(err, ShouldBeNil)
141 So(pm, ShouldResemble, PropertyMap{"hello": {Property{}} })
142
143 npm, _ := pm.Save(false)
144 So(npm, ShouldResemble, pm)
145 })
146 Convey("meta", func() {
147 Convey("working", func() {
148 pm := PropertyMap{"": {MkProperty("trap!")}}
149 _, err := pm.GetMeta("foo")
150 So(err, ShouldEqual, ErrMetaFieldUnset)
151
152 err = pm.SetMeta("foo", 100)
153 So(err, ShouldBeNil)
154
155 v, err := pm.GetMeta("foo")
156 So(err, ShouldBeNil)
157 So(v, ShouldEqual, 100)
158
159 npm, err := pm.Save(false)
160 So(err, ShouldBeNil)
161 So(len(npm), ShouldEqual, 1)
162 })
163
164 Convey("errors", func() {
165 Convey("too many values", func() {
166 pm := PropertyMap{
167 "$bad": {MkProperty(100), MkProp erty(200)},
168 }
169 _, err := pm.GetMeta("bad")
170 So(err.Error(), ShouldContainSubstring, "too many values")
171 })
172
173 Convey("weird value", func() {
174 pm := PropertyMap{}
175 err := pm.SetMeta("sup", complex(100, 20 ))
176 So(err.Error(), ShouldContainSubstring, "bad type")
177 })
178 })
179 })
180 })
181 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698