mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-05-13 21:21:22 +00:00
227 lines
6.5 KiB
Python
Executable File
227 lines
6.5 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
|
|
|
|
WAMRC_CMD = "../../wamr-compiler/build/wamrc"
|
|
|
|
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_files = [ "timer", "sensor", "connection",
|
|
"event_publisher", "event_subscriber",
|
|
"request_handler", "request_sender" ]
|
|
work_dir = args.working_directory
|
|
wasm_apps_dir = work_dir + "/wasm-apps"
|
|
print("Compile wasm app into aot files")
|
|
for wasm_file in wasm_files:
|
|
CMD = []
|
|
CMD.append(WAMRC_CMD)
|
|
CMD.append("-o")
|
|
CMD.append(wasm_apps_dir + "/" + wasm_file + ".aot")
|
|
CMD.append(wasm_apps_dir + "/" + wasm_file + ".wasm")
|
|
subprocess.check_call(CMD)
|
|
|
|
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())
|