Fix testcase
This commit is contained in:
@@ -217,37 +217,35 @@ func loadPrevious(current models.ScanResults) (previous models.ScanResults, err
|
||||
return previous, nil
|
||||
}
|
||||
|
||||
func diff(current, previous models.ScanResults) (diff models.ScanResults, err error) {
|
||||
for _, currentResult := range current {
|
||||
func diff(curResults, preResults models.ScanResults) (diffed models.ScanResults, err error) {
|
||||
for _, current := range curResults {
|
||||
found := false
|
||||
var previousResult models.ScanResult
|
||||
for _, previousResult = range previous {
|
||||
if currentResult.ServerName == previousResult.ServerName {
|
||||
var previous models.ScanResult
|
||||
for _, r := range preResults {
|
||||
if current.ServerName == r.ServerName {
|
||||
found = true
|
||||
previous = r
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if found {
|
||||
currentResult.ScannedCves = getNewCves(previousResult, currentResult)
|
||||
new, updated := getDiffCves(previous, current)
|
||||
current.ScannedCves = append(new, updated...)
|
||||
|
||||
//TODO
|
||||
// currentResult.KnownCves = []models.CveInfo{}
|
||||
// currentResult.UnknownCves = []models.CveInfo{}
|
||||
|
||||
currentResult.Packages = models.PackageInfoList{}
|
||||
for _, s := range currentResult.ScannedCves {
|
||||
currentResult.Packages = append(currentResult.Packages, s.Packages...)
|
||||
current.Packages = models.PackageInfoList{}
|
||||
for _, s := range current.ScannedCves {
|
||||
current.Packages = append(current.Packages, s.Packages...)
|
||||
}
|
||||
currentResult.Packages = currentResult.Packages.UniqByName()
|
||||
current.Packages = current.Packages.UniqByName()
|
||||
}
|
||||
|
||||
diff = append(diff, currentResult)
|
||||
diffed = append(diffed, current)
|
||||
}
|
||||
return diff, err
|
||||
return diffed, err
|
||||
}
|
||||
|
||||
func getNewCves(previous, current models.ScanResult) (newVulninfos []models.VulnInfo) {
|
||||
func getDiffCves(previous, current models.ScanResult) (new, updated []models.VulnInfo) {
|
||||
previousCveIDsSet := map[string]bool{}
|
||||
for _, previousVulnInfo := range previous.ScannedCves {
|
||||
previousCveIDsSet[previousVulnInfo.CveID] = true
|
||||
@@ -256,10 +254,10 @@ func getNewCves(previous, current models.ScanResult) (newVulninfos []models.Vuln
|
||||
for _, v := range current.ScannedCves {
|
||||
if previousCveIDsSet[v.CveID] {
|
||||
if isCveInfoUpdated(current, previous, v.CveID) {
|
||||
newVulninfos = append(newVulninfos, v)
|
||||
updated = append(updated, v)
|
||||
}
|
||||
} else {
|
||||
newVulninfos = append(newVulninfos, v)
|
||||
new = append(new, v)
|
||||
}
|
||||
}
|
||||
return
|
||||
|
||||
@@ -18,11 +18,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
package commands
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"reflect"
|
||||
|
||||
"github.com/future-architect/vuls/models"
|
||||
"github.com/k0kubun/pp"
|
||||
)
|
||||
@@ -36,7 +35,7 @@ func TestDiff(t *testing.T) {
|
||||
out models.ScanResult
|
||||
}{
|
||||
{
|
||||
models.ScanResults{
|
||||
inCurrent: models.ScanResults{
|
||||
{
|
||||
ScannedAt: atCurrent,
|
||||
ServerName: "u16",
|
||||
@@ -74,17 +73,12 @@ func TestDiff(t *testing.T) {
|
||||
CpeNames: []string{},
|
||||
},
|
||||
},
|
||||
KnownCves: []models.CveInfo{},
|
||||
UnknownCves: []models.CveInfo{},
|
||||
IgnoredCves: []models.CveInfo{},
|
||||
|
||||
Packages: models.PackageInfoList{},
|
||||
|
||||
Packages: []models.PackageInfo{},
|
||||
Errors: []string{},
|
||||
Optional: [][]interface{}{},
|
||||
},
|
||||
},
|
||||
models.ScanResults{
|
||||
inPrevious: models.ScanResults{
|
||||
{
|
||||
ScannedAt: atPrevious,
|
||||
ServerName: "u16",
|
||||
@@ -122,33 +116,23 @@ func TestDiff(t *testing.T) {
|
||||
CpeNames: []string{},
|
||||
},
|
||||
},
|
||||
KnownCves: []models.CveInfo{},
|
||||
UnknownCves: []models.CveInfo{},
|
||||
IgnoredCves: []models.CveInfo{},
|
||||
|
||||
Packages: models.PackageInfoList{},
|
||||
|
||||
Packages: []models.PackageInfo{},
|
||||
Errors: []string{},
|
||||
Optional: [][]interface{}{},
|
||||
},
|
||||
},
|
||||
models.ScanResult{
|
||||
ScannedAt: atCurrent,
|
||||
ServerName: "u16",
|
||||
Family: "ubuntu",
|
||||
Release: "16.04",
|
||||
KnownCves: []models.CveInfo{},
|
||||
UnknownCves: []models.CveInfo{},
|
||||
IgnoredCves: []models.CveInfo{},
|
||||
|
||||
// Packages: models.PackageInfoList{},
|
||||
|
||||
Errors: []string{},
|
||||
Optional: [][]interface{}{},
|
||||
out: models.ScanResult{
|
||||
ScannedAt: atCurrent,
|
||||
ServerName: "u16",
|
||||
Family: "ubuntu",
|
||||
Release: "16.04",
|
||||
Packages: []models.PackageInfo{},
|
||||
Errors: []string{},
|
||||
Optional: [][]interface{}{},
|
||||
},
|
||||
},
|
||||
{
|
||||
models.ScanResults{
|
||||
inCurrent: models.ScanResults{
|
||||
{
|
||||
ScannedAt: atCurrent,
|
||||
ServerName: "u16",
|
||||
@@ -171,66 +155,18 @@ func TestDiff(t *testing.T) {
|
||||
CpeNames: []string{},
|
||||
},
|
||||
},
|
||||
KnownCves: []models.CveInfo{
|
||||
{
|
||||
CveContents: []models.CveContent{
|
||||
{
|
||||
Type: models.NVD,
|
||||
CveID: "CVE-2016-6662",
|
||||
LastModified: time.Date(2016, 1, 1, 0, 0, 0, 0, time.Local),
|
||||
},
|
||||
},
|
||||
VulnInfo: models.VulnInfo{
|
||||
CveID: "CVE-2016-6662",
|
||||
},
|
||||
},
|
||||
},
|
||||
UnknownCves: []models.CveInfo{},
|
||||
IgnoredCves: []models.CveInfo{},
|
||||
},
|
||||
},
|
||||
models.ScanResults{
|
||||
inPrevious: models.ScanResults{
|
||||
{
|
||||
ScannedAt: atPrevious,
|
||||
ServerName: "u16",
|
||||
Family: "ubuntu",
|
||||
Release: "16.04",
|
||||
ScannedCves: []models.VulnInfo{
|
||||
{
|
||||
CveID: "CVE-2016-6662",
|
||||
Packages: models.PackageInfoList{
|
||||
{
|
||||
Name: "mysql-libs",
|
||||
Version: "5.1.73",
|
||||
Release: "7.el6",
|
||||
NewVersion: "5.1.73",
|
||||
NewRelease: "8.el6_8",
|
||||
Repository: "",
|
||||
},
|
||||
},
|
||||
DistroAdvisories: []models.DistroAdvisory{},
|
||||
CpeNames: []string{},
|
||||
},
|
||||
},
|
||||
KnownCves: []models.CveInfo{
|
||||
{
|
||||
CveContents: []models.CveContent{
|
||||
{
|
||||
Type: models.NVD,
|
||||
CveID: "CVE-2016-6662",
|
||||
LastModified: time.Date(2017, 3, 15, 13, 40, 57, 0, time.Local),
|
||||
},
|
||||
},
|
||||
VulnInfo: models.VulnInfo{
|
||||
CveID: "CVE-2016-6662",
|
||||
},
|
||||
},
|
||||
},
|
||||
UnknownCves: []models.CveInfo{},
|
||||
IgnoredCves: []models.CveInfo{},
|
||||
ScannedAt: atPrevious,
|
||||
ServerName: "u16",
|
||||
Family: "ubuntu",
|
||||
Release: "16.04",
|
||||
ScannedCves: []models.VulnInfo{},
|
||||
},
|
||||
},
|
||||
models.ScanResult{
|
||||
out: models.ScanResult{
|
||||
ScannedAt: atCurrent,
|
||||
ServerName: "u16",
|
||||
Family: "ubuntu",
|
||||
@@ -252,9 +188,6 @@ func TestDiff(t *testing.T) {
|
||||
CpeNames: []string{},
|
||||
},
|
||||
},
|
||||
KnownCves: []models.CveInfo{},
|
||||
UnknownCves: []models.CveInfo{},
|
||||
IgnoredCves: []models.CveInfo{},
|
||||
Packages: models.PackageInfoList{
|
||||
models.PackageInfo{
|
||||
Name: "mysql-libs",
|
||||
@@ -273,13 +206,21 @@ func TestDiff(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
for i, tt := range tests {
|
||||
diff, _ := diff(tt.inCurrent, tt.inPrevious)
|
||||
for _, actual := range diff {
|
||||
if !reflect.DeepEqual(actual, tt.out) {
|
||||
h := pp.Sprint(actual)
|
||||
x := pp.Sprint(tt.out)
|
||||
t.Errorf("diff result : \n %s \n output result : \n %s", h, x)
|
||||
if !reflect.DeepEqual(actual.ScannedCves, tt.out.ScannedCves) {
|
||||
h := pp.Sprint(actual.ScannedCves)
|
||||
x := pp.Sprint(tt.out.ScannedCves)
|
||||
t.Errorf("[%d] actual: \n %s \n expected: \n %s", i, h, x)
|
||||
}
|
||||
|
||||
for j := range tt.out.Packages {
|
||||
if !reflect.DeepEqual(tt.out.Packages[j], actual.Packages[j]) {
|
||||
h := pp.Sprint(tt.out.Packages[j])
|
||||
x := pp.Sprint(actual.Packages[j])
|
||||
t.Errorf("[%d] actual: \n %s \n expected: \n %s", i, x, h)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ func TestVulnInfosSetGet(t *testing.T) {
|
||||
// var ps packageCveInfos
|
||||
var ps VulnInfos
|
||||
for _, cid := range test.in {
|
||||
ps = ps.set(cid, VulnInfo{CveID: cid})
|
||||
ps.Upsert(VulnInfo{CveID: cid})
|
||||
}
|
||||
|
||||
if len(test.out) != len(ps) {
|
||||
@@ -129,7 +129,7 @@ func TestVulnInfosSetGet(t *testing.T) {
|
||||
}
|
||||
}
|
||||
for _, cid := range test.in {
|
||||
p, _ := ps.FindByCveID(cid)
|
||||
p, _ := ps.Get(cid)
|
||||
if p.CveID != cid {
|
||||
t.Errorf("expected %s, actual %s", cid, p.CveID)
|
||||
}
|
||||
|
||||
@@ -61,8 +61,7 @@ func (o Redhat) fillOvalInfo(r *models.ScanResult, definition *ovalmodels.Defini
|
||||
ovalContent := *o.convertToModel(cve.CveID, definition)
|
||||
vinfo, ok := r.ScannedCves.Get(cve.CveID)
|
||||
if !ok {
|
||||
util.Log.Infof("%s is newly detected by OVAL",
|
||||
definition.Debian.CveID)
|
||||
util.Log.Infof("%s is newly detected by OVAL", definition.Debian.CveID)
|
||||
vinfo = models.VulnInfo{
|
||||
CveID: cve.CveID,
|
||||
Confidence: models.OvalMatch,
|
||||
@@ -70,6 +69,11 @@ func (o Redhat) fillOvalInfo(r *models.ScanResult, definition *ovalmodels.Defini
|
||||
CveContents: []models.CveContent{ovalContent},
|
||||
}
|
||||
} else {
|
||||
if _, ok := vinfo.CveContents.Get(models.RedHat); !ok {
|
||||
util.Log.Infof("%s is also detected by OVAL", definition.Debian.CveID)
|
||||
} else {
|
||||
util.Log.Infof("%s will be updated by OVAL", definition.Debian.CveID)
|
||||
}
|
||||
if vinfo.Confidence.Score < models.OvalMatch.Score {
|
||||
vinfo.Confidence = models.OvalMatch
|
||||
}
|
||||
|
||||
@@ -1,23 +1,21 @@
|
||||
package report
|
||||
|
||||
import "testing"
|
||||
// func TestGetNotifyUsers(t *testing.T) {
|
||||
// var tests = []struct {
|
||||
// in []string
|
||||
// expected string
|
||||
// }{
|
||||
// {
|
||||
// []string{"@user1", "@user2"},
|
||||
// "<@user1> <@user2>",
|
||||
// },
|
||||
// }
|
||||
|
||||
func TestGetNotifyUsers(t *testing.T) {
|
||||
var tests = []struct {
|
||||
in []string
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
[]string{"@user1", "@user2"},
|
||||
"<@user1> <@user2>",
|
||||
},
|
||||
}
|
||||
// for _, tt := range tests {
|
||||
// actual := getNotifyUsers(tt.in)
|
||||
// if tt.expected != actual {
|
||||
// t.Errorf("expected %s, actual %s", tt.expected, actual)
|
||||
// }
|
||||
// }
|
||||
|
||||
for _, tt := range tests {
|
||||
actual := getNotifyUsers(tt.in)
|
||||
if tt.expected != actual {
|
||||
t.Errorf("expected %s, actual %s", tt.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user