github.com/rish1988/moby@v25.0.2+incompatible/pkg/tarsum/versioning_test.go (about) 1 package tarsum // import "github.com/docker/docker/pkg/tarsum" 2 3 import ( 4 "archive/tar" 5 "fmt" 6 "strings" 7 "testing" 8 9 "gotest.tools/v3/assert" 10 is "gotest.tools/v3/assert/cmp" 11 ) 12 13 func TestVersionLabelForChecksum(t *testing.T) { 14 version := VersionLabelForChecksum("tarsum+sha256:deadbeef") 15 if version != "tarsum" { 16 t.Fatalf("Version should have been 'tarsum', was %v", version) 17 } 18 version = VersionLabelForChecksum("tarsum.v1+sha256:deadbeef") 19 if version != "tarsum.v1" { 20 t.Fatalf("Version should have been 'tarsum.v1', was %v", version) 21 } 22 version = VersionLabelForChecksum("something+somethingelse") 23 if version != "something" { 24 t.Fatalf("Version should have been 'something', was %v", version) 25 } 26 version = VersionLabelForChecksum("invalidChecksum") 27 if version != "" { 28 t.Fatalf("Version should have been empty, was %v", version) 29 } 30 } 31 32 func TestVersion(t *testing.T) { 33 expected := "tarsum" 34 var v Version 35 if v.String() != expected { 36 t.Errorf("expected %q, got %q", expected, v.String()) 37 } 38 39 expected = "tarsum.v1" 40 v = 1 41 if v.String() != expected { 42 t.Errorf("expected %q, got %q", expected, v.String()) 43 } 44 45 expected = "tarsum.dev" 46 v = 2 47 if v.String() != expected { 48 t.Errorf("expected %q, got %q", expected, v.String()) 49 } 50 } 51 52 func TestGetVersion(t *testing.T) { 53 testSet := []struct { 54 Str string 55 Expected Version 56 }{ 57 {"tarsum+sha256:e58fcf7418d4390dec8e8fb69d88c06ec07039d651fedd3aa72af9972e7d046b", Version0}, 58 {"tarsum+sha256", Version0}, 59 {"tarsum", Version0}, 60 {"tarsum.dev", VersionDev}, 61 {"tarsum.dev+sha256:deadbeef", VersionDev}, 62 } 63 64 for _, ts := range testSet { 65 v, err := GetVersionFromTarsum(ts.Str) 66 if err != nil { 67 t.Fatalf("%q : %s", err, ts.Str) 68 } 69 if v != ts.Expected { 70 t.Errorf("expected %d (%q), got %d (%q)", ts.Expected, ts.Expected, v, v) 71 } 72 } 73 74 // test one that does not exist, to ensure it errors 75 str := "weak+md5:abcdeabcde" 76 _, err := GetVersionFromTarsum(str) 77 if err != ErrNotVersion { 78 t.Fatalf("%q : %s", err, str) 79 } 80 } 81 82 func TestGetVersions(t *testing.T) { 83 expected := []Version{ 84 Version0, 85 Version1, 86 VersionDev, 87 } 88 versions := GetVersions() 89 if len(versions) != len(expected) { 90 t.Fatalf("Expected %v versions, got %v", len(expected), len(versions)) 91 } 92 if !containsVersion(versions, expected[0]) || !containsVersion(versions, expected[1]) || !containsVersion(versions, expected[2]) { 93 t.Fatalf("Expected [%v], got [%v]", expected, versions) 94 } 95 } 96 97 func containsVersion(versions []Version, version Version) bool { 98 for _, v := range versions { 99 if v == version { 100 return true 101 } 102 } 103 return false 104 } 105 106 func TestSelectXattrsV1(t *testing.T) { 107 hdr := &tar.Header{ 108 Xattrs: map[string]string{ //nolint:staticcheck 109 "user.xattronly": "x", 110 "user.foo": "xattr", 111 }, 112 PAXRecords: map[string]string{ 113 "SCHILY.xattr.user.paxonly": "p", 114 "SCHILY.xattr.user.foo": "paxrecord", 115 }, 116 } 117 selected := v1TarHeaderSelect(hdr) 118 119 var s strings.Builder 120 for _, elem := range selected { 121 fmt.Fprintf(&s, "%s=%s\n", elem[0], elem[1]) 122 } 123 t.Logf("Selected headers:\n%s", s.String()) 124 125 assert.Check(t, is.DeepEqual(selected[len(selected)-3:], [][2]string{ 126 {"user.foo", "xattr"}, 127 {"user.paxonly", "p"}, 128 {"user.xattronly", "x"}, 129 })) 130 }