github.com/scottcagno/storage@v1.8.0/pkg/_junk/bfile/bfile_test.go (about) 1 package bfile 2 3 import ( 4 "fmt" 5 "github.com/scottcagno/storage/pkg/util" 6 "io" 7 "os" 8 "strings" 9 "testing" 10 "unsafe" 11 ) 12 13 const count = 25 14 15 func Test_bfile_headerSize(t *testing.T) { 16 fmt.Printf("header{}, size=%d\n", unsafe.Sizeof(header{})) 17 } 18 19 func Test_bfile_write(t *testing.T) { 20 21 // init path 22 path := "testing/test-001.txt" 23 24 // open 25 f := setup(path, t) 26 27 // read all 28 doReadAll := true 29 if doReadAll { 30 //readAll(f, t) 31 //readAllRaw(f, t) 32 readAllAtIndex(f, t) 33 } 34 35 // write 36 doWrite := false 37 if doWrite { 38 // init offsets 39 var offsets []int64 40 41 // write 42 for i := 0; i < count; i++ { 43 data := []byte(fmt.Sprintf("record-%.8d data lives here", i)) 44 // write data 45 off, err := f.write(data) 46 checkErr(err, t) 47 // add offsets to offset list 48 offsets = append(offsets, off) 49 } 50 51 // print offsets 52 for i := range offsets { 53 fmt.Printf("record %d, offset=%d\n", i, offsets[i]) 54 } 55 56 // rewind 57 err := f.rewind() 58 checkErr(err, t) 59 } 60 61 // read all 62 if doReadAll { 63 readAll(f, t) 64 } 65 66 // read at 67 doReadAt := false 68 if doReadAt { 69 blocks := []int{0, 3, 7, 5, 11, 13, 21, 17} 70 for i := range blocks { 71 readAt(f, blocks[i], t) 72 } 73 } 74 75 // close 76 teardown(f, true, t) 77 78 } 79 80 func readAllAtIndex(f *bfile, t *testing.T) { 81 // read all records 82 for i := 0; i < f.count(); i++ { 83 data, err := f.readAtIndex(i) 84 if err != nil { 85 if err == io.EOF { 86 break 87 } 88 checkErr(err, t) 89 } 90 fmt.Printf("readAtIndex[%d]: %q\n", i, data) 91 } 92 } 93 94 func readAllRaw(f *bfile, t *testing.T) { 95 // read all records 96 for { 97 rec, err := f.readRaw() 98 if err != nil { 99 if err == io.EOF { 100 break 101 } 102 checkErr(err, t) 103 } 104 fmt.Printf("%s\n", rec) 105 } 106 } 107 108 func readAll(f *bfile, t *testing.T) { 109 // read all 110 for { 111 data, err := f.read() 112 if err != nil { 113 if err == io.EOF { 114 break 115 } 116 checkErr(err, t) 117 } 118 fmt.Printf("read data: %q\n", data) 119 } 120 } 121 122 func readAt(f *bfile, block int, t *testing.T) { 123 // read at 124 fmt.Printf("reading at block %d (offset: %d): ", block, at(block)) 125 data, err := f.readAt(at(block)) 126 fmt.Printf("data=%q\n", data) 127 checkErr(err, t) 128 } 129 130 func Test_getWords(t *testing.T) { 131 for i := 0; i < 15; i++ { 132 n := util.RandIntn(1, 5) 133 w := getWords(n) 134 fmt.Printf("getting %d words: %q\n", n, w) 135 } 136 } 137 138 var words = strings.Fields(util.WaltWhitmanText) 139 140 func getWords(n int) []byte { 141 if n < 1 { 142 n = 1 143 } 144 at := util.RandIntn(0, len(words)-n) 145 if n > 1 { 146 return []byte(strings.Join(words[at:at+n], " ")) 147 } 148 return []byte(words[at]) 149 } 150 151 func setup(path string, t *testing.T) *bfile { 152 // open file 153 f, err := openBFile(path) 154 checkErr(err, t) 155 // return file 156 return f 157 } 158 159 func teardown(f *bfile, clean bool, t *testing.T) { 160 // get path 161 path := f.path 162 163 // close file 164 err := f.close() 165 checkErr(err, t) 166 167 // clean up 168 if clean { 169 os.RemoveAll(path) 170 } 171 } 172 173 func checkErr(err error, t *testing.T) { 174 if err != nil { 175 t.Errorf("error >>> %+v\n", err) 176 } 177 }