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 }