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  }