wasm-micro-runtime/samples/simple/sample_test_run.py
Wenyong Huang 289fc5efbf
Enhance/Fix sample socket-api and workload (#2006)
- Add python script to test socket-api cases
- Fix issues in socket-api send_recv wasm app
- Fix issues in building samples/workload/meshoptimizer
- Enhance build script of sample workload
2023-03-08 16:36:08 +08:00

225 lines
6.4 KiB
Python
Executable File

#!/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())