versioning_test.go 3.2 KB

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