github.com/wuhuizuo/gomplate@v3.5.0+incompatible/file/file_test.go (about)

     1  package file
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	tfs "github.com/gotestyourself/gotestyourself/fs"
    10  	"github.com/spf13/afero"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestRead(t *testing.T) {
    15  	origfs := fs
    16  	defer func() { fs = origfs }()
    17  	fs = afero.NewMemMapFs()
    18  	_ = fs.Mkdir("/tmp", 0777)
    19  	f, _ := fs.Create("/tmp/foo")
    20  	_, _ = f.Write([]byte("foo"))
    21  
    22  	actual, err := Read("/tmp/foo")
    23  	assert.NoError(t, err)
    24  	assert.Equal(t, "foo", actual)
    25  
    26  	_, err = Read("/tmp/bar")
    27  	assert.Error(t, err)
    28  }
    29  
    30  func TestReadDir(t *testing.T) {
    31  	origfs := fs
    32  	defer func() { fs = origfs }()
    33  	fs = afero.NewMemMapFs()
    34  	fs.Mkdir("/tmp", 0777)
    35  	fs.Create("/tmp/foo")
    36  	fs.Create("/tmp/bar")
    37  	fs.Create("/tmp/baz")
    38  	fs.Mkdir("/tmp/qux", 0777)
    39  	fs.Create("/tmp/qux/quux")
    40  
    41  	actual, err := ReadDir("/tmp")
    42  	assert.NoError(t, err)
    43  	assert.Equal(t, []string{"bar", "baz", "foo", "qux"}, actual)
    44  
    45  	_, err = ReadDir("/tmp/foo")
    46  	assert.Error(t, err)
    47  }
    48  
    49  func TestWrite(t *testing.T) {
    50  	oldwd, _ := os.Getwd()
    51  	defer os.Chdir(oldwd)
    52  
    53  	rootDir := tfs.NewDir(t, "gomplate-test")
    54  	defer rootDir.Remove()
    55  
    56  	newwd := rootDir.Join("the", "path", "we", "want")
    57  	badwd := rootDir.Join("some", "other", "dir")
    58  	fs.MkdirAll(newwd, 0755)
    59  	fs.MkdirAll(badwd, 0755)
    60  	newwd, _ = filepath.EvalSymlinks(newwd)
    61  	badwd, _ = filepath.EvalSymlinks(badwd)
    62  
    63  	err := os.Chdir(newwd)
    64  	assert.NoError(t, err)
    65  
    66  	err = Write("/foo", []byte("Hello world"))
    67  	assert.Error(t, err)
    68  
    69  	rel, err := filepath.Rel(newwd, badwd)
    70  	assert.NoError(t, err)
    71  	err = Write(rel, []byte("Hello world"))
    72  	assert.Error(t, err)
    73  
    74  	foopath := filepath.Join(newwd, "foo")
    75  	err = Write(foopath, []byte("Hello world"))
    76  	assert.NoError(t, err)
    77  
    78  	out, err := ioutil.ReadFile(foopath)
    79  	assert.NoError(t, err)
    80  	assert.Equal(t, "Hello world", string(out))
    81  
    82  	err = Write(foopath, []byte("truncate"))
    83  	assert.NoError(t, err)
    84  
    85  	out, err = ioutil.ReadFile(foopath)
    86  	assert.NoError(t, err)
    87  	assert.Equal(t, "truncate", string(out))
    88  
    89  	foopath = filepath.Join(newwd, "nonexistant", "subdir", "foo")
    90  	err = Write(foopath, []byte("Hello subdirranean world!"))
    91  	assert.NoError(t, err)
    92  
    93  	out, err = ioutil.ReadFile(foopath)
    94  	assert.NoError(t, err)
    95  	assert.Equal(t, "Hello subdirranean world!", string(out))
    96  }
    97  
    98  func TestAssertPathInWD(t *testing.T) {
    99  	oldwd, _ := os.Getwd()
   100  	defer os.Chdir(oldwd)
   101  
   102  	err := assertPathInWD("/tmp")
   103  	assert.Error(t, err)
   104  
   105  	err = assertPathInWD(filepath.Join(oldwd, "subpath"))
   106  	assert.NoError(t, err)
   107  
   108  	err = assertPathInWD("subpath")
   109  	assert.NoError(t, err)
   110  
   111  	err = assertPathInWD("./subpath")
   112  	assert.NoError(t, err)
   113  
   114  	err = assertPathInWD(filepath.Join("..", "bogus"))
   115  	assert.Error(t, err)
   116  
   117  	err = assertPathInWD(filepath.Join("..", "..", "bogus"))
   118  	assert.Error(t, err)
   119  
   120  	base := filepath.Base(oldwd)
   121  	err = assertPathInWD(filepath.Join("..", base))
   122  	assert.NoError(t, err)
   123  }