Skip to content

Commit 82b764b

Browse files
author
Daniel Chen
authored
Merge pull request buildpacks-community#1498 from buildpacks-community/fix-slsa-e2e
Fix SLSA E2E test
2 parents e6389ba + 6e2191d commit 82b764b

1 file changed

Lines changed: 43 additions & 39 deletions

File tree

test/slsa_test.go

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)