@@ -12,6 +12,7 @@ import (
1212 "encoding/json"
1313 "encoding/pem"
1414 "fmt"
15+ "strings"
1516 "testing"
1617
1718 "github.com/google/go-containerregistry/pkg/authn"
@@ -431,9 +432,8 @@ func testSlsaBuild(t *testing.T, when spec.G, it spec.S) {
431432
432433 it ("can read the source from git, blob, and registry images" , func () {
433434 type row struct {
434- name string
435- source corev1alpha1.SourceConfig
436- verifyFn func (sourceConfig map [string ]interface {}, resolvedSource slsav1.ResourceDescriptor )
435+ name string
436+ source corev1alpha1.SourceConfig
437437 }
438438
439439 testImage := func (r row ) {
@@ -463,19 +463,7 @@ func testSlsaBuild(t *testing.T, when spec.G, it spec.S) {
463463 image , err = clients .client .KpackV1alpha2 ().Images (testNamespace ).Get (ctx , image .Name , metav1.GetOptions {})
464464 require .NoError (t , err )
465465
466- stmt := verifySLSAProvenance (t , image .Status .LatestImage , image , false )
467-
468- params , ok := stmt .Predicate .BuildDefinition .ExternalParameters .(map [string ]interface {})
469- require .True (t , ok )
470-
471- source , ok := params ["source" ].(map [string ]interface {})
472- require .True (t , ok )
473-
474- config , ok := source [r .name ].(map [string ]interface {})
475- require .True (t , ok )
476-
477- require .Greater (t , len (stmt .Predicate .BuildDefinition .ResolvedDependencies ), 1 )
478- r .verifyFn (config , stmt .Predicate .BuildDefinition .ResolvedDependencies [0 ])
466+ verifySLSAProvenance (t , image .Status .LatestImage , image , false )
479467 })
480468 }
481469
@@ -488,13 +476,6 @@ func testSlsaBuild(t *testing.T, when spec.G, it spec.S) {
488476 Revision : "master" ,
489477 },
490478 },
491- verifyFn : func (config map [string ]interface {}, resolved slsav1.ResourceDescriptor ) {
492- require .Equal (t , "https://github.com/cloudfoundry-samples/cf-sample-app-nodejs" , config ["url" ])
493- require .NotEmpty (t , config ["revision" ])
494-
495- require .Equal (t , "https://github.com/cloudfoundry-samples/cf-sample-app-nodejs" , resolved .URI )
496- require .Equal (t , resolved .Digest ["sha1" ], config ["revision" ])
497- },
498479 },
499480 {
500481 name : "blob" ,
@@ -503,12 +484,6 @@ func testSlsaBuild(t *testing.T, when spec.G, it spec.S) {
503484 URL : "https://storage.googleapis.com/build-service/sample-apps/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar" ,
504485 },
505486 },
506- verifyFn : func (config map [string ]interface {}, resolved slsav1.ResourceDescriptor ) {
507- require .Equal (t , "https://storage.googleapis.com/build-service/sample-apps/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar" , config ["url" ])
508-
509- require .Equal (t , "https://storage.googleapis.com/build-service/sample-apps/spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar" , resolved .URI )
510- require .Equal (t , "0ea773b255487f9ed45bbf6dea66d45f6c593b0c1c02b2c71c5bf20542e86d3c" , resolved .Digest ["sha256" ])
511- },
512487 },
513488 {
514489 name : "registry" ,
@@ -517,12 +492,6 @@ func testSlsaBuild(t *testing.T, when spec.G, it spec.S) {
517492 Image : "gcr.io/cf-build-service-public/fixtures/nodejs-source@sha256:76cb2e087b6f1355caa8ed4a5eebb1ad7376e26995a8d49a570cdc10e4976e44" ,
518493 },
519494 },
520- verifyFn : func (config map [string ]interface {}, resolved slsav1.ResourceDescriptor ) {
521- require .Equal (t , "gcr.io/cf-build-service-public/fixtures/nodejs-source@sha256:76cb2e087b6f1355caa8ed4a5eebb1ad7376e26995a8d49a570cdc10e4976e44" , config ["image" ])
522-
523- require .Equal (t , "gcr.io/cf-build-service-public/fixtures/nodejs-source@sha256:76cb2e087b6f1355caa8ed4a5eebb1ad7376e26995a8d49a570cdc10e4976e44" , resolved .URI )
524- require .Equal (t , "76cb2e087b6f1355caa8ed4a5eebb1ad7376e26995a8d49a570cdc10e4976e44" , resolved .Digest ["sha256" ])
525- },
526495 },
527496 }
528497
@@ -721,7 +690,7 @@ func verifySLSAProvenance(t *testing.T, digest string, image *buildapi.Image, si
721690 // external params
722691 params , ok := pred .BuildDefinition .ExternalParameters .(map [string ]interface {})
723692 require .True (t , ok )
724- assert .Contains (t , params ["source" ], "git" )
693+ assert .NotNil (t , params ["source" ])
725694 assert .NotNil (t , params ["tags" ])
726695 assert .NotNil (t , params ["runImage" ])
727696
@@ -734,9 +703,6 @@ func verifySLSAProvenance(t *testing.T, digest string, image *buildapi.Image, si
734703 require .Len (t , deps , 2 )
735704
736705 assert .Equal (t , deps [0 ].Name , "source" )
737- assert .NotEmpty (t , deps [0 ].URI )
738- assert .Contains (t , deps [0 ].Digest , "sha1" )
739-
740706 assert .Equal (t , deps [1 ].Name , "builder-image" )
741707 assert .NotEmpty (t , deps [1 ].URI )
742708 assert .Contains (t , deps [1 ].Digest , "sha256" )
@@ -759,6 +725,44 @@ func verifySLSAProvenance(t *testing.T, digest string, image *buildapi.Image, si
759725 assert .NotNil (t , metadata .StartedOn )
760726 assert .NotNil (t , metadata .FinishedOn )
761727
728+ // source metadata
729+ source , ok := params ["source" ].(map [string ]interface {})
730+ require .True (t , ok )
731+ resolvedSource := deps [0 ]
732+ switch {
733+ case image .Spec .Source .Git != nil :
734+ innerSource , ok := source ["git" ].(map [string ]interface {})
735+ require .True (t , ok )
736+
737+ require .Equal (t , image .Spec .Source .Git .URL , innerSource ["url" ])
738+ require .NotEmpty (t , innerSource ["revision" ])
739+
740+ require .Equal (t , image .Spec .Source .Git .URL , resolvedSource .URI )
741+ require .Equal (t , resolvedSource .Digest ["sha1" ], innerSource ["revision" ])
742+
743+ case image .Spec .Source .Blob != nil :
744+ innerSource , ok := source ["blob" ].(map [string ]interface {})
745+ require .True (t , ok )
746+
747+ require .Equal (t , image .Spec .Source .Blob .URL , innerSource ["url" ])
748+
749+ require .Equal (t , image .Spec .Source .Blob .URL , resolvedSource .URI )
750+ require .NotEmpty (t , resolvedSource .Digest ["sha256" ])
751+
752+ case image .Spec .Source .Registry != nil :
753+ innerSource , ok := source ["registry" ].(map [string ]interface {})
754+ require .True (t , ok )
755+
756+ digest := image .Spec .Source .Registry .Image
757+ repo := digest [:strings .Index (digest , "@" )]
758+ sha := digest [strings .Index (digest , ":" )+ 1 :]
759+
760+ require .Equal (t , image .Spec .Source .Registry .Image , innerSource ["image" ])
761+
762+ require .Equal (t , repo , resolvedSource .URI )
763+ require .Equal (t , sha , resolvedSource .Digest ["sha256" ])
764+ }
765+
762766 return stmt
763767}
764768
0 commit comments