312 lines
6.3 KiB
Go
312 lines
6.3 KiB
Go
package models
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/future-architect/vuls/constant"
|
|
)
|
|
|
|
func TestExcept(t *testing.T) {
|
|
var tests = []struct {
|
|
in CveContents
|
|
out CveContents
|
|
}{{
|
|
in: CveContents{
|
|
RedHat: []CveContent{{Type: RedHat}},
|
|
Ubuntu: []CveContent{{Type: Ubuntu}},
|
|
Debian: []CveContent{{Type: Debian}},
|
|
},
|
|
out: CveContents{
|
|
RedHat: []CveContent{{Type: RedHat}},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
actual := tt.in.Except(Ubuntu, Debian)
|
|
if !reflect.DeepEqual(tt.out, actual) {
|
|
t.Errorf("\nexpected: %v\n actual: %v\n", tt.out, actual)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSourceLinks(t *testing.T) {
|
|
type in struct {
|
|
lang string
|
|
cveID string
|
|
cont CveContents
|
|
confidences Confidences
|
|
}
|
|
var tests = []struct {
|
|
in in
|
|
out []CveContentStr
|
|
}{
|
|
// lang: ja
|
|
{
|
|
in: in{
|
|
lang: "ja",
|
|
cveID: "CVE-2017-6074",
|
|
cont: CveContents{
|
|
Jvn: []CveContent{{
|
|
Type: Jvn,
|
|
SourceLink: "https://jvn.jp/vu/JVNVU93610402/",
|
|
}},
|
|
RedHat: []CveContent{{
|
|
Type: RedHat,
|
|
SourceLink: "https://access.redhat.com/security/cve/CVE-2017-6074",
|
|
}},
|
|
Nvd: []CveContent{{
|
|
Type: Nvd,
|
|
References: []Reference{
|
|
{
|
|
Link: "https://lists.apache.org/thread.html/765be3606d865de513f6df9288842c3cf58b09a987c617a535f2b99d@%3Cusers.tapestry.apache.org%3E",
|
|
Source: "",
|
|
RefID: "",
|
|
Tags: []string{"Vendor Advisory"},
|
|
},
|
|
{
|
|
Link: "http://yahoo.com",
|
|
Source: "",
|
|
RefID: "",
|
|
Tags: []string{"Vendor"},
|
|
},
|
|
},
|
|
SourceLink: "https://nvd.nist.gov/vuln/detail/CVE-2017-6074",
|
|
}},
|
|
},
|
|
},
|
|
out: []CveContentStr{
|
|
{
|
|
Type: Nvd,
|
|
Value: "https://lists.apache.org/thread.html/765be3606d865de513f6df9288842c3cf58b09a987c617a535f2b99d@%3Cusers.tapestry.apache.org%3E",
|
|
},
|
|
{
|
|
Type: Nvd,
|
|
Value: "https://nvd.nist.gov/vuln/detail/CVE-2017-6074",
|
|
},
|
|
{
|
|
Type: RedHat,
|
|
Value: "https://access.redhat.com/security/cve/CVE-2017-6074",
|
|
},
|
|
{
|
|
Type: Jvn,
|
|
Value: "https://jvn.jp/vu/JVNVU93610402/",
|
|
},
|
|
},
|
|
},
|
|
// lang: en
|
|
{
|
|
in: in{
|
|
lang: "en",
|
|
cveID: "CVE-2017-6074",
|
|
cont: CveContents{
|
|
Jvn: []CveContent{{
|
|
Type: Jvn,
|
|
SourceLink: "https://jvn.jp/vu/JVNVU93610402/",
|
|
}},
|
|
RedHat: []CveContent{{
|
|
Type: RedHat,
|
|
SourceLink: "https://access.redhat.com/security/cve/CVE-2017-6074",
|
|
}},
|
|
},
|
|
},
|
|
out: []CveContentStr{
|
|
{
|
|
Type: RedHat,
|
|
Value: "https://access.redhat.com/security/cve/CVE-2017-6074",
|
|
},
|
|
},
|
|
},
|
|
// lang: empty
|
|
{
|
|
in: in{
|
|
lang: "en",
|
|
cveID: "CVE-2017-6074",
|
|
cont: CveContents{},
|
|
},
|
|
out: []CveContentStr{
|
|
{
|
|
Type: Nvd,
|
|
Value: "https://nvd.nist.gov/vuln/detail/CVE-2017-6074",
|
|
},
|
|
},
|
|
},
|
|
// Confidence: JvnVendorProductMatch
|
|
{
|
|
in: in{
|
|
lang: "en",
|
|
cveID: "CVE-2017-6074",
|
|
cont: CveContents{
|
|
Jvn: []CveContent{{
|
|
Type: Jvn,
|
|
SourceLink: "https://jvn.jp/vu/JVNVU93610402/",
|
|
}},
|
|
},
|
|
confidences: Confidences{
|
|
Confidence{DetectionMethod: JvnVendorProductMatchStr},
|
|
},
|
|
},
|
|
out: []CveContentStr{
|
|
{
|
|
Type: Jvn,
|
|
Value: "https://jvn.jp/vu/JVNVU93610402/",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for i, tt := range tests {
|
|
actual := tt.in.cont.PrimarySrcURLs(tt.in.lang, "redhat", tt.in.cveID, tt.in.confidences)
|
|
if !reflect.DeepEqual(tt.out, actual) {
|
|
t.Errorf("\n[%d] expected: %v\n actual: %v\n", i, tt.out, actual)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCveContents_Sort(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
v CveContents
|
|
want CveContents
|
|
}{
|
|
{
|
|
name: "sorted",
|
|
v: map[CveContentType][]CveContent{
|
|
"jvn": {
|
|
{Cvss3Score: 3},
|
|
{Cvss3Score: 10},
|
|
},
|
|
},
|
|
want: map[CveContentType][]CveContent{
|
|
"jvn": {
|
|
{Cvss3Score: 10},
|
|
{Cvss3Score: 3},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "sort JVN by cvss3, cvss2, sourceLink",
|
|
v: map[CveContentType][]CveContent{
|
|
"jvn": {
|
|
{
|
|
Cvss3Score: 3,
|
|
Cvss2Score: 3,
|
|
SourceLink: "https://jvndb.jvn.jp/ja/contents/2023/JVNDB-2023-001210.html",
|
|
},
|
|
{
|
|
Cvss3Score: 3,
|
|
Cvss2Score: 3,
|
|
SourceLink: "https://jvndb.jvn.jp/ja/contents/2021/JVNDB-2021-001210.html",
|
|
},
|
|
},
|
|
},
|
|
want: map[CveContentType][]CveContent{
|
|
"jvn": {
|
|
{
|
|
Cvss3Score: 3,
|
|
Cvss2Score: 3,
|
|
SourceLink: "https://jvndb.jvn.jp/ja/contents/2021/JVNDB-2021-001210.html",
|
|
},
|
|
{
|
|
Cvss3Score: 3,
|
|
Cvss2Score: 3,
|
|
SourceLink: "https://jvndb.jvn.jp/ja/contents/2023/JVNDB-2023-001210.html",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "sort JVN by cvss3, cvss2",
|
|
v: map[CveContentType][]CveContent{
|
|
"jvn": {
|
|
{
|
|
Cvss3Score: 3,
|
|
Cvss2Score: 1,
|
|
},
|
|
{
|
|
Cvss3Score: 3,
|
|
Cvss2Score: 10,
|
|
},
|
|
},
|
|
},
|
|
want: map[CveContentType][]CveContent{
|
|
"jvn": {
|
|
{
|
|
Cvss3Score: 3,
|
|
Cvss2Score: 10,
|
|
},
|
|
{
|
|
Cvss3Score: 3,
|
|
Cvss2Score: 1,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
tt.v.Sort()
|
|
if !reflect.DeepEqual(tt.v, tt.want) {
|
|
t.Errorf("\n[%s] expected: %v\n actual: %v\n", tt.name, tt.want, tt.v)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNewCveContentType(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
want CveContentType
|
|
}{
|
|
{
|
|
name: "redhat",
|
|
want: RedHat,
|
|
},
|
|
{
|
|
name: "centos",
|
|
want: RedHat,
|
|
},
|
|
{
|
|
name: "unknown",
|
|
want: Unknown,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := NewCveContentType(tt.name); got != tt.want {
|
|
t.Errorf("NewCveContentType() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGetCveContentTypes(t *testing.T) {
|
|
tests := []struct {
|
|
family string
|
|
want []CveContentType
|
|
}{
|
|
{
|
|
family: constant.RedHat,
|
|
want: []CveContentType{RedHat, RedHatAPI},
|
|
},
|
|
{
|
|
family: constant.Debian,
|
|
want: []CveContentType{Debian, DebianSecurityTracker},
|
|
},
|
|
{
|
|
family: constant.Ubuntu,
|
|
want: []CveContentType{Ubuntu, UbuntuAPI},
|
|
},
|
|
{
|
|
family: constant.FreeBSD,
|
|
want: nil,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.family, func(t *testing.T) {
|
|
if got := GetCveContentTypes(tt.family); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("GetCveContentTypes() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|