Datastore refactor and added postgres tests (#259)

* fix apps & routes creation/update

* refactor datastore and added postgres tests

* added test-datastore and fixed circleci test
This commit is contained in:
Pedro Nasser
2016-11-14 15:03:10 -02:00
committed by GitHub
parent ff8c5538dd
commit 7aa1981fba
19 changed files with 776 additions and 110 deletions

View File

@@ -21,15 +21,16 @@ func setLogBuffer() *bytes.Buffer {
return &buf
}
const tmpBolt = "/tmp/func_test_bolt.db"
func TestBolt(t *testing.T) {
buf := setLogBuffer()
const tmpBolt = "/tmp/func_test_bolt.db"
os.Remove(tmpBolt)
ds, err := New("bolt://" + tmpBolt)
if err != nil {
t.Fatal("Error when creating datastore: %s", err)
t.Fatalf("Error when creating datastore: %v", err)
}
defer os.Remove(tmpBolt)
testApp := &models.App{
Name: "Test",
@@ -41,24 +42,47 @@ func TestBolt(t *testing.T) {
Image: "iron/hello",
}
// Testing store app
_, err = ds.StoreApp(nil)
if err == nil {
// Testing insert app
_, err = ds.InsertApp(nil)
if err != models.ErrDatastoreEmptyApp {
t.Log(buf.String())
t.Fatalf("Test StoreApp: expected error when using nil app", err)
t.Fatalf("Test InsertApp(nil): expected error `%v`, but it was `%v`", models.ErrDatastoreEmptyApp, err)
}
_, err = ds.StoreApp(testApp)
_, err = ds.InsertApp(&models.App{})
if err != models.ErrDatastoreEmptyAppName {
t.Log(buf.String())
t.Fatalf("Test InsertApp(nil): expected error `%v`, but it was `%v`", models.ErrDatastoreEmptyAppName, err)
}
_, err = ds.InsertApp(testApp)
if err != nil {
t.Log(buf.String())
t.Fatalf("Test StoreApp: error when Bolt was storing new app: %s", err)
t.Fatalf("Test InsertApp: error when Bolt was storing new app: %s", err)
}
_, err = ds.InsertApp(testApp)
if err != models.ErrAppsAlreadyExists {
t.Log(buf.String())
t.Fatalf("Test InsertApp duplicated: expected error `%v`, but it was `%v`", models.ErrAppsAlreadyExists, err)
}
_, err = ds.UpdateApp(&models.App{
Name: testApp.Name,
Config: map[string]string{
"TEST": "1",
},
})
if err != nil {
t.Log(buf.String())
t.Fatalf("Test UpdateApp: error when Bolt was updating app: %v", err)
}
// Testing get app
_, err = ds.GetApp("")
if err == nil {
if err != models.ErrDatastoreEmptyAppName {
t.Log(buf.String())
t.Fatalf("Test GetApp: expected error when using empty app name", err)
t.Fatalf("Test GetApp: expected error to be %v, but it was %s", models.ErrDatastoreEmptyAppName, err)
}
app, err := ds.GetApp(testApp.Name)
@@ -75,7 +99,7 @@ func TestBolt(t *testing.T) {
apps, err := ds.GetApps(&models.AppFilter{})
if err != nil {
t.Log(buf.String())
t.Fatalf("Test GetApps: error: %s", err)
t.Fatalf("Test GetApps: unexpected error %v", err)
}
if len(apps) == 0 {
t.Fatal("Test GetApps: expected result count to be greater than 0")
@@ -87,9 +111,9 @@ func TestBolt(t *testing.T) {
// Testing app delete
err = ds.RemoveApp("")
if err == nil {
if err != models.ErrDatastoreEmptyAppName {
t.Log(buf.String())
t.Fatalf("Test RemoveApp: expected error when using empty app name", err)
t.Fatalf("Test RemoveApp: expected error `%v`, but it was `%v`", models.ErrDatastoreEmptyAppName, err)
}
err = ds.RemoveApp(testApp.Name)
@@ -107,39 +131,63 @@ func TestBolt(t *testing.T) {
t.Fatalf("Test RemoveApp: failed to remove the app")
}
// Store app again to test routes
ds.StoreApp(testApp)
// Testing store route
_, err = ds.StoreRoute(nil)
if err == nil {
// Test update inexistent app
_, err = ds.UpdateApp(&models.App{
Name: testApp.Name,
Config: map[string]string{
"TEST": "1",
},
})
if err != models.ErrAppsNotFound {
t.Log(buf.String())
t.Fatalf("Test StoreRoute: expected error when using nil route", err)
t.Fatalf("Test UpdateApp inexistent: expected error to be %v, but it was %v", models.ErrAppsNotFound, err)
}
_, err = ds.StoreRoute(testRoute)
// Insert app again to test routes
ds.InsertApp(testApp)
// Testing insert route
_, err = ds.InsertRoute(nil)
if err == models.ErrDatastoreEmptyRoute {
t.Log(buf.String())
t.Fatalf("Test InsertRoute(nil): expected error `%v`, but it was `%v`", models.ErrDatastoreEmptyRoute, err)
}
_, err = ds.InsertRoute(testRoute)
if err != nil {
t.Log(buf.String())
t.Fatalf("Test StoreReoute: error when Bolt was storing new route: %s", err)
t.Fatalf("Test InsertRoute: error when Bolt was storing new route: %s", err)
}
_, err = ds.InsertRoute(testRoute)
if err != models.ErrRoutesAlreadyExists {
t.Log(buf.String())
t.Fatalf("Test InsertRoute duplicated: expected error to be `%v`, but it was `%v`", models.ErrRoutesAlreadyExists, err)
}
_, err = ds.UpdateRoute(testRoute)
if err != nil {
t.Log(buf.String())
t.Fatalf("Test UpdateRoute: unexpected error: %v", err)
}
// Testing get
_, err = ds.GetRoute("a", "")
if err == nil {
if err != models.ErrDatastoreEmptyRoutePath {
t.Log(buf.String())
t.Fatalf("Test GetRoute: expected error when using empty route name", err)
t.Fatalf("Test GetRoute(empty route path): expected error `%v`, but it was `%v`", models.ErrDatastoreEmptyRoutePath, err)
}
_, err = ds.GetRoute("", "a")
if err == nil {
if err != models.ErrDatastoreEmptyAppName {
t.Log(buf.String())
t.Fatalf("Test GetRoute: expected error when using empty app name", err)
t.Fatalf("Test GetRoute(empty app name): expected error `%v`, but it was `%v`", models.ErrDatastoreEmptyAppName, err)
}
route, err := ds.GetRoute(testApp.Name, testRoute.Path)
if err != nil {
t.Log(buf.String())
t.Fatalf("Test GetRoute: error: %s", err)
t.Fatalf("Test GetRoute: unexpected error %v", err)
}
if route.Path != testRoute.Path {
t.Log(buf.String())
@@ -150,7 +198,7 @@ func TestBolt(t *testing.T) {
routes, err := ds.GetRoutesByApp(testApp.Name, &models.RouteFilter{})
if err != nil {
t.Log(buf.String())
t.Fatalf("Test GetRoutes: error: %s", err)
t.Fatalf("Test GetRoutes: unexpected error %v", err)
}
if len(routes) == 0 {
t.Fatal("Test GetRoutes: expected result count to be greater than 0")
@@ -176,21 +224,31 @@ func TestBolt(t *testing.T) {
// Testing app delete
err = ds.RemoveRoute("", "")
if err == nil {
if err != models.ErrDatastoreEmptyAppName {
t.Log(buf.String())
t.Fatalf("Test RemoveRoute: expected error when using empty app name", err)
t.Fatalf("Test RemoveRoute(empty app name): expected error `%v`, but it was `%v`", models.ErrDatastoreEmptyAppName, err)
}
err = ds.RemoveRoute("a", "")
if err == nil {
if err != models.ErrDatastoreEmptyRoutePath {
t.Log(buf.String())
t.Fatalf("Test RemoveRoute: expected error when using empty route name", err)
t.Fatalf("Test RemoveRoute(empty route path): expected error `%v`, but it was `%v`", models.ErrDatastoreEmptyRoutePath, err)
}
err = ds.RemoveRoute(testRoute.AppName, testRoute.Path)
if err != nil {
t.Log(buf.String())
t.Fatalf("Test RemoveApp: error: %s", err)
t.Fatalf("Test RemoveApp: unexpected error: %v", err)
}
_, err = ds.UpdateRoute(&models.Route{
AppName: testRoute.AppName,
Path: testRoute.Path,
Image: "test",
})
if err != models.ErrRoutesNotFound {
t.Log(buf.String())
t.Fatalf("Test UpdateRoute inexistent: expected error to be `%v`, but it was `%v`", models.ErrRoutesNotFound, err)
}
route, err = ds.GetRoute(testRoute.AppName, testRoute.Path)