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.`