go.mercari.io/datastore@v1.8.2/aedatastore/testsuite_test.go (about)

     1  package aedatastore
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/favclip/testerator/v2"
     7  	_ "github.com/favclip/testerator/v2/datastore"
     8  	_ "github.com/favclip/testerator/v2/memcache"
     9  
    10  	"go.mercari.io/datastore/testsuite"
    11  	_ "go.mercari.io/datastore/testsuite/dsmiddleware/dslog"
    12  	_ "go.mercari.io/datastore/testsuite/dsmiddleware/fishbone"
    13  	_ "go.mercari.io/datastore/testsuite/dsmiddleware/localcache"
    14  	_ "go.mercari.io/datastore/testsuite/dsmiddleware/rpcretry"
    15  	_ "go.mercari.io/datastore/testsuite/favcliptools"
    16  	_ "go.mercari.io/datastore/testsuite/realworld/recursivebatch"
    17  	_ "go.mercari.io/datastore/testsuite/realworld/tbf"
    18  
    19  	"go.mercari.io/datastore/dsmiddleware/aememcache"
    20  	"google.golang.org/appengine"
    21  )
    22  
    23  func TestAEDatastoreTestSuite(t *testing.T) {
    24  
    25  	for name, test := range testsuite.TestSuite {
    26  		t.Run(name, func(t *testing.T) {
    27  			_, ctx, err := testerator.SpinUp()
    28  			if err != nil {
    29  				t.Fatal(err.Error())
    30  			}
    31  			defer testerator.SpinDown()
    32  
    33  			ctx = testsuite.WrapAEFlag(ctx)
    34  
    35  			datastore, err := FromContext(ctx)
    36  			if err != nil {
    37  				t.Fatal(err)
    38  			}
    39  			test(ctx, t, datastore)
    40  		})
    41  	}
    42  }
    43  
    44  func TestAEDatastoreWithAEMemcacheTestSuite(t *testing.T) {
    45  
    46  	for name, test := range testsuite.TestSuite {
    47  		t.Run(name, func(t *testing.T) {
    48  			switch name {
    49  			// Skip the failure that happens when you firstly appended another middleware layer.
    50  			case
    51  				"LocalCache_Basic",
    52  				"LocalCache_WithIncludeKinds",
    53  				"LocalCache_WithExcludeKinds",
    54  				"LocalCache_WithKeyFilter",
    55  				"FishBone_QueryWithoutTx":
    56  				t.SkipNow()
    57  			// It's annoying to avoid failure test. I think there is no problem in practical use. I believe...
    58  			case "PutAndGet_TimeTime":
    59  				t.SkipNow()
    60  			}
    61  
    62  			_, ctx, err := testerator.SpinUp()
    63  			if err != nil {
    64  				t.Fatal(err.Error())
    65  			}
    66  			defer testerator.SpinDown()
    67  
    68  			ctx = testsuite.WrapAEFlag(ctx)
    69  
    70  			datastore, err := FromContext(ctx)
    71  			if err != nil {
    72  				t.Fatal(err)
    73  			}
    74  
    75  			ch := aememcache.New()
    76  			datastore.AppendMiddleware(ch)
    77  
    78  			test(ctx, t, datastore)
    79  		})
    80  	}
    81  }
    82  
    83  func TestAEDatastoreTestSuiteWithNamespace(t *testing.T) {
    84  
    85  	for name, test := range testsuite.TestSuite {
    86  		t.Run(name, func(t *testing.T) {
    87  			_, ctx, err := testerator.SpinUp()
    88  			if err != nil {
    89  				t.Fatal(err.Error())
    90  			}
    91  			defer testerator.SpinDown()
    92  
    93  			// Namespaceを設定する
    94  			// 本ライブラリでは appengine.Namespace による設定の影響をうけない設計であり、これを確認する
    95  			ctx, err = appengine.Namespace(ctx, "TestSuite")
    96  			if err != nil {
    97  				t.Fatal(err.Error())
    98  			}
    99  			ctx = testsuite.WrapAEFlag(ctx)
   100  
   101  			datastore, err := FromContext(ctx)
   102  			if err != nil {
   103  				t.Fatal(err)
   104  			}
   105  			test(ctx, t, datastore)
   106  		})
   107  	}
   108  }