Files
vuls/scan/serverapi_test.go

159 lines
3.1 KiB
Go

package scan
import (
"github.com/future-architect/vuls/config"
"github.com/future-architect/vuls/models"
cve "github.com/kotakanbe/go-cve-dictionary/models"
"reflect"
"testing"
)
func TestPackageCveInfosSetGet(t *testing.T) {
var test = struct {
in []string
out []string
}{
[]string{
"CVE1",
"CVE2",
"CVE3",
"CVE1",
"CVE1",
"CVE2",
"CVE3",
},
[]string{
"CVE1",
"CVE2",
"CVE3",
},
}
// var ps packageCveInfos
var ps CvePacksList
for _, cid := range test.in {
ps = ps.set(cid, CvePacksInfo{CveID: cid})
}
if len(test.out) != len(ps) {
t.Errorf("length: expected %d, actual %d", len(test.out), len(ps))
}
for i, expectedCid := range test.out {
if expectedCid != ps[i].CveID {
t.Errorf("expected %s, actual %s", expectedCid, ps[i].CveID)
}
}
for _, cid := range test.in {
p, _ := ps.FindByCveID(cid)
if p.CveID != cid {
t.Errorf("expected %s, actual %s", cid, p.CveID)
}
}
}
func TestGetScanResults(t *testing.T) {
// setup servers
c := config.ServerInfo{
ServerName: "ubuntu",
}
deb1 := newDebian(c)
deb2 := newDebian(c)
cpis1 := []CvePacksInfo{
{
CveID: "CVE1",
CveDetail: cve.CveDetail{CveID: "CVE1"},
Packs: []models.PackageInfo{
{Name: "mysql-client-5.5"},
{Name: "mysql-server-5.5"},
{Name: "mysql-common-5.5"},
},
},
{
CveID: "CVE2",
CveDetail: cve.CveDetail{CveID: "CVE2"},
Packs: []models.PackageInfo{
{Name: "mysql-common-5.5"},
{Name: "mysql-server-5.5"},
{Name: "mysql-client-5.5"},
},
},
}
cpis2 := []CvePacksInfo{
{
CveID: "CVE3",
CveDetail: cve.CveDetail{CveID: "CVE3"},
Packs: []models.PackageInfo{
{Name: "libcurl3"},
{Name: "curl"},
},
},
{
CveID: "CVE4",
CveDetail: cve.CveDetail{CveID: "CVE4"},
Packs: []models.PackageInfo{
{Name: "bind9"},
{Name: "libdns100"},
},
},
}
deb1.setUnsecurePackages(cpis1)
servers = append(servers, deb1)
deb2.setUnsecurePackages(cpis2)
servers = append(servers, deb2)
// prepare expected data
expectedUnKnownPackages := []map[string][]models.PackageInfo{
{
"CVE1": {
{Name: "mysql-client-5.5"},
{Name: "mysql-common-5.5"},
{Name: "mysql-server-5.5"},
},
},
{
"CVE2": {
{Name: "mysql-client-5.5"},
{Name: "mysql-common-5.5"},
{Name: "mysql-server-5.5"},
},
},
{
"CVE3": {
{Name: "curl"},
{Name: "libcurl3"},
},
},
{
"CVE4": {
{Name: "bind9"},
{Name: "libdns100"},
},
},
}
// check scanResults
scanResults, _ := GetScanResults()
if len(scanResults) != 2 {
t.Errorf("length of scanResults should be 2")
}
for i, result := range scanResults {
if result.ServerName != "ubuntu" {
t.Errorf("expected ubuntu, actual %s", result.ServerName)
}
unKnownCves := result.UnknownCves
if len(unKnownCves) != 2 {
t.Errorf("length of unKnownCves should be 2")
}
for j, unKnownCve := range unKnownCves {
expected := expectedUnKnownPackages[i*2+j][unKnownCve.CveDetail.CveID]
if !reflect.DeepEqual(expected, unKnownCve.Packages) {
t.Errorf("expected %v, actual %v", expected, unKnownCve.Packages)
}
}
}
}