go.mercari.io/datastore@v1.8.2/testsuite/issue_degrade.go (about)

     1  package testsuite
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"go.mercari.io/datastore"
     8  )
     9  
    10  func checkIssue59(ctx context.Context, t *testing.T, client datastore.Client) {
    11  	defer func() {
    12  		err := client.Close()
    13  		if err != nil {
    14  			t.Fatal(err)
    15  		}
    16  	}()
    17  
    18  	// Issue description
    19  	//   when using Cloud Datastore + storagecache
    20  	//   Get → make cache on storage
    21  	//   Put with Tx → expected: delete cache, actual: do nothing
    22  	//   Get → hit old (unexpected) cache from storage
    23  
    24  	type TestEntity struct {
    25  		String string
    26  	}
    27  
    28  	key, err := client.Put(ctx, client.IncompleteKey("Test", nil), &TestEntity{String: "Test"})
    29  	if err != nil {
    30  		t.Fatal(err)
    31  	}
    32  
    33  	entity := &TestEntity{}
    34  	err = client.Get(ctx, key, entity)
    35  	if err != nil {
    36  		t.Fatal(err)
    37  	}
    38  	if v := entity.String; v != "Test" {
    39  		t.Errorf("unexpected: %v", v)
    40  	}
    41  
    42  	_, err = client.RunInTransaction(ctx, func(tx datastore.Transaction) error {
    43  		entity.String = "Updated"
    44  		_, err = tx.Put(key, entity)
    45  		return err
    46  	})
    47  	if err != nil {
    48  		t.Fatal(err)
    49  	}
    50  	entity = &TestEntity{}
    51  	err = client.Get(ctx, key, entity)
    52  	if err != nil {
    53  		t.Fatal(err)
    54  	}
    55  	if v := entity.String; v != "Updated" {
    56  		t.Errorf("unexpected: %v", v)
    57  	}
    58  }