mukan-ignite/ignite/pkg/xos/cp_test.go
Mukan Erkin Törük c32551b6f7
Some checks failed
Docs Deploy / build_and_deploy (push) Has been cancelled
Generate Docs / cli (push) Has been cancelled
Generate Config Doc / cli (push) Has been cancelled
Go formatting / go-formatting (push) Has been cancelled
Check links / markdown-link-check (push) Has been cancelled
Integration / pre-test (push) Has been cancelled
Integration / test on (push) Has been cancelled
Integration / status (push) Has been cancelled
Lint / Lint Go code (push) Has been cancelled
Test / test (ubuntu-latest) (push) Has been cancelled
refactor: replace all github.com upstream refs with git.cw.tr/mukan-network
2026-05-11 03:36:24 +03:00

264 lines
6.4 KiB
Go

package xos_test
import (
"os"
"path/filepath"
"testing"
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/errors"
"github.com/stretchr/testify/require"
"git.cw.tr/mukan-network/mukan-ignite/ignite/pkg/xos"
)
func TestCopyFolder(t *testing.T) {
tempDir, err := os.MkdirTemp("", "TestCopyFile")
require.NoError(t, err)
t.Cleanup(func() {
require.NoError(t, os.RemoveAll(tempDir))
})
// Create temporary source and destination directories
srcDir := filepath.Join(tempDir, "source")
err = os.MkdirAll(srcDir, 0o755)
require.NoError(t, err)
dstDir := filepath.Join(tempDir, "destination")
err = os.MkdirAll(dstDir, 0o755)
require.NoError(t, err)
emptyDir := filepath.Join(tempDir, "empty")
err = os.MkdirAll(emptyDir, 0o755)
require.NoError(t, err)
// Create a temporary source file
srcFile1 := filepath.Join(srcDir, "file_1.txt")
err = os.WriteFile(srcFile1, []byte("File content 1"), 0o644)
require.NoError(t, err)
srcFile2 := filepath.Join(srcDir, "file_2.txt")
err = os.WriteFile(srcFile2, []byte("File content 2"), 0o644)
require.NoError(t, err)
tests := []struct {
name string
srcPath string
dstPath string
expectedErr error
expectedFileCount int
}{
{
name: "valid paths",
srcPath: srcDir,
dstPath: dstDir,
expectedFileCount: 2,
},
{
name: "non existent destination",
srcPath: srcDir,
dstPath: filepath.Join(dstDir, "non-existent-destination"),
expectedErr: os.ErrNotExist,
},
{
name: "non existent source",
srcPath: filepath.Join(dstDir, "non-existent-source"),
dstPath: dstDir,
expectedErr: os.ErrNotExist,
},
{
name: "same source and destination",
srcPath: srcDir,
dstPath: srcDir,
expectedFileCount: 2,
},
{
name: "empty source",
srcPath: emptyDir,
dstPath: filepath.Join(tempDir, "empty"),
expectedFileCount: 0,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := xos.CopyFolder(tt.srcPath, tt.dstPath)
if tt.expectedErr != nil {
require.ErrorIs(t, err, tt.expectedErr)
return
}
require.NoError(t, err)
// Check the number of files in the destination directory
files, err := os.ReadDir(tt.dstPath)
require.NoError(t, err)
require.Equal(t, tt.expectedFileCount, len(files))
})
}
}
func TestCopyFile(t *testing.T) {
tempDir, err := os.MkdirTemp("", "TestCopyFile")
require.NoError(t, err)
t.Cleanup(func() {
require.NoError(t, os.RemoveAll(tempDir))
})
// Create temporary source and destination directories
srcDir := filepath.Join(tempDir, "source")
dstDir := filepath.Join(tempDir, "destination")
err = os.MkdirAll(srcDir, 0o755)
require.NoError(t, err)
err = os.MkdirAll(dstDir, 0o755)
require.NoError(t, err)
// Create a temporary source file
srcFile := filepath.Join(srcDir, "file.txt")
err = os.WriteFile(srcFile, []byte("File content"), 0o644)
require.NoError(t, err)
tests := []struct {
name string
srcPath string
dstPath string
expectedErr error
expectedBytes int64 // Provide the expected number of bytes copied
}{
{
name: "valid path",
srcPath: srcFile,
dstPath: filepath.Join(dstDir, "test_1.txt"),
expectedBytes: 12,
},
{
name: "non existent file",
srcPath: filepath.Join(srcDir, "non_existent_file.txt"),
dstPath: filepath.Join(dstDir, "test_2.txt"),
expectedErr: os.ErrNotExist,
},
{
name: "non existent destination",
srcPath: srcFile,
dstPath: "/path/to/nonexistent/file.txt",
expectedErr: os.ErrNotExist,
},
{
name: "same source and destination",
srcPath: srcFile,
dstPath: srcFile,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := xos.CopyFile(tt.srcPath, tt.dstPath)
if tt.expectedErr != nil {
require.ErrorIs(t, err, tt.expectedErr)
return
}
require.NoError(t, err)
destFile, err := os.Open(tt.dstPath)
require.NoError(t, err)
destFileInfo, err := destFile.Stat()
require.NoError(t, err)
require.NoError(t, destFile.Close())
require.Equal(t, tt.expectedBytes, destFileInfo.Size())
})
}
}
func TestValidateFolderCopy(t *testing.T) {
tempDir, err := os.MkdirTemp("", "TestValidateFolderCopy")
require.NoError(t, err)
t.Cleanup(func() {
require.NoError(t, os.RemoveAll(tempDir))
})
// Create source and destination directories and files
var (
srcPath = filepath.Join(tempDir, "source")
srcFile = filepath.Join(srcPath, "test.txt")
dstPath = filepath.Join(tempDir, "destination")
dstFile = filepath.Join(dstPath, "test.txt")
emptyPath = filepath.Join(tempDir, "empty")
nonExistentPath = filepath.Join(tempDir, "nonexistent")
)
err = os.MkdirAll(srcPath, 0o755)
require.NoError(t, err)
err = os.MkdirAll(dstPath, 0o755)
require.NoError(t, err)
err = os.MkdirAll(emptyPath, 0o755)
require.NoError(t, err)
err = os.WriteFile(srcFile, []byte("source test"), 0o644)
require.NoError(t, err)
err = os.WriteFile(dstFile, []byte("destination test"), 0o644)
require.NoError(t, err)
type args struct {
srcPath string
dstPath string
}
tests := []struct {
name string
args args
want []string
err error
}{
{
name: "valid paths",
args: args{
srcPath: srcPath,
dstPath: dstPath,
},
want: []string{"test.txt"},
},
{
name: "same source and destination",
args: args{
srcPath: srcPath,
dstPath: srcPath,
},
want: []string{},
err: errors.Errorf("source and destination paths are the same %s", srcPath),
},
{
name: "empty directory",
args: args{
srcPath: emptyPath,
dstPath: dstPath,
},
want: []string{},
},
{
name: "non existent source",
args: args{
srcPath: nonExistentPath,
dstPath: dstPath,
},
err: errors.Errorf("source path does not exist: %s", nonExistentPath),
},
{
name: "non existent destination",
args: args{
srcPath: srcPath,
dstPath: nonExistentPath,
},
err: errors.Errorf("destination path does not exist: %s", nonExistentPath),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := xos.ValidateFolderCopy(tt.args.srcPath, tt.args.dstPath)
if tt.err != nil {
require.Error(t, err)
require.Equal(t, err.Error(), tt.err.Error())
return
}
require.NoError(t, err)
require.ElementsMatch(t, tt.want, got)
})
}
}