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  }