11package main
22
33import (
4- "reflect"
54 "testing"
65
6+ "github.com/google/go-cmp/cmp"
7+ "github.com/google/go-cmp/cmp/cmpopts"
78 intoto "github.com/in-toto/in-toto-golang/in_toto"
89 slsav02 "github.com/in-toto/in-toto-golang/in_toto/slsa_provenance/v0.2"
10+ "github.com/slsa-framework/slsa-github-generator/internal/errors"
911)
1012
1113// TestParseSubjects tests the parseSubjects function.
@@ -14,11 +16,12 @@ func TestParseSubjects(t *testing.T) {
1416 name string
1517 str string
1618 expected []intoto.Subject
17- err bool
19+ err error
1820 }{
1921 {
2022 name : "single" ,
21- str : "2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge" ,
23+ // echo "2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge" | base64 -w0
24+ str : "MmUwMzkwZWIwMjRhNTI5NjNkYjdiOTVlODRhOWMyYjEyYzAwNDA1NGE3YmFkOWE5N2VjMGM3Yzg5ZDQ2ODFkMiBob2dlCg==" ,
2225 expected : []intoto.Subject {
2326 {
2427 Name : "hoge" ,
@@ -30,7 +33,8 @@ func TestParseSubjects(t *testing.T) {
3033 },
3134 {
3235 name : "name has spaces" ,
33- str : "2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge fuga" ,
36+ // echo "2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge fuga" | base64 -w0
37+ str : "MmUwMzkwZWIwMjRhNTI5NjNkYjdiOTVlODRhOWMyYjEyYzAwNDA1NGE3YmFkOWE5N2VjMGM3Yzg5ZDQ2ODFkMiBob2dlIGZ1Z2EK" ,
3438 expected : []intoto.Subject {
3539 {
3640 Name : "hoge fuga" ,
@@ -42,7 +46,8 @@ func TestParseSubjects(t *testing.T) {
4246 },
4347 {
4448 name : "extra whitespace" ,
45- str : "\t 2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 \t hoge fuga \t " ,
49+ // echo -e "\t 2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 \t hoge fuga \t " | base64 -w0
50+ str : "CSAgMmUwMzkwZWIwMjRhNTI5NjNkYjdiOTVlODRhOWMyYjEyYzAwNDA1NGE3YmFkOWE5N2VjMGM3Yzg5ZDQ2ODFkMiAJIGhvZ2UgZnVnYSAgCSAgCg==" ,
4651 expected : []intoto.Subject {
4752 {
4853 Name : "hoge fuga" ,
@@ -55,8 +60,8 @@ func TestParseSubjects(t *testing.T) {
5560
5661 {
5762 name : "multiple" ,
58- str : ` 2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge
59- e712aff3705ac314b9a890e0ec208faa20054eee514d86ab913d768f94e01279 fuga` ,
63+ // echo -e " 2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge\ne712aff3705ac314b9a890e0ec208faa20054eee514d86ab913d768f94e01279 fuga" | base64 -w0
64+ str : "MmUwMzkwZWIwMjRhNTI5NjNkYjdiOTVlODRhOWMyYjEyYzAwNDA1NGE3YmFkOWE5N2VjMGM3Yzg5ZDQ2ODFkMiBob2dlCmU3MTJhZmYzNzA1YWMzMTRiOWE4OTBlMGVjMjA4ZmFhMjAwNTRlZWU1MTRkODZhYjkxM2Q3NjhmOTRlMDEyNzkgZnVnYQo=" ,
6065 expected : []intoto.Subject {
6166 {
6267 Name : "hoge" ,
@@ -79,9 +84,8 @@ e712aff3705ac314b9a890e0ec208faa20054eee514d86ab913d768f94e01279 fuga`,
7984 },
8085 {
8186 name : "blank lines" ,
82- str : `2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge
83-
84- e712aff3705ac314b9a890e0ec208faa20054eee514d86ab913d768f94e01279 fuga` ,
87+ // echo -e "2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge\n\ne712aff3705ac314b9a890e0ec208faa20054eee514d86ab913d768f94e01279 fuga" | base64 -w0
88+ str : "MmUwMzkwZWIwMjRhNTI5NjNkYjdiOTVlODRhOWMyYjEyYzAwNDA1NGE3YmFkOWE5N2VjMGM3Yzg5ZDQ2ODFkMiBob2dlCgplNzEyYWZmMzcwNWFjMzE0YjlhODkwZTBlYzIwOGZhYTIwMDU0ZWVlNTE0ZDg2YWI5MTNkNzY4Zjk0ZTAxMjc5IGZ1Z2EK" ,
8589 expected : []intoto.Subject {
8690 {
8791 Name : "hoge" ,
@@ -99,36 +103,41 @@ e712aff3705ac314b9a890e0ec208faa20054eee514d86ab913d768f94e01279 fuga`,
99103 },
100104 {
101105 name : "sha only" ,
102- str : "2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2" ,
103- err : true ,
106+ // echo "2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2" | base64 -w0
107+ str : "MmUwMzkwZWIwMjRhNTI5NjNkYjdiOTVlODRhOWMyYjEyYzAwNDA1NGE3YmFkOWE5N2VjMGM3Yzg5ZDQ2ODFkMgo=" ,
108+ err : & errNoName {},
104109 },
105110 {
106111 name : "invalid hash" ,
107- str : "abcdef hoge" ,
108- err : true ,
112+ // echo "abcdef hoge" | base64 -w0
113+ str : "YWJjZGVmIGhvZ2UK" ,
114+ err : & errSha {},
109115 },
110116 {
111117 name : "duplicate name" ,
112- str : `2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge
113- 2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge` ,
114- err : true ,
118+ // echo -e "2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge\n2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2 hoge" | base64 -w0
119+ str : "MmUwMzkwZWIwMjRhNTI5NjNkYjdiOTVlODRhOWMyYjEyYzAwNDA1NGE3YmFkOWE5N2VjMGM3Yzg5ZDQ2ODFkMiBob2dlCjJlMDM5MGViMDI0YTUyOTYzZGI3Yjk1ZTg0YTljMmIxMmMwMDQwNTRhN2JhZDlhOTdlYzBjN2M4OWQ0NjgxZDIgaG9nZQo=" ,
120+ err : & errDuplicateSubject {},
121+ },
122+ {
123+ name : "not base64" ,
124+ str : "this is not base64" ,
125+ err : & errBase64 {},
115126 },
116127 }
117128
118129 for _ , tc := range testCases {
119130 t .Run (tc .name , func (t * testing.T ) {
120131 if s , err := parseSubjects (tc .str ); err != nil {
121- if tc .err {
122- // Error was expected.
123- return
132+ if tc .err != nil && ! errors .As (err , & tc .err ) {
133+ t .Fatalf ("unexpected error: %v" , cmp .Diff (err , tc .err , cmpopts .EquateErrors ()))
124134 }
125- t .Fatalf ("unexpected error: %v" , err )
126135 } else {
127- if tc .err {
128- t .Fatalf ("expected error but received %#v" , s )
136+ if tc .err != nil {
137+ t .Fatalf ("expected %#v but received %#v" , tc . err , s )
129138 }
130139
131- if want , got := tc .expected , s ; ! reflect . DeepEqual (want , got ) {
140+ if want , got := tc .expected , s ; ! cmp . Equal (want , got ) {
132141 t .Errorf ("unexpected subjects, want: %#v, got: %#v" , want , got )
133142 }
134143 }
0 commit comments