github.com/mweagle/Sparta@v1.15.0/aws/accessor/accessor_test.go (about)

     1  package accessor
     2  
     3  import (
     4  	"context"
     5  	"math/rand"
     6  	"os"
     7  	"testing"
     8  	"time"
     9  
    10  	sparta "github.com/mweagle/Sparta"
    11  )
    12  
    13  type testObject struct {
    14  	Data          string
    15  	SomeOtherData []string
    16  	Value         int
    17  }
    18  
    19  func newTestObject() *testObject {
    20  	return &testObject{
    21  		Data:          "Hello World  at " + time.Now().UTC().String(),
    22  		SomeOtherData: []string{"Val1", "Val2", "Val3"},
    23  		Value:         42,
    24  	}
    25  }
    26  
    27  // Disable test in Travis.
    28  // Ref: https://help.github.com/en/actions/automating-your-workflow-with-github-actions/using-environment-variables
    29  //
    30  func testDisabled() bool {
    31  	return os.Getenv("GITHUB_WORKFLOW") != ""
    32  }
    33  func testObjectConstructor() interface{} {
    34  	return &testObject{}
    35  }
    36  
    37  func testPut(t *testing.T, kvStore KevValueAccessor) {
    38  	if testDisabled() {
    39  		return
    40  	}
    41  	logger, _ := sparta.NewLogger("info")
    42  
    43  	ctx := context.Background()
    44  	ctx = context.WithValue(ctx, sparta.ContextKeyLogger, logger)
    45  
    46  	testID := time.Now().UTC().String()
    47  	record := newTestObject()
    48  	err := kvStore.Put(ctx, testID, record)
    49  	if err != nil {
    50  		t.Fatalf("%T failed to put item: %s", kvStore, err.Error())
    51  	}
    52  	var emptyRecord testObject
    53  	err = kvStore.Get(ctx, testID, &emptyRecord)
    54  	if err != nil {
    55  		t.Fatalf("%T failed to get item: %s", kvStore, err.Error())
    56  	}
    57  	err = kvStore.Delete(ctx, testID)
    58  	if err != nil {
    59  		t.Fatalf("%T failed to delete item: %s", kvStore, err.Error())
    60  	}
    61  }
    62  
    63  func testPutAll(t *testing.T, kvStore KevValueAccessor) {
    64  	if testDisabled() {
    65  		return
    66  	}
    67  	logger, _ := sparta.NewLogger("debug")
    68  	ctx := context.Background()
    69  	ctx = context.WithValue(ctx, sparta.ContextKeyLogger, logger)
    70  	recordCount := int(rand.Int31n(2) + 1)
    71  
    72  	for i := 0; i != recordCount; i++ {
    73  		testID := time.Now().UTC().String()
    74  		record := newTestObject()
    75  		err := kvStore.Put(ctx, testID, record)
    76  		if err != nil {
    77  			t.Fatalf("%T failed to put item: %s", kvStore, err)
    78  		}
    79  		time.Sleep(50 * time.Millisecond)
    80  	}
    81  	getAll, getAllErr := kvStore.GetAll(ctx, testObjectConstructor)
    82  	if getAllErr != nil {
    83  		t.Fatalf("%T failed to get all items: %s", kvStore, getAllErr)
    84  	}
    85  	if len(getAll) != recordCount {
    86  		t.Fatalf("%T returned item count %d doesn't match expected %d",
    87  			kvStore,
    88  			len(getAll),
    89  			recordCount)
    90  	}
    91  	deleteAllErr := kvStore.DeleteAll(ctx)
    92  	if deleteAllErr != nil {
    93  		t.Fatalf("%T failed to delete all items: %s", kvStore, deleteAllErr)
    94  	}
    95  	getAll, getAllErr = kvStore.GetAll(ctx, testObjectConstructor)
    96  	if getAllErr != nil {
    97  		t.Fatalf("%T failed to confirm get all items: %s", kvStore, getAllErr)
    98  	}
    99  	if len(getAll) != 0 {
   100  		t.Fatalf("%T failed to confirm all items deleted: %s", kvStore, getAll)
   101  	}
   102  }