| Index: service/datastore/index_test.go
|
| diff --git a/service/datastore/index_test.go b/service/datastore/index_test.go
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2667534c791f2401fe334f5ba0427824d042c36e
|
| --- /dev/null
|
| +++ b/service/datastore/index_test.go
|
| @@ -0,0 +1,92 @@
|
| +// 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 (
|
| + "bytes"
|
| + "testing"
|
| +
|
| + . "github.com/smartystreets/goconvey/convey"
|
| +)
|
| +
|
| +func TestIndexDefinition(t *testing.T) {
|
| + t.Parallel()
|
| +
|
| + Convey("Test IndexDefinition", t, func() {
|
| + Convey("basic", func() {
|
| + id := IndexDefinition{Kind: "kind"}
|
| +
|
| + So(id.Builtin(), ShouldBeTrue)
|
| + So(id.Compound(), ShouldBeFalse)
|
| + So(id.String(), ShouldEqual, "B:kind")
|
| +
|
| + id.SortBy = append(id.SortBy, IndexColumn{Property: "prop"})
|
| + So(id.SortBy[0].Direction, ShouldEqual, ASCENDING)
|
| + So(id.Builtin(), ShouldBeTrue)
|
| + So(id.Compound(), ShouldBeFalse)
|
| + So(id.String(), ShouldEqual, "B:kind/prop")
|
| +
|
| + id.SortBy = append(id.SortBy, IndexColumn{"other", DESCENDING})
|
| + id.Ancestor = true
|
| + So(id.Builtin(), ShouldBeFalse)
|
| + So(id.Compound(), ShouldBeTrue)
|
| + So(id.String(), ShouldEqual, "C:kind|A/prop/-other")
|
| +
|
| + // invalid
|
| + id.SortBy = append(id.SortBy, IndexColumn{"", DESCENDING})
|
| + So(id.Builtin(), ShouldBeFalse)
|
| + So(id.Compound(), ShouldBeFalse)
|
| + })
|
| +
|
| + Convey("binary", func() {
|
| + id := IndexDefinition{Kind: "kind"}
|
| + buf := &bytes.Buffer{}
|
| + So(id.Write(buf), ShouldBeNil)
|
| + So(bytes.HasPrefix(buf.Bytes(), IndexBuiltinQueryPrefix()), ShouldBeTrue)
|
| + newId := IndexDefinition{}
|
| + So(newId.Read(buf), ShouldBeNil)
|
| + So(newId, ShouldResemble, id)
|
| +
|
| + id.SortBy = append(id.SortBy, IndexColumn{Property: "prop"})
|
| + buf = &bytes.Buffer{}
|
| + So(id.Write(buf), ShouldBeNil)
|
| + So(bytes.HasPrefix(buf.Bytes(), IndexBuiltinQueryPrefix()), ShouldBeTrue)
|
| + newId = IndexDefinition{}
|
| + So(newId.Read(buf), ShouldBeNil)
|
| + So(newId, ShouldResemble, id)
|
| +
|
| + id.SortBy = append(id.SortBy, IndexColumn{"other", DESCENDING})
|
| + id.Ancestor = true
|
| + buf = &bytes.Buffer{}
|
| + So(id.Write(buf), ShouldBeNil)
|
| + So(bytes.HasPrefix(buf.Bytes(), IndexComplexQueryPrefix()), ShouldBeTrue)
|
| + newId = IndexDefinition{}
|
| + So(newId.Read(buf), ShouldBeNil)
|
| + So(newId, ShouldResemble, id)
|
| +
|
| + // invalid
|
| + id.SortBy = append(id.SortBy, IndexColumn{"", DESCENDING})
|
| + buf = &bytes.Buffer{}
|
| + So(id.Write(buf), ShouldBeNil)
|
| + So(bytes.HasPrefix(buf.Bytes(), IndexComplexQueryPrefix()), ShouldBeTrue)
|
| + newId = IndexDefinition{}
|
| + So(newId.Read(buf), ShouldBeNil)
|
| + So(newId, ShouldResemble, id)
|
| + })
|
| +
|
| + Convey("too many", func() {
|
| + id := IndexDefinition{Kind: "wat"}
|
| + for i := 0; i < MaxIndexColumns+1; i++ {
|
| + id.SortBy = append(id.SortBy, IndexColumn{"Hi", ASCENDING})
|
| + }
|
| + buf := &bytes.Buffer{}
|
| + So(id.Write(buf), ShouldBeNil)
|
| + newId := IndexDefinition{}
|
| + So(newId.Read(buf).Error(), ShouldContainSubstring, "over 64 sort orders")
|
| + })
|
| + })
|
| +}
|
|
|