...

Source file src/github.com/sigstore/cosign/v2/pkg/oci/signed/index_test.go

Documentation: github.com/sigstore/cosign/v2/pkg/oci/signed

     1  //
     2  // Copyright 2021 The Sigstore Authors.
     3  //
     4  // Licensed under the Apache License, Version 2.0 (the "License");
     5  // you may not use this file except in compliance with the License.
     6  // You may obtain a copy of the License at
     7  //
     8  //     http://www.apache.org/licenses/LICENSE-2.0
     9  //
    10  // Unless required by applicable law or agreed to in writing, software
    11  // distributed under the License is distributed on an "AS IS" BASIS,
    12  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  // See the License for the specific language governing permissions and
    14  // limitations under the License.
    15  
    16  package signed
    17  
    18  import (
    19  	"testing"
    20  
    21  	v1 "github.com/google/go-containerregistry/pkg/v1"
    22  	"github.com/google/go-containerregistry/pkg/v1/mutate"
    23  	"github.com/google/go-containerregistry/pkg/v1/random"
    24  	"github.com/google/go-containerregistry/pkg/v1/types"
    25  	"github.com/sigstore/cosign/v2/pkg/oci"
    26  )
    27  
    28  func TestImageIndex(t *testing.T) {
    29  	ii, err := random.Index(300 /* bytes */, 5 /* layers */, 3 /* images */)
    30  	if err != nil {
    31  		t.Fatalf("random.Image() = %v", err)
    32  	}
    33  
    34  	ni, err := random.Index(300 /* bytes */, 5 /* layers */, 3 /* images */)
    35  	if err != nil {
    36  		t.Fatalf("random.Image() = %v", err)
    37  	}
    38  	ni = mutate.AppendManifests(ni, mutate.IndexAddendum{
    39  		Add: ii,
    40  	})
    41  
    42  	im, err := ni.IndexManifest()
    43  	if err != nil {
    44  		t.Fatalf("IndexManifest() = %v", err)
    45  	}
    46  
    47  	sii := ImageIndex(ni)
    48  
    49  	sel := make([]oci.SignedEntity, 0, len(im.Manifests)+1)
    50  	sel = append(sel, sii)
    51  
    52  	for _, desc := range im.Manifests {
    53  		switch desc.MediaType {
    54  		case types.OCIImageIndex, types.DockerManifestList:
    55  			se, err := sii.SignedImageIndex(desc.Digest)
    56  			if err != nil {
    57  				t.Fatalf("SignedImageIndex() = %v", err)
    58  			}
    59  			sel = append(sel, se)
    60  		case types.OCIManifestSchema1, types.DockerManifestSchema2:
    61  			se, err := sii.SignedImage(desc.Digest)
    62  			if err != nil {
    63  				t.Fatalf("SignedImage() = %v", err)
    64  			}
    65  			sel = append(sel, se)
    66  		default:
    67  			t.Errorf("Unsupported media type: %v", desc.MediaType)
    68  		}
    69  	}
    70  
    71  	if se, err := sii.SignedImageIndex(v1.Hash{}); err == nil {
    72  		t.Errorf("SignedImageIndex() = %#v, wanted error", se)
    73  	}
    74  	if se, err := sii.SignedImage(v1.Hash{}); err == nil {
    75  		t.Errorf("SignedImage() = %#v, wanted error", se)
    76  	}
    77  
    78  	for _, se := range sel {
    79  		sigs, err := se.Signatures()
    80  		if err != nil {
    81  			t.Fatalf("Signatures() = %v", err)
    82  		}
    83  
    84  		if sl, err := sigs.Get(); err != nil {
    85  			t.Errorf("Get() = %v", err)
    86  		} else if got, want := len(sl), 0; got != want {
    87  			t.Errorf("len(Get()) = %d, wanted %d", got, want)
    88  		}
    89  
    90  		atts, err := se.Attestations()
    91  		if err != nil {
    92  			t.Fatalf("Attestations() = %v", err)
    93  		}
    94  
    95  		if al, err := atts.Get(); err != nil {
    96  			t.Errorf("Get() = %v", err)
    97  		} else if got, want := len(al), 0; got != want {
    98  			t.Errorf("len(Get()) = %d, wanted %d", got, want)
    99  		}
   100  	}
   101  }
   102  

View as plain text