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  }