Fix issue handling security reports with no results (#1440)

Signed-off-by: Sergio Castaño Arteaga <tegioz@icloud.com>
This commit is contained in:
Sergio C. Arteaga 2021-07-17 16:36:12 +02:00 committed by GitHub
parent 5b94f70b9f
commit bca33092e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 5 deletions

View File

@ -99,7 +99,7 @@ func (s *Scanner) Scan(sn *hub.SnapshotToScan) (*hub.SnapshotSecurityReport, err
if err := json.Unmarshal(imageReportJSON, &imageReport); err != nil {
return report, fmt.Errorf("error unmarshalling image %s report: %w", image.Image, err)
}
if imageReport != nil {
if imageReport != nil && len(imageReport.Results) > 0 {
imagesReports[image.Image] = imageReport
}
}

View File

@ -92,18 +92,39 @@ func TestScan(t *testing.T) {
ecMock.AssertExpectations(t)
})
t.Run("image report generated successfully", func(t *testing.T) {
t.Run("image report returned no results", func(t *testing.T) {
t.Parallel()
ecMock := &repo.ErrorsCollectorMock{}
ecMock.On("Init", repositoryID)
isMock := &ImageScannerMock{}
isMock.On("ScanImage", image).Return(sampleReportData, nil)
isMock.On("ScanImage", image).Return(sampleReport1Data, nil)
s := New(ctx, cfg, ecMock, WithImageScanner(isMock))
report, err := s.Scan(snapshot)
require.Nil(t, err)
var expectedImageFullReport *trivyreport.Report
err = json.Unmarshal(sampleReportData, &expectedImageFullReport)
err = json.Unmarshal(sampleReport1Data, &expectedImageFullReport)
require.NoError(t, err)
assert.Equal(t, &hub.SnapshotSecurityReport{
PackageID: packageID,
Version: version,
}, report)
isMock.AssertExpectations(t)
ecMock.AssertExpectations(t)
})
t.Run("image report generated successfully", func(t *testing.T) {
t.Parallel()
ecMock := &repo.ErrorsCollectorMock{}
ecMock.On("Init", repositoryID)
isMock := &ImageScannerMock{}
isMock.On("ScanImage", image).Return(sampleReport2Data, nil)
s := New(ctx, cfg, ecMock, WithImageScanner(isMock))
report, err := s.Scan(snapshot)
require.Nil(t, err)
var expectedImageFullReport *trivyreport.Report
err = json.Unmarshal(sampleReport2Data, &expectedImageFullReport)
require.NoError(t, err)
assert.Equal(t, &hub.SnapshotSecurityReport{
PackageID: packageID,
@ -122,7 +143,27 @@ func TestScan(t *testing.T) {
})
}
var sampleReportData = []byte(`
var sampleReport1Data = []byte(`
{
"SchemaVersion": 2,
"ArtifactName": "artifacthub/hub:v1.0.0",
"ArtifactType": "container_image",
"Metadata": {
"OS": {
"Family": "alpine",
"Name": "3.13.5"
},
"RepoTags": [
"artifacthub/hub:v1.0.0"
],
"RepoDigests": [
"artifacthub/hub@sha256:becb8e06fb01f0324dabac05d700755bcd324071e66ebf4bc10151e356de9c71"
]
}
}
`)
var sampleReport2Data = []byte(`
{
"SchemaVersion": 2,
"ArtifactName": "artifacthub/hub:v1.0.0",