package os
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCopyFile(t *testing.T) {
|
|
tmpfile, err := ioutil.TempFile("", "example")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.Remove(tmpfile.Name())
|
|
content := []byte("hello world")
|
|
if _, err := tmpfile.Write(content); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
copyfile := fmt.Sprintf("%s.copy", tmpfile.Name())
|
|
if err := CopyFile(tmpfile.Name(), copyfile); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := os.Stat(copyfile); os.IsNotExist(err) {
|
|
t.Fatal("copy should exist")
|
|
}
|
|
data, err := ioutil.ReadFile(copyfile)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !bytes.Equal(data, content) {
|
|
t.Fatalf("copy file content differs: expected %v, got %v", content, data)
|
|
}
|
|
os.Remove(copyfile)
|
|
}
|
|
|
|
func TestEnsureDir(t *testing.T) {
|
|
tmp, err := ioutil.TempDir("", "ensure-dir")
|
|
require.NoError(t, err)
|
|
defer os.RemoveAll(tmp)
|
|
|
|
// Should be possible to create a new directory.
|
|
err = EnsureDir(filepath.Join(tmp, "dir"), 0755)
|
|
require.NoError(t, err)
|
|
require.DirExists(t, filepath.Join(tmp, "dir"))
|
|
|
|
// Should succeed on existing directory.
|
|
err = EnsureDir(filepath.Join(tmp, "dir"), 0755)
|
|
require.NoError(t, err)
|
|
|
|
// Should fail on file.
|
|
err = ioutil.WriteFile(filepath.Join(tmp, "file"), []byte{}, 0644)
|
|
require.NoError(t, err)
|
|
err = EnsureDir(filepath.Join(tmp, "file"), 0755)
|
|
require.Error(t, err)
|
|
|
|
// Should allow symlink to dir.
|
|
err = os.Symlink(filepath.Join(tmp, "dir"), filepath.Join(tmp, "linkdir"))
|
|
require.NoError(t, err)
|
|
err = EnsureDir(filepath.Join(tmp, "linkdir"), 0755)
|
|
require.NoError(t, err)
|
|
|
|
// Should error on symlink to file.
|
|
err = os.Symlink(filepath.Join(tmp, "file"), filepath.Join(tmp, "linkfile"))
|
|
require.NoError(t, err)
|
|
err = EnsureDir(filepath.Join(tmp, "linkfile"), 0755)
|
|
require.Error(t, err)
|
|
}
|