package fileutil import ( "os" "path/filepath" "testing" ) func TestCopyFile(t *testing.T) { tmpDir, err := os.MkdirTemp("", "skillmgr-fileutil-test-*") if err != nil { t.Fatalf("创建临时目录失败: %v", err) } defer os.RemoveAll(tmpDir) // 创建源文件 srcFile := filepath.Join(tmpDir, "src.txt") content := []byte("test content") if err := os.WriteFile(srcFile, content, 0644); err != nil { t.Fatalf("创建源文件失败: %v", err) } // 复制 destFile := filepath.Join(tmpDir, "dest.txt") if err := CopyFile(srcFile, destFile); err != nil { t.Fatalf("CopyFile 失败: %v", err) } // 验证 destContent, err := os.ReadFile(destFile) if err != nil { t.Fatalf("读取目标文件失败: %v", err) } if string(destContent) != string(content) { t.Errorf("内容不匹配:期望 %s,得到 %s", content, destContent) } } func TestCopyDir(t *testing.T) { tmpDir, err := os.MkdirTemp("", "skillmgr-fileutil-test-*") if err != nil { t.Fatalf("创建临时目录失败: %v", err) } defer os.RemoveAll(tmpDir) // 创建源目录结构 srcDir := filepath.Join(tmpDir, "src") os.MkdirAll(filepath.Join(srcDir, "subdir"), 0755) os.WriteFile(filepath.Join(srcDir, "file1.txt"), []byte("file1"), 0644) os.WriteFile(filepath.Join(srcDir, "subdir", "file2.txt"), []byte("file2"), 0644) // 复制 destDir := filepath.Join(tmpDir, "dest") if err := CopyDir(srcDir, destDir); err != nil { t.Fatalf("CopyDir 失败: %v", err) } // 验证文件存在 files := []string{ filepath.Join(destDir, "file1.txt"), filepath.Join(destDir, "subdir", "file2.txt"), } for _, file := range files { if _, err := os.Stat(file); os.IsNotExist(err) { t.Errorf("文件应该存在: %s", file) } } } func TestCopyFile_PreservePermissions(t *testing.T) { tmpDir, err := os.MkdirTemp("", "skillmgr-fileutil-test-*") if err != nil { t.Fatalf("创建临时目录失败: %v", err) } defer os.RemoveAll(tmpDir) // 创建可执行文件 srcFile := filepath.Join(tmpDir, "src.sh") if err := os.WriteFile(srcFile, []byte("#!/bin/bash"), 0755); err != nil { t.Fatalf("创建源文件失败: %v", err) } // 复制 destFile := filepath.Join(tmpDir, "dest.sh") if err := CopyFile(srcFile, destFile); err != nil { t.Fatalf("CopyFile 失败: %v", err) } // 验证权限 info, err := os.Stat(destFile) if err != nil { t.Fatalf("获取文件信息失败: %v", err) } if info.Mode().Perm() != 0755 { t.Errorf("权限不匹配:期望 0755,得到 %o", info.Mode().Perm()) } }