github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/fanal/analyzer/buildinfo/content_manifest_test.go (about)

     1  package buildinfo
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/devseccon/trivy/pkg/fanal/analyzer"
    12  	"github.com/devseccon/trivy/pkg/fanal/types"
    13  )
    14  
    15  func Test_contentManifestAnalyzer_Analyze(t *testing.T) {
    16  	tests := []struct {
    17  		name    string
    18  		input   string
    19  		want    *analyzer.AnalysisResult
    20  		wantErr string
    21  	}{
    22  		{
    23  			name:  "happy path",
    24  			input: "testdata/content_manifests/ubi8-minimal-container-8.5-218.json",
    25  			want: &analyzer.AnalysisResult{
    26  				BuildInfo: &types.BuildInfo{
    27  					ContentSets: []string{
    28  						"rhel-8-for-x86_64-baseos-rpms",
    29  						"rhel-8-for-x86_64-appstream-rpms",
    30  					},
    31  				},
    32  			},
    33  		},
    34  		{
    35  			name:    "broken json",
    36  			input:   "testdata/content_manifests/broken.json",
    37  			wantErr: "invalid content manifest",
    38  		},
    39  	}
    40  	for _, tt := range tests {
    41  		t.Run(tt.name, func(t *testing.T) {
    42  			f, err := os.Open(tt.input)
    43  			require.NoError(t, err)
    44  			defer f.Close()
    45  
    46  			a := contentManifestAnalyzer{}
    47  			got, err := a.Analyze(context.Background(), analyzer.AnalysisInput{
    48  				FilePath: tt.input,
    49  				Content:  f,
    50  			})
    51  
    52  			if tt.wantErr != "" {
    53  				require.Error(t, err)
    54  				assert.Contains(t, err.Error(), tt.wantErr)
    55  				return
    56  			}
    57  
    58  			require.NoError(t, err)
    59  			assert.Equal(t, tt.want, got)
    60  		})
    61  	}
    62  }
    63  
    64  func Test_contentManifestAnalyzer_Required(t *testing.T) {
    65  	tests := []struct {
    66  		name     string
    67  		filePath string
    68  		want     bool
    69  	}{
    70  		{
    71  			name:     "happy path",
    72  			filePath: "root/buildinfo/content_manifests/nodejs-12-container-1-66.json",
    73  			want:     true,
    74  		},
    75  		{
    76  			name:     "sad path",
    77  			filePath: "root/buildinfo/content_manifests/nodejs-12-container-1-66.xml",
    78  			want:     false,
    79  		},
    80  	}
    81  	for _, tt := range tests {
    82  		t.Run(tt.name, func(t *testing.T) {
    83  			a := contentManifestAnalyzer{}
    84  			got := a.Required(tt.filePath, nil)
    85  			assert.Equal(t, tt.want, got)
    86  		})
    87  	}
    88  }