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  }