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 }