diff --git a/test/unit/tc_jools.rb b/test/unit/tc_jools.rb new file mode 100644 index 000000000..8924172aa --- /dev/null +++ b/test/unit/tc_jools.rb @@ -0,0 +1,114 @@ +# +# Copyright (c) 2006-2013 Wade Alcorn - wade@bindshell.net +# Browser Exploitation Framework (BeEF) - http://beefproject.com +# See the file 'doc/COPYING' for copying permission +# +require 'test/unit' +require '../common/test_constants' +require '../common/beef_test' + +class TC_Jools < Test::Unit::TestCase + @@victim = BeefTest.new_victim + + #test jools can be acces and a new object can be instantiated + def test_jools_exists + @@victim = BeefTest.new_victim + script = "return require('jools');" + jools = @@victim.execute_script(script) + assert_not_nil jools + script = "var Jools = require('jools'); + return new Jools([]);" + jools_obj = @@victim.execute_script(script) + assert_not_nil jools_obj + end + + #test simple jools rule example + def test_jools_simple + @@victim = BeefTest.new_victim + script = " var Jools = require('jools'); + var rules = [{ + 'name':'Lights on after 8pm', + 'condition': function(hour){ + return hour >= 8; + }, + 'consequence': function(){ + this.state = 'on'; + } + }]; + var fact = { + 'hour':8, + 'minute':21 + }; + var j = new Jools(rules); + var result = j.execute(fact); + return result.state;" + result = @@victim.execute_script(script) + assert_equal result,'on' + end + + #test jools chaining example + def test_jools_chaning + @@victim = BeefTest.new_victim + script = " var Jools = require('jools'); + var rules = [ + {'name':'frog is green', + 'condition': function(animal){ + return animal == 'frog'; + }, + 'consequence': function(){ + this.color = 'green'; + }}, + {'name':'canary is yellow', + 'condition': function(animal){ + return animal == 'canary'; + }, + 'consequence': function(){ + this.color = 'yellow'; + }}, + {'name':'croaks and eats flies', + 'condition' : function(eats){ + return eats && eats.indexOf('croaks') >= 0 && eats.indexOf('flies') >=0; + }, + 'consequence': function(){ + this.animal = 'frog'; + }}, + {'name':'chirps and sings', + 'condition' : function(does){ + return does && does.indexOf('chirps') >= 0 && does.indexOf('sings') >=0; + }, + 'consequence': function(){ + this.animal = 'canary'; + }} + ]; + var fact_1 = { + 'name':'fritz', + 'eats': ['croaks','flies'] + }; + var fact_2 = { + 'name':'fritz', + 'eats': ['croaks','rocks'] + }; + var fact_3 = { + 'name':'tweety', + 'does': ['sings','chirps'] + }; + var fact_4 = { + 'name':'tweety', + 'does': ['chrips','howls'] + }; + + var j = new Jools(rules); + var results = []; + results.push(j.execute(fact_1)); + results.push(j.execute(fact_2)); + results.push(j.execute(fact_3)); + results.push(j.execute(fact_4)); + return results;" + results = @@victim.execute_script(script) + assert_not_nil results + assert_equal results[0]['color'],'green' + assert_not_equal results[1]['color'], 'green' + assert_equal results[2]['color'],'yellow' + assert_not_equal results[3]['color'], 'yellow' + end +end diff --git a/test/unit/ts_unit.rb b/test/unit/ts_unit.rb index 109e99ba6..0c86a0aec 100644 --- a/test/unit/ts_unit.rb +++ b/test/unit/ts_unit.rb @@ -28,6 +28,7 @@ require './extensions/tc_requester' require './extensions/tc_event_logger' require './tc_grep' require './tc_filesystem' +require './tc_jools' class TS_BeefTests def self.suite @@ -53,6 +54,7 @@ class TS_BeefTests suite << TC_Hackverter.suite suite << TC_EventLogger.suite suite << TC_Hooks.suite + suite << TC_Jools.suite return suite end