go.mercari.io/datastore@v1.8.2/dsmiddleware/chaosrpc/chaosrpc_test.go (about)

     1  package chaosrpc
     2  
     3  import (
     4  	"math/rand"
     5  	"testing"
     6  
     7  	"go.mercari.io/datastore/internal/testutils"
     8  )
     9  
    10  func TestChaosRPC_CheckRaiseError(t *testing.T) {
    11  	ctx, client, cleanUp := testutils.SetupCloudDatastore(t)
    12  	defer cleanUp()
    13  
    14  	type Data struct {
    15  		Name string
    16  	}
    17  
    18  	// Put.
    19  	key := client.IDKey("Data", 111, nil)
    20  	objBefore := &Data{Name: "Data"}
    21  	_, err := client.Put(ctx, key, objBefore)
    22  	if err != nil {
    23  		t.Fatal(err)
    24  	}
    25  
    26  	ch := New(rand.NewSource(100))
    27  	client.AppendMiddleware(ch)
    28  	defer func() {
    29  		// stop chaos before cleanUp func called.
    30  		client.RemoveMiddleware(ch)
    31  	}()
    32  
    33  	// Get.
    34  	catchErr := false
    35  	for i := 0; i < 100; i++ {
    36  		objAfter := &Data{}
    37  		err = client.Get(ctx, key, objAfter)
    38  		if err != nil {
    39  			t.Logf("#%d catch err=%s", i+1, err.Error())
    40  			catchErr = true
    41  		}
    42  	}
    43  	if !catchErr {
    44  		t.Errorf("unexpected: %v", catchErr)
    45  	}
    46  }