summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2012-05-13 22:20:34 +0100
committerDaniel Silverstone <dsilvers@digital-scurf.org>2012-05-13 22:20:34 +0100
commit222c7e0fdab6e5e1cf1bcebeb33ffc4e57b134e1 (patch)
tree4dbc17cbf13a17b6920ab3df8f20b9cfd12822e8
parent6953187e38de249a6581dcef50140ec0759c2f58 (diff)
downloadlace-222c7e0fdab6e5e1cf1bcebeb33ffc4e57b134e1.tar.gz
Full engine test with define rules and allows with conditions. Also tests default behaviour for conditional rulesets
-rw-r--r--test/test-lace.engine-allowwithdefine.rules5
-rw-r--r--test/test-lace.engine-allowwithdefineused.rules5
-rw-r--r--test/test-lace.engine-plainallow.rules3
-rw-r--r--test/test-lace.engine.lua82
4 files changed, 84 insertions, 11 deletions
diff --git a/test/test-lace.engine-allowwithdefine.rules b/test/test-lace.engine-allowwithdefine.rules
new file mode 100644
index 0000000..9f32c5f
--- /dev/null
+++ b/test/test-lace.engine-allowwithdefine.rules
@@ -0,0 +1,5 @@
+-- Simple unconditional allow, but with a define present
+
+define is_ok equal this that
+
+allow because
diff --git a/test/test-lace.engine-allowwithdefineused.rules b/test/test-lace.engine-allowwithdefineused.rules
new file mode 100644
index 0000000..1a49348
--- /dev/null
+++ b/test/test-lace.engine-allowwithdefineused.rules
@@ -0,0 +1,5 @@
+-- Simple conditional allow with a define present and used
+
+define is_ok equal this that
+
+allow because is_ok
diff --git a/test/test-lace.engine-plainallow.rules b/test/test-lace.engine-plainallow.rules
new file mode 100644
index 0000000..81bb488
--- /dev/null
+++ b/test/test-lace.engine-plainallow.rules
@@ -0,0 +1,3 @@
+-- Simple allow
+
+allow because
diff --git a/test/test-lace.engine.lua b/test/test-lace.engine.lua
index a063c2e..7273a2b 100644
--- a/test/test-lace.engine.lua
+++ b/test/test-lace.engine.lua
@@ -13,6 +13,8 @@ local luacov = require 'luacov'
local lace = require 'lace'
+local sio = require 'luxio.simple'
+
local testnames = {}
local function add_test(suite, name, value)
@@ -63,21 +65,12 @@ function suite.check_can_test_known_functions()
assert(ctx.ran, "Context was not passed properly")
end
-function suite.check_empty_ruleset_fails()
- local compctx = {[".lace"]={}}
- local ruleset, msg = lace.compiler.compile(compctx, "src", "")
- assert(type(ruleset) == "table", "Could not compile empty ruleset")
- local execctx = {}
- local result, msg = lace.engine.run(ruleset, execctx)
- assert(result == false, "Empty failure returns false")
-end
-
function suite.check_bad_exec_fn_returns_nil()
local function _explode()
return { fn = function() error("EXPLODE") end, args = {} }
end
local compctx = {[".lace"]={commands={explode=_explode}}}
- local ruleset, msg = lace.compiler.compile(compctx, "src", "explode")
+ local ruleset, msg = lace.compiler.compile(compctx, "src", "explode\nallow because")
assert(type(ruleset) == "table", "Could not compile exploding ruleset")
local execctx = {}
local result, msg = lace.engine.run(ruleset, execctx)
@@ -90,7 +83,7 @@ function suite.check_error_propagates()
return { fn = function() return false, "EXPLODE" end, args = {} }
end
local compctx = {[".lace"]={commands={explode=_explode}}}
- local ruleset, msg = lace.compiler.compile(compctx, "src", "explode")
+ local ruleset, msg = lace.compiler.compile(compctx, "src", "explode\nallow because")
assert(type(ruleset) == "table", "Could not compile exploding ruleset")
local execctx = {}
local result, msg = lace.engine.run(ruleset, execctx)
@@ -108,6 +101,73 @@ function suite.check_deny_works()
assert(msg:match("everything"), "Expected reason not detected")
end
+-- More complete engine tests from here
+
+local comp_context = {
+ [".lace"] = {
+ loader = function(ctx, name)
+ if name == "THROW_ERROR" then
+ error("THROWN")
+ end
+ local fh, msg = sio.open("test/test-lace.engine-" .. name .. ".rules", "r")
+ if not fh then
+ return compiler.error("LOADER: Unknown: " .. name, {1})
+ end
+ local content = fh:read("*a")
+ fh:close()
+ return "real-" .. name, content
+ end,
+ commands = {
+ },
+ controltype = {
+ equal = function(ctx, eq, key, value)
+ return {
+ fn = function(ectx, ekey, evalue)
+ return ectx[ekey] == evalue
+ end,
+ args = { key, value },
+ }
+ end,
+ },
+ },
+}
+
+function suite.test_plainallow_works()
+ local ruleset, msg = lace.compiler.compile(comp_context, "plainallow")
+ assert(type(ruleset) == "table", "Ruleset did not compile")
+ local ectx = {}
+ local result, msg = lace.engine.run(ruleset, ectx)
+ assert(result == "allow", "Should allow")
+ assert(msg == "because", "Because")
+end
+
+function suite.test_allow_with_define_works()
+ local ruleset, msg = lace.compiler.compile(comp_context, "allowwithdefine")
+ assert(type(ruleset) == "table", "Ruleset did not compile")
+ local ectx = {}
+ local result, msg = lace.engine.run(ruleset, ectx)
+ assert(result == "allow", "Should allow")
+ assert(msg == "because", "Because")
+end
+
+function suite.test_allow_with_define_used_works()
+ local ruleset, msg = lace.compiler.compile(comp_context, "allowwithdefineused")
+ assert(type(ruleset) == "table", "Ruleset did not compile")
+ local ectx = {}
+ local result, msg = lace.engine.run(ruleset, ectx)
+ assert(result == "deny", "Should deny")
+ assert(msg == "Default behaviour", "Because allow failed")
+end
+
+function suite.test_allow_with_define_used_works_and_passes()
+ local ruleset, msg = lace.compiler.compile(comp_context, "allowwithdefineused")
+ assert(type(ruleset) == "table", "Ruleset did not compile")
+ local ectx = {this="that"}
+ local result, msg = lace.engine.run(ruleset, ectx)
+ assert(result == "allow", "Should allow")
+ assert(msg == "because", "Because")
+end
+
local count_ok = 0
for _, testname in ipairs(testnames) do
print("Run: " .. testname)