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

Unified Diff: service/datastore/checkfilter_test.go

Issue 1259593005: Add 'user friendly' datastore API. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: more docs 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « service/datastore/checkfilter.go ('k') | service/datastore/context.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: service/datastore/checkfilter_test.go
diff --git a/service/datastore/checkfilter_test.go b/service/datastore/checkfilter_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..bdc661a52c57ee90ba07fde78a5fd9c5848e1c69
--- /dev/null
+++ b/service/datastore/checkfilter_test.go
@@ -0,0 +1,131 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// adapted from github.com/golang/appengine/datastore
+
+package datastore
+
+import (
+ "testing"
+
+ "github.com/luci/gae/service/info"
+ . "github.com/smartystreets/goconvey/convey"
+ "golang.org/x/net/context"
+)
+
+type fakeRDS struct{ RawInterface }
+
+func (fakeRDS) NewQuery(string) Query { return &fakeQuery{} }
+
+func TestCheckFilter(t *testing.T) {
+ t.Parallel()
+
+ Convey("Test checkFilter", t, func() {
+ // Note that the way we have this context set up, any calls which aren't
+ // stopped at the checkFilter will nil-pointer panic. We use this panic
+ // behavior to indicate that the checkfilter has allowed a call to pass
+ // through to the implementation in the tests below. In a real application
+ // the panics observed in the tests below would actually be sucessful calls
+ // to the implementation.
+ c := SetRaw(info.Set(context.Background(), fakeInfo{}), fakeRDS{})
+ rds := GetRaw(c) // has checkFilter
+ So(rds, ShouldNotBeNil)
+
+ Convey("RunInTransaction", func() {
+ So(rds.RunInTransaction(nil, nil).Error(), ShouldContainSubstring, "is nil")
+ hit := false
+ So(func() {
+ rds.RunInTransaction(func(context.Context) error {
+ hit = true
+ return nil
+ }, nil)
+ }, ShouldPanic)
+ So(hit, ShouldBeFalse)
+ })
+
+ Convey("Run", func() {
+ So(rds.Run(nil, nil).Error(), ShouldContainSubstring, "query is nil")
+ So(rds.Run(rds.NewQuery("sup"), nil).Error(), ShouldContainSubstring, "callback is nil")
+ hit := false
+ So(func() {
+ rds.Run(rds.NewQuery("sup"), func(Key, PropertyMap, func() (Cursor, error)) bool {
+ hit = true
+ return true
+ })
+ }, ShouldPanic)
+ So(hit, ShouldBeFalse)
+ })
+
+ Convey("GetMulti", func() {
+ So(rds.GetMulti(nil, nil), ShouldBeNil)
+ So(rds.GetMulti([]Key{NewKey("", "", "", "", 0, nil)}, nil).Error(), ShouldContainSubstring, "is nil")
+
+ // this is in the wrong aid/ns
+ keys := []Key{NewKey("wut", "wrong", "Kind", "", 1, nil)}
+ So(rds.GetMulti(keys, func(pm PropertyMap, err error) {
+ So(pm, ShouldBeNil)
+ So(err, ShouldEqual, ErrInvalidKey)
+ }), ShouldBeNil)
+
+ keys[0] = NewKey("aid", "ns", "Kind", "", 1, nil)
+ hit := false
+ So(func() {
+ rds.GetMulti(keys, func(pm PropertyMap, err error) {
+ hit = true
+ })
+ }, ShouldPanic)
+ So(hit, ShouldBeFalse)
+ })
+
+ Convey("PutMulti", func() {
+ keys := []Key{}
+ vals := []PropertyMap{{}}
+ So(rds.PutMulti(keys, vals, nil).Error(),
+ ShouldContainSubstring, "mismatched keys/vals")
+ So(rds.PutMulti(nil, nil, nil), ShouldBeNil)
+
+ badParent := NewKey("aid", "ns", "Wut", "", 0, nil)
+ keys = append(keys, NewKey("aid", "ns", "Kind", "", 0, badParent))
+ So(rds.PutMulti(keys, vals, nil).Error(), ShouldContainSubstring, "callback is nil")
+
+ So(rds.PutMulti(keys, vals, func(k Key, err error) {
+ So(k, ShouldBeNil)
+ So(err, ShouldEqual, ErrInvalidKey)
+ }), ShouldBeNil)
+
+ keys = []Key{NewKey("aid", "ns", "Kind", "", 0, nil)}
+ vals = []PropertyMap{nil}
+ So(rds.PutMulti(keys, vals, func(k Key, err error) {
+ So(k, ShouldBeNil)
+ So(err.Error(), ShouldContainSubstring, "nil vals entry")
+ }), ShouldBeNil)
+
+ vals = []PropertyMap{{}}
+ hit := false
+ So(func() {
+ rds.PutMulti(keys, vals, func(k Key, err error) {
+ hit = true
+ })
+ }, ShouldPanic)
+ So(hit, ShouldBeFalse)
+ })
+
+ Convey("DeleteMulti", func() {
+ So(rds.DeleteMulti(nil, nil), ShouldBeNil)
+ So(rds.DeleteMulti([]Key{NewKey("", "", "", "", 0, nil)}, nil).Error(), ShouldContainSubstring, "is nil")
+ So(rds.DeleteMulti([]Key{NewKey("", "", "", "", 0, nil)}, func(err error) {
+ So(err, ShouldEqual, ErrInvalidKey)
+ }), ShouldBeNil)
+
+ hit := false
+ So(func() {
+ rds.DeleteMulti([]Key{NewKey("aid", "ns", "Kind", "", 1, nil)}, func(error) {
+ hit = true
+ })
+ }, ShouldPanic)
+ So(hit, ShouldBeFalse)
+ })
+
+ })
+}
« no previous file with comments | « service/datastore/checkfilter.go ('k') | service/datastore/context.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698