github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/attestation/sbom/rekor_test.go (about)

     1  package sbom_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/devseccon/trivy/pkg/attestation/sbom"
    11  	"github.com/devseccon/trivy/pkg/log"
    12  	"github.com/devseccon/trivy/pkg/rekortest"
    13  )
    14  
    15  func TestRekor_RetrieveSBOM(t *testing.T) {
    16  	tests := []struct {
    17  		name    string
    18  		digest  string
    19  		want    string
    20  		wantErr string
    21  	}{
    22  		{
    23  			name:   "happy path",
    24  			digest: "sha256:5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03",
    25  			want:   `{"bomFormat":"CycloneDX","specVersion":"1.5","version":2}`,
    26  		},
    27  		{
    28  			name:    "404",
    29  			digest:  "sha256:unknown",
    30  			wantErr: "failed to search",
    31  		},
    32  	}
    33  
    34  	require.NoError(t, log.InitLogger(false, true))
    35  	for _, tt := range tests {
    36  		t.Run(tt.name, func(t *testing.T) {
    37  			ts := rekortest.NewServer(t)
    38  			defer ts.Close()
    39  
    40  			// Set the testing URL
    41  			rc, err := sbom.NewRekor(ts.URL())
    42  			require.NoError(t, err)
    43  
    44  			got, err := rc.RetrieveSBOM(context.Background(), tt.digest)
    45  			if tt.wantErr != "" {
    46  				assert.ErrorContains(t, err, tt.wantErr)
    47  				return
    48  			}
    49  			require.NoError(t, err, tt.name)
    50  			assert.Equal(t, tt.want, string(got))
    51  		})
    52  	}
    53  }