github.com/mgoltzsche/ctnr@v0.7.1-alpha/pkg/fs/fsnodeattrs_test.go (about) 1 package fs 2 3 import ( 4 "net/url" 5 "testing" 6 "time" 7 8 "github.com/mgoltzsche/ctnr/pkg/idutils" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestFileAttrsEquals(t *testing.T) { 14 mtime, err := time.Parse(time.RFC3339, "2018-01-23T01:01:42Z") 15 require.NoError(t, err) 16 atime, err := time.Parse(time.RFC3339, "2018-01-23T01:02:42Z") 17 require.NoError(t, err) 18 otime, err := time.Parse(time.RFC3339, "2018-01-23T01:03:42Z") 19 require.NoError(t, err) 20 a := FileAttrs{ 21 Mode: 0644, 22 UserIds: idutils.UserIds{0, 33}, 23 Xattrs: map[string]string{"k": "v"}, 24 FileTimes: FileTimes{mtime, atime}, 25 Size: 7, 26 Symlink: "../symlinkdest", 27 } 28 assert.True(t, a.Equal(&a), "a.Equal(a)") 29 b := a 30 assert.True(t, a.Equal(&b), "a.Equal(b)") 31 b.Xattrs = nil 32 c := b 33 assert.True(t, b.Equal(&c), "nilXAttrs.Equal(nilXAttrs)") 34 b.Xattrs = map[string]string{} 35 c = b 36 assert.True(t, b.Equal(&c), "emptyXAttrs.Equal(emptyXAttrs)") 37 c.Xattrs = nil 38 assert.True(t, b.Equal(&c), "emptyXAttrs.Equal(nilXAttrs)") 39 b = a 40 b.Mode = 0640 41 assert.False(t, a.Equal(&b), "a.Equal(changedMode)") 42 b = a 43 b.Uid = 1 44 assert.False(t, a.Equal(&b), "a.Equal(changedUid)") 45 b = a 46 b.Gid = 1000 47 assert.False(t, a.Equal(&b), "a.Equal(changedUid)") 48 b = a 49 b.Xattrs = map[string]string{"k": "v", "x": "y"} 50 assert.False(t, a.Equal(&b), "a.Equal(changedXAttrsSize)") 51 b.Xattrs = map[string]string{"k": "x"} 52 assert.False(t, a.Equal(&b), "a.Equal(changedXAttr)") 53 b.Xattrs = nil 54 assert.False(t, a.Equal(&b), "a.Equal(nilXAttrs)") 55 b = a 56 b.Size = 3 57 assert.False(t, a.Equal(&b), "a.Equal(changedSize)") 58 b = a 59 b.Symlink = "changeddest" 60 assert.False(t, a.Equal(&b), "a.Equal(changedSymlink)") 61 b = a 62 b.Mtime = otime 63 assert.False(t, a.Equal(&b), "a.Equal(changedMtime)") 64 b = a 65 b.Atime = otime 66 assert.True(t, a.Equal(&b), "a.Equal(changedAtime)") 67 } 68 69 func TestNodeInfoEquals(t *testing.T) { 70 a := NodeInfo{TypeFile, FileAttrs{Mode: 0644}} 71 assert.True(t, a.Equal(a), "a.Equal(a)") 72 b := a 73 b.NodeType = TypeSymlink 74 assert.False(t, a.Equal(b), "a.Equal(changedNodeType)") 75 b = a 76 b.Mode = 0600 77 assert.False(t, a.Equal(b), "a.Equal(changedMode)") 78 } 79 80 func TestDerivedAttrsEqual(t *testing.T) { 81 a := DerivedAttrs{"hash", "url", "httpinfo"} 82 assert.True(t, a.Equal(&a), "a.Equal(a)") 83 b := a 84 a.Hash = "changed" 85 assert.False(t, a.Equal(&b), "a.Equal(changedHash)") 86 b = a 87 a.URL = "changed" 88 assert.False(t, a.Equal(&b), "a.Equal(changedURL)") 89 b = a 90 a.HTTPInfo = "changed" 91 assert.False(t, a.Equal(&b), "a.Equal(changedHTTPInfo)") 92 b = a 93 } 94 95 func TestNodeAttrsString(t *testing.T) { 96 mtime, err := time.Parse(time.RFC3339, "2018-01-23T01:01:42Z") 97 require.NoError(t, err) 98 atime, err := time.Parse(time.RFC3339, "2018-02-23T01:02:42Z") 99 require.NoError(t, err) 100 parsed, err := url.Parse("http://example.org/my page") 101 require.NoError(t, err) 102 da := DerivedAttrs{"sha256:hex", parsed.String(), "http= info"} 103 testee := NodeAttrs{ 104 NodeInfo{ 105 TypeFile, 106 FileAttrs{ 107 Mode: 0750, 108 UserIds: idutils.UserIds{33, 99}, 109 Xattrs: map[string]string{"k1= x": "v1= x", "k2": "v2"}, 110 Symlink: "link= dest/x", 111 Size: 123, 112 FileTimes: FileTimes{ 113 Atime: atime, 114 Mtime: mtime, 115 }, 116 }, 117 }, 118 da, 119 } 120 actual := testee.AttrString(AttrsAll) 121 expected := "type=file usr=33:99 mode=750 size=123 link=link=%20dest/x xattr.k1%3D+x=v1%3D+x xattr.k2=v2 mtime=1516669302 atime=1519347762 hash=sha256:hex url=http://example.org/my%20page http=http%3D+info" 122 if expected != actual { 123 t.Errorf("attrs.AttrString(): expected\n %s\nbut was\n %s", expected, actual) 124 t.FailNow() 125 } 126 a, err := ParseNodeAttrs(expected) 127 require.NoError(t, err) 128 actual = a.AttrString(AttrsAll) 129 if expected != actual { 130 t.Errorf("ParseAttrs(a).String() != a: expected\n %s\nbut was\n %s", expected, actual) 131 } 132 }