summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2018-11-03 16:33:19 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2018-11-03 16:33:19 +0000
commit7eacd9a626ef0ac690868af07dcbb7ed05792aa9 (patch)
treeb02b235e041ccc8e6d04b43388edcb5fa9bdb535
parent6fcb0d498f8f5c39a94a8d0c79e425b480c272bc (diff)
downloadnetsurf-tlsa/monkey-driver.tar.gz
netsurf-tlsa/monkey-driver.tar.bz2
Monkey driver: Initial loader for monkey test plans.tlsa/monkey-driver
-rwxr-xr-xtest/monkey-driver.py119
-rw-r--r--test/monkey-tests/cache-test.yaml35
-rw-r--r--test/monkey-tests/quit-mid-fetch.yaml22
3 files changed, 176 insertions, 0 deletions
diff --git a/test/monkey-driver.py b/test/monkey-driver.py
new file mode 100755
index 000000000..25c6422f4
--- /dev/null
+++ b/test/monkey-driver.py
@@ -0,0 +1,119 @@
+#!/usr/bin/python3
+
+import sys, getopt, yaml
+
+def print_usage():
+ print('Usage:')
+ print(' ' + sys.argv[0] + ' -m <path to monkey> -t <path to test>')
+
+def parse_argv(argv):
+ path_monkey = ''
+ path_test = ''
+ try:
+ opts, args = getopt.getopt(argv,"hm:t:",["monkey=","test="])
+ except getopt.GetoptError:
+ print_usage()
+ sys.exit(2)
+ for opt, arg in opts:
+ if opt == '-h':
+ print_usage()
+ sys.exit()
+ elif opt in ("-m", "--monkey"):
+ path_monkey = arg
+ elif opt in ("-t", "--test"):
+ path_test = arg
+
+ if path_monkey == '':
+ print_usage()
+ sys.exit()
+ if path_test == '':
+ print_usage()
+ sys.exit()
+
+ return path_monkey, path_test
+
+def load_test_plan(path):
+ plan = []
+ with open(path, 'r') as stream:
+ try:
+ plan = (yaml.load(stream))
+ except:
+ print (exc)
+ return plan
+
+def get_indent(ctx):
+ return ' ' * ctx["depth"];
+
+def print_test_plan_info(ctx, plan):
+ print('Running test: [' + plan["group"] + '] ' + plan["title"])
+
+def run_test_step_action_launch(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+def run_test_step_action_window_new(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+def run_test_step_action_window_close(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+def run_test_step_action_navigate(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+def run_test_step_action_sleep_ms(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+def run_test_step_action_block(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+def run_test_step_action_repeat(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+ ctx["depth"] += 1
+ for step in step["steps"]:
+ run_test_step(ctx, step)
+ ctx["depth"] -= 1
+
+def run_test_step_action_timer_start(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+def run_test_step_action_timer_stop(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+def run_test_step_action_timer_check(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+def run_test_step_action_quit(ctx, step):
+ print(get_indent(ctx) + "Action: " + step["action"])
+
+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,
+ "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-stop": run_test_step_action_timer_stop,
+ "timer-check": run_test_step_action_timer_check,
+ "quit": run_test_step_action_quit,
+}
+
+def run_test_step(ctx, step):
+ step_handlers[step["action"]](ctx, step)
+
+def walk_test_plan(ctx, plan):
+ ctx["depth"] = 0
+ for step in plan["steps"]:
+ run_test_step(ctx, step)
+
+
+def main(argv):
+ ctx = {}
+ path_monkey, path_test = parse_argv(argv)
+ plan = load_test_plan(path_test)
+ print_test_plan_info(ctx, plan)
+ walk_test_plan(ctx, plan)
+
+# Some python weirdness to get to main().
+if __name__ == "__main__":
+ main(sys.argv[1:]) \ No newline at end of file
diff --git a/test/monkey-tests/cache-test.yaml b/test/monkey-tests/cache-test.yaml
new file mode 100644
index 000000000..d8c4571df
--- /dev/null
+++ b/test/monkey-tests/cache-test.yaml
@@ -0,0 +1,35 @@
+title: cache test
+group: performance
+steps:
+- action: launch
+ language: en
+- action: timer-start
+ tag: timer1
+- action: window-new
+ tag: win1
+- action: navigate
+ window: win1
+ url: http://www.bbc.co.uk/news
+- action: block
+ conditions:
+ - window: win1
+ status: complete
+- action: timer-stop
+ timer: timer1
+- action: timer-start
+ tag: timer2
+- action: window-new
+ tag: win2
+- action: navigate
+ window: win2
+ url: http://www.bbc.co.uk/news
+- action: block
+ conditions:
+ - window: win2
+ status: complete
+- action: timer-stop
+ timer: timer2
+- action: timer-check
+ condition: timer2 < timer1
+- action: quit
+
diff --git a/test/monkey-tests/quit-mid-fetch.yaml b/test/monkey-tests/quit-mid-fetch.yaml
new file mode 100644
index 000000000..b033f67b6
--- /dev/null
+++ b/test/monkey-tests/quit-mid-fetch.yaml
@@ -0,0 +1,22 @@
+title: quitting mid-fetch
+group: cleanup
+steps:
+- action: repeat
+ min: 0
+ step: 50
+ name: sleepytimer
+ steps:
+ - action: launch
+ - action: window-new
+ tag: win1
+ - action: navigate
+ window: win1
+ url: http://www.bbc.co.uk/news
+ - action: sleep-ms
+ time: sleepytimer
+ conditions:
+ - window: win1
+ status: complete
+ breaks: sleepytimer
+ - action: quit
+