Browse Source

test: Adding more ECAL related tests

Matthias Ladkau 4 years ago
parent
commit
fc0ac59b30
1 changed files with 124 additions and 6 deletions
  1. 124 6
      ecal/interpreter_test.go

+ 124 - 6
ecal/interpreter_test.go

@@ -129,6 +129,8 @@ func TestInterpreter(t *testing.T) {
 
 	ds := NewScriptingInterpreter(testScriptDir, gm)
 
+	// Test normal log output
+
 	writeScript(`
 log("test insert")
 `)
@@ -143,6 +145,20 @@ log("test insert")
 		t.Error(err)
 	}
 
+	// Test stack trace
+
+	writeScript(`
+raise("some error")
+`)
+
+	if err := ds.Run(); err == nil || err.Error() != `ECAL error in eliasdb-runtime: some error () (Line:2 Pos:1)
+  raise("some error") (testscripts/main.ecal:2)` {
+		t.Error("Unexpected result:", err)
+		return
+	}
+
+	// Test db functions
+
 	writeScript(`
 db.storeNode("main", {
   "key" : "foo",
@@ -218,11 +234,27 @@ sink mysink
   kindmatch [ "db.*.*" ],
 {
   log("Got event: ", event)
-  if event.state.node.key == "foo2" {
-    raise("Oh no")
-  }
-  if event.state.node.key == "foo3" {
-    db.raiseGraphEventHandled()
+  if event.state["node"] != NULL {
+    if event.state.node.key == "foo2" {
+      raise("Oh no")
+    }
+    if event.state.node.key == "foo3" {
+      db.raiseGraphEventHandled()
+    }
+  } elif event.state["edge"] != NULL {
+    if event.state.edge.key == "foo2" {
+      raise("Oh no edge")
+    }
+    if event.state.edge.key == "foo3" and event.kind == "db.edge.created" {
+      raise("Oh no edge2")
+    }
+    if event.state.edge.key == "foo3" and event.kind == "db.edge.updated" {
+      raise("Oh no edge3")
+    }
+  } else {
+    if event.state.key == "foo3" {
+      db.raiseGraphEventHandled()
+    }
   }
 }
 `)
@@ -278,7 +310,7 @@ Got event: {
 	}))
 
 	if err == nil || err.Error() != `GraphError: Graph rule error (Taskerror:
-EliasDB: db.node.store -> mysink : ECAL error in eliasdb-runtime: Oh no () (Line:7 Pos:5))` {
+EliasDB: db.node.store -> mysink : ECAL error in eliasdb-runtime: Oh no () (Line:8 Pos:7))` {
 		t.Error("Unexpected result:", err)
 		return
 	}
@@ -288,6 +320,74 @@ EliasDB: db.node.store -> mysink : ECAL error in eliasdb-runtime: Oh no () (Line
 		return
 	}
 
+	err = gm.UpdateNode("main", data.NewGraphNodeFromMap(map[string]interface{}{
+		"key":  "foo",
+		"kind": "bar",
+		"data": 1234,
+	}))
+
+	if err != nil {
+		t.Error("Unexpected result:", err)
+		return
+	}
+
+	err = gm.StoreEdge("main", data.NewGraphEdgeFromNode(data.NewGraphNodeFromMap(map[string]interface{}{
+		"key":           "foo2",
+		"kind":          "e",
+		"end1cascading": true,
+		"end1key":       "a",
+		"end1kind":      "b",
+		"end1role":      "role1",
+		"end2cascading": false,
+		"end2key":       "c",
+		"end2kind":      "d",
+		"end2role":      "role2",
+	})))
+
+	if err == nil || err.Error() != `GraphError: Graph rule error (Taskerror:
+EliasDB: db.edge.store -> mysink : ECAL error in eliasdb-runtime: Oh no edge () (Line:15 Pos:7))` {
+		t.Error("Unexpected result:", err)
+		return
+	}
+
+	err = gm.StoreEdge("main", data.NewGraphEdgeFromNode(data.NewGraphNodeFromMap(map[string]interface{}{
+		"key":           "foo3",
+		"kind":          "e",
+		"end1cascading": true,
+		"end1key":       "foo",
+		"end1kind":      "bar",
+		"end1role":      "role1",
+		"end2cascading": false,
+		"end2key":       "foo",
+		"end2kind":      "bar",
+		"end2role":      "role2",
+	})))
+
+	if err == nil || err.Error() != `GraphError: Graph rule error (Taskerror:
+EliasDB: db.edge.created -> mysink : ECAL error in eliasdb-runtime: Oh no edge2 () (Line:18 Pos:7))` {
+		t.Error("Unexpected result:", err)
+		return
+	}
+
+	err = gm.StoreEdge("main", data.NewGraphEdgeFromNode(data.NewGraphNodeFromMap(map[string]interface{}{
+		"key":           "foo3",
+		"kind":          "e",
+		"end1cascading": true,
+		"end1key":       "foo",
+		"end1kind":      "bar",
+		"end1role":      "role1",
+		"end2cascading": false,
+		"end2key":       "foo",
+		"end2kind":      "bar",
+		"end2role":      "role2",
+	})))
+
+	if err == nil || err.Error() != `GraphError: Graph rule error (Taskerror:
+EliasDB: db.edge.updated -> mysink : ECAL error in eliasdb-runtime: Oh no edge3 () (Line:21 Pos:7))` {
+		t.Error("Unexpected result:", err)
+		return
+	}
+
 	// Test preventing node storage without raising an error
 
 	err = gm.StoreNode("main", data.NewGraphNodeFromMap(map[string]interface{}{
@@ -305,4 +405,22 @@ EliasDB: db.node.store -> mysink : ECAL error in eliasdb-runtime: Oh no () (Line
 		t.Error("Unexpected result:", res, err)
 		return
 	}
+
+	err = gm.UpdateNode("main", data.NewGraphNodeFromMap(map[string]interface{}{
+		"key":  "foo3",
+		"kind": "bar",
+		"data": 123,
+	}))
+
+	if err != nil {
+		t.Error("Unexpected result:", err)
+		return
+	}
+
+	_, err = gm.RemoveNode("main", "foo3", "bar")
+
+	if err != nil {
+		t.Error("Unexpected result:", err)
+		return
+	}
 }