github.com/scottcagno/storage@v1.8.0/pkg/_junk/_memtable/memtable_test.go (about) 1 package memtable 2 3 import ( 4 "fmt" 5 "github.com/scottcagno/storage/pkg/lsmt/binary" 6 "github.com/scottcagno/storage/pkg/lsmt/trees/rbtree" 7 "os" 8 "testing" 9 ) 10 11 var conf = &MemtableConfig{ 12 BasePath: "memtable-testing", 13 FlushThreshold: -1, 14 SyncOnWrite: false, 15 } 16 17 func TestMemtable_Reset(t *testing.T) { 18 19 path := conf.BasePath 20 21 // open mem-table 22 memt, err := OpenMemtable(conf) 23 HandleErr(t, "opening", err) 24 25 // create new batch 26 batch := binary.NewBatch() 27 28 // write some data to batch 29 for i := 0; i < 500; i++ { 30 key := fmt.Sprintf("key-%04d", i+1) 31 val := fmt.Sprintf("my-value-%06d", i+1) 32 batch.WriteEntry(&binary.Entry{Key: []byte(key), Value: []byte(val)}) 33 HandleErr(t, "writing", err) 34 } 35 36 // write batch data to memt 37 for i := range batch.Entries { 38 e := batch.Entries[i] 39 err = memt.Put(e) 40 HandleErr(t, "writing", err) 41 } 42 43 // attempt reset 44 err = memt.Reset() 45 HandleErr(t, "reset", err) 46 47 // write some more data 48 for i := 0; i < 25; i++ { 49 key := fmt.Sprintf("key-%04d", i+1) 50 val := fmt.Sprintf("my-value-%06d", i+1) 51 err = memt.Put(&binary.Entry{Key: []byte(key), Value: []byte(val)}) 52 HandleErr(t, "writing", err) 53 } 54 55 // close mem-table 56 err = memt.Close() 57 HandleErr(t, "closing", err) 58 59 // clean up (maybe) 60 doClean := false 61 if doClean { 62 err = os.RemoveAll(path) 63 HandleErr(t, "remove all", err) 64 } 65 } 66 67 func TestMemtable_All(t *testing.T) { 68 69 path := conf.BasePath 70 71 // open mem-table 72 memt, err := OpenMemtable(conf) 73 HandleErr(t, "opening", err) 74 75 // if there is data, read it and exit 76 if memt.Len() > 0 { 77 memt.Scan(func(me rbtree.RBEntry) bool { 78 fmt.Printf("%s\n", me.(memtableEntry)) 79 return true 80 }) 81 goto close 82 } 83 84 // otherwise, write some data 85 for i := 0; i < 500; i++ { 86 key := fmt.Sprintf("key-%04d", i+1) 87 val := fmt.Sprintf("my-value-%06d", i+1) 88 err = memt.Put(&binary.Entry{Key: []byte(key), Value: []byte(val)}) 89 HandleErr(t, "writing", err) 90 } 91 92 close: 93 // close mem-table 94 err = memt.Close() 95 HandleErr(t, "closing", err) 96 97 // clean up (maybe) 98 doClean := false 99 if doClean { 100 err = os.RemoveAll(path) 101 HandleErr(t, "remove all", err) 102 } 103 } 104 105 func HandleErr(t *testing.T, str string, err error) { 106 if err != nil { 107 t.Fatalf("%s: %v\n", str, err) 108 } 109 }