mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-09-19 12:16:24 +08:00
93 lines
2.4 KiB
Go
93 lines
2.4 KiB
Go
![]() |
package local
|
|||
|
|
|||
|
// TestDirCalculateSize tests the directory size calculation
|
|||
|
// It should be run with the local driver enabled and directory size calculation set to true
|
|||
|
import (
|
|||
|
"os"
|
|||
|
"path/filepath"
|
|||
|
"strconv"
|
|||
|
"testing"
|
|||
|
|
|||
|
"github.com/OpenListTeam/OpenList/v4/internal/driver"
|
|||
|
)
|
|||
|
|
|||
|
func generatedTestDir(dir string, dep, filecount int) {
|
|||
|
if dep == 0 {
|
|||
|
return
|
|||
|
}
|
|||
|
for i := 0; i < dep; i++ {
|
|||
|
subDir := dir + "/dir" + strconv.Itoa(i)
|
|||
|
os.Mkdir(subDir, 0755)
|
|||
|
generatedTestDir(subDir, dep-1, filecount)
|
|||
|
generatedFiles(subDir, filecount)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
func generatedFiles(path string, count int) error {
|
|||
|
for i := 0; i < count; i++ {
|
|||
|
filePath := filepath.Join(path, "file"+strconv.Itoa(i)+".txt")
|
|||
|
file, err := os.Create(filePath)
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
// 使用随机ascii字符填充文件
|
|||
|
content := make([]byte, 1024) // 1KB file
|
|||
|
for j := range content {
|
|||
|
content[j] = byte('a' + j%26) // Fill with 'a' to 'z'
|
|||
|
}
|
|||
|
_, err = file.Write(content)
|
|||
|
if err != nil {
|
|||
|
return err
|
|||
|
}
|
|||
|
file.Close()
|
|||
|
}
|
|||
|
return nil
|
|||
|
}
|
|||
|
|
|||
|
// performance tests for directory size calculation
|
|||
|
func BenchmarkCalculateDirSize(t *testing.B) {
|
|||
|
// 初始化t的日志
|
|||
|
t.Logf("Starting performance test for directory size calculation")
|
|||
|
// 确保测试目录存在
|
|||
|
if testing.Short() {
|
|||
|
t.Skip("Skipping performance test in short mode")
|
|||
|
}
|
|||
|
// 创建tmp directory for testing
|
|||
|
testTempDir := t.TempDir()
|
|||
|
err := os.MkdirAll(testTempDir, 0755)
|
|||
|
if err != nil {
|
|||
|
t.Fatalf("Failed to create test directory: %v", err)
|
|||
|
}
|
|||
|
defer os.RemoveAll(testTempDir) // Clean up after test
|
|||
|
// 构建一个深度为5,每层10个文件和10个目录的目录结构
|
|||
|
generatedTestDir(testTempDir, 5, 10)
|
|||
|
// Initialize the local driver with directory size calculation enabled
|
|||
|
d := &Local{
|
|||
|
directoryMap: DirectoryMap{
|
|||
|
root: testTempDir,
|
|||
|
},
|
|||
|
Addition: Addition{
|
|||
|
DirectorySize: true,
|
|||
|
RootPath: driver.RootPath{
|
|||
|
RootFolderPath: testTempDir,
|
|||
|
},
|
|||
|
},
|
|||
|
}
|
|||
|
//record the start time
|
|||
|
t.StartTimer()
|
|||
|
// Calculate the directory size
|
|||
|
err = d.directoryMap.RecalculateDirSize()
|
|||
|
if err != nil {
|
|||
|
t.Fatalf("Failed to calculate directory size: %v", err)
|
|||
|
}
|
|||
|
//record the end time
|
|||
|
t.StopTimer()
|
|||
|
// Print the size and duration
|
|||
|
node, ok := d.directoryMap.Get(d.directoryMap.root)
|
|||
|
if !ok {
|
|||
|
t.Fatalf("Failed to get root node from directory map")
|
|||
|
}
|
|||
|
t.Logf("Directory size: %d bytes", node.fileSum+node.directorySum)
|
|||
|
t.Logf("Performance test completed successfully")
|
|||
|
}
|