github.com/scottcagno/storage@v1.8.0/pkg/_junk/_x/file/segmented_test.go (about)

     1  package file
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  )
     8  
     9  func TestSegmentedFile(t *testing.T) {
    10  	//
    11  	// set max file size
    12  	maxFileSize = 2 << 10
    13  	//
    14  	// open log
    15  	wal, err := Open("data")
    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  	for i := int64(1); i < 500; i++ {
    35  		k, v, err := wal.Read(i)
    36  		if err != nil {
    37  			t.Fatalf("error reading: %v\n", err)
    38  		}
    39  		fmt.Printf("read: index=%d, key=%q, value=%q\n", i, k, v)
    40  	}
    41  
    42  	//
    43  	// do some scanning
    44  	wal.Scan(func(i int64, k string, v []byte) bool {
    45  		fmt.Printf("index=%d, key=%q, value=%q\n", i, k, v)
    46  		return true
    47  	})
    48  	//
    49  	// close log
    50  	err = wal.Close()
    51  	if err != nil {
    52  		t.Fatalf("got error: %v\n", err)
    53  	}
    54  	//
    55  	// clean up
    56  	doClean := true
    57  	if doClean {
    58  		err = os.RemoveAll(path)
    59  		if err != nil {
    60  			t.Fatalf("got error: %v\n", err)
    61  		}
    62  	}
    63  }
    64  
    65  func TestSegmentedFile2(t *testing.T) {
    66  	//
    67  	// set max file size
    68  	maxFileSize = 2 << 10
    69  	//
    70  	// open log
    71  	wal, err := Open("data")
    72  	if err != nil {
    73  		t.Fatalf("got error: %v\n", err)
    74  	}
    75  	//
    76  	// get path for cleanup
    77  	path := wal.Path()
    78  	//
    79  	// do some writing
    80  	fmt.Printf("[--- DOING SOME WRITING ---]\n")
    81  	for i := 0; i < 500; i++ {
    82  		key := fmt.Sprintf("key-%04d", i+1)
    83  		val := []byte(fmt.Sprintf("my-value-%06d", i+1))
    84  		_, err := wal.WriteDataEntryUsingSegment(key, val)
    85  		if err != nil {
    86  			t.Fatalf("error writing: %v\n", err)
    87  		}
    88  	}
    89  	//
    90  	// do some reading
    91  	fmt.Printf("[--- DOING SOME READING ---]\n")
    92  	for i := int64(1); i < 500; i++ {
    93  		k, v, err := wal.ReadDataEntryUsingSegment(i)
    94  		if err != nil {
    95  			t.Fatalf("error reading: %v\n", err)
    96  		}
    97  		fmt.Printf("read: index=%d, key=%q, value=%q\n", i, k, v)
    98  	}
    99  
   100  	//
   101  	// do some scanning
   102  	fmt.Printf("[--- DOING SOME SCANNING ---]\n")
   103  	wal.Scan(func(i int64, k string, v []byte) bool {
   104  		fmt.Printf("index=%d, key=%q, value=%q\n", i, k, v)
   105  		return true
   106  	})
   107  	//
   108  	// close log
   109  	err = wal.Close()
   110  	if err != nil {
   111  		t.Fatalf("got error: %v\n", err)
   112  	}
   113  	//
   114  	// clean up
   115  	doClean := true
   116  	if doClean {
   117  		err = os.RemoveAll(path)
   118  		if err != nil {
   119  			t.Fatalf("got error: %v\n", err)
   120  		}
   121  	}
   122  }
   123  
   124  func TestSegmentedFile_TruncateFront(t *testing.T) {
   125  	//
   126  	// set max file size
   127  	maxFileSize = 2 << 10
   128  	//
   129  	// open log
   130  	wal, err := Open("data")
   131  	if err != nil {
   132  		t.Fatalf("got error: %v\n", err)
   133  	}
   134  	//
   135  	// get path for cleanup
   136  	path := wal.Path()
   137  	//
   138  	// do some writing
   139  	for i := 0; i < 500; i++ {
   140  		key := fmt.Sprintf("key-%04d", i+1)
   141  		val := []byte(fmt.Sprintf("my-value-%06d", i+1))
   142  		_, err := wal.Write(key, val)
   143  		if err != nil {
   144  			t.Fatalf("error writing: %v\n", err)
   145  		}
   146  	}
   147  	//
   148  	// close log
   149  	err = wal.Close()
   150  	if err != nil {
   151  		t.Fatalf("got error: %v\n", err)
   152  	}
   153  	//
   154  	// open log
   155  	wal, err = Open("data")
   156  	if err != nil {
   157  		t.Fatalf("got error: %v\n", err)
   158  	}
   159  	//
   160  	// print segment info
   161  	fmt.Printf("--- PRINTING SEGMENT INFO ---\n")
   162  	for _, s := range wal.segments {
   163  		fmt.Printf("%s\n", s)
   164  	}
   165  	//
   166  	// print dir structure
   167  	files, err := os.ReadDir(path)
   168  	if err != nil {
   169  		t.Fatalf("got error: %v\n", err)
   170  	}
   171  	for _, file := range files {
   172  		fmt.Printf("segment: %s\n", file.Name())
   173  	}
   174  	//
   175  	// test truncate front
   176  	err = wal.TruncateFront(256)
   177  	if err != nil {
   178  		t.Fatalf("got error: %v\n", err)
   179  	}
   180  	fmt.Printf("--- PRINTING SEGMENT INFO ---\n")
   181  	for _, s := range wal.segments {
   182  		fmt.Printf("%s\n", s)
   183  	}
   184  	//
   185  	// close log
   186  	err = wal.Close()
   187  	if err != nil {
   188  		t.Fatalf("got error: %v\n", err)
   189  	}
   190  	//
   191  	// clean up
   192  	doClean := false
   193  	if doClean {
   194  		err = os.RemoveAll(path)
   195  		if err != nil {
   196  			t.Fatalf("got error: %v\n", err)
   197  		}
   198  	}
   199  }