github.com/mgoltzsche/ctnr@v0.7.1-alpha/pkg/fs/source/sourcefile_test.go (about) 1 package source 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 "time" 9 10 "github.com/mgoltzsche/ctnr/pkg/fs" 11 "github.com/mgoltzsche/ctnr/pkg/idutils" 12 "github.com/openSUSE/umoci/pkg/fseval" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestSourceFile(t *testing.T) { 17 mtime, err := time.Parse(time.RFC3339, "2018-01-23T01:01:42Z") 18 require.NoError(t, err) 19 mtime = time.Unix(mtime.Unix(), 900000000) 20 atime, err := time.Parse(time.RFC3339, "2018-01-23T01:02:42Z") 21 require.NoError(t, err) 22 tmpDir, err := ioutil.TempDir("", "test-source-dir-") 23 require.NoError(t, err) 24 defer os.RemoveAll(tmpDir) 25 srcFile := filepath.Join(tmpDir, "sourcefile") 26 err = ioutil.WriteFile(srcFile, []byte("content1"), 0644) 27 require.NoError(t, err) 28 fsEval := fseval.RootlessFsEval 29 const mode os.FileMode = 0754 30 fileAttrs := fs.FileAttrs{Mode: mode, FileTimes: fs.FileTimes{Atime: atime, Mtime: mtime}} 31 testee := NewSourceFile(fs.NewFileReader(srcFile, fsEval), fileAttrs) 32 a := testee.Attrs() 33 if a.NodeType != fs.TypeFile { 34 t.Error("type != TypeFile") 35 t.FailNow() 36 } 37 if a.Mode != mode { 38 t.Errorf("mode %s != %s", a.Mode, mode) 39 } 40 41 // Test hash 42 wa, err := testee.DeriveAttrs() 43 require.NoError(t, err) 44 if wa.Hash == "" { 45 t.Errorf("hash == ''") 46 } 47 hash1 := wa.Hash 48 testee = NewSourceFile(fs.NewFileReader(srcFile, fsEval), fileAttrs) 49 wa, err = testee.DeriveAttrs() 50 require.NoError(t, err) 51 hash2 := wa.Hash 52 if hash1 != hash2 { 53 t.Error("hash1 != hash1") 54 } 55 err = ioutil.WriteFile(srcFile, []byte("content2"), 0644) 56 require.NoError(t, err) 57 fileAttrs.UserIds = idutils.UserIds{1, 33} 58 testee = NewSourceFile(fs.NewFileReader(srcFile, fsEval), fileAttrs) 59 wa, err = testee.DeriveAttrs() 60 require.NoError(t, err) 61 hash2 = wa.Hash 62 if hash1 == hash2 { 63 t.Error("hash1 == hash2") 64 } 65 66 // Test write 67 assertSourceWriteWithHardlinkSupport(t, testee, "/file type=file usr=1:33 mode=754 mtime=1516669302 atime=1516669362 hash="+hash2) 68 }