diff options
author | Vincent Sanders <vince@kyllikki.org> | 2019-07-04 22:44:58 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2019-07-04 22:44:58 +0100 |
commit | ccf336bb4a46c5d66eb1b50a532db059b9c4fc8e (patch) | |
tree | 4d9f986087365f22b1fd42a42b9cf3c2386d60fa /test/monkey_driver.py | |
parent | e01bbee4056786d08fbaf8f347fa17033a8f3e62 (diff) | |
download | netsurf-ccf336bb4a46c5d66eb1b50a532db059b9c4fc8e.tar.gz netsurf-ccf336bb4a46c5d66eb1b50a532db059b9c4fc8e.tar.bz2 |
make monkey driver and farmer python files pylint and pep8 clean
Diffstat (limited to 'test/monkey_driver.py')
-rwxr-xr-x | test/monkey_driver.py | 253 |
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:]) |