vulndb/govulncheck: add file-system caching Change-Id: I19d0a456e69df8bbc776f7c25596f7f869aa5542 Reviewed-on: https://go-review.googlesource.com/c/exp/+/344869 Run-TryBot: Zvonimir Pavlinovic <zpavlinovic@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Tim King <taking@google.com> Trust: Zvonimir Pavlinovic <zpavlinovic@google.com>
diff --git a/vulndb/govulncheck/main.go b/vulndb/govulncheck/main.go index ba555f2..a3faacc 100644 --- a/vulndb/govulncheck/main.go +++ b/vulndb/govulncheck/main.go
@@ -83,12 +83,14 @@ if GOVULNDB := os.Getenv("GOVULNDB"); GOVULNDB != "" { dbs = strings.Split(GOVULNDB, ",") } - - cfg := &packages.Config{ - Mode: packages.LoadAllSyntax | packages.NeedModule, + dbClient, err := client.NewClient(dbs, client.Options{HTTPCache: client.NewFsCache()}) + if err != nil { + fmt.Fprintf(os.Stderr, "govulncheck: %s\n", err) + os.Exit(1) } - r, err := run(cfg, flag.Args(), *importsFlag, dbs) + cfg := &packages.Config{Mode: packages.LoadAllSyntax | packages.NeedModule} + r, err := run(cfg, flag.Args(), *importsFlag, dbClient) if err != nil { fmt.Fprintf(os.Stderr, "govulncheck: %s\n", err) os.Exit(1) @@ -176,18 +178,13 @@ return !s.IsDir() } -func run(cfg *packages.Config, patterns []string, importsOnly bool, dbs []string) (*audit.Results, error) { +func run(cfg *packages.Config, patterns []string, importsOnly bool, dbClient *client.Client) (*audit.Results, error) { if len(patterns) == 1 && isFile(patterns[0]) { modules, symbols, err := binscan.ExtractPackagesAndSymbols(patterns[0]) if err != nil { return nil, err } - dbClient, err := client.NewClient(dbs, client.Options{}) - if err != nil { - return nil, fmt.Errorf("failed to create database client: %s", err) - } - vulns, err := audit.FetchVulnerabilities(dbClient, modules) if err != nil { return nil, fmt.Errorf("failed to load vulnerability dbs: %v", err) @@ -217,10 +214,6 @@ if *verboseFlag { log.Println("loading database...") } - dbClient, err := client.NewClient(dbs, client.Options{}) - if err != nil { - return nil, fmt.Errorf("failed to create database client: %s", err) - } modVulns, err := audit.FetchVulnerabilities(dbClient, extractModules(pkgs)) if err != nil {
diff --git a/vulndb/govulncheck/main_test.go b/vulndb/govulncheck/main_test.go index 00c069a..6cb3987 100644 --- a/vulndb/govulncheck/main_test.go +++ b/vulndb/govulncheck/main_test.go
@@ -22,6 +22,7 @@ "golang.org/x/exp/vulndb/internal/audit" "golang.org/x/tools/go/packages" "golang.org/x/tools/go/packages/packagestest" + "golang.org/x/vulndb/client" ) // TODO(zpavlinovic): improve integration tests. @@ -223,7 +224,13 @@ } } - r, err := run(cfg, []string{hashiVaultOkta}, false, []string{test.source}) + // TODO: add caching + dbClient, err := client.NewClient([]string{test.source}, client.Options{}) + if err != nil { + t.Error(err) + } + + r, err := run(cfg, []string{hashiVaultOkta}, false, dbClient) if err != nil { t.Fatal(err) } @@ -374,7 +381,13 @@ } } - r, err := run(cfg, []string{"./..."}, false, []string{test.source}) + // TODO: add caching + dbClient, err := client.NewClient([]string{test.source}, client.Options{}) + if err != nil { + t.Error(err) + } + + r, err := run(cfg, []string{"./..."}, false, dbClient) if err != nil { t.Fatal(err) }