github.com/npaton/distribution@v2.3.1-rc.0+incompatible/digest/digest_test.go (about)

     1  package digest
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  func TestParseDigest(t *testing.T) {
     8  	for _, testcase := range []struct {
     9  		input     string
    10  		err       error
    11  		algorithm Algorithm
    12  		hex       string
    13  	}{
    14  		{
    15  			input:     "sha256:e58fcf7418d4390dec8e8fb69d88c06ec07039d651fedd3aa72af9972e7d046b",
    16  			algorithm: "sha256",
    17  			hex:       "e58fcf7418d4390dec8e8fb69d88c06ec07039d651fedd3aa72af9972e7d046b",
    18  		},
    19  		{
    20  			input:     "sha384:d3fc7881460b7e22e3d172954463dddd7866d17597e7248453c48b3e9d26d9596bf9c4a9cf8072c9d5bad76e19af801d",
    21  			algorithm: "sha384",
    22  			hex:       "d3fc7881460b7e22e3d172954463dddd7866d17597e7248453c48b3e9d26d9596bf9c4a9cf8072c9d5bad76e19af801d",
    23  		},
    24  		{
    25  			// empty hex
    26  			input: "sha256:",
    27  			err:   ErrDigestInvalidFormat,
    28  		},
    29  		{
    30  			// just hex
    31  			input: "d41d8cd98f00b204e9800998ecf8427e",
    32  			err:   ErrDigestInvalidFormat,
    33  		},
    34  		{
    35  			// not hex
    36  			input: "sha256:d41d8cd98f00b204e9800m98ecf8427e",
    37  			err:   ErrDigestInvalidFormat,
    38  		},
    39  		{
    40  			// too short
    41  			input: "sha256:abcdef0123456789",
    42  			err:   ErrDigestInvalidLength,
    43  		},
    44  		{
    45  			// too short (from different algorithm)
    46  			input: "sha512:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    47  			err:   ErrDigestInvalidLength,
    48  		},
    49  		{
    50  			input: "foo:d41d8cd98f00b204e9800998ecf8427e",
    51  			err:   ErrDigestUnsupported,
    52  		},
    53  	} {
    54  		digest, err := ParseDigest(testcase.input)
    55  		if err != testcase.err {
    56  			t.Fatalf("error differed from expected while parsing %q: %v != %v", testcase.input, err, testcase.err)
    57  		}
    58  
    59  		if testcase.err != nil {
    60  			continue
    61  		}
    62  
    63  		if digest.Algorithm() != testcase.algorithm {
    64  			t.Fatalf("incorrect algorithm for parsed digest: %q != %q", digest.Algorithm(), testcase.algorithm)
    65  		}
    66  
    67  		if digest.Hex() != testcase.hex {
    68  			t.Fatalf("incorrect hex for parsed digest: %q != %q", digest.Hex(), testcase.hex)
    69  		}
    70  
    71  		// Parse string return value and check equality
    72  		newParsed, err := ParseDigest(digest.String())
    73  
    74  		if err != nil {
    75  			t.Fatalf("unexpected error parsing input %q: %v", testcase.input, err)
    76  		}
    77  
    78  		if newParsed != digest {
    79  			t.Fatalf("expected equal: %q != %q", newParsed, digest)
    80  		}
    81  	}
    82  }