summaryrefslogtreecommitdiff
path: root/test/monkey_driver.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/monkey_driver.py')
-rwxr-xr-xtest/monkey_driver.py253
1 files changed, 161 insertions, 92 deletions
diff --git a/test/monkey_driver.py b/test/monkey_driver.py
index 6b2451f37..18d915f40 100755
--- a/test/monkey_driver.py
+++ b/test/monkey_driver.py
@@ -20,10 +20,16 @@
runs tests in monkey as defined in a yaml file
"""
-import sys, getopt, yaml, time
+# pylint: disable=locally-disabled, missing-docstring
+
+import sys
+import getopt
+import time
+import yaml
from monkeyfarmer import Browser
+
class DriverBrowser(Browser):
def __init__(self, *args, **kwargs):
super(DriverBrowser, self).__init__(*args, **kwargs)
@@ -35,10 +41,12 @@ class DriverBrowser(Browser):
def remove_auth(self, url, realm, username, password):
keep = []
- def matches(a,b):
- if a is None or b is None:
+
+ def matches(first, second):
+ if first is None or second is None:
return True
- return a == b
+ return first == second
+
for (iurl, irealm, iusername, ipassword) in self.auth:
if not (matches(url, iurl) or
matches(realm, irealm) or
@@ -52,10 +60,10 @@ class DriverBrowser(Browser):
# We must logwin.send_{username,password}(xxx)
# We may logwin.go()
# We may logwin.destroy()
- def matches(a,b):
- if a is None or b is None:
+ def matches(first, second):
+ if first is None or second is None:
return True
- return a == b
+ return first == second
candidates = []
for (url, realm, username, password) in self.auth:
score = 0
@@ -84,20 +92,24 @@ class DriverBrowser(Browser):
def remove_cert(self, url):
keep = []
- def matches(a,b):
- if a is None or b is None:
+
+ def matches(first, second):
+ if first is None or second is None:
return True
- return a == b
+ return first == second
+
for iurl in self.cert:
- if not (matches(url, iurl)):
+ if not matches(url, iurl):
keep.append(iurl)
self.cert = keep
def handle_ready_sslcert(self, cwin):
- def matches(a,b):
- if a is None or b is None:
+
+ def matches(first, second):
+ if first is None or second is None:
return True
- return a == b
+ return first == second
+
candidates = []
for url in self.cert:
score = 0
@@ -114,16 +126,21 @@ class DriverBrowser(Browser):
print("SSLCert: No candidate found, cancelling sslcert box")
cwin.destroy()
+
def print_usage():
print('Usage:')
- print(' ' + sys.argv[0] + ' -m <path to monkey> -t <path to test>')
+ print(' ' + sys.argv[0] + ' -m <path to monkey> -t <path to test> [-w <wrapper arguments>]')
+
def parse_argv(argv):
+
+ # pylint: disable=locally-disabled, unused-variable
+
path_monkey = ''
path_test = ''
wrapper = None
try:
- opts, args = getopt.getopt(argv,"hm:t:w:",["monkey=","test=","wrapper="])
+ opts, args = getopt.getopt(argv, "hm:t:w:", ["monkey=", "test=", "wrapper="])
except getopt.GetoptError:
print_usage()
sys.exit(2)
@@ -149,24 +166,35 @@ def parse_argv(argv):
return path_monkey, path_test, wrapper
+
def load_test_plan(path):
+
+ # pylint: disable=locally-disabled, broad-except
+
plan = []
with open(path, 'r') as stream:
try:
plan = (yaml.load(stream))
- except:
- print (exc)
+ except Exception as exc:
+ print(exc)
return plan
+
def get_indent(ctx):
- return ' ' * ctx["depth"];
+ return ' ' * ctx["depth"]
+
def print_test_plan_info(ctx, plan):
+
+ # pylint: disable=locally-disabled, unused-argument
+
print('Running test: [' + plan["group"] + '] ' + plan["title"])
+
def assert_browser(ctx):
- assert(ctx['browser'].started)
- assert(not ctx['browser'].stopped)
+ assert ctx['browser'].started
+ assert not ctx['browser'].stopped
+
def conds_met(ctx, conds):
# for each condition listed determine if they have been met
@@ -176,14 +204,14 @@ def conds_met(ctx, conds):
timer = cond['timer']
elapsed = cond['elapsed']
assert_browser(ctx)
- assert(ctx['timers'].get(timer) is not None)
+ assert ctx['timers'].get(timer) is not None
taken = time.time() - ctx['timers'][timer]["start"]
- if (taken >= elapsed):
+ if taken >= elapsed:
return True
elif 'window' in cond.keys():
status = cond['status']
window = cond['window']
- assert(status == "complete") # TODO: Add more status support?
+ assert status == "complete" # TODO: Add more status support?
if window == "*all*":
# all windows must be not throbbing
throbbing = False
@@ -201,11 +229,15 @@ def conds_met(ctx, conds):
return False
+
def run_test_step_action_launch(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
- assert(ctx.get('browser') is None)
- assert(ctx.get('windows') is None)
- ctx['browser'] = DriverBrowser(monkey_cmd=[ctx["monkey"]], quiet=True, wrapper=ctx.get("wrapper"))
+ assert ctx.get('browser') is None
+ assert ctx.get('windows') is None
+ ctx['browser'] = DriverBrowser(
+ monkey_cmd=[ctx["monkey"]],
+ quiet=True,
+ wrapper=ctx.get("wrapper"))
assert_browser(ctx)
ctx['windows'] = dict()
for option in step.get('options', []):
@@ -214,21 +246,29 @@ def run_test_step_action_launch(ctx, step):
def run_test_step_action_window_new(ctx, step):
+
+ # pylint: disable=locally-disabled, invalid-name
+
print(get_indent(ctx) + "Action: " + step["action"])
tag = step['tag']
assert_browser(ctx)
- assert(ctx['windows'].get(tag) is None)
+ assert ctx['windows'].get(tag) is None
ctx['windows'][tag] = ctx['browser'].new_window(url=step.get('url'))
+
def run_test_step_action_window_close(ctx, step):
+
+ # pylint: disable=locally-disabled, invalid-name
+
print(get_indent(ctx) + "Action: " + step["action"])
assert_browser(ctx)
tag = step['window']
- assert(ctx['windows'].get(tag) is not None)
+ assert ctx['windows'].get(tag) is not None
win = ctx['windows'].pop(tag)
win.kill()
win.wait_until_dead()
- assert(win.alive == False)
+ assert not win.alive
+
def run_test_step_action_navigate(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
@@ -237,26 +277,28 @@ def run_test_step_action_navigate(ctx, step):
url = step['url']
elif 'repeaturl' in step.keys():
repeat = ctx['repeats'].get(step['repeaturl'])
- assert(repeat is not None)
- assert(repeat.get('values') is not None)
+ assert repeat is not None
+ assert repeat.get('values') is not None
url = repeat['values'][repeat['i']]
else:
url = None
- assert(url is not None)
+ assert url is not None
tag = step['window']
print(get_indent(ctx) + " " + tag + " --> " + url)
win = ctx['windows'].get(tag)
- assert(win is not None)
+ assert win is not None
win.go(url)
+
def run_test_step_action_stop(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
assert_browser(ctx)
tag = step['window']
win = ctx['windows'].get(tag)
- assert(win is not None)
+ assert win is not None
win.stop()
+
def run_test_step_action_sleep_ms(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
conds = step['conditions']
@@ -264,7 +306,7 @@ def run_test_step_action_sleep_ms(ctx, step):
sleep = 0
have_repeat = False
if isinstance(sleep_time, str):
- assert(ctx['repeats'].get(sleep_time) is not None)
+ assert ctx['repeats'].get(sleep_time) is not None
repeat = ctx['repeats'].get(sleep_time)
sleep = repeat["i"] / 1000
start = repeat["start"]
@@ -286,19 +328,21 @@ def run_test_step_action_sleep_ms(ctx, step):
else:
ctx['browser'].farmer.loop(once=True)
+
def run_test_step_action_block(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
conds = step['conditions']
assert_browser(ctx)
-
+
while not conds_met(ctx, conds):
ctx['browser'].farmer.loop(once=True)
+
def run_test_step_action_repeat(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
tag = step['tag']
- assert(ctx['repeats'].get(tag) is None)
- ctx['repeats'][tag] = { "loop": True, }
+ assert ctx['repeats'].get(tag) is None
+ ctx['repeats'][tag] = {"loop": True, }
if 'min' in step.keys():
ctx['repeats'][tag]["i"] = step["min"]
@@ -318,14 +362,15 @@ def run_test_step_action_repeat(ctx, step):
while ctx['repeats'][tag]["loop"]:
ctx['repeats'][tag]["start"] = time.time()
ctx["depth"] += 1
- for s in step["steps"]:
- run_test_step(ctx, s)
+ for stp in step["steps"]:
+ run_test_step(ctx, stp)
ctx['repeats'][tag]["i"] += ctx['repeats'][tag]["step"]
if ctx['repeats'][tag]['values'] is not None:
if ctx['repeats'][tag]["i"] >= len(ctx['repeats'][tag]['values']):
ctx['repeats'][tag]["loop"] = False
ctx["depth"] -= 1
+
def run_test_step_action_plot_check(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
assert_browser(ctx)
@@ -334,69 +379,83 @@ def run_test_step_action_plot_check(ctx, step):
checks = step['checks']
else:
checks = {}
- all_text = []
+ all_text_list = []
bitmaps = []
for plot in win.redraw():
if plot[0] == 'TEXT':
- all_text.extend(plot[6:])
+ all_text_list.extend(plot[6:])
if plot[0] == 'BITMAP':
bitmaps.append(plot[1:])
- all_text = " ".join(all_text)
+ all_text = " ".join(all_text_list)
for check in checks:
if 'text-contains' in check.keys():
- print("Check {} in {}".format(repr(check['text-contains']),repr(all_text)))
- assert(check['text-contains'] in all_text)
+ print("Check {} in {}".format(repr(check['text-contains']), repr(all_text)))
+ assert check['text-contains'] in all_text
elif 'text-not-contains' in check.keys():
- print("Check {} NOT in {}".format(repr(check['text-not-contains']),repr(all_text)))
- assert(check['text-not-contains'] not in all_text)
+ print("Check {} NOT in {}".format(repr(check['text-not-contains']), repr(all_text)))
+ assert check['text-not-contains'] not in all_text
elif 'bitmap-count' in check.keys():
print("Check bitmap count is {}".format(int(check['bitmap-count'])))
- assert(len(bitmaps) == int(check['bitmap-count']))
+ assert len(bitmaps) == int(check['bitmap-count'])
else:
raise AssertionError("Unknown check: {}".format(repr(check)))
+
def run_test_step_action_timer_start(ctx, step):
+
+ # pylint: disable=locally-disabled, invalid-name
+
print(get_indent(ctx) + "Action: " + step["action"])
tag = step['timer']
assert_browser(ctx)
- assert(ctx['timers'].get(tag) is None)
+ assert ctx['timers'].get(tag) is None
ctx['timers'][tag] = {}
ctx['timers'][tag]["start"] = time.time()
+
def run_test_step_action_timer_restart(ctx, step):
+
+ # pylint: disable=locally-disabled, invalid-name
+
print(get_indent(ctx) + "Action: " + step["action"])
timer = step['timer']
assert_browser(ctx)
- assert(ctx['timers'].get(timer) is not None)
+ assert ctx['timers'].get(timer) is not None
taken = time.time() - ctx['timers'][timer]["start"]
print("{} {} restarted at: {:.2f}s".format(get_indent(ctx), timer, taken))
ctx['timers'][timer]["taken"] = taken
ctx['timers'][timer]["start"] = time.time()
+
def run_test_step_action_timer_stop(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
timer = step['timer']
assert_browser(ctx)
- assert(ctx['timers'].get(timer) is not None)
+ assert ctx['timers'].get(timer) is not None
taken = time.time() - ctx['timers'][timer]["start"]
print("{} {} took: {:.2f}s".format(get_indent(ctx), timer, taken))
ctx['timers'][timer]["taken"] = taken
+
def run_test_step_action_timer_check(ctx, step):
+
+ # pylint: disable=locally-disabled, invalid-name
+
print(get_indent(ctx) + "Action: " + step["action"])
condition = step["condition"].split()
- assert(len(condition) == 3)
+ assert len(condition) == 3
timer1 = ctx['timers'].get(condition[0])
timer2 = ctx['timers'].get(condition[2])
- assert(timer1 is not None)
- assert(timer2 is not None)
- assert(timer1["taken"] is not None)
- assert(timer2["taken"] is not None)
- assert(condition[1] in ('<', '>'))
+ assert timer1 is not None
+ assert timer2 is not None
+ assert timer1["taken"] is not None
+ assert timer2["taken"] is not None
+ assert condition[1] in ('<', '>')
if condition[1] == '<':
- assert(timer1["taken"] < timer2["taken"])
+ assert timer1["taken"] < timer2["taken"]
elif condition[1] == '>':
- assert(timer1["taken"] > timer2["taken"])
+ assert timer1["taken"] > timer2["taken"]
+
def run_test_step_action_add_auth(ctx, step):
print(get_indent(ctx) + "Action:" + step["action"])
@@ -407,12 +466,16 @@ def run_test_step_action_add_auth(ctx, step):
def run_test_step_action_remove_auth(ctx, step):
+
+ # pylint: disable=locally-disabled, invalid-name
+
print(get_indent(ctx) + "Action:" + step["action"])
assert_browser(ctx)
browser = ctx['browser']
browser.remove_auth(step.get("url"), step.get("realm"),
step.get("username"), step.get("password"))
+
def run_test_step_action_add_cert(ctx, step):
print(get_indent(ctx) + "Action:" + step["action"])
assert_browser(ctx)
@@ -421,6 +484,9 @@ def run_test_step_action_add_cert(ctx, step):
def run_test_step_action_remove_cert(ctx, step):
+
+ # pylint: disable=locally-disabled, invalid-name
+
print(get_indent(ctx) + "Action:" + step["action"])
assert_browser(ctx)
browser = ctx['browser']
@@ -430,18 +496,16 @@ def run_test_step_action_remove_cert(ctx, step):
def run_test_step_action_clear_log(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
assert_browser(ctx)
- browser = ctx['browser']
tag = step['window']
print(get_indent(ctx) + " " + tag + " Log cleared")
win = ctx['windows'].get(tag)
- assert(win is not None)
+ assert win is not None
win.clear_log()
def run_test_step_action_wait_log(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
assert_browser(ctx)
- browser = ctx['browser']
tag = step['window']
source = step.get('source')
foldable = step.get('foldable')
@@ -449,19 +513,18 @@ def run_test_step_action_wait_log(ctx, step):
substr = step.get('substring')
print(get_indent(ctx) + " " + tag + " Wait for logging")
win = ctx['windows'].get(tag)
- assert(win is not None)
+ assert win is not None
win.wait_for_log(source=source, foldable=foldable, level=level, substr=substr)
def run_test_step_action_js_exec(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
assert_browser(ctx)
- browser = ctx['browser']
tag = step['window']
cmd = step['cmd']
print(get_indent(ctx) + " " + tag + " Run " + cmd)
win = ctx['windows'].get(tag)
- assert(win is not None)
+ assert win is not None
win.js_exec(cmd)
@@ -469,35 +532,37 @@ def run_test_step_action_quit(ctx, step):
print(get_indent(ctx) + "Action: " + step["action"])
assert_browser(ctx)
browser = ctx.pop('browser')
- windows = ctx.pop('windows')
- assert(browser.quit_and_wait())
-
-step_handlers = {
- "launch": run_test_step_action_launch,
- "window-new": run_test_step_action_window_new,
- "window-close": run_test_step_action_window_close,
- "navigate": run_test_step_action_navigate,
- "stop": run_test_step_action_stop,
- "sleep-ms": run_test_step_action_sleep_ms,
- "block": run_test_step_action_block,
- "repeat": run_test_step_action_repeat,
- "timer-start": run_test_step_action_timer_start,
- "timer-restart":run_test_step_action_timer_restart,
- "timer-stop": run_test_step_action_timer_stop,
- "timer-check": run_test_step_action_timer_check,
- "plot-check": run_test_step_action_plot_check,
- "add-auth": run_test_step_action_add_auth,
- "remove-auth": run_test_step_action_remove_auth,
- "add-cert": run_test_step_action_add_cert,
- "remove-cert": run_test_step_action_remove_cert,
- "clear-log": run_test_step_action_clear_log,
- "wait-log": run_test_step_action_wait_log,
- "js-exec": run_test_step_action_js_exec,
- "quit": run_test_step_action_quit,
+ assert browser.quit_and_wait()
+
+
+STEP_HANDLERS = {
+ "launch": run_test_step_action_launch,
+ "window-new": run_test_step_action_window_new,
+ "window-close": run_test_step_action_window_close,
+ "navigate": run_test_step_action_navigate,
+ "stop": run_test_step_action_stop,
+ "sleep-ms": run_test_step_action_sleep_ms,
+ "block": run_test_step_action_block,
+ "repeat": run_test_step_action_repeat,
+ "timer-start": run_test_step_action_timer_start,
+ "timer-restart": run_test_step_action_timer_restart,
+ "timer-stop": run_test_step_action_timer_stop,
+ "timer-check": run_test_step_action_timer_check,
+ "plot-check": run_test_step_action_plot_check,
+ "add-auth": run_test_step_action_add_auth,
+ "remove-auth": run_test_step_action_remove_auth,
+ "add-cert": run_test_step_action_add_cert,
+ "remove-cert": run_test_step_action_remove_cert,
+ "clear-log": run_test_step_action_clear_log,
+ "wait-log": run_test_step_action_wait_log,
+ "js-exec": run_test_step_action_js_exec,
+ "quit": run_test_step_action_quit,
}
+
def run_test_step(ctx, step):
- step_handlers[step["action"]](ctx, step)
+ STEP_HANDLERS[step["action"]](ctx, step)
+
def walk_test_plan(ctx, plan):
ctx["depth"] = 0
@@ -506,16 +571,19 @@ def walk_test_plan(ctx, plan):
for step in plan["steps"]:
run_test_step(ctx, step)
+
def run_test_plan(ctx, plan):
print_test_plan_info(ctx, plan)
walk_test_plan(ctx, plan)
+
def run_preloaded_test(path_monkey, plan):
ctx = {
"monkey": path_monkey,
}
run_test_plan(ctx, plan)
+
def main(argv):
ctx = {}
path_monkey, path_test, wrapper = parse_argv(argv)
@@ -524,6 +592,7 @@ def main(argv):
ctx["wrapper"] = wrapper
run_test_plan(ctx, plan)
+
# Some python weirdness to get to main().
if __name__ == "__main__":
main(sys.argv[1:])