github.com/scottcagno/storage@v1.8.0/pkg/lsmt/sstable/ss-table-manager_test.go (about)

     1  package sstable
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/scottcagno/storage/pkg/lsmt/binary"
     6  	"github.com/scottcagno/storage/pkg/util"
     7  	"os"
     8  	"testing"
     9  	"time"
    10  )
    11  
    12  func TestSSTManager(t *testing.T) {
    13  
    14  	var count int
    15  	base := "sst-manager-testing"
    16  
    17  	// open ss-table-manager
    18  	sstm, err := OpenSSTManager(base)
    19  	if err != nil {
    20  		t.Errorf("opening ss-table-manager: %v\n", err)
    21  	}
    22  
    23  	ts1 := time.Now()
    24  	// add some data
    25  	for i := 1; i <= 5; i++ {
    26  		// get fresh batch to write to
    27  		batch := binary.NewBatch()
    28  		// write data to batch
    29  		stop := count + 59
    30  		for k := count; k < stop; k++ {
    31  			data := fmt.Sprintf("data-%04d", k)
    32  			batch.WriteEntry(&binary.Entry{Key: []byte(data), Value: []byte(data)})
    33  			count++
    34  		}
    35  		// write batch to ss-table
    36  		sstm.flushBatchToSSTable(batch)
    37  		if err != nil {
    38  			t.Errorf("flushing batch to ss-table: %v\n", err)
    39  		}
    40  	}
    41  	ts2 := time.Now()
    42  	fmt.Println(util.FormatTime("writing Entries", ts1, ts2))
    43  
    44  	// list ss-tables
    45  	//fmt.Printf("listing ss-tables....\n")
    46  	//sstables := sstm.ListSSTables()
    47  	//for _, sst := range sstables {
    48  	//	fmt.Printf("ss-table: %s\n", sst)
    49  	//}
    50  
    51  	// list ss-table-indexes
    52  	//fmt.Printf("\nlisting ss-table indexes....\n")
    53  	//sstidxs := sstm.ListSSTIndexes()
    54  	//for _, ssi := range sstidxs {
    55  	//	fmt.Printf("ss-table-gindex: %s\n", ssi)
    56  	//}
    57  
    58  	/*
    59  		// view sparse gindex
    60  		fmt.Printf("\nviewing sparse gindex....\n")
    61  		kps := sstm.GetSparseIndex()
    62  		for _, kp := range kps {
    63  			fmt.Printf("%s\n", kp)
    64  		}
    65  	*/
    66  
    67  	// search sparse gindex
    68  	fmt.Printf("\nsearching sparse indexes....\n")
    69  	i, err := sstm.SearchSparseIndex("data-0000")
    70  	if err != nil {
    71  		t.Errorf("searching sparse gindex (%d): %v\n", 0, err)
    72  	}
    73  	fmt.Printf("searching sparse gindex for %d, got found in gindex: %d\n", 0, i)
    74  
    75  	i, err = sstm.SearchSparseIndex("data-0025")
    76  	if err != nil {
    77  		t.Errorf("searching sparse gindex (%d): %v\n", 25, err)
    78  	}
    79  	fmt.Printf("searching sparse gindex for %d, got found in gindex: %d\n", 25, i)
    80  
    81  	i, err = sstm.SearchSparseIndex("data-0150")
    82  	if err != nil {
    83  		t.Errorf("searching sparse gindex (%d): %v\n", 150, err)
    84  	}
    85  	fmt.Printf("searching sparse gindex for %d, got found in gindex: %d\n", 150, i)
    86  
    87  	i, err = sstm.SearchSparseIndex("data-0250")
    88  	if err != nil {
    89  		t.Errorf("searching sparse gindex (%d): %v\n", 250, err)
    90  	}
    91  	fmt.Printf("searching sparse gindex for %d, got found in gindex: %d\n", 250, i)
    92  
    93  	i, err = sstm.SearchSparseIndex("data-0500")
    94  	if err == nil {
    95  		t.Errorf("searching sparse gindex (%d): %v\n", 500, err)
    96  	}
    97  	fmt.Printf("searching sparse gindex for %d, got found in gindex: %d\n", 500, i)
    98  
    99  	// close ss-table-manager
   100  	err = sstm.Close()
   101  	if err != nil {
   102  		t.Errorf("closing ss-table-manager: %v\n", err)
   103  	}
   104  
   105  	doClean := false
   106  	if doClean {
   107  		err = os.RemoveAll(base)
   108  		if err != nil {
   109  			t.Errorf("removing all: %v\n", err)
   110  		}
   111  		/*
   112  			// remove ss-tables
   113  			for _, sst := range sstables {
   114  				err = os.Remove("testing/" + sst)
   115  				if err != nil {
   116  					t.Errorf("removing table %q: %v\n", sst, err)
   117  				}
   118  			}
   119  
   120  			// remove ss-table-indexes
   121  			for _, ssi := range sstidxs {
   122  				err = os.Remove("testing/" + ssi)
   123  				if err != nil {
   124  					t.Errorf("removing table gindex %q: %v\n", ssi, err)
   125  				}
   126  			}
   127  		*/
   128  	}
   129  }