github.com/scottcagno/storage@v1.8.0/pkg/_junk/_lsmtree/wal/wal_test.go (about)

     1  package wal
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  )
     8  
     9  func TestWAL(t *testing.T) {
    10  	//
    11  	// set max file size
    12  	maxFileSize = 2 << 10
    13  	//
    14  	// open log
    15  	wal, err := Open("logs")
    16  	if err != nil {
    17  		t.Fatalf("got error: %v\n", err)
    18  	}
    19  	//
    20  	// get path for cleanup
    21  	path := wal.Path()
    22  	//
    23  	// do some writing
    24  	for i := 0; i < 500; i++ {
    25  		key := fmt.Sprintf("key-%04d", i+1)
    26  		val := []byte(fmt.Sprintf("my-value-%06d", i+1))
    27  		_, err := wal.Write(key, val)
    28  		if err != nil {
    29  			t.Fatalf("error writing: %v\n", err)
    30  		}
    31  	}
    32  	//
    33  	// do some reading
    34  	wal.Scan(func(i int64, k string, v []byte) bool {
    35  		fmt.Printf("index=%d, key=%q, value=%q\n", i, k, v)
    36  		return true
    37  	})
    38  	//
    39  	// close log
    40  	err = wal.Close()
    41  	if err != nil {
    42  		t.Fatalf("got error: %v\n", err)
    43  	}
    44  	//
    45  	// clean up
    46  	doClean := false
    47  	if doClean {
    48  		err = os.RemoveAll(path)
    49  		if err != nil {
    50  			t.Fatalf("got error: %v\n", err)
    51  		}
    52  	}
    53  }
    54  
    55  func TestLog_TruncateFront(t *testing.T) {
    56  	//
    57  	// set max file size
    58  	maxFileSize = 2 << 10
    59  	//
    60  	// open log
    61  	wal, err := Open("logs")
    62  	if err != nil {
    63  		t.Fatalf("got error: %v\n", err)
    64  	}
    65  	//
    66  	// get path for cleanup
    67  	path := wal.Path()
    68  	//
    69  	// do some writing
    70  	for i := 0; i < 500; i++ {
    71  		key := fmt.Sprintf("key-%04d", i+1)
    72  		val := []byte(fmt.Sprintf("my-value-%06d", i+1))
    73  		_, err := wal.Write(key, val)
    74  		if err != nil {
    75  			t.Fatalf("error writing: %v\n", err)
    76  		}
    77  	}
    78  	//
    79  	// close log
    80  	err = wal.Close()
    81  	if err != nil {
    82  		t.Fatalf("got error: %v\n", err)
    83  	}
    84  	//
    85  	// open log
    86  	wal, err = Open("logs")
    87  	if err != nil {
    88  		t.Fatalf("got error: %v\n", err)
    89  	}
    90  	//
    91  	// print segment info
    92  	fmt.Printf("--- PRINTING SEGMENT INFO ---\n")
    93  	for _, s := range wal.segments {
    94  		fmt.Printf("%s\n", s)
    95  	}
    96  	//
    97  	// print dir structure
    98  	files, err := os.ReadDir(path)
    99  	if err != nil {
   100  		t.Fatalf("got error: %v\n", err)
   101  	}
   102  	for _, file := range files {
   103  		fmt.Printf("segment: %s\n", file.Name())
   104  	}
   105  	//
   106  	// test truncate front
   107  	err = wal.TruncateFront(256)
   108  	if err != nil {
   109  		t.Fatalf("got error: %v\n", err)
   110  	}
   111  	fmt.Printf("--- PRINTING SEGMENT INFO ---\n")
   112  	for _, s := range wal.segments {
   113  		fmt.Printf("%s\n", s)
   114  	}
   115  	//
   116  	// close log
   117  	err = wal.Close()
   118  	if err != nil {
   119  		t.Fatalf("got error: %v\n", err)
   120  	}
   121  	//
   122  	// clean up
   123  	doClean := false
   124  	if doClean {
   125  		err = os.RemoveAll(path)
   126  		if err != nil {
   127  			t.Fatalf("got error: %v\n", err)
   128  		}
   129  	}
   130  }