aboutsummaryrefslogtreecommitdiff
path: root/nvdmirror/nvdmirror_test.go
blob: 5b40dd895f42ad46572339f445a5b813d10202c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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")
      }
    })
  }
}