File: digests_test.go

package info (click to toggle)
continuity 0.0~git20180216.d8fb858-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 620 kB
  • sloc: makefile: 46; sh: 28; asm: 3
file content (72 lines) | stat: -rw-r--r-- 1,815 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package continuity

import (
	"fmt"
	"reflect"
	"testing"

	"github.com/opencontainers/go-digest"
)

// TestUniqifyDigests ensures that we deterministically sort digest entries
// for a resource.
func TestUniqifyDigests(t *testing.T) {
	for _, testcase := range []struct {
		description string
		input       [][]digest.Digest // input is a series of digest collections from separate resources.
		expected    []digest.Digest
		err         error
	}{
		{
			description: "simple merge",
			input: [][]digest.Digest{
				{"sha1:abc", "sha256:def"},
				{"sha1:abc", "sha256:def"},
			},
			expected: []digest.Digest{"sha1:abc", "sha256:def"},
		},
		{
			description: "simple reversed order",
			input: [][]digest.Digest{
				{"sha1:abc", "sha256:def"},
				{"sha256:def", "sha1:abc"},
			},
			expected: []digest.Digest{"sha1:abc", "sha256:def"},
		},
		{
			description: "conflicting values for sha1",
			input: [][]digest.Digest{
				{"sha1:abc", "sha256:def"},
				{"sha256:def", "sha1:def"},
			},
			err: fmt.Errorf("conflicting digests for sha1 found"),
		},
	} {
		fatalf := func(format string, args ...interface{}) {
			t.Fatalf(testcase.description+": "+format, args...)
		}

		var assembled []digest.Digest

		for _, ds := range testcase.input {
			assembled = append(assembled, ds...)
		}

		merged, err := uniqifyDigests(assembled...)
		if err != testcase.err {
			if testcase.err == nil {
				fatalf("unexpected error uniqifying digests: %v", err)
			}

			if err != testcase.err && err.Error() != testcase.err.Error() {
				// compare by string till we create nice error type
				fatalf("unexpected error uniqifying digests: %v != %v", err, testcase.err)
			}
		}

		if !reflect.DeepEqual(merged, testcase.expected) {
			fatalf("unexpected uniquification: %v != %v", merged, testcase.expected)
		}

	}
}