mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-11-28 18:11:17 +02:00
145 lines
3.0 KiB
Go
145 lines
3.0 KiB
Go
package osutils_test
|
|
|
|
import (
|
|
"io/fs"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/pocketbase/pocketbase/tools/list"
|
|
"github.com/pocketbase/pocketbase/tools/osutils"
|
|
"github.com/pocketbase/pocketbase/tools/security"
|
|
)
|
|
|
|
func TestMoveDirContent(t *testing.T) {
|
|
testDir := createTestDir(t)
|
|
defer os.RemoveAll(testDir)
|
|
|
|
exclude := []string{
|
|
"missing",
|
|
"test2",
|
|
"b",
|
|
}
|
|
|
|
// missing dest path
|
|
// ---
|
|
dir1 := filepath.Join(filepath.Dir(testDir), "a", "b", "c", "d", "_pb_move_dir_content_test_" + security.PseudorandomString(4))
|
|
defer os.RemoveAll(dir1)
|
|
|
|
if err := osutils.MoveDirContent(testDir, dir1, exclude...); err == nil {
|
|
t.Fatal("Expected path error, got nil")
|
|
}
|
|
|
|
// existing parent dir
|
|
// ---
|
|
dir2 := filepath.Join(filepath.Dir(testDir), "_pb_move_dir_content_test_" + security.PseudorandomString(4))
|
|
defer os.RemoveAll(dir2)
|
|
|
|
if err := osutils.MoveDirContent(testDir, dir2, exclude...); err != nil {
|
|
t.Fatalf("Expected dir2 to be created, got error: %v", err)
|
|
}
|
|
|
|
|
|
// find all files
|
|
files := []string{}
|
|
filepath.WalkDir(dir2, func(path string, d fs.DirEntry, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if d.IsDir() {
|
|
return nil
|
|
}
|
|
|
|
files = append(files, path)
|
|
|
|
return nil
|
|
})
|
|
|
|
expectedFiles := []string{
|
|
filepath.Join(dir2, "test1"),
|
|
filepath.Join(dir2, "a", "a1"),
|
|
filepath.Join(dir2, "a", "a2"),
|
|
};
|
|
|
|
if len(files) != len(expectedFiles) {
|
|
t.Fatalf("Expected %d files, got %d: \n%v", len(expectedFiles), len(files), files)
|
|
}
|
|
|
|
for _, expected := range expectedFiles {
|
|
if !list.ExistInSlice(expected, files) {
|
|
t.Fatalf("Missing expected file %q in \n%v", expected, files)
|
|
}
|
|
}
|
|
}
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
// note: make sure to call os.RemoveAll(dir) after you are done
|
|
// working with the created test dir.
|
|
func createTestDir(t *testing.T) string {
|
|
dir, err := os.MkdirTemp(os.TempDir(), "test_dir")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// create sub directories
|
|
if err := os.MkdirAll(filepath.Join(dir, "a"), os.ModePerm); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.MkdirAll(filepath.Join(dir, "b"), os.ModePerm); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
|
|
{
|
|
f, err := os.OpenFile(filepath.Join(dir, "test1"), os.O_WRONLY|os.O_CREATE, 0644)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f.Close()
|
|
}
|
|
|
|
{
|
|
f, err := os.OpenFile(filepath.Join(dir, "test2"), os.O_WRONLY|os.O_CREATE, 0644)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f.Close()
|
|
}
|
|
|
|
{
|
|
f, err := os.OpenFile(filepath.Join(dir, "a/a1"), os.O_WRONLY|os.O_CREATE, 0644)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f.Close()
|
|
}
|
|
|
|
{
|
|
f, err := os.OpenFile(filepath.Join(dir, "a/a2"), os.O_WRONLY|os.O_CREATE, 0644)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f.Close()
|
|
}
|
|
|
|
{
|
|
f, err := os.OpenFile(filepath.Join(dir, "b/b2"), os.O_WRONLY|os.O_CREATE, 0644)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f.Close()
|
|
}
|
|
|
|
{
|
|
f, err := os.OpenFile(filepath.Join(dir, "b/b2"), os.O_WRONLY|os.O_CREATE, 0644)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f.Close()
|
|
}
|
|
|
|
return dir
|
|
}
|