github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/data/kv/kv_test.go (about)

     1  package kv
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/angenalZZZ/gofunc/data"
     6  	"github.com/angenalZZZ/gofunc/data/random"
     7  	"github.com/angenalZZZ/gofunc/f"
     8  	"os"
     9  	"path/filepath"
    10  	"sync/atomic"
    11  	"testing"
    12  )
    13  
    14  var (
    15  	testDBPath  = filepath.Join(data.RootDir, "kv")
    16  	testIncrKey = "count"
    17  	testSomeKey = "some"
    18  )
    19  
    20  func TestBadgerDBWriter(t *testing.T) {
    21  	var db KV = new(BadgerDB)
    22  	err := db.Open(testDBPath)
    23  	if err != nil {
    24  		t.Fatal(err)
    25  	}
    26  
    27  	defer func() {
    28  		_ = db.Close()
    29  		_ = os.RemoveAll(testDBPath)
    30  	}()
    31  
    32  	t.Parallel()
    33  	for i := 0; i < 1e6; i++ {
    34  		k, v1 := random.AlphaNumberBytes(32), random.AlphaNumberBytes(128)
    35  		if err := db.SetBytes(k, v1, 0); err != nil {
    36  			t.Error(err)
    37  			continue
    38  		}
    39  		if v2, err := db.GetBytes(k); err != nil {
    40  			t.Error(err)
    41  		} else if len(v1) != len(v2) {
    42  			t.FailNow()
    43  		}
    44  	}
    45  }
    46  
    47  func TestBadgerDBReader(t *testing.T) {
    48  	var db KV = new(BadgerDB)
    49  	err := db.Open(testDBPath)
    50  	if err != nil {
    51  		t.Fatal(err)
    52  	}
    53  
    54  	defer func() {
    55  		_ = db.Close()
    56  		_ = os.RemoveAll(testDBPath)
    57  	}()
    58  
    59  	var count int64
    60  	var someVal string
    61  	getStat(t, db)
    62  
    63  	_ = f.GoTimes(10, func(_ int) {
    64  		_, err := db.Incr(testIncrKey, 1)
    65  		if err != nil {
    66  			t.Error(err)
    67  		} else {
    68  			atomic.AddInt64(&count, 1)
    69  		}
    70  	})
    71  
    72  	t.Logf("db.Incr-Set = %d\n", count)
    73  	someVal, _ = db.Get(testIncrKey)
    74  	t.Logf("db.Incr-Get = %v\n", someVal)
    75  
    76  	someVal = "hello"
    77  	genVal(t, db, testSomeKey, someVal)
    78  	getVal(t, db, testSomeKey, someVal)
    79  
    80  	getStat(t, db)
    81  
    82  	err = db.Del([]string{testIncrKey, testSomeKey})
    83  	if err != nil {
    84  		t.Error(err)
    85  	}
    86  
    87  	_, err = db.Get(testSomeKey)
    88  	if err == nil {
    89  		t.Error(fmt.Errorf("db.Del = %t\n", false))
    90  	}
    91  
    92  	getStat(t, db)
    93  }
    94  
    95  func getStat(t *testing.T, db KV) {
    96  	t.Helper()
    97  	size, keys := db.Size(), db.Keys()
    98  	t.Logf("db.Size = %d, db.Keys.Count = %d\n", size, len(keys))
    99  }
   100  
   101  func getVal(t *testing.T, db KV, key, expected string) {
   102  	t.Helper()
   103  	if get, err := db.Get(key); err != nil {
   104  		t.Error(err)
   105  	} else if get != expected {
   106  		t.Errorf("Expected value (%v) was not returned from db, instead got %v", expected, get)
   107  	}
   108  }
   109  
   110  func genVal(t *testing.T, db KV, key, expected string) {
   111  	t.Helper()
   112  	if err := db.Set(key, expected, 10); err != nil {
   113  		t.Error(err)
   114  	}
   115  }