blob: e36f73ab310962d085cf113046f1d14a53025a8b [file] [log] [blame]
// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package audit
import (
"reflect"
"sort"
"testing"
"golang.org/x/vulndb/osv"
)
func TestImportedPackageVulnDetection(t *testing.T) {
pkgs, modVulns := testContext(t)
got := projectFindings(VulnerableImports(pkgs, modVulns))
// There should be two chains reported in the following order:
// T -> vuln
// T -> A -> vuln
want := []Finding{
{
Symbol: "thirdparty.org/vulnerabilities/vuln",
Trace: []TraceElem{{Description: "command-line-arguments"}},
Type: ImportType,
Vulns: []osv.Entry{
{Package: osv.Package{Name: "thirdparty.org/vulnerabilities/vuln"}},
{Package: osv.Package{Name: "thirdparty.org/vulnerabilities/vuln"}}},
weight: 1,
},
{
Symbol: "thirdparty.org/vulnerabilities/vuln",
Trace: []TraceElem{{Description: "command-line-arguments"}, {Description: "a.org/A"}},
Type: ImportType,
Vulns: []osv.Entry{
{Package: osv.Package{Name: "thirdparty.org/vulnerabilities/vuln"}},
{Package: osv.Package{Name: "thirdparty.org/vulnerabilities/vuln"}}},
weight: 2,
},
}
if len(want) != len(got) {
t.Errorf("want %d findings; got %d", len(want), len(got))
return
}
sort.SliceStable(got, func(i int, j int) bool { return FindingCompare(got[i], got[j]) })
if !reflect.DeepEqual(want, got) {
t.Errorf("want %v findings (projected); got %v", want, got)
}
}