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 }