blob: cddee22a59e5346159cca6211da7b0467aa91706 [file] [log] [blame]
// Copyright 2023 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 database
import (
"context"
"flag"
"os"
"testing"
"github.com/google/go-cmp/cmp"
"golang.org/x/vulndb/internal/gitrepo"
)
var integration = flag.Bool("integration", false, "test with respect to current contents of vulndb")
func TestNewWriteLoadValidate(t *testing.T) {
newDB, err := New(testOSV1, testOSV2, testOSV3)
if err != nil {
t.Fatal(err)
}
tmpDir := t.TempDir()
if err = newDB.Write(tmpDir); err != nil {
t.Fatal(err)
}
loaded, err := Load(tmpDir)
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(newDB, loaded); diff != "" {
t.Errorf("new/write/load mismatch (-new, +loaded):\n%s", diff)
}
if err := Validate(tmpDir, tmpDir); err != nil {
t.Error(err)
}
}
func TestFromRepoWriteLoadValidate(t *testing.T) {
ctx := context.Background()
testRepo, err := gitrepo.ReadTxtarRepo(vulndbTxtar, jan2002)
if err != nil {
t.Fatal(err)
}
fromRepo, err := FromRepo(ctx, testRepo)
if err != nil {
t.Fatal(err)
}
tmpDir := t.TempDir()
if err = fromRepo.Write(tmpDir); err != nil {
t.Fatal(err)
}
loaded, err := Load(tmpDir)
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(fromRepo, loaded); diff != "" {
t.Errorf("fromRepo/write/load mismatch (-fromRepo, +loaded):\n%s", diff)
}
if err := Validate(tmpDir, tmpDir); err != nil {
t.Error(err)
}
}
func TestIntegration(t *testing.T) {
if !*integration {
t.Skip("Skipping integration tests, use flag -integration to run")
}
moveToVulnDBRoot(t)
ctx := context.Background()
repo, err := gitrepo.Open(ctx, ".")
if err != nil {
t.Fatal(err)
}
dir := t.TempDir()
created, err := FromRepo(ctx, repo)
if err != nil {
t.Fatal(err)
}
if err := created.Write(dir); err != nil {
t.Fatal(err)
}
loaded, err := Load(dir)
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(created, loaded); diff != "" {
t.Errorf("unexpected diff: (-created,+loaded):\n%s", diff)
}
if err := Validate(dir, dir); err != nil {
t.Error(err)
}
}
func moveToVulnDBRoot(t *testing.T) {
// Store current working directory and move into vulndb/ folder.
wd, err := os.Getwd()
if err != nil {
t.Fatal(err)
}
if err := os.Chdir("../.."); err != nil {
t.Fatal(err)
}
// Restore state from before test.
t.Cleanup(func() {
if err = os.Chdir(wd); err != nil {
t.Log(err)
}
})
}