|
|
- 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)
- }
|