aboutsummaryrefslogtreecommitdiff
path: root/nvdmirror/nvdmirror_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'nvdmirror/nvdmirror_test.go')
-rw-r--r--nvdmirror/nvdmirror_test.go111
1 files changed, 111 insertions, 0 deletions
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")
+ }
+ })
+ }
+}