You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.3 KiB
49 lines
1.3 KiB
package pluginworkers
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/storage/types"
|
|
)
|
|
|
|
// WriteTestVolumeFiles creates a minimal .dat/.idx pair for the given volume.
|
|
func WriteTestVolumeFiles(t *testing.T, baseDir string, volumeID uint32, datSize int) (string, string) {
|
|
t.Helper()
|
|
|
|
if err := os.MkdirAll(baseDir, 0755); err != nil {
|
|
t.Fatalf("create volume dir: %v", err)
|
|
}
|
|
|
|
datPath := filepath.Join(baseDir, volumeFilename(volumeID, ".dat"))
|
|
idxPath := filepath.Join(baseDir, volumeFilename(volumeID, ".idx"))
|
|
|
|
data := make([]byte, datSize)
|
|
rng := rand.New(rand.NewSource(99))
|
|
_, _ = rng.Read(data)
|
|
if err := os.WriteFile(datPath, data, 0644); err != nil {
|
|
t.Fatalf("write dat file: %v", err)
|
|
}
|
|
|
|
entry := make([]byte, types.NeedleMapEntrySize)
|
|
idEnd := types.NeedleIdSize
|
|
offsetEnd := idEnd + types.OffsetSize
|
|
sizeEnd := offsetEnd + types.SizeSize
|
|
|
|
types.NeedleIdToBytes(entry[:idEnd], types.NeedleId(1))
|
|
types.OffsetToBytes(entry[idEnd:offsetEnd], types.ToOffset(0))
|
|
types.SizeToBytes(entry[offsetEnd:sizeEnd], types.Size(datSize))
|
|
|
|
if err := os.WriteFile(idxPath, entry, 0644); err != nil {
|
|
t.Fatalf("write idx file: %v", err)
|
|
}
|
|
|
|
return datPath, idxPath
|
|
}
|
|
|
|
func volumeFilename(volumeID uint32, ext string) string {
|
|
return fmt.Sprintf("%d%s", volumeID, ext)
|
|
}
|