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

Side by Side Diff: service/datastore/datastore_test.go

Issue 1270113002: Re-add metadata passthrough on Get operations (Closed) Base URL: https://github.com/luci/gae.git@fix_other_interfaces
Patch Set: cleanup 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
« no previous file with comments | « service/datastore/datastore.go ('k') | service/datastore/multiarg.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // adapted from github.com/golang/appengine/datastore 5 // adapted from github.com/golang/appengine/datastore
6 6
7 package datastore 7 package datastore
8 8
9 import ( 9 import (
10 "fmt" 10 "fmt"
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 } 109 }
110 if KeyIncomplete(k) { 110 if KeyIncomplete(k) {
111 k = NewKey(k.AppID(), k.Namespace(), k.Kind(), " ", int64(i+1), k.Parent()) 111 k = NewKey(k.AppID(), k.Namespace(), k.Kind(), " ", int64(i+1), k.Parent())
112 } 112 }
113 } 113 }
114 cb(k, err) 114 cb(k, err)
115 } 115 }
116 return nil 116 return nil
117 } 117 }
118 118
119 func (f *fakeDatastore) GetMulti(keys []Key, cb GetMultiCB) error { 119 func (f *fakeDatastore) GetMulti(keys []Key, _meta MultiMetaGetter, cb GetMultiC B) error {
120 if keys[0].Kind() == "FailAll" { 120 if keys[0].Kind() == "FailAll" {
121 return errors.New("GetMulti fail all") 121 return errors.New("GetMulti fail all")
122 } 122 }
123 for i, k := range keys { 123 for i, k := range keys {
124 if k.Kind() == "Fail" { 124 if k.Kind() == "Fail" {
125 cb(nil, errors.New("GetMulti fail")) 125 cb(nil, errors.New("GetMulti fail"))
126 } else { 126 } else {
127 cb(PropertyMap{"Value": {MkProperty(i + 1)}}, nil) 127 cb(PropertyMap{"Value": {MkProperty(i + 1)}}, nil)
128 } 128 }
129 } 129 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 } 165 }
166 166
167 type FakePLS struct { 167 type FakePLS struct {
168 IntID int64 168 IntID int64
169 StringID string 169 StringID string
170 Kind string 170 Kind string
171 171
172 Value int64 172 Value int64
173 gotLoaded bool 173 gotLoaded bool
174 174
175 » failGetMeta bool 175 » failGetMeta bool
176 » failLoad bool 176 » failLoad bool
177 » failProblem bool 177 » failProblem bool
178 » failSave bool 178 » failSave bool
179 » failSaveMeta bool 179 » failSetMeta bool
180 } 180 }
181 181
182 var _ PropertyLoadSaver = (*FakePLS)(nil)
183
182 func (f *FakePLS) Load(pm PropertyMap) error { 184 func (f *FakePLS) Load(pm PropertyMap) error {
183 if f.failLoad { 185 if f.failLoad {
184 return errors.New("FakePLS.Load") 186 return errors.New("FakePLS.Load")
185 } 187 }
186 f.gotLoaded = true 188 f.gotLoaded = true
187 f.Value = pm["Value"][0].Value().(int64) 189 f.Value = pm["Value"][0].Value().(int64)
188 return nil 190 return nil
189 } 191 }
190 192
191 func (f *FakePLS) Save(withMeta bool) (PropertyMap, error) { 193 func (f *FakePLS) Save(withMeta bool) (PropertyMap, error) {
(...skipping 10 matching lines...) Expand all
202 if f.Kind == "" { 204 if f.Kind == "" {
203 ret.SetMeta("kind", "FakePLS") 205 ret.SetMeta("kind", "FakePLS")
204 } else { 206 } else {
205 ret.SetMeta("kind", f.Kind) 207 ret.SetMeta("kind", f.Kind)
206 } 208 }
207 ret.SetMeta("assertExtra", true) 209 ret.SetMeta("assertExtra", true)
208 } 210 }
209 return ret, nil 211 return ret, nil
210 } 212 }
211 213
214 func (f *FakePLS) GetMetaDefault(key string, dflt interface{}) interface{} {
215 return GetMetaDefaultImpl(f.GetMeta, key, dflt)
216 }
217
212 func (f *FakePLS) GetMeta(key string) (interface{}, error) { 218 func (f *FakePLS) GetMeta(key string) (interface{}, error) {
213 if f.failGetMeta { 219 if f.failGetMeta {
214 return nil, errors.New("FakePLS.GetMeta") 220 return nil, errors.New("FakePLS.GetMeta")
215 } 221 }
216 switch key { 222 switch key {
217 case "id": 223 case "id":
218 if f.StringID != "" { 224 if f.StringID != "" {
219 return f.StringID, nil 225 return f.StringID, nil
220 } 226 }
221 return f.IntID, nil 227 return f.IntID, nil
222 case "kind": 228 case "kind":
223 if f.Kind == "" { 229 if f.Kind == "" {
224 return "FakePLS", nil 230 return "FakePLS", nil
225 } 231 }
226 return f.Kind, nil 232 return f.Kind, nil
227 } 233 }
228 return nil, ErrMetaFieldUnset 234 return nil, ErrMetaFieldUnset
229 } 235 }
230 236
231 func (f *FakePLS) SetMeta(key string, val interface{}) error { 237 func (f *FakePLS) SetMeta(key string, val interface{}) error {
232 » if f.failSaveMeta { 238 » if f.failSetMeta {
233 return errors.New("FakePL.SetMeta") 239 return errors.New("FakePL.SetMeta")
234 } 240 }
235 if key == "id" { 241 if key == "id" {
236 switch x := val.(type) { 242 switch x := val.(type) {
237 case int64: 243 case int64:
238 f.IntID = x 244 f.IntID = x
239 case string: 245 case string:
240 f.StringID = x 246 f.StringID = x
241 } 247 }
242 return nil 248 return nil
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 601
596 Convey("get multi error for individual failures", func() { 602 Convey("get multi error for individual failures", func() {
597 fplss := []FakePLS{{IntID: 1}, {IntID: 2, Kind: "Fail"}} 603 fplss := []FakePLS{{IntID: 1}, {IntID: 2, Kind: "Fail"}}
598 So(ds.GetMulti(fplss), ShouldResemble, errors.Mu ltiError{nil, errors.New("GetMulti fail")}) 604 So(ds.GetMulti(fplss), ShouldResemble, errors.Mu ltiError{nil, errors.New("GetMulti fail")})
599 }) 605 })
600 606
601 Convey("get with non-modifiable type is an error", func( ) { 607 Convey("get with non-modifiable type is an error", func( ) {
602 cs := CommonStruct{} 608 cs := CommonStruct{}
603 So(ds.Get(cs).Error(), ShouldContainSubstring, " invalid Get input type") 609 So(ds.Get(cs).Error(), ShouldContainSubstring, " invalid Get input type")
604 }) 610 })
611
612 Convey("failure to save metadata is an issue too", func( ) {
613 cs := &FakePLS{failSave: true}
614 So(ds.Get(cs).Error(), ShouldContainSubstring, " FakePLS.Save")
615 })
605 }) 616 })
606 617
607 Convey("ok", func() { 618 Convey("ok", func() {
608 Convey("Get", func() { 619 Convey("Get", func() {
609 cs := &CommonStruct{ID: 1} 620 cs := &CommonStruct{ID: 1}
610 So(ds.Get(cs), ShouldBeNil) 621 So(ds.Get(cs), ShouldBeNil)
611 So(cs.Value, ShouldEqual, 1) 622 So(cs.Value, ShouldEqual, 1)
612 }) 623 })
613 624
614 Convey("Raw access too", func() { 625 Convey("Raw access too", func() {
615 rds := ds.Raw() 626 rds := ds.Raw()
616 » » » » So(rds.GetMulti([]Key{rds.NewKey("Kind", "", 1, nil)}, func(pm PropertyMap, err error) { 627 » » » » keys := []Key{rds.NewKey("Kind", "", 1, nil)}
628 » » » » So(rds.GetMulti(keys, nil, func(pm PropertyMap, err error) {
617 So(err, ShouldBeNil) 629 So(err, ShouldBeNil)
618 So(pm["Value"][0].Value(), ShouldEqual, 1) 630 So(pm["Value"][0].Value(), ShouldEqual, 1)
619 }), ShouldBeNil) 631 }), ShouldBeNil)
620 }) 632 })
621 }) 633 })
622 634
623 }) 635 })
624 } 636 }
625 637
626 func TestGetAll(t *testing.T) { 638 func TestGetAll(t *testing.T) {
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 So(ds.Run(q, (*Key)(nil), func(obj interface{}, _ func() (Cursor, error)) bool { 864 So(ds.Run(q, (*Key)(nil), func(obj interface{}, _ func() (Cursor, error)) bool {
853 So(obj.(Key).IntID(), ShouldEqual, i+1) 865 So(obj.(Key).IntID(), ShouldEqual, i+1)
854 i++ 866 i++
855 return true 867 return true
856 }), ShouldBeNil) 868 }), ShouldBeNil)
857 }) 869 })
858 870
859 }) 871 })
860 }) 872 })
861 } 873 }
OLDNEW
« no previous file with comments | « service/datastore/datastore.go ('k') | service/datastore/multiarg.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698