github.com/attic-labs/noms@v0.0.0-20210827224422-e5fa29d95e8b/tools/file/file_test.go (about) 1 // Copyright 2016 Attic Labs, Inc. All rights reserved. 2 // Licensed under the Apache License, version 2.0: 3 // http://www.apache.org/licenses/LICENSE-2.0 4 5 package file 6 7 import ( 8 "io/ioutil" 9 "os" 10 "path/filepath" 11 "testing" 12 13 "github.com/attic-labs/noms/go/d" 14 "github.com/stretchr/testify/suite" 15 ) 16 17 const ( 18 contents = "hey" 19 ) 20 21 func TestSerialRunnerTestSuite(t *testing.T) { 22 suite.Run(t, &FileTestSuite{}) 23 } 24 25 type FileTestSuite struct { 26 suite.Suite 27 dir, src, exc string 28 } 29 30 func (suite *FileTestSuite) SetupTest() { 31 var err error 32 suite.dir, err = ioutil.TempDir(os.TempDir(), "") 33 suite.NoError(err) 34 suite.src = filepath.Join(suite.dir, "srcfile") 35 suite.exc = filepath.Join(suite.dir, "excfile") 36 suite.NoError(ioutil.WriteFile(suite.src, []byte(contents), 0644)) 37 suite.NoError(ioutil.WriteFile(suite.exc, []byte(contents), 0755)) 38 } 39 40 func (suite *FileTestSuite) TearDownTest() { 41 os.Remove(suite.dir) 42 } 43 44 func (suite *FileTestSuite) TestCopyFile() { 45 dst := filepath.Join(suite.dir, "dstfile") 46 47 test := func(src string, mode int) { 48 DumbCopy(src, dst) 49 50 info, err := os.Stat(src) 51 suite.NoError(err) 52 suite.Equal(mode, int(info.Mode())) 53 54 out, err := ioutil.ReadFile(dst) 55 suite.NoError(err) 56 suite.Equal(contents, string(out)) 57 } 58 59 test(suite.src, 0644) 60 test(suite.exc, 0755) 61 } 62 63 func (suite *FileTestSuite) TestCopyLink() { 64 link := filepath.Join(suite.dir, "link") 65 suite.NoError(os.Symlink(suite.src, link)) 66 67 dst := filepath.Join(suite.dir, "dstfile") 68 DumbCopy(link, dst) 69 70 info, err := os.Lstat(dst) 71 suite.NoError(err) 72 suite.True(info.Mode().IsRegular()) 73 74 out, err := ioutil.ReadFile(dst) 75 suite.NoError(err) 76 suite.Equal(contents, string(out)) 77 } 78 79 func (suite *FileTestSuite) TestNoCopyDir() { 80 dir, err := ioutil.TempDir(suite.dir, "") 81 suite.NoError(err) 82 83 dst := filepath.Join(suite.dir, "dst") 84 suite.Error(d.Try(func() { DumbCopy(dir, dst) })) 85 }