diff options
Diffstat (limited to 'nvdmirror/jsoncache_test.go')
-rw-r--r-- | nvdmirror/jsoncache_test.go | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/nvdmirror/jsoncache_test.go b/nvdmirror/jsoncache_test.go new file mode 100644 index 0000000..5dc0277 --- /dev/null +++ b/nvdmirror/jsoncache_test.go @@ -0,0 +1,151 @@ +package nvdmirror + +import ( + "os" + "path/filepath" + "reflect" + "testing" +) + +func TestNewJsonCache(t *testing.T) { + passTests := []struct { + name string + vals map[string]map[string]string + } {{ + name: "empty", + }, { + name: "foobarbaz", + vals: map[string]map[string]string { + "foo": map[string]string { + "bar": "baz", + }, + }, + }} + + // create temp dir + dir, err := os.MkdirTemp("", "TestNewJsonCache") + if err != nil { + t.Error(err) + return + } + defer os.RemoveAll(dir) + // dir = "testdata" + + for _, test := range(passTests) { + t.Run(test.name, func(t *testing.T) { + // build cache path + path := filepath.Join(dir, test.name) + + { + // load cache + cache, err := NewJsonCache(path) + if err != nil { + t.Error(err) + return + } + + // set values + for k, v := range(test.vals) { + if err = cache.Set(k, v); err != nil { + t.Error(err) + return + } + } + + // close cache + if err = cache.Close(); err != nil { + t.Error(err) + return + } + } + + { + // open previously saved cache + cache, err := NewJsonCache(path) + if err != nil { + t.Error(err) + return + } + defer cache.Close() + + // check values + for k, exp := range(test.vals) { + if got, ok := cache.Get(k); !ok { + t.Errorf("missing key: %s", k) + return + } else if !reflect.DeepEqual(got, exp) { + t.Errorf("got %v, exp %v", got, exp) + return + } + + // delete entry + if err = cache.Delete(k); err != nil { + t.Error(err) + return + } + + // get entry again + if got, ok := cache.Get(k); ok { + t.Errorf("key: %s, got %v, exp missing", k, got) + return + } + } + + // try accessing missing value + if got, ok := cache.Get("some key that doesn't exist"); ok { + t.Errorf("got %v, exp !ok", got) + } + + // close cache, check for error + if err = cache.Close(); err != nil { + t.Error(err) + return + } + + if cache.dirty { + t.Errorf("got dirty, exp clean") + return + } + } + }) + } + + failNewTests := []string { + "testdata/does/not/exist", + "testdata/bad-data.json", + "testdata/bad-stat.json", + } + + for _, test := range(failNewTests) { + t.Run(test, func(t *testing.T) { + if got, err := NewJsonCache(test); err == nil { + t.Errorf("got %v, exp err", got) + } + }) + } + + failCloseTests := []string { + "/dev/null", + } + + testVals := map[string]string { "bar": "baz" } + + for _, test := range(failCloseTests) { + t.Run(test, func(t *testing.T) { + cache, err := NewJsonCache(test) + if err != nil { + t.Error(err) + return + } + + if err = cache.Set("foo", testVals); err != nil { + t.Error(err) + return + } + + if err = cache.Close(); err == nil { + t.Errorf("got success, exp error") + } + }) + } +} |