mirror of https://github.com/Marcusk19/dotctl
parent
e2b88f11d9
commit
0a06a6ad0c
@ -0,0 +1,86 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/Marcusk19/bender/tools"
|
||||||
|
"github.com/spf13/afero"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
tools.SetTestFs()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func TestCopyFile(t *testing.T) {
|
||||||
|
fs := afero.NewMemMapFs()
|
||||||
|
|
||||||
|
fs.MkdirAll("test/src", 0755)
|
||||||
|
fs.MkdirAll("test/dest", 0755)
|
||||||
|
err := afero.WriteFile(fs, "test/src/a.txt", []byte("file a"), 0644)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("problem creating source file: %s", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
err = tools.CopyFile(fs, "test/src/a.txt", "test/dest/a.txt")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err.Error())
|
||||||
|
}
|
||||||
|
_, err = fs.Stat("test/dest/a.txt")
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
t.Errorf("expected destination file does not exist")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := afero.ReadFile(fs, "test/dest/a.txt")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if string(result) != "file a" {
|
||||||
|
t.Errorf("expected 'file a' got '%s'", string(result))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCopyDir(t *testing.T) {
|
||||||
|
fs := afero.NewMemMapFs()
|
||||||
|
|
||||||
|
fs.MkdirAll("test/src/dirA", 0755)
|
||||||
|
fs.MkdirAll("test/dest/", 0755)
|
||||||
|
fs.Mkdir("test/src/dirA/dirB", 0755)
|
||||||
|
|
||||||
|
err := afero.WriteFile(fs, "test/src/dirA/a.txt", []byte("file a"), 0644)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err.Error())
|
||||||
|
}
|
||||||
|
err = afero.WriteFile(fs, "test/src/dirA/dirB/b.txt", []byte("file b"), 0644)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
err = tools.CopyDir(fs, "test/src", "test/dest")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := afero.ReadFile(fs, "test/dest/dirA/a.txt")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if string(result) != "file a" {
|
||||||
|
t.Errorf("expected 'file a' got '%s'", string(result))
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = afero.ReadFile(fs, "test/dest/dirA/dirB/b.txt")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if string(result) != "file b" {
|
||||||
|
t.Errorf("expected 'file b' got '%s'", string(result))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/spf13/afero"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CopyFile(os afero.Fs, srcFile, destFile string) error{
|
||||||
|
// helper function to copy files over
|
||||||
|
sourceFileStat, err := os.Stat(srcFile)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !sourceFileStat.Mode().IsRegular() {
|
||||||
|
return fmt.Errorf("%s is not a regular file", srcFile)
|
||||||
|
}
|
||||||
|
|
||||||
|
source, err := os.Open(srcFile)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer source.Close()
|
||||||
|
|
||||||
|
destination, err := os.Create(destFile)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer destination.Close()
|
||||||
|
|
||||||
|
_, err = io.Copy(destination, source)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func CopyDir(os afero.Fs, srcDir, destDir string) error {
|
||||||
|
entries, err := afero.ReadDir(os, srcDir)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, entry := range(entries) {
|
||||||
|
if entry.IsDir() {
|
||||||
|
subDir := filepath.Join(srcDir, entry.Name())
|
||||||
|
destSubDir := filepath.Join(destDir, entry.Name())
|
||||||
|
err := os.MkdirAll(destSubDir, entry.Mode().Perm())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
CopyDir(os, subDir, destSubDir)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
sourcePath := filepath.Join(srcDir, entry.Name())
|
||||||
|
destPath := filepath.Join(destDir, entry.Name())
|
||||||
|
|
||||||
|
err := CopyFile(os, sourcePath, destPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/spf13/afero"
|
||||||
|
)
|
||||||
|
|
||||||
|
var AppFs afero.Fs = afero.NewOsFs()
|
||||||
|
|
||||||
|
|
||||||
|
func SetTestFs() {
|
||||||
|
log.Print("setting test fs")
|
||||||
|
testFs := afero.NewMemMapFs()
|
||||||
|
AppFs = testFs
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue