diff options
Diffstat (limited to '')
-rwxr-xr-x | fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/samples/simple/sample_test_run.py | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/samples/simple/sample_test_run.py b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/samples/simple/sample_test_run.py new file mode 100755 index 000000000..09c36db5e --- /dev/null +++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/samples/simple/sample_test_run.py @@ -0,0 +1,224 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 Intel Corporation. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# + +import argparse +import shlex +import subprocess +import sys +import time +import traceback +import glob + +WAMRC_CMD = "../../wamr-compiler/build/wamrc" + +def compile_wasm_files_to_aot(wasm_apps_dir): + wasm_files = glob.glob(wasm_apps_dir + "/*.wasm") + print("Compile wasm app into aot files") + for wasm_file in wasm_files: + aot_file = wasm_file[0 : len(wasm_file) - 5] + ".aot"; + cmd = [ WAMRC_CMD, "-o", aot_file, wasm_file ] + subprocess.check_call(cmd) + +def start_server(cwd): + """ + Startup the 'simple' process works in TCP server mode + """ + app_server = subprocess.Popen(shlex.split("./simple -s "), cwd=cwd) + return app_server + + +def query_installed_application(cwd): + """ + Query all installed applications + """ + qry_prc = subprocess.run( + shlex.split("./host_tool -q"), cwd=cwd, check=False, capture_output=True + ) + assert qry_prc.returncode == 69 + return qry_prc.returncode, qry_prc.stdout + + +def install_wasm_application(wasm_name, wasm_file, cwd): + """ + Install a wasm application + """ + inst_prc = subprocess.run( + shlex.split(f"./host_tool -i {wasm_name} -f {wasm_file}"), + cwd=cwd, + check=False, + capture_output=True, + ) + assert inst_prc.returncode == 65 + return inst_prc.returncode, inst_prc.stdout + + +def uninstall_wasm_application(wasm_name, cwd): + """ + Uninstall a wasm application + """ + + unst_prc = subprocess.run( + shlex.split(f"./host_tool -u {wasm_name}"), + cwd=cwd, + check=False, + capture_output=True, + ) + assert unst_prc.returncode == 66 + return unst_prc.returncode, unst_prc.stdout + + +def send_get_to_wasm_application(wasm_name, url, cwd): + """ + send a request (GET) from host to an applicaton + """ + qry_prc = subprocess.run( + shlex.split(f"./host_tool -r /app/{wasm_name}{url} -A GET"), + cwd=cwd, + check=False, + capture_output=True, + ) + assert qry_prc.returncode == 69 + return qry_prc.returncode, qry_prc.stdout + + +def main(): + """ + GO!GO!!GO!!! + """ + parser = argparse.ArgumentParser(description="run the sample and examine outputs") + parser.add_argument("working_directory", type=str) + parser.add_argument("--aot", action='store_true', help="Test with AOT") + args = parser.parse_args() + + test_aot = False + suffix = ".wasm" + if not args.aot: + print("Test with interpreter mode") + else: + print("Test with AOT mode") + test_aot = True + suffix = ".aot" + wasm_apps_dir = args.working_directory + "/wasm-apps" + compile_wasm_files_to_aot(wasm_apps_dir) + + ret = 1 + app_server = None + try: + app_server = start_server(args.working_directory) + + # wait for a second + time.sleep(1) + + print("--> Install timer" + suffix + "...") + install_wasm_application( + "timer", "./wasm-apps/timer" + suffix, args.working_directory + ) + + # wait for a second + time.sleep(3) + + print("--> Query all installed applications...") + query_installed_application(args.working_directory) + + print("--> Install event_publisher" + suffix + "...") + install_wasm_application( + "event_publisher", + "./wasm-apps/event_publisher" + suffix, + args.working_directory, + ) + + print("--> Install event_subscriber" + suffix + "...") + install_wasm_application( + "event_subscriber", + "./wasm-apps/event_subscriber" + suffix, + args.working_directory, + ) + + print("--> Query all installed applications...") + query_installed_application(args.working_directory) + + print("--> Uninstall timer" + suffix + "...") + uninstall_wasm_application("timer", args.working_directory) + + print("--> Query all installed applications...") + query_installed_application(args.working_directory) + + print("--> Uninstall event_publisher" + suffix + "...") + uninstall_wasm_application( + "event_publisher", + args.working_directory, + ) + + print("--> Uninstall event_subscriber" + suffix + "...") + uninstall_wasm_application( + "event_subscriber", + args.working_directory, + ) + + print("--> Query all installed applications...") + query_installed_application(args.working_directory) + + print("--> Install request_handler" + suffix + "...") + install_wasm_application( + "request_handler", + "./wasm-apps/request_handler" + suffix, + args.working_directory, + ) + + print("--> Query again...") + query_installed_application(args.working_directory) + + print("--> Install request_sender" + suffix + "...") + install_wasm_application( + "request_sender", + "./wasm-apps/request_sender" + suffix, + args.working_directory, + ) + + print("--> Send GET to the Wasm application named request_handler...") + send_get_to_wasm_application("request_handler", "/url1", args.working_directory) + + print("--> Uninstall request_handler" + suffix + "...") + uninstall_wasm_application( + "request_handler", + args.working_directory, + ) + + print("--> Uninstall request_sender" + suffix + "...") + uninstall_wasm_application( + "request_sender", + args.working_directory, + ) + + # Install a wasm app named "__exit_app_manager__" just to make app manager exit + # while the wasm app is uninstalled, so as to collect the code coverage data. + # Only available when collecting code coverage is enabled. + print("--> Install timer" + suffix + "...") + install_wasm_application( + "__exit_app_manager__", "./wasm-apps/timer" + suffix, args.working_directory + ) + + print("--> Uninstall timer" + suffix + "...") + uninstall_wasm_application( + "__exit_app_manager__", + args.working_directory, + ) + + # wait for a second + time.sleep(1) + + print("--> All pass") + ret = 0 + except AssertionError: + traceback.print_exc() + finally: + app_server.kill() + + return ret + + +if __name__ == "__main__": + sys.exit(main()) |