2024-04-26 17:16:32 +08:00
|
|
|
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
|
|
|
|
|
|
|
|
|
package bfs_test
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"github.com/TeaOSLab/EdgeNode/internal/utils/bfs"
|
|
|
|
|
"io"
|
2024-04-26 18:44:29 +08:00
|
|
|
"os"
|
2024-04-26 17:16:32 +08:00
|
|
|
"testing"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestFileReader_Read_SmallBuf(t *testing.T) {
|
2024-04-26 18:44:29 +08:00
|
|
|
bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions)
|
2024-04-26 17:16:32 +08:00
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false)
|
|
|
|
|
if err != nil {
|
2024-04-26 18:44:29 +08:00
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
t.Log(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-04-26 17:16:32 +08:00
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
_ = reader.Close()
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
var buf = make([]byte, 3)
|
|
|
|
|
for {
|
|
|
|
|
n, readErr := reader.Read(buf)
|
|
|
|
|
if n > 0 {
|
|
|
|
|
t.Log(string(buf[:n]))
|
|
|
|
|
}
|
|
|
|
|
if readErr != nil {
|
|
|
|
|
if readErr == io.EOF {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
t.Fatal(readErr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestFileReader_Read_LargeBuff(t *testing.T) {
|
2024-04-26 18:44:29 +08:00
|
|
|
bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions)
|
2024-04-26 17:16:32 +08:00
|
|
|
if err != nil {
|
2024-04-26 18:44:29 +08:00
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
t.Log(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-04-26 17:16:32 +08:00
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false)
|
|
|
|
|
if err != nil {
|
2024-04-26 18:44:29 +08:00
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
t.Log(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-04-26 17:16:32 +08:00
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
_ = reader.Close()
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
var buf = make([]byte, 128)
|
|
|
|
|
for {
|
|
|
|
|
n, readErr := reader.Read(buf)
|
|
|
|
|
if n > 0 {
|
|
|
|
|
t.Log(string(buf[:n]))
|
|
|
|
|
}
|
|
|
|
|
if readErr != nil {
|
|
|
|
|
if readErr == io.EOF {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
t.Fatal(readErr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestFileReader_Read_LargeFile(t *testing.T) {
|
2024-04-26 18:44:29 +08:00
|
|
|
bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions)
|
2024-04-26 17:16:32 +08:00
|
|
|
if err != nil {
|
2024-04-26 18:44:29 +08:00
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
t.Log(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-04-26 17:16:32 +08:00
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reader, err := bFile.OpenFileReader(bfs.Hash("123456@LARGE"), false)
|
|
|
|
|
if err != nil {
|
2024-04-26 18:44:29 +08:00
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
t.Log(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-04-26 17:16:32 +08:00
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
_ = reader.Close()
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
var buf = make([]byte, 16<<10)
|
|
|
|
|
var totalSize int64
|
|
|
|
|
var before = time.Now()
|
|
|
|
|
for {
|
|
|
|
|
n, readErr := reader.Read(buf)
|
|
|
|
|
if n > 0 {
|
|
|
|
|
totalSize += int64(n)
|
|
|
|
|
}
|
|
|
|
|
if readErr != nil {
|
|
|
|
|
if readErr == io.EOF {
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
t.Fatal(readErr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
t.Log("totalSize:", totalSize>>20, "MiB", "cost:", fmt.Sprintf("%.4fms", time.Since(before).Seconds()*1000))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestFileReader_ReadAt(t *testing.T) {
|
2024-04-26 18:44:29 +08:00
|
|
|
bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions)
|
2024-04-26 17:16:32 +08:00
|
|
|
if err != nil {
|
2024-04-26 18:44:29 +08:00
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
t.Log(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-04-26 17:16:32 +08:00
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false)
|
|
|
|
|
if err != nil {
|
2024-04-26 18:44:29 +08:00
|
|
|
if os.IsNotExist(err) {
|
|
|
|
|
t.Log(err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-04-26 17:16:32 +08:00
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
|
_ = reader.Close()
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
var buf = make([]byte, 3)
|
|
|
|
|
n, readErr := reader.ReadAt(buf, 0)
|
|
|
|
|
if n > 0 {
|
|
|
|
|
t.Log(string(buf[:n]))
|
|
|
|
|
}
|
|
|
|
|
if readErr != nil && readErr != io.EOF {
|
|
|
|
|
t.Fatal(readErr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
var buf = make([]byte, 3)
|
|
|
|
|
n, readErr := reader.ReadAt(buf, 3)
|
|
|
|
|
if n > 0 {
|
|
|
|
|
t.Log(string(buf[:n]))
|
|
|
|
|
}
|
|
|
|
|
if readErr != nil && readErr != io.EOF {
|
|
|
|
|
t.Fatal(readErr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
var buf = make([]byte, 11)
|
|
|
|
|
n, readErr := reader.ReadAt(buf, 3)
|
|
|
|
|
if n > 0 {
|
|
|
|
|
t.Log(string(buf[:n]))
|
|
|
|
|
}
|
|
|
|
|
if readErr != nil && readErr != io.EOF {
|
|
|
|
|
t.Fatal(readErr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
var buf = make([]byte, 3)
|
|
|
|
|
n, readErr := reader.ReadAt(buf, 11)
|
|
|
|
|
if n > 0 {
|
|
|
|
|
t.Log(string(buf[:n]))
|
|
|
|
|
}
|
|
|
|
|
if readErr != nil && readErr != io.EOF {
|
|
|
|
|
t.Fatal(readErr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
var buf = make([]byte, 3)
|
|
|
|
|
n, readErr := reader.ReadAt(buf, 1000)
|
|
|
|
|
if n > 0 {
|
|
|
|
|
t.Log(string(buf[:n]))
|
|
|
|
|
} else {
|
|
|
|
|
t.Log("EOF")
|
|
|
|
|
}
|
|
|
|
|
if readErr != nil && readErr != io.EOF {
|
|
|
|
|
t.Fatal(readErr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|