mirror of
https://github.com/goharbor/harbor.git
synced 2024-10-01 06:47:33 +02:00
add tc for vulnerability transform
This commit is contained in:
parent
e3e722b1f8
commit
8f41be471d
@ -59,8 +59,13 @@ func UpdateScanOverview(digest, layerName string, l ...*log.Logger) error {
|
|||||||
logger.Errorf("Failed to get result from Clair, error: %v", err)
|
logger.Errorf("Failed to get result from Clair, error: %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
compOverview, sev := transformVuln(res)
|
||||||
|
return dao.UpdateImgScanOverview(digest, layerName, sev, compOverview)
|
||||||
|
}
|
||||||
|
|
||||||
|
func transformVuln(clairVuln *models.ClairLayerEnvelope) (*models.ComponentsOverview, models.Severity) {
|
||||||
vulnMap := make(map[models.Severity]int)
|
vulnMap := make(map[models.Severity]int)
|
||||||
features := res.Layer.Features
|
features := clairVuln.Layer.Features
|
||||||
totalComponents := len(features)
|
totalComponents := len(features)
|
||||||
var temp models.Severity
|
var temp models.Severity
|
||||||
for _, f := range features {
|
for _, f := range features {
|
||||||
@ -85,9 +90,8 @@ func UpdateScanOverview(digest, layerName string, l ...*log.Logger) error {
|
|||||||
}
|
}
|
||||||
compSummary = append(compSummary, entry)
|
compSummary = append(compSummary, entry)
|
||||||
}
|
}
|
||||||
compOverview := &models.ComponentsOverview{
|
return &models.ComponentsOverview{
|
||||||
Total: totalComponents,
|
Total: totalComponents,
|
||||||
Summary: compSummary,
|
Summary: compSummary,
|
||||||
}
|
}, overallSev
|
||||||
return dao.UpdateImgScanOverview(digest, layerName, overallSev, compOverview)
|
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,10 @@
|
|||||||
package clair
|
package clair
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io/ioutil"
|
||||||
|
"path"
|
||||||
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@ -33,3 +37,41 @@ func TestParseServerity(t *testing.T) {
|
|||||||
assert.Equal(v, ParseClairSev(k))
|
assert.Equal(v, ParseClairSev(k))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTransformVuln(t *testing.T) {
|
||||||
|
var clairVuln = &models.ClairLayerEnvelope{}
|
||||||
|
assert := assert.New(t)
|
||||||
|
empty := []byte(`{"Layer":{"Features":[]}}`)
|
||||||
|
loadVuln(empty, clairVuln)
|
||||||
|
output, o := transformVuln(clairVuln)
|
||||||
|
assert.Equal(0, output.Total)
|
||||||
|
assert.Equal(models.SevNone, o)
|
||||||
|
_, f, _, ok := runtime.Caller(0)
|
||||||
|
if !ok {
|
||||||
|
panic("Failed to get current directory")
|
||||||
|
}
|
||||||
|
curDir := path.Dir(f)
|
||||||
|
real, err := ioutil.ReadFile(path.Join(curDir, "test/total-12.json"))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
loadVuln(real, clairVuln)
|
||||||
|
output, o = transformVuln(clairVuln)
|
||||||
|
assert.Equal(12, output.Total)
|
||||||
|
assert.Equal(models.SevHigh, o)
|
||||||
|
hit := false
|
||||||
|
for _, s := range output.Summary {
|
||||||
|
if s.Sev == int(models.SevHigh) {
|
||||||
|
assert.Equal(3, s.Count, "There should be 3 components with High severity")
|
||||||
|
hit = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.True(hit, "Not found entry for high severity in summary list")
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadVuln(input []byte, data *models.ClairLayerEnvelope) {
|
||||||
|
err := json.Unmarshal(input, data)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user