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  }