OLD | NEW |
(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 // adapted from github.com/golang/appengine/datastore |
| 6 |
| 7 package datastore |
| 8 |
| 9 import ( |
| 10 "testing" |
| 11 |
| 12 "github.com/luci/gae/service/info" |
| 13 . "github.com/smartystreets/goconvey/convey" |
| 14 "golang.org/x/net/context" |
| 15 ) |
| 16 |
| 17 type fakeRDS struct{ RawInterface } |
| 18 |
| 19 func (fakeRDS) NewQuery(string) Query { return &fakeQuery{} } |
| 20 |
| 21 func TestCheckFilter(t *testing.T) { |
| 22 t.Parallel() |
| 23 |
| 24 Convey("Test checkFilter", t, func() { |
| 25 // Note that the way we have this context set up, any calls whic
h aren't |
| 26 // stopped at the checkFilter will nil-pointer panic. We use thi
s panic |
| 27 // behavior to indicate that the checkfilter has allowed a call
to pass |
| 28 // through to the implementation in the tests below. In a real a
pplication |
| 29 // the panics observed in the tests below would actually be suce
ssful calls |
| 30 // to the implementation. |
| 31 c := SetRaw(info.Set(context.Background(), fakeInfo{}), fakeRDS{
}) |
| 32 rds := GetRaw(c) // has checkFilter |
| 33 So(rds, ShouldNotBeNil) |
| 34 |
| 35 Convey("RunInTransaction", func() { |
| 36 So(rds.RunInTransaction(nil, nil).Error(), ShouldContain
Substring, "is nil") |
| 37 hit := false |
| 38 So(func() { |
| 39 rds.RunInTransaction(func(context.Context) error
{ |
| 40 hit = true |
| 41 return nil |
| 42 }, nil) |
| 43 }, ShouldPanic) |
| 44 So(hit, ShouldBeFalse) |
| 45 }) |
| 46 |
| 47 Convey("Run", func() { |
| 48 So(rds.Run(nil, nil).Error(), ShouldContainSubstring, "q
uery is nil") |
| 49 So(rds.Run(rds.NewQuery("sup"), nil).Error(), ShouldCont
ainSubstring, "callback is nil") |
| 50 hit := false |
| 51 So(func() { |
| 52 rds.Run(rds.NewQuery("sup"), func(Key, PropertyM
ap, func() (Cursor, error)) bool { |
| 53 hit = true |
| 54 return true |
| 55 }) |
| 56 }, ShouldPanic) |
| 57 So(hit, ShouldBeFalse) |
| 58 }) |
| 59 |
| 60 Convey("GetMulti", func() { |
| 61 So(rds.GetMulti(nil, nil), ShouldBeNil) |
| 62 So(rds.GetMulti([]Key{NewKey("", "", "", "", 0, nil)}, n
il).Error(), ShouldContainSubstring, "is nil") |
| 63 |
| 64 // this is in the wrong aid/ns |
| 65 keys := []Key{NewKey("wut", "wrong", "Kind", "", 1, nil)
} |
| 66 So(rds.GetMulti(keys, func(pm PropertyMap, err error) { |
| 67 So(pm, ShouldBeNil) |
| 68 So(err, ShouldEqual, ErrInvalidKey) |
| 69 }), ShouldBeNil) |
| 70 |
| 71 keys[0] = NewKey("aid", "ns", "Kind", "", 1, nil) |
| 72 hit := false |
| 73 So(func() { |
| 74 rds.GetMulti(keys, func(pm PropertyMap, err erro
r) { |
| 75 hit = true |
| 76 }) |
| 77 }, ShouldPanic) |
| 78 So(hit, ShouldBeFalse) |
| 79 }) |
| 80 |
| 81 Convey("PutMulti", func() { |
| 82 keys := []Key{} |
| 83 vals := []PropertyMap{{}} |
| 84 So(rds.PutMulti(keys, vals, nil).Error(), |
| 85 ShouldContainSubstring, "mismatched keys/vals") |
| 86 So(rds.PutMulti(nil, nil, nil), ShouldBeNil) |
| 87 |
| 88 badParent := NewKey("aid", "ns", "Wut", "", 0, nil) |
| 89 keys = append(keys, NewKey("aid", "ns", "Kind", "", 0, b
adParent)) |
| 90 So(rds.PutMulti(keys, vals, nil).Error(), ShouldContainS
ubstring, "callback is nil") |
| 91 |
| 92 So(rds.PutMulti(keys, vals, func(k Key, err error) { |
| 93 So(k, ShouldBeNil) |
| 94 So(err, ShouldEqual, ErrInvalidKey) |
| 95 }), ShouldBeNil) |
| 96 |
| 97 keys = []Key{NewKey("aid", "ns", "Kind", "", 0, nil)} |
| 98 vals = []PropertyMap{nil} |
| 99 So(rds.PutMulti(keys, vals, func(k Key, err error) { |
| 100 So(k, ShouldBeNil) |
| 101 So(err.Error(), ShouldContainSubstring, "nil val
s entry") |
| 102 }), ShouldBeNil) |
| 103 |
| 104 vals = []PropertyMap{{}} |
| 105 hit := false |
| 106 So(func() { |
| 107 rds.PutMulti(keys, vals, func(k Key, err error)
{ |
| 108 hit = true |
| 109 }) |
| 110 }, ShouldPanic) |
| 111 So(hit, ShouldBeFalse) |
| 112 }) |
| 113 |
| 114 Convey("DeleteMulti", func() { |
| 115 So(rds.DeleteMulti(nil, nil), ShouldBeNil) |
| 116 So(rds.DeleteMulti([]Key{NewKey("", "", "", "", 0, nil)}
, nil).Error(), ShouldContainSubstring, "is nil") |
| 117 So(rds.DeleteMulti([]Key{NewKey("", "", "", "", 0, nil)}
, func(err error) { |
| 118 So(err, ShouldEqual, ErrInvalidKey) |
| 119 }), ShouldBeNil) |
| 120 |
| 121 hit := false |
| 122 So(func() { |
| 123 rds.DeleteMulti([]Key{NewKey("aid", "ns", "Kind"
, "", 1, nil)}, func(error) { |
| 124 hit = true |
| 125 }) |
| 126 }, ShouldPanic) |
| 127 So(hit, ShouldBeFalse) |
| 128 }) |
| 129 |
| 130 }) |
| 131 } |
OLD | NEW |