go.mercari.io/datastore@v1.8.2/boom/ae_test.go (about) 1 package boom 2 3 import ( 4 "context" 5 "testing" 6 7 "go.mercari.io/datastore" 8 "go.mercari.io/datastore/dsmiddleware/aememcache" 9 "go.mercari.io/datastore/internal/testutils" 10 "google.golang.org/appengine/memcache" 11 ) 12 13 func TestBoom_AEMemcache(t *testing.T) { 14 ctx, client, cleanUp := testutils.SetupAEDatastore(t) 15 defer cleanUp() 16 17 cacheKey := func(key datastore.Key) string { 18 return "mercari:aememcache:" + key.Encode() 19 } 20 ch := aememcache.New( 21 aememcache.WithLogger(func(ctx context.Context, format string, args ...interface{}) { 22 t.Logf(format, args...) 23 }), 24 aememcache.WithCacheKey(cacheKey), 25 ) 26 client.AppendMiddleware(ch) 27 28 type Data struct { 29 ID int64 `boom:"id"` 30 Name string 31 } 32 33 bm := FromClient(ctx, client) 34 35 { // with complete key 36 obj := &Data{ 37 ID: 100, 38 Name: "foo", 39 } 40 key := bm.Key(obj) 41 42 memcacheKey := cacheKey(key) 43 44 _, err := memcache.Get(ctx, memcacheKey) 45 if err != memcache.ErrCacheMiss { 46 t.Fatal(err) 47 } 48 49 _, err = bm.Put(obj) 50 if err != nil { 51 t.Fatal(err) 52 } 53 54 _, err = memcache.Get(ctx, memcacheKey) 55 if err != nil { 56 t.Fatal(err) 57 } 58 } 59 { // with incomplete key 60 obj := &Data{ 61 Name: "foo", 62 } 63 key := bm.Key(obj) 64 if v := key.Incomplete(); !v { 65 t.Errorf("unexpected: %v", v) 66 } 67 68 key, err := bm.Put(obj) 69 if err != nil { 70 t.Fatal(err) 71 } 72 73 _, err = memcache.Get(ctx, cacheKey(key)) 74 if err != nil { 75 t.Fatal(err) 76 } 77 } 78 }