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

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

Issue 1525873002: Panic when non-runtime-handleable type errors occur (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: add test Created 5 years 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') | no next file » | 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 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 So(ds.PutMulti(fplss), ShouldErrLike, "PutMulti fail all") 400 So(ds.PutMulti(fplss), ShouldErrLike, "PutMulti fail all")
401 }) 401 })
402 402
403 Convey("get multi error for individual failures", func() { 403 Convey("get multi error for individual failures", func() {
404 fplss := []FakePLS{{}, {Kind: "Fail"}} 404 fplss := []FakePLS{{}, {Kind: "Fail"}}
405 So(ds.PutMulti(fplss), ShouldResemble, errors.Mu ltiError{nil, errors.New("PutMulti fail")}) 405 So(ds.PutMulti(fplss), ShouldResemble, errors.Mu ltiError{nil, errors.New("PutMulti fail")})
406 }) 406 })
407 407
408 Convey("put with non-modifyable type is an error", func( ) { 408 Convey("put with non-modifyable type is an error", func( ) {
409 cs := CommonStruct{} 409 cs := CommonStruct{}
410 » » » » So(ds.Put(cs), ShouldErrLike, "invalid Put input type") 410 » » » » So(func() { ds.Put(cs) }, ShouldPanicLike,
411 » » » » » "invalid Put input type (datastore.Commo nStruct): not a pointer")
411 }) 412 })
412 413
413 Convey("get with *Key is an error", func() { 414 Convey("get with *Key is an error", func() {
414 » » » » So(ds.Get(&Key{}), ShouldErrLike, "invalid Get i nput type: *datastore.Key") 415 » » » » So(func() { ds.Get(&Key{}) }, ShouldPanicLike,
416 » » » » » "invalid Get input type (*datastore.Key) : not user datatype")
415 }) 417 })
416 418
417 Convey("struct with no $kind is an error", func() { 419 Convey("struct with no $kind is an error", func() {
418 s := MGSWithNoKind{} 420 s := MGSWithNoKind{}
419 So(ds.Put(&s), ShouldErrLike, "unable to extract $kind") 421 So(ds.Put(&s), ShouldErrLike, "unable to extract $kind")
420 }) 422 })
421 423
422 Convey("struct with invalid but non-nil key is an error" , func() { 424 Convey("struct with invalid but non-nil key is an error" , func() {
423 type BadParent struct { 425 type BadParent struct {
424 ID int64 `gae:"$id"` 426 ID int64 `gae:"$id"`
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 So(ds.GetMulti(fplss).Error(), ShouldEqual, "Get Multi fail all") 647 So(ds.GetMulti(fplss).Error(), ShouldEqual, "Get Multi fail all")
646 }) 648 })
647 649
648 Convey("get multi error for individual failures", func() { 650 Convey("get multi error for individual failures", func() {
649 fplss := []FakePLS{{IntID: 1}, {IntID: 2, Kind: "Fail"}} 651 fplss := []FakePLS{{IntID: 1}, {IntID: 2, Kind: "Fail"}}
650 So(ds.GetMulti(fplss), ShouldResemble, errors.Mu ltiError{nil, errors.New("GetMulti fail")}) 652 So(ds.GetMulti(fplss), ShouldResemble, errors.Mu ltiError{nil, errors.New("GetMulti fail")})
651 }) 653 })
652 654
653 Convey("get with non-modifiable type is an error", func( ) { 655 Convey("get with non-modifiable type is an error", func( ) {
654 cs := CommonStruct{} 656 cs := CommonStruct{}
655 » » » » So(ds.Get(cs), ShouldErrLike, "invalid Get input type") 657 » » » » So(func() { ds.Get(cs) }, ShouldPanicLike,
658 » » » » » "invalid Get input type (datastore.Commo nStruct): not a pointer")
659 » » » })
660
661 » » » Convey("get with nil is an error", func() {
662 » » » » So(func() { ds.Get(nil) }, ShouldPanicLike,
663 » » » » » "invalid Get input type (<nil>): no type information")
664 » » » })
665
666 » » » Convey("get with ptr-to-nonstruct is an error", func() {
667 » » » » val := 100
668 » » » » So(func() { ds.Get(&val) }, ShouldPanicLike,
669 » » » » » "invalid Get input type (*int): does not point to a struct")
656 }) 670 })
657 671
658 Convey("failure to save metadata is no problem though", func() { 672 Convey("failure to save metadata is no problem though", func() {
659 // It just won't save the key 673 // It just won't save the key
660 cs := &FakePLS{IntID: 10, failSetMeta: true} 674 cs := &FakePLS{IntID: 10, failSetMeta: true}
661 So(ds.Get(cs), ShouldBeNil) 675 So(ds.Get(cs), ShouldBeNil)
662 }) 676 })
663 }) 677 })
664 678
665 Convey("ok", func() { 679 Convey("ok", func() {
(...skipping 28 matching lines...) Expand all
694 Convey("Test GetAll", t, func() { 708 Convey("Test GetAll", t, func() {
695 c := info.Set(context.Background(), fakeInfo{}) 709 c := info.Set(context.Background(), fakeInfo{})
696 c = SetRawFactory(c, fakeDatastoreFactory) 710 c = SetRawFactory(c, fakeDatastoreFactory)
697 ds := Get(c) 711 ds := Get(c)
698 So(ds, ShouldNotBeNil) 712 So(ds, ShouldNotBeNil)
699 713
700 q := NewQuery("").Limit(5) 714 q := NewQuery("").Limit(5)
701 715
702 Convey("bad", func() { 716 Convey("bad", func() {
703 Convey("nil target", func() { 717 Convey("nil target", func() {
704 » » » » So(ds.GetAll(q, (*[]PropertyMap)(nil)), ShouldEr rLike, "dst: <nil>") 718 » » » » So(func() { ds.GetAll(q, (*[]PropertyMap)(nil)) }, ShouldPanicLike,
719 » » » » » "invalid GetAll dst: <nil>")
705 }) 720 })
706 721
707 Convey("bad type", func() { 722 Convey("bad type", func() {
708 output := 100 723 output := 100
709 So(func() { ds.GetAll(q, &output) }, ShouldPanic Like, 724 So(func() { ds.GetAll(q, &output) }, ShouldPanic Like,
710 "invalid argument type: expected slice, got int") 725 "invalid argument type: expected slice, got int")
711 }) 726 })
712 727
713 Convey("bad type (non pointer)", func() { 728 Convey("bad type (non pointer)", func() {
714 » » » » So(ds.GetAll(q, "moo"), ShouldErrLike, "must hav e a ptr-to-slice") 729 » » » » So(func() { ds.GetAll(q, "moo") }, ShouldPanicLi ke,
730 » » » » » "invalid GetAll dst: must have a ptr-to- slice")
715 }) 731 })
716 732
717 Convey("bad type (underspecified)", func() { 733 Convey("bad type (underspecified)", func() {
718 output := []PropertyLoadSaver(nil) 734 output := []PropertyLoadSaver(nil)
719 » » » » So(ds.GetAll(q, &output), ShouldErrLike, "invali d GetAll input type") 735 » » » » So(func() { ds.GetAll(q, &output) }, ShouldPanic Like,
736 » » » » » "invalid GetAll dst (non-concrete elemen t type): *[]datastore.PropertyLoadSaver")
720 }) 737 })
721 }) 738 })
722 739
723 Convey("ok", func() { 740 Convey("ok", func() {
724 Convey("*[]S", func() { 741 Convey("*[]S", func() {
725 output := []CommonStruct(nil) 742 output := []CommonStruct(nil)
726 So(ds.GetAll(q, &output), ShouldBeNil) 743 So(ds.GetAll(q, &output), ShouldBeNil)
727 So(len(output), ShouldEqual, 5) 744 So(len(output), ShouldEqual, 5)
728 for i, o := range output { 745 for i, o := range output {
729 So(o.ID, ShouldEqual, i+1) 746 So(o.ID, ShouldEqual, i+1)
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
1267 Convey("extra field with bad type", func() { 1284 Convey("extra field with bad type", func() {
1268 type Bad struct { 1285 type Bad struct {
1269 A int64 `gae:",extra"` 1286 A int64 `gae:",extra"`
1270 } 1287 }
1271 So(func() { GetPLS(&Bad{}) }, ShouldPanicLike, 1288 So(func() { GetPLS(&Bad{}) }, ShouldPanicLike,
1272 "struct 'extra' field has invalid type i nt64") 1289 "struct 'extra' field has invalid type i nt64")
1273 }) 1290 })
1274 }) 1291 })
1275 }) 1292 })
1276 } 1293 }
OLDNEW
« no previous file with comments | « service/datastore/datastore.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698