github.com/redhat-appstudio/e2e-tests@v0.0.0-20230619105049-9a422b2094d7/pkg/utils/tekton/controller_test.go (about) 1 package tekton 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/h2non/gock" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestCosignResultShouldPresence(t *testing.T) { 12 assert.False(t, CosignResult{}.IsPresent()) 13 14 assert.False(t, CosignResult{ 15 signatureImageRef: "something", 16 }.IsPresent()) 17 18 assert.False(t, CosignResult{ 19 attestationImageRef: "something", 20 }.IsPresent()) 21 22 assert.True(t, CosignResult{ 23 signatureImageRef: "something", 24 attestationImageRef: "something", 25 }.IsPresent()) 26 } 27 28 func TestCosignResultMissingFormat(t *testing.T) { 29 assert.Equal(t, "prefix.sig and prefix.att", CosignResult{}.Missing("prefix")) 30 31 assert.Equal(t, "prefix.att", CosignResult{ 32 signatureImageRef: "something", 33 }.Missing("prefix")) 34 35 assert.Equal(t, "prefix.sig", CosignResult{ 36 attestationImageRef: "something", 37 }.Missing("prefix")) 38 39 assert.Empty(t, CosignResult{ 40 signatureImageRef: "something", 41 attestationImageRef: "something", 42 }.Missing("prefix")) 43 } 44 45 func createHttpMock(urlPath, tag string, response any) { 46 s := gock.New("https://quay.io/api/v1") 47 if len(tag) > 0 { 48 s.MatchParam("specificTag", tag) 49 } 50 s.Get(urlPath). 51 Reply(200). 52 JSON(response) 53 } 54 55 func TestFindingCosignResults(t *testing.T) { 56 const imageRegistryName = "quay.io" 57 const imageRepo = "test/repo" 58 const imageTag = "123" 59 const imageDigest = "sha256:abc" 60 const cosignImageTag = "sha256-abc" 61 const imageRef = imageRegistryName + "/" + imageRepo + ":" + imageTag + "@" + imageDigest 62 const signatureImageDigest = "sha256:signature" 63 const attestationImageDigest = "sha256:attestation" 64 const signatureImageRef = imageRegistryName + "/" + imageRepo + "@" + signatureImageDigest 65 const attestationImageRef = imageRegistryName + "/" + imageRepo + "@" + attestationImageDigest 66 67 cases := []struct { 68 Name string 69 SignatureImagePresent bool 70 AttestationImagePresent bool 71 AttestationImageLayers []any 72 ExpectedErrors []string 73 Result *CosignResult 74 }{ 75 {"happy day", true, true, []any{"", ""}, []string{}, &CosignResult{ 76 signatureImageRef: signatureImageRef, 77 attestationImageRef: attestationImageRef, 78 }}, 79 {"missing signature", false, true, []any{"", ""}, []string{"error when getting signature"}, &CosignResult{ 80 signatureImageRef: "", 81 attestationImageRef: attestationImageRef, 82 }}, 83 {"missing attestation", true, false, []any{"", ""}, []string{"error when getting attestation"}, &CosignResult{ 84 signatureImageRef: signatureImageRef, 85 attestationImageRef: "", 86 }}, 87 {"missing signature and attestation", false, false, []any{"", ""}, []string{"error when getting attestation", "error when getting signature"}, &CosignResult{ 88 signatureImageRef: "", 89 attestationImageRef: "", 90 }}, 91 {"missing layer in attestation", true, true, []any{""}, []string{"attestation tag doesn't have the expected number of layers"}, &CosignResult{ 92 signatureImageRef: signatureImageRef, 93 attestationImageRef: attestationImageRef, 94 }}, 95 } 96 97 for _, cse := range cases { 98 t.Run(cse.Name, func(t *testing.T) { 99 defer gock.Off() 100 101 if cse.SignatureImagePresent { 102 createHttpMock(fmt.Sprintf("/repository/%s/tag", imageRepo), cosignImageTag+".sig", &TagResponse{Tags: []Tag{{Digest: signatureImageDigest}}}) 103 } 104 if cse.AttestationImagePresent { 105 createHttpMock(fmt.Sprintf("/repository/%s/tag", imageRepo), cosignImageTag+".att", &TagResponse{Tags: []Tag{{Digest: attestationImageDigest}}}) 106 } 107 createHttpMock(fmt.Sprintf("/repository/%s/manifest/%s", imageRepo, attestationImageDigest), "", &ManifestResponse{Layers: cse.AttestationImageLayers}) 108 109 result, err := findCosignResultsForImage(imageRef) 110 111 if err != nil { 112 assert.NotEmpty(t, cse.ExpectedErrors) 113 for _, errSubstring := range cse.ExpectedErrors { 114 assert.Contains(t, err.Error(), errSubstring) 115 } 116 } else { 117 assert.Empty(t, cse.ExpectedErrors) 118 } 119 assert.Equal(t, cse.Result, result) 120 }) 121 } 122 123 }