github.com/scottcagno/storage@v1.8.0/pkg/swal/swal_test.go (about)

     1  package swal
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/scottcagno/storage/pkg/lsmt/binary"
     6  	"os"
     7  	"testing"
     8  	"time"
     9  )
    10  
    11  var conf = &SWALConfig{
    12  	BasePath:       "wal-testing",
    13  	MaxSegmentSize: -1,
    14  	SyncOnWrite:    false,
    15  }
    16  
    17  func TestOpenAndCloseNoWrite(t *testing.T) {
    18  	// open
    19  	wal, err := OpenSWAL(conf)
    20  	if err != nil {
    21  		t.Fatalf("opening: %v\n", err)
    22  	}
    23  	// close
    24  	err = wal.Close()
    25  	if err != nil {
    26  		t.Fatalf("closing: %v\n", err)
    27  	}
    28  	// open
    29  	wal, err = OpenSWAL(conf)
    30  	if err != nil {
    31  		t.Fatalf("opening: %v\n", err)
    32  	}
    33  	// close
    34  	err = wal.Close()
    35  	if err != nil {
    36  		t.Fatalf("closing: %v\n", err)
    37  	}
    38  }
    39  
    40  func TestWAL(t *testing.T) {
    41  	//
    42  	// open log
    43  	wal, err := OpenSWAL(conf)
    44  	if err != nil {
    45  		t.Fatalf("got error: %v\n", err)
    46  	}
    47  	//
    48  	// get path for cleanup
    49  	path := wal.GetConfig().BasePath
    50  	//
    51  	// do some writing
    52  	for i := 0; i < 500; i++ {
    53  		key := fmt.Sprintf("key-%04d", i+1)
    54  		val := fmt.Sprintf("my-value-%06d-%s", i+1, lgVal)
    55  		_, err := wal.Write(&binary.Entry{Key: []byte(key), Value: []byte(val)})
    56  		if err != nil {
    57  			t.Fatalf("error writing: %v\n", err)
    58  		}
    59  	}
    60  	//
    61  	// do some reading
    62  	err = wal.Scan(func(e *binary.Entry) bool {
    63  		fmt.Printf("%s\n", e)
    64  		return true
    65  	})
    66  	if err != nil {
    67  		t.Fatalf("got error: %v\n", err)
    68  	}
    69  	//
    70  	// close log
    71  	err = wal.Close()
    72  	if err != nil {
    73  		t.Fatalf("got error: %v\n", err)
    74  	}
    75  	//
    76  	// clean up
    77  	doClean := false
    78  	if doClean {
    79  		err = os.RemoveAll(path)
    80  		if err != nil {
    81  			t.Fatalf("got error: %v\n", err)
    82  		}
    83  	}
    84  }
    85  
    86  func TestLog_Reset(t *testing.T) {
    87  	//
    88  	// open log
    89  	wal, err := OpenSWAL(conf)
    90  	if err != nil {
    91  		t.Fatalf("got error: %v\n", err)
    92  	}
    93  	//
    94  	// do some writing
    95  	for i := 0; i < 500; i++ {
    96  		key := fmt.Sprintf("key-%04d", i+1)
    97  		val := fmt.Sprintf("my-value-%06d-%s", i+1, lgVal)
    98  		_, err := wal.Write(&binary.Entry{Key: []byte(key), Value: []byte(val)})
    99  		if err != nil {
   100  			t.Fatalf("error writing: %v\n", err)
   101  		}
   102  	}
   103  	//
   104  	// do some reading
   105  	err = wal.Scan(func(e *binary.Entry) bool {
   106  		fmt.Printf("%s\n", e)
   107  		return true
   108  	})
   109  	if err != nil {
   110  		t.Fatalf("got error: %v\n", err)
   111  	}
   112  
   113  	fmt.Printf("chillin for a few....")
   114  	time.Sleep(3 * time.Second)
   115  
   116  	err = wal.CloseAndRemove()
   117  	if err != nil {
   118  		t.Fatalf("close and remove: %v\n", err)
   119  	}
   120  
   121  }
   122  
   123  func TestLog_TruncateFront(t *testing.T) {
   124  
   125  	//
   126  	// open log
   127  	wal, err := OpenSWAL(conf)
   128  	if err != nil {
   129  		t.Fatalf("got error: %v\n", err)
   130  	}
   131  	//
   132  	// get path for cleanup
   133  	path := wal.GetConfig().BasePath
   134  	//
   135  	// do some writing
   136  	for i := 0; i < 500; i++ {
   137  		key := fmt.Sprintf("key-%04d", i+1)
   138  		val := fmt.Sprintf("my-value-%06d", i+1)
   139  		_, err := wal.Write(&binary.Entry{Key: []byte(key), Value: []byte(val)})
   140  		if err != nil {
   141  			t.Fatalf("error writing: %v\n", err)
   142  		}
   143  	}
   144  	//
   145  	// close log
   146  	err = wal.Close()
   147  	if err != nil {
   148  		t.Fatalf("got error: %v\n", err)
   149  	}
   150  	//
   151  	// open log
   152  	wal, err = OpenSWAL(conf)
   153  	if err != nil {
   154  		t.Fatalf("got error: %v\n", err)
   155  	}
   156  	//
   157  	// print segment info
   158  	fmt.Printf("--- PRINTING SEGMENT INFO ---\n")
   159  	for _, s := range wal.segments {
   160  		fmt.Printf("%s\n", s)
   161  	}
   162  	//
   163  	// print dir structure
   164  	files, err := os.ReadDir(path)
   165  	if err != nil {
   166  		t.Fatalf("got error: %v\n", err)
   167  	}
   168  	for _, file := range files {
   169  		fmt.Printf("segment: %s\n", file.Name())
   170  	}
   171  	//
   172  	// test truncate front
   173  	err = wal.TruncateFront(256)
   174  	if err != nil {
   175  		t.Fatalf("got error: %v\n", err)
   176  	}
   177  	fmt.Printf("--- PRINTING SEGMENT INFO ---\n")
   178  	for _, s := range wal.segments {
   179  		fmt.Printf("%s\n", s)
   180  	}
   181  	//
   182  	// close log
   183  	err = wal.Close()
   184  	if err != nil {
   185  		t.Fatalf("got error: %v\n", err)
   186  	}
   187  	//
   188  	// clean up
   189  	doClean := false
   190  	if doClean {
   191  		err = os.RemoveAll(path)
   192  		if err != nil {
   193  			t.Fatalf("got error: %v\n", err)
   194  		}
   195  	}
   196  }
   197  
   198  var smVal = `Praesent efficitur, ante eget eleifend scelerisque, neque erat malesuada neque, vel euismod 
   199  dui leo a nisl. Donec a eleifend dui. Maecenas necleo odio. In maximus convallis ligula eget sodales.`
   200  
   201  var mdVal = `Quisque bibendum tellus ac odio dictum vulputate. Sed imperdiet enim eget tortor vehicula, 
   202  nec vehicula erat lacinia. Praesent et bibendum turpis. Mauris ac blandit nulla, ac dignissim 
   203  quam. Ut ut est placerat quam suscipit sodales a quis lacus. Praesent hendrerit mattis diam et 
   204  sodales. In a augue sit amet odio iaculis tempus sed a erat. Donec quis nisi tellus. Nam hendrerit 
   205  purus ligula, id bibendum metus pulvinar sed. Nulla eu neque lobortis, porta elit quis, luctus 
   206  purus. Vestibulum et ultrices nulla. Curabitur sagittis, sem sed elementum aliquam, dui mauris 
   207  interdum libero, ullamcorper convallis urna tortor ornare metus. Integer non nibh id diam accumsan 
   208  tincidunt. Quisque sed felis aliquet, luctus dolor vitae, porta nibh. Vestibulum ac est mollis, 
   209  sodales erat et, pharetra nibh. Maecenas porta diam in elit venenatis, sed bibendum orci 
   210  feugiat. Suspendisse diam enim, dictum quis magna sed, aliquet porta turpis. Etiam scelerisque 
   211  aliquam neque, vel iaculis nibh laoreet ac. Sed placerat, arcu eu feugiat ullamcorper, massa 
   212  justo aliquet lorem, id imperdiet neque ipsum id diam. Vestibulum semper felis urna, sit amet 
   213  volutpat est porttitor nec. Phasellus lacinia volutpat orci, id eleifend ipsum semper non. 
   214  `
   215  
   216  var lgVal = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent libero turpis, aliquam quis 
   217  consequat ac, volutpat et arcu. Nullam varius, ligula eu venenatis dignissim, lectus ligula 
   218  ullamcorper odio, in rhoncus nisi nisl congue sem. In hac habitasse platea dictumst. Donec 
   219  sem est, rutrum ut libero nec, placerat vehicula neque. Nulla mollis dictum nunc, ut viverra 
   220  ex. Nam ac lacus at quam rhoncus finibus. Praesent efficitur, ante eget eleifend scelerisque, 
   221  neque erat malesuada neque, vel euismod dui leo a nisl. Donec a eleifend dui. Maecenas nec 
   222  leo odio. In maximus convallis ligula eget sodales. Nullam a mi hendrerit, finibus dolor eu, 
   223  pellentesque ligula. Proin ultricies vitae neque sit amet tempus. Sed a purus enim. Maecenas 
   224  maximus placerat risus, at commodo libero consectetur sed. Nullam pulvinar lobortis augue in 
   225  pulvinar. Aliquam erat volutpat. Vestibulum eget felis egestas, sollicitudin sem eu, venenatis 
   226  metus. Nam ac eros vel sem suscipit facilisis in ut ligula. Nulla porta eros eu arcu efficitur 
   227  molestie. Proin tristique eget quam quis ullamcorper. Integer pretium tellus non sapien euismod, 
   228  et ultrices leo placerat. Suspendisse potenti. Aenean pulvinar pretium diam, lobortis pretium 
   229  sapien congue quis. Fusce tempor, diam id commodo maximus, mi turpis rhoncus orci, ut blandit 
   230  ipsum turpis congue dolor. Aenean lobortis, turpis nec dignissim pulvinar, sem massa bibendum 
   231  lorem, ut scelerisque nibh odio sed odio. Sed sed nulla lectus. Donec vitae ipsum dolor. Donec 
   232  eu gravida lectus. In tempor ultrices malesuada. Cras sodales in lacus et volutpat. Vivamus 
   233  nibh ante, egestas vitae faucibus id, consectetur at augue. Pellentesque habitant morbi tristique 
   234  senectus et netus et malesuada fames ac turpis egestas. Pellentesque quis velit non quam convallis 
   235  molestie sit amet sit amet metus. Aenean eget sapien nisl. Lorem ipsum dolor sit amet, consectetur 
   236  adipiscing elit. Donec maximus nisi in nunc pellentesque imperdiet. Aliquam erat volutpat. 
   237  Quisque bibendum tellus ac odio dictum vulputate. Sed imperdiet enim eget tortor vehicula, nec 
   238  vehicula erat lacinia. Praesent et bibendum turpis. Mauris ac blandit nulla, ac dignissim quam. 
   239  Ut ut est placerat quam suscipit sodales a quis lacus. Praesent hendrerit mattis diam et sodales. 
   240  In a augue sit amet odio iaculis tempus sed a erat. Donec quis nisi tellus. Nam hendrerit purus 
   241  ligula, id bibendum metus pulvinar sed. Nulla eu neque lobortis, porta elit quis, luctus purus. 
   242  Vestibulum et ultrices nulla. Curabitur sagittis, sem sed elementum aliquam, dui mauris interdum 
   243  libero, ullamcorper convallis urna tortor ornare metus. Integer non nibh id diam accumsan 
   244  tincidunt. Quisque sed felis aliquet, luctus dolor vitae, porta nibh. Vestibulum ac est mollis, 
   245  sodales erat et, pharetra nibh. Maecenas porta diam in elit venenatis, sed bibendum orci 
   246  feugiat. Suspendisse diam enim, dictum quis magna sed, aliquet porta turpis. Etiam scelerisque 
   247  aliquam neque, vel iaculis nibh laoreet ac. Sed placerat, arcu eu feugiat ullamcorper, massa 
   248  justo aliquet lorem, id imperdiet neque ipsum id diam. Vestibulum semper felis urna, sit amet 
   249  volutpat est porttitor nec. Phasellus lacinia volutpat orci, id eleifend ipsum semper non. 
   250  Pellentesque quis velit non quam convallis molestie sit amet sit amet metus. Aenean eget sapien 
   251  nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec maximus nisi in nunc 
   252  pellentesque imperdiet. Aliquam erat volutpat. Quisque bibendum tellus ac odio dictum vulputate. 
   253  Sed imperdiet enim eget tortor vehicula, nec vehicula erat lacinia. Praesent et bibendum turpis. 
   254  Mauris ac blandit nulla, ac dignissim quam. Ut ut est placerat quam suscipit sodales a quis 
   255  lacus. Praesent hendrerit mattis diam et sodales. In a augue sit amet odio iaculis tempus sed 
   256  a erat. Donec quis nisi tellus. Nam hendrerit purus ligula, id bibendum metus pulvinar sed. 
   257  Nulla eu neque lobortis, porta elit quis, luctus purus. Vestibulum et ultrices nulla.`