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") } }) } }