Index: go/src/infra/gae/libs/wrapper/dummy.go |
diff --git a/go/src/infra/gae/libs/wrapper/dummy.go b/go/src/infra/gae/libs/wrapper/dummy.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8bc85107a89f722130fb2e8b8e46dee704febb70 |
--- /dev/null |
+++ b/go/src/infra/gae/libs/wrapper/dummy.go |
@@ -0,0 +1,185 @@ |
+// 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. |
+ |
+package wrapper |
+ |
+import ( |
+ "fmt" |
+ "runtime" |
+ "strings" |
+ "time" |
+ |
+ "golang.org/x/net/context" |
+ |
+ "appengine" |
+ "appengine/datastore" |
+ "appengine/memcache" |
+ "appengine/taskqueue" |
+ |
+ "github.com/mjibson/goon" |
+) |
+ |
+const niFmtStr = "wrapper: method %s.%s is not implemented" |
+ |
+func ni() error { |
+ iface := "UNKNOWN" |
+ funcName := "UNKNOWN" |
+ |
+ if ptr, _, _, ok := runtime.Caller(1); ok { |
+ f := runtime.FuncForPC(ptr) |
+ n := f.Name() |
+ if n != "" { |
+ parts := strings.Split(n, ".") |
+ if len(parts) == 3 { |
+ switch parts[1][len(parts[1])-2:] { |
+ case "DS": |
+ iface = "Datastore" |
+ case "MC": |
+ iface = "Memcache" |
+ case "TQ": |
+ iface = "TaskQueue" |
+ case "GI": |
+ iface = "GlobalInformation" |
+ case "QY": |
+ iface = "Query" |
+ } |
+ funcName = parts[2] |
+ } |
+ } |
+ } |
+ |
+ return fmt.Errorf(niFmtStr, iface, funcName) |
+} |
+ |
+/////////////////////////////////// dummyDS //////////////////////////////////// |
+ |
+type dummyDS struct{} |
+ |
+func (dummyDS) Kind(interface{}) string { panic(ni()) } |
+func (dummyDS) KindNameResolver() goon.KindNameResolver { panic(ni()) } |
+func (dummyDS) SetKindNameResolver(goon.KindNameResolver) { panic(ni()) } |
+func (dummyDS) NewKey(string, string, int64, *datastore.Key) *datastore.Key { panic(ni()) } |
+func (dummyDS) NewKeyObj(interface{}) *datastore.Key { panic(ni()) } |
+func (dummyDS) NewKeyObjError(interface{}) (*datastore.Key, error) { panic(ni()) } |
+func (dummyDS) Put(interface{}) (*datastore.Key, error) { panic(ni()) } |
+func (dummyDS) Get(interface{}) error { panic(ni()) } |
+func (dummyDS) Delete(*datastore.Key) error { panic(ni()) } |
+func (dummyDS) PutMulti(interface{}) ([]*datastore.Key, error) { panic(ni()) } |
+func (dummyDS) GetMulti(interface{}) error { panic(ni()) } |
+func (dummyDS) DeleteMulti([]*datastore.Key) error { panic(ni()) } |
+func (dummyDS) NewQuery(string) DSQuery { panic(ni()) } |
+func (dummyDS) Run(DSQuery) DSIterator { panic(ni()) } |
+func (dummyDS) GetAll(DSQuery, interface{}) ([]*datastore.Key, error) { panic(ni()) } |
+func (dummyDS) Count(DSQuery) (int, error) { panic(ni()) } |
+func (dummyDS) RunInTransaction(func(context.Context) error, *datastore.TransactionOptions) error { |
+ panic(ni()) |
+} |
+ |
+var dummyDSInst = dummyDS{} |
+ |
+// DummyDS returns a dummy Datastore implementation suitable for embedding. |
+// Every method panics with a message containing the name of the method which |
+// was unimplemented. |
+func DummyDS() Datastore { return dummyDSInst } |
+ |
+/////////////////////////////////// dummyMC //////////////////////////////////// |
+ |
+type dummyMC struct{} |
+ |
+func (dummyMC) Add(*memcache.Item) error { panic(ni()) } |
+func (dummyMC) Set(*memcache.Item) error { panic(ni()) } |
+func (dummyMC) Get(string) (*memcache.Item, error) { panic(ni()) } |
+func (dummyMC) Delete(string) error { panic(ni()) } |
+func (dummyMC) CompareAndSwap(*memcache.Item) error { panic(ni()) } |
+func (dummyMC) AddMulti([]*memcache.Item) error { panic(ni()) } |
+func (dummyMC) SetMulti([]*memcache.Item) error { panic(ni()) } |
+func (dummyMC) GetMulti([]string) (map[string]*memcache.Item, error) { panic(ni()) } |
+func (dummyMC) DeleteMulti([]string) error { panic(ni()) } |
+func (dummyMC) CompareAndSwapMulti([]*memcache.Item) error { panic(ni()) } |
+func (dummyMC) Increment(string, int64, uint64) (uint64, error) { panic(ni()) } |
+func (dummyMC) IncrementExisting(string, int64) (uint64, error) { panic(ni()) } |
+func (dummyMC) Flush() error { panic(ni()) } |
+func (dummyMC) Stats() (*memcache.Statistics, error) { panic(ni()) } |
+func (dummyMC) InflateCodec(memcache.Codec) MCCodec { panic(ni()) } |
+ |
+var dummyMCInst = dummyMC{} |
+ |
+// DummyMC returns a dummy Memcache implementation suitable for embedding. |
+// Every method panics with a message containing the name of the method which |
+// was unimplemented. |
+func DummyMC() Memcache { return dummyMCInst } |
+ |
+/////////////////////////////////// dummyTQ //////////////////////////////////// |
+ |
+type dummyTQ struct{} |
+ |
+func (dummyTQ) Add(*taskqueue.Task, string) (*taskqueue.Task, error) { panic(ni()) } |
+func (dummyTQ) Delete(*taskqueue.Task, string) error { panic(ni()) } |
+func (dummyTQ) AddMulti([]*taskqueue.Task, string) ([]*taskqueue.Task, error) { panic(ni()) } |
+func (dummyTQ) DeleteMulti([]*taskqueue.Task, string) error { panic(ni()) } |
+func (dummyTQ) Lease(int, string, int) ([]*taskqueue.Task, error) { panic(ni()) } |
+func (dummyTQ) LeaseByTag(int, string, int, string) ([]*taskqueue.Task, error) { panic(ni()) } |
+func (dummyTQ) ModifyLease(*taskqueue.Task, string, int) error { panic(ni()) } |
+func (dummyTQ) Purge(string) error { panic(ni()) } |
+func (dummyTQ) QueueStats([]string, int) ([]taskqueue.QueueStatistics, error) { panic(ni()) } |
+ |
+var dummyTQInst = dummyTQ{} |
+ |
+// DummyTQ returns a dummy TaskQueue implementation suitable for embedding. |
+// Every method panics with a message containing the name of the method which |
+// was unimplemented. |
+func DummyTQ() TaskQueue { return dummyTQInst } |
+ |
+/////////////////////////////////// dummyQY //////////////////////////////////// |
+ |
+type dummyQY struct{} |
+ |
+func (dummyQY) Ancestor(ancestor *datastore.Key) DSQuery { panic(ni()) } |
+func (dummyQY) Distinct() DSQuery { panic(ni()) } |
+func (dummyQY) End(c DSCursor) DSQuery { panic(ni()) } |
+func (dummyQY) EventualConsistency() DSQuery { panic(ni()) } |
+func (dummyQY) Filter(filterStr string, value interface{}) DSQuery { panic(ni()) } |
+func (dummyQY) KeysOnly() DSQuery { panic(ni()) } |
+func (dummyQY) Limit(limit int) DSQuery { panic(ni()) } |
+func (dummyQY) Offset(offset int) DSQuery { panic(ni()) } |
+func (dummyQY) Order(fieldName string) DSQuery { panic(ni()) } |
+func (dummyQY) Project(fieldNames ...string) DSQuery { panic(ni()) } |
+func (dummyQY) Start(c DSCursor) DSQuery { panic(ni()) } |
+ |
+var dummyQYInst = dummyQY{} |
+ |
+// DummyQY returns a dummy DSQuery implementation suitable for embedding. |
+// Every method panics with a message containing the name of the method which |
+// was unimplemented. |
+func DummyQY() DSQuery { return dummyQYInst } |
+ |
+/////////////////////////////////// dummyGI //////////////////////////////////// |
+ |
+type dummyGI struct{} |
+ |
+func (dummyGI) AccessToken(scopes ...string) (token string, expiry time.Time, err error) { panic(ni()) } |
+func (dummyGI) AppID() string { panic(ni()) } |
+func (dummyGI) ModuleHostname(module, version, instance string) (string, error) { panic(ni()) } |
+func (dummyGI) ModuleName() string { panic(ni()) } |
+func (dummyGI) DefaultVersionHostname() string { panic(ni()) } |
+func (dummyGI) PublicCertificates() ([]appengine.Certificate, error) { panic(ni()) } |
+func (dummyGI) RequestID() string { panic(ni()) } |
+func (dummyGI) ServiceAccount() (string, error) { panic(ni()) } |
+func (dummyGI) SignBytes(bytes []byte) (keyName string, signature []byte, err error) { panic(ni()) } |
+func (dummyGI) VersionID() string { panic(ni()) } |
+func (dummyGI) Namespace(namespace string) (context.Context, error) { panic(ni()) } |
+func (dummyGI) Datacenter() string { panic(ni()) } |
+func (dummyGI) InstanceID() string { panic(ni()) } |
+func (dummyGI) IsDevAppserver() bool { panic(ni()) } |
+func (dummyGI) ServerSoftware() string { panic(ni()) } |
+func (dummyGI) IsCapabilityDisabled(err error) bool { panic(ni()) } |
+func (dummyGI) IsOverQuota(err error) bool { panic(ni()) } |
+func (dummyGI) IsTimeoutError(err error) bool { panic(ni()) } |
+ |
+var dummyGIInst = dummyGI{} |
+ |
+// DummyGI returns a dummy GlobalInfo implementation suitable for embedding. |
+// Every method panics with a message containing the name of the method which |
+// was unimplemented. |
+func DummyGI() GlobalInfo { return dummyGIInst } |