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  }