Fix testcase

This commit is contained in:
Kota Kanbe
2017-05-04 16:27:00 +09:00
committed by kota kanbe
parent c103b79ec2
commit 17a4e532c1
5 changed files with 76 additions and 135 deletions

View File

@@ -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

View File

@@ -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)
}
}
}
}