From a4b802d22fa0940fd1862f2176dfb41f4a1be973 Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Tue, 22 Feb 2022 19:59:26 -0500 Subject: add nvdmirror, including cache iface, jsoncache impl, Sync() func, and test data --- nvdmirror/nvdmirror_test.go | 111 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 nvdmirror/nvdmirror_test.go (limited to 'nvdmirror/nvdmirror_test.go') diff --git a/nvdmirror/nvdmirror_test.go b/nvdmirror/nvdmirror_test.go new file mode 100644 index 0000000..5b40dd8 --- /dev/null +++ b/nvdmirror/nvdmirror_test.go @@ -0,0 +1,111 @@ +package nvdmirror + +import ( + "fmt" + "os" + "net/http" + "path/filepath" + "testing" +) + +// serve on given port +func serve(port int, ch chan bool) { + s := http.Server { + Addr: fmt.Sprintf(":%d", port), + Handler: http.FileServer(http.Dir("testdata/files")), + } + + go (func() { + // block on channel + _ = <-ch + + // shut down server + s.Close() + })() + + // start server + s.ListenAndServe() +} + +// close server immediately +func stopServer(ch chan bool) { + ch <- false +} + +func TestSync(t *testing.T) { + // + port := 8888 + ch := make(chan bool) + defer stopServer(ch) + + // spin up local server + go serve(port, ch) + + // create temp dir + dir, err := os.MkdirTemp("", "") + if err != nil { + t.Error(err) + return + } + defer os.RemoveAll(dir) + // dir = "testdata/out" + + // create cache + cache, err := NewJsonCache(filepath.Join(dir, "cache.json.gz")) + if err != nil { + t.Error(err) + return + } + defer cache.Close() + + // custom sync config + // FIXME: stand up custom server for this + urls := Urls { + Cve11Base: fmt.Sprintf("http://localhost:%d", port), + } + + // sync data + if err := Sync(urls, &cache, dir); err != nil { + t.Error(err) + } + + // sync data again (to test caching) + if err := Sync(urls, &cache, dir); err != nil { + t.Error(err) + } +} + +func TestBadUrl(t *testing.T) { + // create temp dir + dir, err := os.MkdirTemp("", "") + if err != nil { + t.Error(err) + return + } + defer os.RemoveAll(dir) + + // create cache + cache, err := NewJsonCache(filepath.Join(dir, "cache.json.gz")) + if err != nil { + t.Error(err) + return + } + defer cache.Close() + + failTests := []string { + "httsldkfjasldkfjadp://localhost:0", + "http://localhost:0", + } + + for _, test := range(failTests) { + t.Run(test, func(t *testing.T) { + // custom sync config + urls := Urls { Cve11Base: test } + + // sync data + if err := Sync(urls, &cache, dir); err == nil { + t.Errorf("got success, exp error") + } + }) + } +} -- cgit v1.2.3