mirror of
https://github.com/Awuqing/BackupX.git
synced 2026-06-13 13:49:38 +08:00
备份压缩在 gzip 之外新增 zstd(更高压缩率、更快解压)。pkg/compress 新增 ZstdFile/UnzstdFile,Master 与 Agent 压缩/解压按后缀分流,任务校验与前端下拉同步;往返单测覆盖。
41 lines
1.0 KiB
Go
41 lines
1.0 KiB
Go
package compress
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestZstdRoundTrip(t *testing.T) {
|
|
dir := t.TempDir()
|
|
src := filepath.Join(dir, "data.txt")
|
|
content := []byte("hello zstd roundtrip 差异压缩测试 " + strings.Repeat("payload-", 2000))
|
|
if err := os.WriteFile(src, content, 0o644); err != nil {
|
|
t.Fatalf("write source: %v", err)
|
|
}
|
|
compressed, err := ZstdFile(src)
|
|
if err != nil {
|
|
t.Fatalf("ZstdFile: %v", err)
|
|
}
|
|
if !strings.HasSuffix(compressed, ".zst") {
|
|
t.Fatalf("expected .zst suffix, got %s", compressed)
|
|
}
|
|
// 删除原文件,确保后续读到的是解压结果而非残留原文件。
|
|
if err := os.Remove(src); err != nil {
|
|
t.Fatalf("remove source: %v", err)
|
|
}
|
|
out, err := UnzstdFile(compressed)
|
|
if err != nil {
|
|
t.Fatalf("UnzstdFile: %v", err)
|
|
}
|
|
got, err := os.ReadFile(out)
|
|
if err != nil {
|
|
t.Fatalf("read decompressed: %v", err)
|
|
}
|
|
if !bytes.Equal(got, content) {
|
|
t.Fatalf("roundtrip mismatch: got %d bytes, want %d bytes", len(got), len(content))
|
|
}
|
|
}
|