From 222c7e0fdab6e5e1cf1bcebeb33ffc4e57b134e1 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sun, 13 May 2012 22:20:34 +0100 Subject: Full engine test with define rules and allows with conditions. Also tests default behaviour for conditional rulesets --- test/test-lace.engine-allowwithdefine.rules | 5 ++ test/test-lace.engine-allowwithdefineused.rules | 5 ++ test/test-lace.engine-plainallow.rules | 3 + test/test-lace.engine.lua | 82 +++++++++++++++++++++---- 4 files changed, 84 insertions(+), 11 deletions(-) create mode 100644 test/test-lace.engine-allowwithdefine.rules create mode 100644 test/test-lace.engine-allowwithdefineused.rules create mode 100644 test/test-lace.engine-plainallow.rules 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) -- cgit v1.2.1