github.com/TeaOSLab/EdgeNode@v1.3.8/internal/utils/bfs/file_reader_test.go (about) 1 // Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn . 2 3 package bfs_test 4 5 import ( 6 "fmt" 7 "github.com/TeaOSLab/EdgeNode/internal/utils/bfs" 8 "io" 9 "os" 10 "testing" 11 "time" 12 ) 13 14 func TestFileReader_Read_SmallBuf(t *testing.T) { 15 bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions) 16 if err != nil { 17 t.Fatal(err) 18 } 19 20 reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false) 21 if err != nil { 22 if os.IsNotExist(err) { 23 t.Log(err) 24 return 25 } 26 t.Fatal(err) 27 } 28 29 defer func() { 30 _ = reader.Close() 31 }() 32 33 var buf = make([]byte, 3) 34 for { 35 n, readErr := reader.Read(buf) 36 if n > 0 { 37 t.Log(string(buf[:n])) 38 } 39 if readErr != nil { 40 if readErr == io.EOF { 41 break 42 } 43 t.Fatal(readErr) 44 } 45 } 46 } 47 48 func TestFileReader_Read_LargeBuff(t *testing.T) { 49 bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions) 50 if err != nil { 51 if os.IsNotExist(err) { 52 t.Log(err) 53 return 54 } 55 t.Fatal(err) 56 } 57 58 reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false) 59 if err != nil { 60 if os.IsNotExist(err) { 61 t.Log(err) 62 return 63 } 64 t.Fatal(err) 65 } 66 67 defer func() { 68 _ = reader.Close() 69 }() 70 71 var buf = make([]byte, 128) 72 for { 73 n, readErr := reader.Read(buf) 74 if n > 0 { 75 t.Log(string(buf[:n])) 76 } 77 if readErr != nil { 78 if readErr == io.EOF { 79 break 80 } 81 t.Fatal(readErr) 82 } 83 } 84 } 85 86 func TestFileReader_Read_LargeFile(t *testing.T) { 87 bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions) 88 if err != nil { 89 if os.IsNotExist(err) { 90 t.Log(err) 91 return 92 } 93 t.Fatal(err) 94 } 95 96 reader, err := bFile.OpenFileReader(bfs.Hash("123456@LARGE"), false) 97 if err != nil { 98 if os.IsNotExist(err) { 99 t.Log(err) 100 return 101 } 102 t.Fatal(err) 103 } 104 105 defer func() { 106 _ = reader.Close() 107 }() 108 109 var buf = make([]byte, 16<<10) 110 var totalSize int64 111 var before = time.Now() 112 for { 113 n, readErr := reader.Read(buf) 114 if n > 0 { 115 totalSize += int64(n) 116 } 117 if readErr != nil { 118 if readErr == io.EOF { 119 break 120 } 121 t.Fatal(readErr) 122 } 123 } 124 t.Log("totalSize:", totalSize>>20, "MiB", "cost:", fmt.Sprintf("%.4fms", time.Since(before).Seconds()*1000)) 125 } 126 127 func TestFileReader_ReadAt(t *testing.T) { 128 bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions) 129 if err != nil { 130 if os.IsNotExist(err) { 131 t.Log(err) 132 return 133 } 134 t.Fatal(err) 135 } 136 137 reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false) 138 if err != nil { 139 if os.IsNotExist(err) { 140 t.Log(err) 141 return 142 } 143 t.Fatal(err) 144 } 145 146 defer func() { 147 _ = reader.Close() 148 }() 149 150 { 151 var buf = make([]byte, 3) 152 n, readErr := reader.ReadAt(buf, 0) 153 if n > 0 { 154 t.Log(string(buf[:n])) 155 } 156 if readErr != nil && readErr != io.EOF { 157 t.Fatal(readErr) 158 } 159 } 160 161 { 162 var buf = make([]byte, 3) 163 n, readErr := reader.ReadAt(buf, 3) 164 if n > 0 { 165 t.Log(string(buf[:n])) 166 } 167 if readErr != nil && readErr != io.EOF { 168 t.Fatal(readErr) 169 } 170 } 171 172 { 173 var buf = make([]byte, 11) 174 n, readErr := reader.ReadAt(buf, 3) 175 if n > 0 { 176 t.Log(string(buf[:n])) 177 } 178 if readErr != nil && readErr != io.EOF { 179 t.Fatal(readErr) 180 } 181 } 182 183 { 184 var buf = make([]byte, 3) 185 n, readErr := reader.ReadAt(buf, 11) 186 if n > 0 { 187 t.Log(string(buf[:n])) 188 } 189 if readErr != nil && readErr != io.EOF { 190 t.Fatal(readErr) 191 } 192 } 193 194 { 195 var buf = make([]byte, 3) 196 n, readErr := reader.ReadAt(buf, 1000) 197 if n > 0 { 198 t.Log(string(buf[:n])) 199 } else { 200 t.Log("EOF") 201 } 202 if readErr != nil && readErr != io.EOF { 203 t.Fatal(readErr) 204 } 205 } 206 } 207 208 func TestFileReader_Pool(t *testing.T) { 209 bFile, openErr := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions) 210 if openErr != nil { 211 if os.IsNotExist(openErr) { 212 t.Log(openErr) 213 return 214 } 215 t.Fatal(openErr) 216 } 217 218 for i := 0; i < 10; i++ { 219 reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false) 220 if err != nil { 221 if os.IsNotExist(err) { 222 continue 223 } 224 t.Fatal(err) 225 } 226 227 go func() { 228 err = reader.Close() 229 if err != nil { 230 t.Log(err) 231 } 232 }() 233 } 234 235 time.Sleep(100 * time.Millisecond) 236 t.Log(len(bFile.TestReaderPool())) 237 }