77 lines
2.2 KiB
Go
77 lines
2.2 KiB
Go
package cli
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestValidateRestoreInputRequiresDirectoryAndConfig(t *testing.T) {
|
|
if _, err := validateRestoreInput(t.TempDir()); err == nil {
|
|
t.Fatal("缺少配置文件的备份目录未被拒绝")
|
|
}
|
|
file := filepath.Join(t.TempDir(), "backup.txt")
|
|
if err := os.WriteFile(file, []byte("backup"), 0o600); err != nil {
|
|
t.Fatalf("创建测试文件失败:%v", err)
|
|
}
|
|
if _, err := validateRestoreInput(file); err == nil {
|
|
t.Fatal("普通文件路径未被拒绝")
|
|
}
|
|
}
|
|
|
|
func TestValidateRestoreInputAcceptsCompleteDirectory(t *testing.T) {
|
|
dir := t.TempDir()
|
|
if err := os.WriteFile(filepath.Join(dir, "scert.json"), []byte("{}"), 0o600); err != nil {
|
|
t.Fatalf("创建测试配置失败:%v", err)
|
|
}
|
|
result, err := validateRestoreInput(dir)
|
|
if err != nil {
|
|
t.Fatalf("有效备份目录未通过校验:%v", err)
|
|
}
|
|
if !strings.EqualFold(result, filepath.Clean(dir)) {
|
|
t.Fatalf("备份目录未规范化:%s", result)
|
|
}
|
|
}
|
|
|
|
func TestCopyFileExclusiveRefusesOverwrite(t *testing.T) {
|
|
dir := t.TempDir()
|
|
source := filepath.Join(dir, "source")
|
|
target := filepath.Join(dir, "target")
|
|
if err := os.WriteFile(source, []byte("new"), 0o600); err != nil {
|
|
t.Fatalf("创建源文件失败:%v", err)
|
|
}
|
|
if err := os.WriteFile(target, []byte("old"), 0o600); err != nil {
|
|
t.Fatalf("创建目标文件失败:%v", err)
|
|
}
|
|
if err := copyFileExclusive(source, target, 0o600); err == nil {
|
|
t.Fatal("排他复制覆盖了已有文件")
|
|
}
|
|
data, err := os.ReadFile(target)
|
|
if err != nil {
|
|
t.Fatalf("读取目标文件失败:%v", err)
|
|
}
|
|
if string(data) != "old" {
|
|
t.Fatalf("目标文件内容被修改:%s", data)
|
|
}
|
|
}
|
|
|
|
func TestCopyFileExclusiveRemovesPartialTargetOnCopyFailure(t *testing.T) {
|
|
dir := t.TempDir()
|
|
target := filepath.Join(dir, "target")
|
|
if err := copyFileExclusive(dir, target, 0o600); err == nil {
|
|
t.Fatal("复制目录时没有返回错误")
|
|
}
|
|
if _, err := os.Lstat(target); !os.IsNotExist(err) {
|
|
t.Fatalf("复制失败后残留了不完整目标文件:%v", err)
|
|
}
|
|
}
|
|
|
|
func TestSamePathNormalizesAbsolutePaths(t *testing.T) {
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "file")
|
|
if !samePath(path, filepath.Join(dir, ".", "file")) {
|
|
t.Fatal("相同路径未被识别")
|
|
}
|
|
}
|