vet/pkg/reporter/json_report_test.go
Omkar Phansopkar d7f7a6c72e
Use common ToolMetadata for all reporters and default-enable vuln & malware in SARIF
Signed-off-by: Omkar Phansopkar <omkarphansopkar@gmail.com>
2025-04-01 21:10:45 +05:30

140 lines
3.5 KiB
Go

package reporter
import (
"bytes"
"os"
"testing"
"github.com/google/osv-scanner/pkg/lockfile"
"github.com/safedep/dry/utils"
jsonreportspec "github.com/safedep/vet/gen/jsonreport"
"github.com/safedep/vet/pkg/analyzer"
"github.com/safedep/vet/pkg/models"
"github.com/stretchr/testify/assert"
)
// We are going to expose this as a contract eventually for other tools
// so it is important that we have appropriate test cases maintained
// for this reporter
func TestJsonRepoGenerator(t *testing.T) {
cases := []struct {
name string
manifests []*models.PackageManifest
events []*analyzer.AnalyzerEvent
assertFn func(t *testing.T, report *jsonreportspec.Report)
}{
{
"Verify sanity of test",
[]*models.PackageManifest{
{
Source: models.PackageManifestSource{
Type: models.ManifestSourceLocal,
Namespace: "/namespace/1",
Path: "sample-path",
DisplayPath: "/tmp/sample/display/path/does/not/matter",
},
Path: "/real/path",
Ecosystem: models.EcosystemGo,
Packages: []*models.Package{
{
PackageDetails: lockfile.PackageDetails{
Name: "golib1",
Version: "0.1.2",
},
},
},
},
},
[]*analyzer.AnalyzerEvent{},
func(t *testing.T, report *jsonreportspec.Report) {
assert.Equal(t, 1, len(report.Manifests))
assert.Equal(t, "sample-path", report.Manifests[0].Path)
assert.Equal(t, "/namespace/1", report.Manifests[0].Namespace)
assert.Equal(t, "/namespace/1/sample-path", report.Manifests[0].DisplayPath)
assert.Equal(t, string(models.ManifestSourceLocal), report.Manifests[0].SourceType)
assert.Equal(t, 1, len(report.Packages))
assert.Equal(t, "golib1", report.Packages[0].GetPackage().GetName())
assert.Equal(t, "0.1.2", report.Packages[0].GetPackage().GetVersion())
},
},
{
"Verify GitHub manifest",
[]*models.PackageManifest{
{
Source: models.PackageManifestSource{
Type: models.ManifestSourceGitRepository,
Namespace: "/namespace/1",
Path: "sample-path",
DisplayPath: "/tmp/sample/display/path",
},
Path: "/real/path",
Ecosystem: models.EcosystemGo,
Packages: []*models.Package{
{
PackageDetails: lockfile.PackageDetails{
Name: "golib1",
Version: "0.1.2",
},
},
},
},
},
[]*analyzer.AnalyzerEvent{},
func(t *testing.T, report *jsonreportspec.Report) {
assert.Equal(t, "/tmp/sample/display/path", report.Manifests[0].DisplayPath)
},
},
}
tmpFile, err := os.CreateTemp("", "vet-json-report-test-*")
if err != nil {
panic(err)
}
tmpFile.Close()
defer os.Remove(tmpFile.Name())
for _, test := range cases {
t.Run(test.name, func(t *testing.T) {
r, err := NewJsonReportGenerator(JsonReportingConfig{
Path: tmpFile.Name(),
Tool: ToolMetadata{
Name: "vet",
Version: "latest",
InformationURI: "https://github.com/safedep/vet",
VendorName: "safedep",
},
})
assert.Nil(t, err)
for _, m := range test.manifests {
// We need to fix the manifest reference for each package
for _, pkg := range m.Packages {
pkg.Manifest = m
}
r.AddManifest(m)
}
for _, e := range test.events {
r.AddAnalyzerEvent(e)
}
err = r.Finish()
assert.Nil(t, err)
data, err := os.ReadFile(tmpFile.Name())
assert.Nil(t, err)
var report jsonreportspec.Report
err = utils.FromPbJson(bytes.NewReader(data), &report)
assert.Nil(t, err)
test.assertFn(t, &report)
})
}
}