Add test for envelope detection

This commit is contained in:
James Carnegie
2024-07-09 10:27:55 +01:00
parent 9c822317aa
commit 34bc47fcec
3 changed files with 16 additions and 6 deletions

View File

@@ -191,11 +191,21 @@ func TestSimpleStatementSigning(t *testing.T) {
err = manifest.AddAttestation(ctx, signer, statement2, opts)
require.NoError(t, err)
// fake that the manfifest was loaded from a real image
manifest.AttestationImage.OriginalLayers = manifest.AttestationImage.SignedLayers
envelopes, err := oci.ExtractEnvelopes(manifest, attestation.VSAPredicateType)
require.NoError(t, err)
assert.Len(t, envelopes, 2)
newImg, err := manifest.BuildAttestationImage(attestation.WithReplacedLayers(tc.replace))
require.NoError(t, err)
layers, err := newImg.Layers()
require.NoError(t, err)
assert.Len(t, layers, 2)
if tc.replace {
assert.Len(t, layers, 2)
} else {
assert.Len(t, layers, 4)
}
newImgs, err := manifest.BuildReferringArtifacts()
require.NoError(t, err)

View File

@@ -96,7 +96,7 @@ func (manifest *AttestationManifest) AddAttestation(ctx context.Context, signer
if err != nil {
return fmt.Errorf("failed to create signed layer: %w", err)
}
manifest.AttestationImage.signedLayers = append(manifest.AttestationImage.signedLayers, layer)
manifest.AttestationImage.SignedLayers = append(manifest.AttestationImage.SignedLayers, layer)
return nil
}
@@ -207,10 +207,10 @@ func (manifest *AttestationManifest) BuildAttestationImage(options ...func(*Atte
if err != nil {
return nil, fmt.Errorf("failed to create options: %w", err)
}
resultLayers := manifest.AttestationImage.signedLayers
resultLayers := manifest.AttestationImage.SignedLayers
for _, existingLayer := range manifest.AttestationImage.OriginalLayers {
var found bool
for _, signedLayer := range manifest.AttestationImage.signedLayers {
for _, signedLayer := range manifest.AttestationImage.SignedLayers {
if existingLayer.Statement == signedLayer.Statement {
found = true
// copy over original annotations
@@ -236,7 +236,7 @@ func (manifest *AttestationManifest) BuildAttestationImage(options ...func(*Atte
// build an image per attestation (layer) suitable for use as Referrers
func (manifest *AttestationManifest) BuildReferringArtifacts() ([]v1.Image, error) {
var images []v1.Image
for _, layer := range manifest.AttestationImage.signedLayers {
for _, layer := range manifest.AttestationImage.SignedLayers {
opts := &AttestationManifestImageOptions{
strictReferrers: true,
}

View File

@@ -32,7 +32,7 @@ type AttestationLayer struct {
type AttestationImage struct {
OriginalLayers []*AttestationLayer
signedLayers []*AttestationLayer
SignedLayers []*AttestationLayer
}
type AttestationManifest struct {