added some tests for the json storage.
This commit is contained in:
parent
9e9bb74c4a
commit
456d502b72
16
api_test.go
16
api_test.go
@ -11,7 +11,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestAdd(t *testing.T) {
|
func TestAdd(t *testing.T) {
|
||||||
ms := NewMemStore("")
|
ms := NewSimpleStore("")
|
||||||
s := &Server{
|
s := &Server{
|
||||||
storage: ms,
|
storage: ms,
|
||||||
}
|
}
|
||||||
@ -78,7 +78,7 @@ func TestAdd(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestInvalidPath(t *testing.T) {
|
func TestInvalidPath(t *testing.T) {
|
||||||
ms := NewMemStore("")
|
ms := NewSimpleStore("")
|
||||||
s := &Server{
|
s := &Server{
|
||||||
storage: ms,
|
storage: ms,
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ func TestInvalidPath(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCannotDuplicateExistingPath(t *testing.T) {
|
func TestCannotDuplicateExistingPath(t *testing.T) {
|
||||||
ms := NewMemStore("")
|
ms := NewSimpleStore("")
|
||||||
s := &Server{
|
s := &Server{
|
||||||
storage: ms,
|
storage: ms,
|
||||||
}
|
}
|
||||||
@ -123,7 +123,7 @@ func TestCannotDuplicateExistingPath(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCannotAddExistingSubPath(t *testing.T) {
|
func TestCannotAddExistingSubPath(t *testing.T) {
|
||||||
ms := NewMemStore("")
|
ms := NewSimpleStore("")
|
||||||
s := &Server{
|
s := &Server{
|
||||||
storage: ms,
|
storage: ms,
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ func TestCannotAddExistingSubPath(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestMissingRepo(t *testing.T) {
|
func TestMissingRepo(t *testing.T) {
|
||||||
ms := NewMemStore("")
|
ms := NewSimpleStore("")
|
||||||
s := &Server{
|
s := &Server{
|
||||||
storage: ms,
|
storage: ms,
|
||||||
}
|
}
|
||||||
@ -171,7 +171,7 @@ func TestMissingRepo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBadJson(t *testing.T) {
|
func TestBadJson(t *testing.T) {
|
||||||
ms := NewMemStore("")
|
ms := NewSimpleStore("")
|
||||||
s := &Server{
|
s := &Server{
|
||||||
storage: ms,
|
storage: ms,
|
||||||
}
|
}
|
||||||
@ -191,7 +191,7 @@ func TestBadJson(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestUnsupportedMethod(t *testing.T) {
|
func TestUnsupportedMethod(t *testing.T) {
|
||||||
ms := NewMemStore("")
|
ms := NewSimpleStore("")
|
||||||
s := &Server{
|
s := &Server{
|
||||||
storage: ms,
|
storage: ms,
|
||||||
}
|
}
|
||||||
@ -213,7 +213,7 @@ func TestUnsupportedMethod(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNewServer(t *testing.T) {
|
func TestNewServer(t *testing.T) {
|
||||||
ms := NewMemStore("")
|
ms := NewSimpleStore("")
|
||||||
sm := http.NewServeMux()
|
sm := http.NewServeMux()
|
||||||
s := NewServer(sm, ms, "foo")
|
s := NewServer(sm, ms, "foo")
|
||||||
ts := httptest.NewServer(s)
|
ts := httptest.NewServer(s)
|
||||||
|
@ -96,10 +96,9 @@ func main() {
|
|||||||
}
|
}
|
||||||
log.Printf("serving at: http://%s:%d/", hostname, c.Port)
|
log.Printf("serving at: http://%s:%d/", hostname, c.Port)
|
||||||
sm := http.NewServeMux()
|
sm := http.NewServeMux()
|
||||||
ms := vain.NewMemStore(c.DB)
|
ms := vain.NewSimpleStore(c.DB)
|
||||||
if err := ms.Load(); err != nil {
|
if err := ms.Load(); err != nil {
|
||||||
log.Printf("unable to load db: %v", err)
|
log.Printf("unable to load db: %v; creating fresh database", err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
vain.NewServer(sm, ms, c.Host)
|
vain.NewServer(sm, ms, c.Host)
|
||||||
addr := fmt.Sprintf(":%d", c.Port)
|
addr := fmt.Sprintf(":%d", c.Port)
|
||||||
|
@ -35,8 +35,8 @@ type SimpleStore struct {
|
|||||||
path string
|
path string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewMemStore returns a ready-to-use SimpleStore storing json at path.
|
// NewSimpleStore returns a ready-to-use SimpleStore storing json at path.
|
||||||
func NewMemStore(path string) *SimpleStore {
|
func NewSimpleStore(path string) *SimpleStore {
|
||||||
return &SimpleStore{
|
return &SimpleStore{
|
||||||
path: path,
|
path: path,
|
||||||
p: make(map[string]Package),
|
p: make(map[string]Package),
|
||||||
|
84
storage_test.go
Normal file
84
storage_test.go
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
package vain
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func equiv(a, b map[string]Package) (bool, []error) {
|
||||||
|
equiv := true
|
||||||
|
errs := []error{}
|
||||||
|
if got, want := len(a), len(b); got != want {
|
||||||
|
equiv = false
|
||||||
|
errs = append(errs, fmt.Errorf("uncorrect number of elements: got %d, want %d", got, want))
|
||||||
|
return false, errs
|
||||||
|
}
|
||||||
|
|
||||||
|
for k := range a {
|
||||||
|
v, ok := b[k]
|
||||||
|
if !ok || v != a[k] {
|
||||||
|
errs = append(errs, fmt.Errorf("missing key: %s", k))
|
||||||
|
equiv = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return equiv, errs
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSimpleStorage(t *testing.T) {
|
||||||
|
root, err := ioutil.TempDir("", "vain-")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("problem creating temp dir: %v", err)
|
||||||
|
}
|
||||||
|
defer func() { os.RemoveAll(root) }()
|
||||||
|
db := filepath.Join(root, "vain.json")
|
||||||
|
ms := NewSimpleStore(db)
|
||||||
|
orig := map[string]Package{
|
||||||
|
"foo": {},
|
||||||
|
"bar": {},
|
||||||
|
"baz": {},
|
||||||
|
}
|
||||||
|
ms.p = orig
|
||||||
|
if err := ms.Save(); err != nil {
|
||||||
|
t.Errorf("should have been able to Save: %v", err)
|
||||||
|
}
|
||||||
|
ms.p = map[string]Package{}
|
||||||
|
if err := ms.Load(); err != nil {
|
||||||
|
t.Errorf("should have been able to Load: %v", err)
|
||||||
|
}
|
||||||
|
if ok, errs := equiv(orig, ms.p); !ok {
|
||||||
|
for _, err := range errs {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRemove(t *testing.T) {
|
||||||
|
root, err := ioutil.TempDir("", "vain-")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("problem creating temp dir: %v", err)
|
||||||
|
}
|
||||||
|
defer func() { os.RemoveAll(root) }()
|
||||||
|
db := filepath.Join(root, "vain.json")
|
||||||
|
ms := NewSimpleStore(db)
|
||||||
|
ms.p = map[string]Package{
|
||||||
|
"foo": {},
|
||||||
|
"bar": {},
|
||||||
|
"baz": {},
|
||||||
|
}
|
||||||
|
if err := ms.Remove("foo"); err != nil {
|
||||||
|
t.Errorf("unexpected error during remove: %v", err)
|
||||||
|
}
|
||||||
|
want := map[string]Package{
|
||||||
|
"bar": {},
|
||||||
|
"baz": {},
|
||||||
|
}
|
||||||
|
if ok, errs := equiv(ms.p, want); !ok {
|
||||||
|
for _, err := range errs {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user