Apply clang-format for more source files (#795)
Apply clang-format for C source files in folder core/app-mgr, core/app-framework, and test-tools. And rename folder component_test to component-test, update zephyr build document. Signed-off-by: Wenyong Huang <wenyong.huang@intel.com>
This commit is contained in:
@ -0,0 +1,94 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
import sys
|
||||
import time
|
||||
import random
|
||||
import logging
|
||||
import json
|
||||
|
||||
from framework.case_base import *
|
||||
from framework.test_api import *
|
||||
from harness.harness_api import *
|
||||
|
||||
class CTestCase(CTestCaseBase):
|
||||
def __init__(self, suite):
|
||||
CTestCaseBase.__init__(self, suite)
|
||||
|
||||
def get_case_name(self):
|
||||
case_path = os.path.dirname(os.path.abspath( __file__ ))
|
||||
return os.path.split(case_path)[1]
|
||||
|
||||
def on_get_case_description(self):
|
||||
return "startup the executables"
|
||||
|
||||
def on_setup_case(self):
|
||||
os.chdir(self.get_case_name())
|
||||
start_env()
|
||||
api_log_error("on_setup_case OK")
|
||||
return True, ''
|
||||
|
||||
def on_cleanup_case(self):
|
||||
stop_env()
|
||||
api_log_error("on_cleanup_case OK")
|
||||
return True, ''
|
||||
|
||||
# called by the framework
|
||||
def on_run_case(self):
|
||||
time.sleep(0.5)
|
||||
|
||||
#uninstall inexistent App1
|
||||
ret = uninstall_app("App1")
|
||||
if (ret != 160):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps([])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#install App1
|
||||
ret = install_app("App1", "01_install.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#install App2
|
||||
ret = install_app("App2", "01_install.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1","App2"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#uninstall App2
|
||||
ret = uninstall_app("App2")
|
||||
if (ret != 66):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
return True, ''
|
||||
@ -0,0 +1,73 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
import sys
|
||||
import time
|
||||
import random
|
||||
import logging
|
||||
import json
|
||||
|
||||
from framework.case_base import *
|
||||
from framework.test_api import *
|
||||
from harness.harness_api import *
|
||||
|
||||
class CTestCase(CTestCaseBase):
|
||||
def __init__(self, suite):
|
||||
CTestCaseBase.__init__(self, suite)
|
||||
|
||||
def get_case_name(self):
|
||||
case_path = os.path.dirname(os.path.abspath( __file__ ))
|
||||
return os.path.split(case_path)[1]
|
||||
|
||||
def on_get_case_description(self):
|
||||
return "startup the executables"
|
||||
|
||||
def on_setup_case(self):
|
||||
os.chdir(self.get_case_name())
|
||||
start_env()
|
||||
api_log_error("on_setup_case OK")
|
||||
return True, ''
|
||||
|
||||
def on_cleanup_case(self):
|
||||
stop_env()
|
||||
api_log_error("on_cleanup_case OK")
|
||||
return True, ''
|
||||
|
||||
# called by the framework
|
||||
def on_run_case(self):
|
||||
time.sleep(0.5)
|
||||
|
||||
#install App1
|
||||
ret = install_app("App1", "02_request.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#send request to App1
|
||||
ret = send_request("/res1", "GET", None)
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
expect_response_payload = {"key1":"value1","key2":"value2"}
|
||||
ret = check_response_payload(expect_response_payload)
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#send request to App1
|
||||
ret = send_request("/res2", "DELETE", None)
|
||||
if (ret != 66):
|
||||
return False, ''
|
||||
expect_response_payload = {}
|
||||
ret = check_response_payload(expect_response_payload)
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
return True, ''
|
||||
@ -0,0 +1,67 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
import sys
|
||||
import time
|
||||
import random
|
||||
import logging
|
||||
import json
|
||||
|
||||
from framework.case_base import *
|
||||
from framework.test_api import *
|
||||
from harness.harness_api import *
|
||||
|
||||
class CTestCase(CTestCaseBase):
|
||||
def __init__(self, suite):
|
||||
CTestCaseBase.__init__(self, suite)
|
||||
|
||||
def get_case_name(self):
|
||||
case_path = os.path.dirname(os.path.abspath( __file__ ))
|
||||
return os.path.split(case_path)[1]
|
||||
|
||||
def on_get_case_description(self):
|
||||
return "startup the executables"
|
||||
|
||||
def on_setup_case(self):
|
||||
os.chdir(self.get_case_name())
|
||||
start_env()
|
||||
api_log_error("on_setup_case OK")
|
||||
return True, ''
|
||||
|
||||
def on_cleanup_case(self):
|
||||
stop_env()
|
||||
api_log_error("on_cleanup_case OK")
|
||||
return True, ''
|
||||
|
||||
# called by the framework
|
||||
def on_run_case(self):
|
||||
time.sleep(0.5)
|
||||
|
||||
#install App1
|
||||
ret = install_app("App1", "03_event.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#register event
|
||||
ret = register("/alert/overheat", 2000, 5000)
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_get_event()
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#deregister event
|
||||
ret = deregister("/alert/overheat")
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
|
||||
return True, ''
|
||||
@ -0,0 +1,80 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
import sys
|
||||
import time
|
||||
import random
|
||||
import logging
|
||||
import json
|
||||
|
||||
from framework.case_base import *
|
||||
from framework.test_api import *
|
||||
from harness.harness_api import *
|
||||
|
||||
class CTestCase(CTestCaseBase):
|
||||
def __init__(self, suite):
|
||||
CTestCaseBase.__init__(self, suite)
|
||||
|
||||
def get_case_name(self):
|
||||
case_path = os.path.dirname(os.path.abspath( __file__ ))
|
||||
return os.path.split(case_path)[1]
|
||||
|
||||
def on_get_case_description(self):
|
||||
return "startup the executables"
|
||||
|
||||
def on_setup_case(self):
|
||||
os.chdir(self.get_case_name())
|
||||
start_env()
|
||||
api_log_error("on_setup_case OK")
|
||||
return True, ''
|
||||
|
||||
def on_cleanup_case(self):
|
||||
stop_env()
|
||||
api_log_error("on_cleanup_case OK")
|
||||
return True, ''
|
||||
|
||||
# called by the framework
|
||||
def on_run_case(self):
|
||||
time.sleep(0.5)
|
||||
|
||||
#install App1
|
||||
ret = install_app("App1", "04_request_internal_resp.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#install App2
|
||||
ret = install_app("App2", "04_request_internal_req.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1","App2"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#send request to App2
|
||||
ret = send_request("/res1", "GET", None)
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
time.sleep(2)
|
||||
expect_response_payload = {"key1":"value1","key2":"value2"}
|
||||
ret = check_response_payload(expect_response_payload)
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#send request to App2
|
||||
ret = send_request("/res2", "GET", None)
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
time.sleep(2)
|
||||
expect_response_payload = {"key1":"value1","key2":"value2"}
|
||||
ret = check_response_payload(expect_response_payload)
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
return True, ''
|
||||
@ -0,0 +1,70 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
import sys
|
||||
import time
|
||||
import random
|
||||
import logging
|
||||
import json
|
||||
|
||||
from framework.case_base import *
|
||||
from framework.test_api import *
|
||||
from harness.harness_api import *
|
||||
|
||||
class CTestCase(CTestCaseBase):
|
||||
def __init__(self, suite):
|
||||
CTestCaseBase.__init__(self, suite)
|
||||
|
||||
def get_case_name(self):
|
||||
case_path = os.path.dirname(os.path.abspath( __file__ ))
|
||||
return os.path.split(case_path)[1]
|
||||
|
||||
def on_get_case_description(self):
|
||||
return "startup the executables"
|
||||
|
||||
def on_setup_case(self):
|
||||
os.chdir(self.get_case_name())
|
||||
start_env()
|
||||
api_log_error("on_setup_case OK")
|
||||
return True, ''
|
||||
|
||||
def on_cleanup_case(self):
|
||||
stop_env()
|
||||
api_log_error("on_cleanup_case OK")
|
||||
return True, ''
|
||||
|
||||
# called by the framework
|
||||
def on_run_case(self):
|
||||
time.sleep(0.5)
|
||||
|
||||
#install App1
|
||||
ret = install_app("App1", "05_event_internal_provider.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#install App2
|
||||
ret = install_app("App2", "05_event_internal_subscriber.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1","App2"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#send request to App2
|
||||
ret = send_request("/res1", "GET", None)
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
time.sleep(2)
|
||||
expect_response_payload = {"key1":"value1","key2":"value2"}
|
||||
ret = check_response_payload(expect_response_payload)
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
return True, ''
|
||||
@ -0,0 +1,70 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
import sys
|
||||
import time
|
||||
import random
|
||||
import logging
|
||||
import json
|
||||
|
||||
from framework.case_base import *
|
||||
from framework.test_api import *
|
||||
from harness.harness_api import *
|
||||
|
||||
class CTestCase(CTestCaseBase):
|
||||
def __init__(self, suite):
|
||||
CTestCaseBase.__init__(self, suite)
|
||||
|
||||
def get_case_name(self):
|
||||
case_path = os.path.dirname(os.path.abspath( __file__ ))
|
||||
return os.path.split(case_path)[1]
|
||||
|
||||
def on_get_case_description(self):
|
||||
return "startup the executables"
|
||||
|
||||
def on_setup_case(self):
|
||||
os.chdir(self.get_case_name())
|
||||
start_env()
|
||||
api_log_error("on_setup_case OK")
|
||||
return True, ''
|
||||
|
||||
def on_cleanup_case(self):
|
||||
stop_env()
|
||||
api_log_error("on_cleanup_case OK")
|
||||
return True, ''
|
||||
|
||||
# called by the framework
|
||||
def on_run_case(self):
|
||||
time.sleep(0.5)
|
||||
|
||||
#install App1
|
||||
ret = install_app("App1", "06_timer.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#send request to App1
|
||||
ret = send_request("/res1", "GET", None)
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
|
||||
time.sleep(3)
|
||||
|
||||
ret = send_request("/check_timer", "GET", None)
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
expect_response_payload = {"num":2}
|
||||
ret = check_response_payload(expect_response_payload)
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
return True, ''
|
||||
@ -0,0 +1,65 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
import sys
|
||||
import time
|
||||
import random
|
||||
import logging
|
||||
import json
|
||||
|
||||
from framework.case_base import *
|
||||
from framework.test_api import *
|
||||
from harness.harness_api import *
|
||||
|
||||
class CTestCase(CTestCaseBase):
|
||||
def __init__(self, suite):
|
||||
CTestCaseBase.__init__(self, suite)
|
||||
|
||||
def get_case_name(self):
|
||||
case_path = os.path.dirname(os.path.abspath( __file__ ))
|
||||
return os.path.split(case_path)[1]
|
||||
|
||||
def on_get_case_description(self):
|
||||
return "startup the executables"
|
||||
|
||||
def on_setup_case(self):
|
||||
os.chdir(self.get_case_name())
|
||||
start_env()
|
||||
api_log_error("on_setup_case OK")
|
||||
return True, ''
|
||||
|
||||
def on_cleanup_case(self):
|
||||
stop_env()
|
||||
api_log_error("on_cleanup_case OK")
|
||||
return True, ''
|
||||
|
||||
# called by the framework
|
||||
def on_run_case(self):
|
||||
time.sleep(0.5)
|
||||
|
||||
#install App1
|
||||
ret = install_app("App1", "07_sensor.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#send request to App1
|
||||
ret = send_request("/res1", "GET", None)
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
time.sleep(2)
|
||||
expect_response_payload = {"key1":"value1","key2":"value2"}
|
||||
ret = check_response_payload(expect_response_payload)
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
return True, ''
|
||||
@ -0,0 +1,78 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
import sys
|
||||
import time
|
||||
import random
|
||||
import logging
|
||||
import json
|
||||
|
||||
from framework.case_base import *
|
||||
from framework.test_api import *
|
||||
from harness.harness_api import *
|
||||
|
||||
class CTestCase(CTestCaseBase):
|
||||
def __init__(self, suite):
|
||||
CTestCaseBase.__init__(self, suite)
|
||||
|
||||
def get_case_name(self):
|
||||
case_path = os.path.dirname(os.path.abspath( __file__ ))
|
||||
return os.path.split(case_path)[1]
|
||||
|
||||
def on_get_case_description(self):
|
||||
return "startup the executables"
|
||||
|
||||
def on_setup_case(self):
|
||||
os.chdir(self.get_case_name())
|
||||
start_env()
|
||||
api_log_error("on_setup_case OK")
|
||||
return True, ''
|
||||
|
||||
def on_cleanup_case(self):
|
||||
stop_env()
|
||||
api_log_error("on_cleanup_case OK")
|
||||
return True, ''
|
||||
|
||||
# called by the framework
|
||||
def on_run_case(self):
|
||||
time.sleep(0.5)
|
||||
|
||||
#install App1
|
||||
ret = install_app("App1", "08_on_destroy.wasm")
|
||||
if (ret != 65):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps(["App1"])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#send request to App1
|
||||
ret = send_request("/res1", "GET", None)
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
time.sleep(2)
|
||||
expect_response_payload = {"key1":"value1"}
|
||||
ret = check_response_payload(expect_response_payload)
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
#uninstall App1
|
||||
ret = uninstall_app("App1")
|
||||
if (ret != 66):
|
||||
return False, ''
|
||||
|
||||
#query Apps
|
||||
ret = query_app()
|
||||
if (ret != 69):
|
||||
return False, ''
|
||||
ret = check_query_apps([])
|
||||
if (ret == False):
|
||||
return False, ''
|
||||
|
||||
return True, ''
|
||||
@ -0,0 +1,56 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import types
|
||||
import time
|
||||
import glob
|
||||
|
||||
from framework.test_api import *
|
||||
from framework.test_utils import *
|
||||
from harness.harness_api import *
|
||||
from framework.suite import *
|
||||
|
||||
class CTestSuite(CTestSuiteBase):
|
||||
setup_path = ""
|
||||
def __init__(self, name, suite_path, run_path):
|
||||
CTestSuiteBase.__init__(self, name, suite_path, run_path)
|
||||
|
||||
def on_suite_setup(self):
|
||||
global setup_path
|
||||
setup_path = os.getcwd()
|
||||
cases = os.listdir(self.suite_path + "/cases/")
|
||||
cases.sort()
|
||||
|
||||
if api_get_value("rebuild", False):
|
||||
path_tmp = os.getcwd()
|
||||
os.chdir(self.suite_path + "/test-app")
|
||||
os.system(self.suite_path + "/test-app" + "/build.sh")
|
||||
os.chdir(path_tmp)
|
||||
|
||||
os.makedirs(self.run_path + "/test-app")
|
||||
|
||||
for case in cases:
|
||||
if case != "__init__.pyc" and case != "__init__.py":
|
||||
os.makedirs(self.run_path + "/" + case)
|
||||
#copy each case's host_tool, simple, wasm files, start/stop scripts to the run directory,
|
||||
shutil.copy(setup_path + "/../../samples/simple/out/simple", self.run_path + "/" + case)
|
||||
shutil.copy(setup_path + "/../../samples/simple/out/host_tool", self.run_path + "/" + case)
|
||||
for file in glob.glob(self.suite_path + "/test-app/" + "/*.wasm"):
|
||||
shutil.copy(file, self.run_path + "/test-app")
|
||||
shutil.copy(self.suite_path + "/tools/product/start.sh", self.run_path + "/" + case)
|
||||
shutil.copy(self.suite_path + "/tools/product/stop.sh", self.run_path + "/" + case)
|
||||
|
||||
os.chdir(self.run_path)
|
||||
|
||||
return True, 'OK'
|
||||
|
||||
def on_suite_cleanup(self):
|
||||
global setup_path
|
||||
os.chdir(setup_path)
|
||||
api_log("stopping env..")
|
||||
|
||||
return True, 'OK'
|
||||
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
printf("Hello, I was installed.\n");
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
/* real destroy work including killing timer and closing sensor is
|
||||
* accomplished in wasm app library version of on_destroy() */
|
||||
}
|
||||
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
#include "wa-inc/request.h"
|
||||
|
||||
void
|
||||
res1_handler(request_t *request)
|
||||
{
|
||||
response_t response[1];
|
||||
attr_container_t *payload;
|
||||
|
||||
printf("### user resource 1 handler called\n");
|
||||
|
||||
printf("###### dump request ######\n");
|
||||
printf("sender: %lu\n", request->sender);
|
||||
printf("url: %s\n", request->url);
|
||||
printf("action: %d\n", request->action);
|
||||
printf("payload:\n");
|
||||
if (request->payload != NULL && request->payload_len > 0
|
||||
&& request->fmt == FMT_ATTR_CONTAINER)
|
||||
attr_container_dump((attr_container_t *)request->payload);
|
||||
printf("#### dump request end ###\n");
|
||||
|
||||
payload = attr_container_create("wasm app response payload");
|
||||
if (payload == NULL)
|
||||
return;
|
||||
|
||||
attr_container_set_string(&payload, "key1", "value1");
|
||||
attr_container_set_string(&payload, "key2", "value2");
|
||||
|
||||
make_response_for_request(request, response);
|
||||
set_response(response, CONTENT_2_05, FMT_ATTR_CONTAINER,
|
||||
(const char *)payload,
|
||||
attr_container_get_serialize_length(payload));
|
||||
printf("reciver: %lu, mid:%d\n", response->reciever, response->mid);
|
||||
api_response_send(response);
|
||||
|
||||
attr_container_destroy(payload);
|
||||
}
|
||||
|
||||
void
|
||||
res2_handler(request_t *request)
|
||||
{
|
||||
response_t response[1];
|
||||
make_response_for_request(request, response);
|
||||
set_response(response, DELETED_2_02, 0, NULL, 0);
|
||||
api_response_send(response);
|
||||
|
||||
printf("### user resource 2 handler called\n");
|
||||
}
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
/* register resource uri */
|
||||
api_register_resource_handler("/res1", res1_handler);
|
||||
api_register_resource_handler("/res2", res2_handler);
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
/* real destroy work including killing timer and closing sensor is
|
||||
* accomplished in wasm app library version of on_destroy() */
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
#include "wa-inc/timer_wasm_app.h"
|
||||
#include "wa-inc/request.h"
|
||||
|
||||
int num = 0;
|
||||
|
||||
void
|
||||
publish_overheat_event()
|
||||
{
|
||||
attr_container_t *event;
|
||||
|
||||
event = attr_container_create("event");
|
||||
attr_container_set_string(&event, "warning", "temperature is over high");
|
||||
|
||||
printf("###app publish event begin ###\n");
|
||||
|
||||
api_publish_event("alert/overheat", FMT_ATTR_CONTAINER, event,
|
||||
attr_container_get_serialize_length(event));
|
||||
|
||||
printf("###app publish event end ###\n");
|
||||
|
||||
attr_container_destroy(event);
|
||||
}
|
||||
|
||||
/* Timer callback */
|
||||
void
|
||||
timer1_update(user_timer_t timer)
|
||||
{
|
||||
printf("Timer update %d\n", num++);
|
||||
publish_overheat_event();
|
||||
}
|
||||
|
||||
void
|
||||
start_timer()
|
||||
{
|
||||
user_timer_t timer;
|
||||
|
||||
/* set up a timer */
|
||||
timer = api_timer_create(1000, true, false, timer1_update);
|
||||
api_timer_restart(timer, 1000);
|
||||
}
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
start_timer();
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
/* real destroy work including killing timer and closing sensor is
|
||||
* accomplished in wasm app library version of on_destroy() */
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
#include "wa-inc/request.h"
|
||||
|
||||
uint32 mid;
|
||||
unsigned long sender;
|
||||
|
||||
void
|
||||
my_response_handler(response_t *response, void *user_data)
|
||||
{
|
||||
attr_container_t *payload;
|
||||
printf("### user resource 1 handler called\n");
|
||||
|
||||
payload = attr_container_create("wasm app response payload");
|
||||
if (payload == NULL)
|
||||
return;
|
||||
|
||||
attr_container_set_string(&payload, "key1", "value1");
|
||||
attr_container_set_string(&payload, "key2", "value2");
|
||||
|
||||
response->mid = mid;
|
||||
response->reciever = sender;
|
||||
set_response(response, CONTENT_2_05, FMT_ATTR_CONTAINER,
|
||||
(const char *)payload,
|
||||
attr_container_get_serialize_length(payload));
|
||||
printf("reciver: %lu, mid:%d\n", response->reciever, response->mid);
|
||||
api_response_send(response);
|
||||
|
||||
attr_container_destroy(payload);
|
||||
}
|
||||
|
||||
static void
|
||||
test_send_request(const char *url, const char *tag)
|
||||
{
|
||||
request_t request[1];
|
||||
|
||||
init_request(request, (char *)url, COAP_PUT, 0, NULL, 0);
|
||||
api_send_request(request, my_response_handler, (void *)tag);
|
||||
}
|
||||
|
||||
void
|
||||
res1_handler(request_t *request)
|
||||
{
|
||||
mid = request->mid;
|
||||
sender = request->sender;
|
||||
test_send_request("url1", "a general request");
|
||||
}
|
||||
|
||||
void
|
||||
res2_handler(request_t *request)
|
||||
{
|
||||
mid = request->mid;
|
||||
sender = request->sender;
|
||||
test_send_request("/app/App1/url1", "a general request");
|
||||
}
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
/* register resource uri */
|
||||
api_register_resource_handler("/res1", res1_handler);
|
||||
api_register_resource_handler("/res2", res2_handler);
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
/* real destroy work including killing timer and closing sensor is
|
||||
* accomplished in wasm app library version of on_destroy() */
|
||||
}
|
||||
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
#include "wa-inc/request.h"
|
||||
|
||||
void
|
||||
res1_handler(request_t *request)
|
||||
{
|
||||
response_t response[1];
|
||||
attr_container_t *payload;
|
||||
|
||||
printf("[resp] ### user resource 1 handler called\n");
|
||||
|
||||
printf("[resp] ###### dump request ######\n");
|
||||
printf("[resp] sender: %lu\n", request->sender);
|
||||
printf("[resp] url: %s\n", request->url);
|
||||
printf("[resp] action: %d\n", request->action);
|
||||
printf("[resp] payload:\n");
|
||||
if (request->payload != NULL && request->fmt == FMT_ATTR_CONTAINER)
|
||||
attr_container_dump((attr_container_t *)request->payload);
|
||||
printf("[resp] #### dump request end ###\n");
|
||||
|
||||
payload = attr_container_create("wasm app response payload");
|
||||
if (payload == NULL)
|
||||
return;
|
||||
|
||||
attr_container_set_string(&payload, "key1", "value1");
|
||||
attr_container_set_string(&payload, "key2", "value2");
|
||||
|
||||
make_response_for_request(request, response);
|
||||
set_response(response, CONTENT_2_05, FMT_ATTR_CONTAINER,
|
||||
(const char *)payload,
|
||||
attr_container_get_serialize_length(payload));
|
||||
printf("[resp] response payload len %d\n",
|
||||
attr_container_get_serialize_length(payload));
|
||||
printf("[resp] reciver: %lu, mid:%d\n", response->reciever, response->mid);
|
||||
api_response_send(response);
|
||||
|
||||
attr_container_destroy(payload);
|
||||
}
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
/* register resource uri */
|
||||
api_register_resource_handler("/url1", res1_handler);
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
/* real destroy work including killing timer and closing sensor is
|
||||
* accomplished in wasm app library version of on_destroy() */
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
#include "wa-inc/timer_wasm_app.h"
|
||||
#include "wa-inc/request.h"
|
||||
|
||||
int num = 0;
|
||||
|
||||
void
|
||||
publish_overheat_event()
|
||||
{
|
||||
attr_container_t *event;
|
||||
|
||||
event = attr_container_create("event");
|
||||
attr_container_set_string(&event, "warning", "temperature is over high");
|
||||
|
||||
printf("###app publish event begin ###\n");
|
||||
|
||||
api_publish_event("alert/overheat", FMT_ATTR_CONTAINER, event,
|
||||
attr_container_get_serialize_length(event));
|
||||
|
||||
printf("###app publish event end ###\n");
|
||||
|
||||
attr_container_destroy(event);
|
||||
}
|
||||
|
||||
/* Timer callback */
|
||||
void
|
||||
timer1_update(user_timer_t timer)
|
||||
{
|
||||
printf("Timer update %d\n", num++);
|
||||
publish_overheat_event();
|
||||
}
|
||||
|
||||
void
|
||||
start_timer()
|
||||
{
|
||||
user_timer_t timer;
|
||||
|
||||
/* set up a timer */
|
||||
timer = api_timer_create(1000, true, false, timer1_update);
|
||||
api_timer_restart(timer, 1000);
|
||||
}
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
start_timer();
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
/* real destroy work including killing timer and closing sensor is
|
||||
* accomplished in wasm app library version of on_destroy() */
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
#include "wa-inc/request.h"
|
||||
|
||||
uint32 mid;
|
||||
unsigned long sender;
|
||||
|
||||
void
|
||||
over_heat_event_handler(request_t *request)
|
||||
{
|
||||
response_t response[1];
|
||||
attr_container_t *payload;
|
||||
|
||||
payload = attr_container_create("wasm app response payload");
|
||||
if (payload == NULL)
|
||||
return;
|
||||
|
||||
attr_container_set_string(&payload, "key1", "value1");
|
||||
attr_container_set_string(&payload, "key2", "value2");
|
||||
|
||||
response->mid = mid;
|
||||
response->reciever = sender;
|
||||
set_response(response, CONTENT_2_05, FMT_ATTR_CONTAINER,
|
||||
(const char *)payload,
|
||||
attr_container_get_serialize_length(payload));
|
||||
printf("reciver: %lu, mid:%d\n", response->reciever, response->mid);
|
||||
api_response_send(response);
|
||||
|
||||
attr_container_destroy(payload);
|
||||
}
|
||||
|
||||
void
|
||||
res1_handler(request_t *request)
|
||||
{
|
||||
mid = request->mid;
|
||||
sender = request->sender;
|
||||
api_subscribe_event("alert/overheat", over_heat_event_handler);
|
||||
}
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
/* register resource uri */
|
||||
api_register_resource_handler("/res1", res1_handler);
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
/* real destroy work including killing timer and closing sensor is
|
||||
* accomplished in wasm app library version of on_destroy() */
|
||||
}
|
||||
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
#include "wa-inc/request.h"
|
||||
#include "wa-inc/timer_wasm_app.h"
|
||||
|
||||
/* User global variable */
|
||||
int num = 0;
|
||||
|
||||
/* Timer callback */
|
||||
void
|
||||
timer1_update(user_timer_t timer)
|
||||
{
|
||||
if (num < 2)
|
||||
num++;
|
||||
}
|
||||
|
||||
void
|
||||
res1_handler(request_t *request)
|
||||
{
|
||||
user_timer_t timer;
|
||||
|
||||
/* set up a timer */
|
||||
timer = api_timer_create(1000, true, false, timer1_update);
|
||||
api_timer_restart(timer, 1000);
|
||||
|
||||
response_t response[1];
|
||||
|
||||
make_response_for_request(request, response);
|
||||
|
||||
set_response(response, CONTENT_2_05, FMT_ATTR_CONTAINER, NULL, 0);
|
||||
|
||||
api_response_send(response);
|
||||
}
|
||||
|
||||
void
|
||||
res2_handler(request_t *request)
|
||||
{
|
||||
response_t response[1];
|
||||
attr_container_t *payload;
|
||||
|
||||
if (num == 2) {
|
||||
attr_container_t *payload;
|
||||
printf("### user resource 1 handler called\n");
|
||||
|
||||
payload = attr_container_create("wasm app response payload");
|
||||
if (payload == NULL)
|
||||
return;
|
||||
|
||||
attr_container_set_int(&payload, "num", num);
|
||||
|
||||
make_response_for_request(request, response);
|
||||
|
||||
set_response(response, CONTENT_2_05, FMT_ATTR_CONTAINER,
|
||||
(const char *)payload,
|
||||
attr_container_get_serialize_length(payload));
|
||||
printf("reciver: %lu, mid:%d\n", response->reciever, response->mid);
|
||||
api_response_send(response);
|
||||
|
||||
attr_container_destroy(payload);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
/* register resource uri */
|
||||
api_register_resource_handler("/res1", res1_handler);
|
||||
api_register_resource_handler("/check_timer", res2_handler);
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
/* real destroy work including killing timer and closing sensor is
|
||||
* accomplished in wasm app library version of on_destroy() */
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
#include "wa-inc/request.h"
|
||||
#include "wa-inc/sensor.h"
|
||||
|
||||
uint32 mid;
|
||||
unsigned long sender;
|
||||
|
||||
/* Sensor event callback*/
|
||||
void
|
||||
sensor_event_handler(sensor_t sensor, attr_container_t *event, void *user_data)
|
||||
{
|
||||
printf("### app get sensor event\n");
|
||||
|
||||
response_t response[1];
|
||||
attr_container_t *payload;
|
||||
|
||||
payload = attr_container_create("wasm app response payload");
|
||||
if (payload == NULL)
|
||||
return;
|
||||
|
||||
attr_container_set_string(&payload, "key1", "value1");
|
||||
attr_container_set_string(&payload, "key2", "value2");
|
||||
|
||||
response->mid = mid;
|
||||
response->reciever = sender;
|
||||
set_response(response, CONTENT_2_05, FMT_ATTR_CONTAINER,
|
||||
(const char *)payload,
|
||||
attr_container_get_serialize_length(payload));
|
||||
printf("reciver: %lu, mid:%d\n", response->reciever, response->mid);
|
||||
api_response_send(response);
|
||||
|
||||
attr_container_destroy(payload);
|
||||
}
|
||||
|
||||
void
|
||||
res1_handler(request_t *request)
|
||||
{
|
||||
mid = request->mid;
|
||||
sender = request->sender;
|
||||
|
||||
sensor_t sensor;
|
||||
char *user_data;
|
||||
attr_container_t *config;
|
||||
|
||||
printf("### app on_init 1\n");
|
||||
/* open a sensor */
|
||||
user_data = malloc(100);
|
||||
printf("### app on_init 2\n");
|
||||
sensor = sensor_open("sensor_test", 0, sensor_event_handler, user_data);
|
||||
printf("### app on_init 3\n");
|
||||
|
||||
/* config the sensor */
|
||||
sensor_config(sensor, 2000, 0, 0);
|
||||
printf("### app on_init 4\n");
|
||||
}
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
/* register resource uri */
|
||||
api_register_resource_handler("/res1", res1_handler);
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
/* real destroy work including killing timer and closing sensor is
|
||||
* accomplished in wasm app library version of on_destroy() */
|
||||
}
|
||||
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
#include "wasm_app.h"
|
||||
#include "wa-inc/request.h"
|
||||
#include "wa-inc/sensor.h"
|
||||
|
||||
uint32 mid;
|
||||
unsigned long sender;
|
||||
sensor_t sensor;
|
||||
|
||||
/* Sensor event callback*/
|
||||
void
|
||||
sensor_event_handler(sensor_t sensor, attr_container_t *event, void *user_data)
|
||||
{
|
||||
printf("### app get sensor event\n");
|
||||
|
||||
response_t response[1];
|
||||
attr_container_t *payload;
|
||||
|
||||
payload = attr_container_create("wasm app response payload");
|
||||
if (payload == NULL)
|
||||
return;
|
||||
|
||||
attr_container_set_string(&payload, "key1", "value1");
|
||||
|
||||
response->mid = mid;
|
||||
response->reciever = sender;
|
||||
set_response(response, CONTENT_2_05, FMT_ATTR_CONTAINER,
|
||||
(const char *)payload,
|
||||
attr_container_get_serialize_length(payload));
|
||||
printf("reciver: %lu, mid:%d\n", response->reciever, response->mid);
|
||||
api_response_send(response);
|
||||
|
||||
attr_container_destroy(payload);
|
||||
}
|
||||
|
||||
void
|
||||
res1_handler(request_t *request)
|
||||
{
|
||||
mid = request->mid;
|
||||
sender = request->sender;
|
||||
|
||||
char *user_data;
|
||||
attr_container_t *config;
|
||||
|
||||
printf("### app on_init 1\n");
|
||||
/* open a sensor */
|
||||
user_data = malloc(100);
|
||||
printf("### app on_init 2\n");
|
||||
sensor = sensor_open("sensor_test", 0, sensor_event_handler, user_data);
|
||||
printf("### app on_init 3\n");
|
||||
}
|
||||
|
||||
void
|
||||
on_init()
|
||||
{
|
||||
/* register resource uri */
|
||||
api_register_resource_handler("/res1", res1_handler);
|
||||
}
|
||||
|
||||
void
|
||||
on_destroy()
|
||||
{
|
||||
if (NULL != sensor) {
|
||||
sensor_close(sensor);
|
||||
}
|
||||
}
|
||||
39
test-tools/component-test/suites/01-life-cycle/test-app/build.sh
Executable file
39
test-tools/component-test/suites/01-life-cycle/test-app/build.sh
Executable file
@ -0,0 +1,39 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
. ../../../set_dev_env.sh
|
||||
|
||||
CC=/opt/wasi-sdk/bin/clang
|
||||
APP_DIR=$PWD
|
||||
WAMR_DIR=${APP_DIR}/../../../../../
|
||||
SDK_DIR=${WAMR_DIR}/wamr-sdk/out/simple-host-interp
|
||||
APP_FRAMEWORK_DIR=${SDK_DIR}/app-sdk/wamr-app-framework
|
||||
DEPS_DIR=${WAMR_DIR}/core/deps
|
||||
|
||||
for i in `ls *.c`
|
||||
do
|
||||
APP_SRC="$i"
|
||||
OUT_FILE=${i%.*}.wasm
|
||||
/opt/wasi-sdk/bin/clang -O3 \
|
||||
-Wno-int-conversion \
|
||||
-I${APP_FRAMEWORK_DIR}/include \
|
||||
-I${DEPS_DIR} \
|
||||
-O3 -z stack-size=4096 -Wl,--initial-memory=65536 \
|
||||
--sysroot=${SDK_DIR}/app-sdk/libc-builtin-sysroot \
|
||||
-L${APP_FRAMEWORK_DIR}/lib -lapp_framework \
|
||||
-Wl,--allow-undefined-file=${SDK_DIR}/app-sdk/libc-builtin-sysroot/share/defined-symbols.txt \
|
||||
-Wl,--strip-all,--no-entry -nostdlib \
|
||||
-Wl,--export=on_init -Wl,--export=on_destroy \
|
||||
-Wl,--export=on_request -Wl,--export=on_response \
|
||||
-Wl,--export=on_sensor_event -Wl,--export=on_timer_callback \
|
||||
-Wl,--export=on_connection_data \
|
||||
-o ${OUT_FILE} \
|
||||
${APP_SRC}
|
||||
if [ -f ${OUT_FILE} ]; then
|
||||
echo "build ${OUT_FILE} success"
|
||||
else
|
||||
echo "build ${OUT_FILE} fail"
|
||||
fi
|
||||
done
|
||||
10
test-tools/component-test/suites/01-life-cycle/tools/product/start.sh
Executable file
10
test-tools/component-test/suites/01-life-cycle/tools/product/start.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
cd $(dirname "$0")
|
||||
|
||||
./simple -s > /dev/null 2>&1 &
|
||||
9
test-tools/component-test/suites/01-life-cycle/tools/product/stop.sh
Executable file
9
test-tools/component-test/suites/01-life-cycle/tools/product/stop.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#
|
||||
# Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
#
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
ps aux | grep -ie host_tool | awk '{print $2}' | xargs kill -9 &
|
||||
ps aux | grep -ie simple | awk '{print $2}' | xargs kill -9 &
|
||||
0
test-tools/component-test/suites/__init__.py
Normal file
0
test-tools/component-test/suites/__init__.py
Normal file
19
test-tools/component-test/suites/readme.txt
Normal file
19
test-tools/component-test/suites/readme.txt
Normal file
@ -0,0 +1,19 @@
|
||||
The description of each case in the test suites, should add descriptions in this file when new cases created in the future.
|
||||
|
||||
suite 01-life-cycle:
|
||||
case 01-install:
|
||||
install or uninstall apps for times and query apps to see if the app list is expected.
|
||||
case 02-request:
|
||||
send request to an app, the app will respond specific attribute objects, host side should get them.
|
||||
case 03-event:
|
||||
register event to an app, the app will send event back periodically, host side should get some payload.
|
||||
case 04-request_internal:
|
||||
install 2 apps, host sends request to app2, then app2 sends request to app1, finally app1 respond specific payload to host, host side will check it.
|
||||
case 05-event_internal:
|
||||
install 2 apps, host sends request to app2, then app2 subscribe app1's event, finally app1 respond specific payload to host, host side will check it.
|
||||
case 06-timer:
|
||||
host send request to an app, the app then start a timer, when time goes by 2 seconds, app will respond specific payload to host, host side will check it.
|
||||
case 07-sensor:
|
||||
open sensor in app and then config the sensor in on_init, finally app will respond specific payload to host, host side will check it.
|
||||
case 08-on_destroy:
|
||||
open sensor in app in on_init, and close the sensor in on_destroy, host should install and uninstall the app successfully.
|
||||
Reference in New Issue
Block a user