diff --git a/communication/BUILD.gn b/communication/BUILD.gn
index 22bf565297f4402cce0a9ac690790d57b09e84fa..70cfc42ce40c446153cb916b267f363a0dc8c1d8 100644
--- a/communication/BUILD.gn
+++ b/communication/BUILD.gn
@@ -23,6 +23,7 @@ group("communication") {
"bluetooth_standard:ActsBluetoothJsTest",
"bluetooth_switchoff:ActsBluetoothSwitchTest",
"dsoftbus/rpc:ActsRpcJsTest",
+ "dsoftbus/rpc_request:ActsRpcRequestJsTest",
"nfc_Controller:ActsNFCJSTest",
"nfc_ErrorCode:ActsNFCErrorJSTest",
"wifi_ErrorCode201:ActsErrorcode201Test",
diff --git a/communication/dsoftbus/rpc_request/BUILD.gn b/communication/dsoftbus/rpc_request/BUILD.gn
new file mode 100644
index 0000000000000000000000000000000000000000..fb7d9a3f4f5d22afa0f0f3e3a93be22f1a28ca0d
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/BUILD.gn
@@ -0,0 +1,35 @@
+# Copyright (C) 2023 Huawei Device Co., Ltd.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+import("//test/xts/tools/build/suite.gni")
+
+ohos_js_hap_suite("ActsRpcRequestJsTest") {
+ hap_profile = "./src/main/config.json"
+ deps = [
+ ":rpc_js_assets",
+ ":rpc_js_resources",
+ ]
+
+ certificate_profile = "./signature/openharmony_sx.p7b"
+ hap_name = "ActsRpcRequestHapTest"
+ subsystem_name = "communication"
+ part_name = "ipc"
+}
+ohos_js_assets("rpc_js_assets") {
+ js2abc = true
+ hap_profile = "./src/main/config.json"
+ source_dir = "./src/main/js"
+}
+ohos_resources("rpc_js_resources") {
+ sources = [ "./src/main/resources" ]
+ hap_profile = "./src/main/config.json"
+}
diff --git a/communication/dsoftbus/rpc_request/Test.json b/communication/dsoftbus/rpc_request/Test.json
new file mode 100644
index 0000000000000000000000000000000000000000..bf5a550434dca28042e80c9dc0679905006cd6e1
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/Test.json
@@ -0,0 +1,25 @@
+{
+ "description": "Configuration for rpc Tests",
+ "driver": {
+ "type": "OHJSUnitTest",
+ "test-timeout": "600000",
+ "shell-timeout": "600000",
+ "testcase-timeout": 60000,
+ "bundle-name":"com.ohos.rpcrequesttest",
+ "package-name": "com.ohos.rpcrequesttest"
+
+ },
+ "kits": [
+ {
+ "test-file-name": [
+ "ActsRpcRequestHapTest.hap"
+ ],
+ "type": "AppInstallKit",
+ "cleanup-apps": true
+ }
+ ]
+
+
+
+
+}
diff --git a/communication/dsoftbus/rpc_request/signature/openharmony_sx.p7b b/communication/dsoftbus/rpc_request/signature/openharmony_sx.p7b
new file mode 100644
index 0000000000000000000000000000000000000000..d2cf87614a3f1cf2efc144faee99f5712035a313
Binary files /dev/null and b/communication/dsoftbus/rpc_request/signature/openharmony_sx.p7b differ
diff --git a/communication/dsoftbus/rpc_request/src/main/config.json b/communication/dsoftbus/rpc_request/src/main/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..e665be5b395cbf09427242f8d706752004ffe758
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/config.json
@@ -0,0 +1,107 @@
+{
+ "app": {
+ "bundleName": "com.ohos.rpcrequesttest",
+ "vendor": "example",
+ "version": {
+ "code": 1000000,
+ "name": "1.0.0"
+ },
+ "apiVersion": {
+ "compatible": 4,
+ "target": 5
+ }
+ },
+ "deviceConfig": {},
+ "module": {
+
+ "reqPermissions": [
+ {
+ "name": "ohos.permission.DISTRIBUTED_DATASYNC"
+ },
+ {
+ "name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"
+ },
+ {
+ "name": "ohos.permission.GET_BUNDLE_INFO"
+ }
+ ],
+ "package": "com.ohos.rpcrequesttest",
+ "name": "com.ohos.rpcrequesttest.MyApplication",
+ "mainAbility": ".MainAbility",
+ "srcPath": "",
+ "deviceType": [
+ "tablet",
+ "default",
+ "phone"
+ ],
+ "distro": {
+ "deliveryWithInstall": true,
+ "moduleName": "entry",
+ "moduleType": "entry"
+ },
+ "abilities": [
+ {
+ "skills": [
+ {
+ "entities": [
+ "entity.system.home"
+ ],
+ "actions": [
+ "action.system.home"
+ ]
+ }
+ ],
+ "orientation": "unspecified",
+ "formsEnabled": false,
+ "name": ".MainAbility",
+ "srcLanguage": "js",
+ "srcPath": "MainAbility",
+ "icon": "$media:icon",
+ "description": "$string:MainAbility_desc",
+ "label": "$string:MainAbility_label",
+ "type": "page",
+ "visible": true,
+ "launchType": "standard"
+ },
+ {
+ "orientation": "unspecified",
+ "formsEnabled": false,
+ "name": ".TestAbility",
+ "srcLanguage": "js",
+ "srcPath": "TestAbility",
+ "icon": "$media:icon",
+ "description": "$string:TestAbility_desc",
+ "label": "$string:TestAbility_label",
+ "type": "page",
+ "visible": true,
+ "launchType": "standard"
+ }
+ ],
+ "js": [
+ {
+ "pages": [
+ "pages/index/index"
+ ],
+ "name": "default",
+ "window": {
+ "designWidth": 720,
+ "autoDesignWidth": false
+ }
+ },
+ {
+ "pages": [
+ "pages/index/index"
+ ],
+ "name": ".TestAbility",
+ "window": {
+ "designWidth": 720,
+ "autoDesignWidth": false
+ }
+ }
+ ],
+ "testRunner": {
+ "name": "OpenHarmonyTestRunner",
+ "srcPath": "TestRunner"
+ }
+ }
+}
\ No newline at end of file
diff --git a/communication/dsoftbus/rpc_request/src/main/js/MainAbility/app.js b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..b4b4ad4375f33bb0383dc2e80efa2b479d275c88
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/app.js
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+ onCreate() {
+ console.info('AceApplication onCreate');
+ },
+ onDestroy() {
+ console.info('AceApplication onDestroy');
+ }
+};
diff --git a/communication/dsoftbus/rpc_request/src/main/js/MainAbility/i18n/en-US.json b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/i18n/en-US.json
new file mode 100644
index 0000000000000000000000000000000000000000..e63c70d978a3a53be988388c87182f81785e170c
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/i18n/en-US.json
@@ -0,0 +1,6 @@
+{
+ "strings": {
+ "hello": "Hello",
+ "world": "World"
+ }
+}
\ No newline at end of file
diff --git a/communication/dsoftbus/rpc_request/src/main/js/MainAbility/i18n/zh-CN.json b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/i18n/zh-CN.json
new file mode 100644
index 0000000000000000000000000000000000000000..de6ee5748322f44942c1b003319d8e66c837675f
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/i18n/zh-CN.json
@@ -0,0 +1,6 @@
+{
+ "strings": {
+ "hello": "您好",
+ "world": "世界"
+ }
+}
\ No newline at end of file
diff --git a/communication/dsoftbus/rpc_request/src/main/js/MainAbility/pages/index/index.css b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/pages/index/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..10251f3d2d492eb9b38c9677c3071cbb6c809e24
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/pages/index/index.css
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.container {
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+
+.title {
+ font-size: 100px;
+}
diff --git a/communication/dsoftbus/rpc_request/src/main/js/MainAbility/pages/index/index.hml b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/pages/index/index.hml
new file mode 100644
index 0000000000000000000000000000000000000000..527b4b09ac95525292360d2e6732c1865874e543
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/pages/index/index.hml
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+ {{ $t('strings.hello') }} {{ title }}
+
+
diff --git a/communication/dsoftbus/rpc_request/src/main/js/MainAbility/pages/index/index.js b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/pages/index/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..762bfd7f86f72c7a4d8575d4d72db73cec54097f
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/MainAbility/pages/index/index.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+const injectRef = Object.getPrototypeOf(global) || global
+injectRef.regeneratorRuntime = require('@babel/runtime/regenerator')
+
+export default {
+ data: {
+ title: ''
+ },
+ onInit() {
+ this.title = this.$t('strings.world');
+ },
+ onShow() {
+ console.info('onShow finish')
+ },
+ onReady() {
+ },
+}
diff --git a/communication/dsoftbus/rpc_request/src/main/js/TestAbility/app.js b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..79be5e9bd911806a304a4771c1f93c770f439966
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/app.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
+import { Hypium } from '@ohos/hypium'
+import testsuite from '../test/List.test'
+
+export default {
+ onCreate() {
+ console.info("TestApplication onCreate")
+ var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
+ var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
+ console.info('start run testcase!!!')
+ Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite)
+ },
+ onDestroy() {
+ console.info("TestApplication onDestroy");
+ }
+};
diff --git a/communication/dsoftbus/rpc_request/src/main/js/TestAbility/i18n/en-US.json b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/i18n/en-US.json
new file mode 100644
index 0000000000000000000000000000000000000000..55561b83737c3c31d082fbfa11e5fc987a351104
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/i18n/en-US.json
@@ -0,0 +1,8 @@
+{
+ "strings": {
+ "hello": "Hello",
+ "world": "World"
+ },
+ "Files": {
+ }
+}
\ No newline at end of file
diff --git a/communication/dsoftbus/rpc_request/src/main/js/TestAbility/i18n/zh-CN.json b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/i18n/zh-CN.json
new file mode 100644
index 0000000000000000000000000000000000000000..cce1af06761a42add0cac1a0567aa3237eda8cb4
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/i18n/zh-CN.json
@@ -0,0 +1,8 @@
+{
+ "strings": {
+ "hello": "您好",
+ "world": "世界"
+ },
+ "Files": {
+ }
+}
\ No newline at end of file
diff --git a/communication/dsoftbus/rpc_request/src/main/js/TestAbility/pages/index/index.css b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/pages/index/index.css
new file mode 100644
index 0000000000000000000000000000000000000000..0e152d52b443a3c3d7875df20135b9ef5f5a872a
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/pages/index/index.css
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2022 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+.container {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ left: 0px;
+ top: 0px;
+ width: 100%;
+ height: 100%;
+}
+
+.title {
+ font-size: 60px;
+ text-align: center;
+ width: 100%;
+ height: 40%;
+ margin: 10px;
+}
+
+@media screen and (orientation: landscape) {
+ .title {
+ font-size: 60px;
+ }
+}
+
+@media screen and (device-type: tablet) and (orientation: landscape) {
+ .title {
+ font-size: 100px;
+ }
+}
\ No newline at end of file
diff --git a/communication/dsoftbus/rpc_request/src/main/js/TestAbility/pages/index/index.hml b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/pages/index/index.hml
new file mode 100644
index 0000000000000000000000000000000000000000..b9afc51da388d01c587363bd5c6f5d4c96c26a88
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/pages/index/index.hml
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2022 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+ {{ $t('strings.hello') }} {{ title }}
+
+
diff --git a/communication/dsoftbus/rpc_request/src/main/js/TestAbility/pages/index/index.js b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/pages/index/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a113c46febf52b41c608de32cbeff10620207f6
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/TestAbility/pages/index/index.js
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+export default {
+ data: {
+ title: ""
+ },
+ onInit() {
+ this.title = this.$t('strings.world');
+ }
+}
+
+
+
diff --git a/communication/dsoftbus/rpc_request/src/main/js/TestRunner/OpenHarmonyTestRunner.js b/communication/dsoftbus/rpc_request/src/main/js/TestRunner/OpenHarmonyTestRunner.js
new file mode 100644
index 0000000000000000000000000000000000000000..c42cfcef0b0e0143cf9df07a4fbe37949550d372
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/TestRunner/OpenHarmonyTestRunner.js
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
+
+function translateParamsToString(parameters) {
+ const keySet = new Set([
+ '-s class', '-s notClass', '-s suite', '-s itName',
+ '-s level', '-s testType', '-s size', '-s timeout',
+ '-s package', '-s dryRun'
+ ])
+ let targetParams = '';
+ for (const key in parameters) {
+ if (keySet.has(key)) {
+ targetParams += ' ' + key + ' ' + parameters[key]
+ }
+ }
+ return targetParams.trim()
+}
+
+ export default {
+ onPrepare() {
+ console.info('OpenHarmonyTestRunner OnPrepare')
+ },
+ onRun() {
+ console.log('OpenHarmonyTestRunner onRun run')
+ var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments()
+ var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
+
+ var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.TestAbility'
+ var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName
+ cmd += ' ' + translateParamsToString(abilityDelegatorArguments.parameters)
+ var debug = abilityDelegatorArguments.parameters["-D"]
+ console.info('debug value : '+debug)
+ if (debug == 'true')
+ {
+ cmd += ' -D'
+ }
+ console.info('cmd : '+cmd)
+ abilityDelegator.executeShellCommand(cmd, (err, data) => {
+ console.info('executeShellCommand : err : ' + JSON.stringify(err));
+ console.info('executeShellCommand : data : ' + data.stdResult);
+ console.info('executeShellCommand : data : ' + data.exitCode);
+ })
+ }
+};
\ No newline at end of file
diff --git a/communication/dsoftbus/rpc_request/src/main/js/test/List.test.js b/communication/dsoftbus/rpc_request/src/main/js/test/List.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..fdff46eea33ee6730f5967bdb9f2f258a65f9eb1
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/test/List.test.js
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2023 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import actsRpcRequestJsTest from './actsRpcRequestJsTest.test.js';
+
+export default function testsuite() {
+ actsRpcRequestJsTest();
+}
diff --git a/communication/dsoftbus/rpc_request/src/main/js/test/actsRpcRequestJsTest.test.js b/communication/dsoftbus/rpc_request/src/main/js/test/actsRpcRequestJsTest.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..783300c30f0983cb51ab7c531510854a8aa328a4
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/js/test/actsRpcRequestJsTest.test.js
@@ -0,0 +1,413 @@
+/*
+ * Copyright (c) 2023 Huawei Device Co., Ltd.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import rpc from '@ohos.rpc';
+import {describe, expect, beforeAll, it} from '@ohos/hypium';
+var gIRemoteObject = null;
+export default function actsRpcRequestJsTest() {
+ describe('actsRpcRequestJsTest', function(){
+ console.info("-----------------------SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_Test is starting-----------------------");
+ beforeAll(async function () {
+ console.info('beforeAll called');
+ gIRemoteObject = new Stub("rpcTestAbility");
+ return gIRemoteObject;
+ });
+
+ beforeEach(async function (){
+ console.info('beforeEach called');
+ });
+
+ afterEach(async function (){
+ console.info('afterEach called');
+ });
+
+ afterAll(async function (){
+ console.info('afterAll called');
+ });
+
+ const CODE_ASYNC_ONREMOTEMESSAGE = 1;
+ const CODE_ONREMOTE_ASYNC_ONREMOTEMESSAGE = 2;
+
+ function sleep(numberMillis)
+ {
+ var now = new Date();
+ var exitTime = now.getTime() + numberMillis;
+ while (true) {
+ now = new Date();
+ if (now.getTime() > exitTime)
+ return;
+ }
+ }
+
+ class Stub extends rpc.RemoteObject {
+ constructor(descriptor) {
+ super(descriptor);
+ }
+ onRemoteRequest(code, data, reply, option) {
+ try{
+ console.info("onRemoteRequest: " + code);
+ if (code === 2){
+ console.info("case 1 start");
+ let tmp1 = data.readString();
+ let result = reply.writeString("onRemoteRequest invoking");
+ return true;
+ } else {
+ console.error("onRemoteRequest default case " + code);
+ return super.onRemoteRequest(code, data, reply, option);
+ }
+ } catch (error) {
+ console.info("onRemoteRequest error: " + error);
+ }
+ return false
+ }
+ async onRemoteMessageRequest(code, data, reply, option) {
+ try{
+ if (code === 1){
+ console.info("case 1 start");
+ let tmp1 = data.readString();
+ reply.writeString("async onRemoteMessageRequest invoking");
+ } else if (code === 2){
+ console.info("case 2 start");
+ let tmp1 = data.readString();
+ reply.writeString("async onRemoteMessageRequest invoking");
+ }else {
+ console.error("async onRemoteMessageRequest default case " + code);
+ return super.onRemoteMessageRequest(code, data, reply, option);
+ }
+ await new Promise((resolve)=>{
+ console.info("new promise")
+ setTimeout(resolve,100);
+ })
+ return true;
+ } catch (error) {
+ console.info("async onRemoteMessageRequest: " + error);
+ }
+ return false
+ }
+ }
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00100
+ * @tc.name Verifying the processing of the MessageSequence Asynchronous callback information of the async_onRemoteMessageRequest interface
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00100", 0, async function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00100--------------------");
+ try{
+ var data = rpc.MessageSequence.create();
+ var reply = rpc.MessageSequence.create();
+ let option = new rpc.MessageOption();
+ let token = "async onRemoteMessageRequest invoking";
+ data.writeString(token);
+ expect(gIRemoteObject != undefined).assertTrue();
+ await gIRemoteObject.sendMessageRequest(CODE_ASYNC_ONREMOTEMESSAGE, data, reply, option).then((result) => {
+ expect(result.errCode).assertEqual(0);
+ expect(result.reply.readString()).assertEqual("async onRemoteMessageRequest invoking");
+ });
+ } catch (error) {
+ expect(error == null).assertTrue();
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00100--------------------");
+ });
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00200
+ * @tc.name Verifying the processing of the MessageSequence synchronous callback information of the async_onRemoteMessageRequest interface
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00200", 0, async function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00200--------------------");
+ try{
+ var data = new rpc.MessageSequence();
+ var reply = new rpc.MessageSequence();
+ var option = new rpc.MessageOption(1);
+ let token = "async onRemoteMessageRequest invoking";
+ data.writeString(token);
+ expect(gIRemoteObject != undefined).assertTrue();
+ await gIRemoteObject.sendMessageRequest(CODE_ASYNC_ONREMOTEMESSAGE, data, reply, option).then(function(result){
+ expect(result.errCode).assertEqual(0);
+ expect(result.reply.readString()).assertEqual("async onRemoteMessageRequest invoking");
+ });
+ } catch (error) {
+ expect(error == null).assertTrue();
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00200--------------------");
+ });
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00300
+ * @tc.name To test the processing priority of the MessageSequence interface for Asynchronously invoking
+ * onRemoteRequest and async_onRemoteMessageRequest callback information
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00300", 0, async function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00300--------------------");
+ try{
+ var data = rpc.MessageSequence.create();
+ var reply = rpc.MessageSequence.create();
+ let option = new rpc.MessageOption();
+ let token = "onRemoteRequest or async onRemoteMessageRequest invoking";
+ data.writeString(token);
+ expect(gIRemoteObject != undefined).assertTrue();
+ await gIRemoteObject.sendMessageRequest(CODE_ONREMOTE_ASYNC_ONREMOTEMESSAGE, data, reply, option).then((result) => {
+ expect(result.errCode).assertEqual(0);
+ expect(result.reply.readString()).assertEqual("async onRemoteMessageRequest invoking");
+ });
+ } catch (error) {
+ expect(error == null).assertTrue();
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00300--------------------");
+ });
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00400
+ * @tc.name To test the processing priority of the MessageSequence interface for synchronously invoking
+ * onRemoteRequest and async_onRemoteMessageRequest callback information
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00400", 0, async function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00400--------------------");
+ try{
+ var data = rpc.MessageSequence.create();
+ var reply = rpc.MessageSequence.create();
+ let option = new rpc.MessageOption(1);
+ let token = "onRemoteRequest or async onRemoteMessageRequest invoking";
+ data.writeString(token);
+ expect(gIRemoteObject != undefined).assertTrue();
+ await gIRemoteObject.sendMessageRequest(CODE_ONREMOTE_ASYNC_ONREMOTEMESSAGE, data, reply, option).then((result) => {
+ expect(result.errCode).assertEqual(0);
+ expect(result!=null).assertTrue();
+ expect(result.reply.readString()).assertEqual("async onRemoteMessageRequest invoking");
+ });
+ } catch (error) {
+ expect(error == null).assertTrue();
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00400--------------------");
+ });
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00500
+ * @tc.name Verifying the processing of the MessageParcel Asynchronous callback information of the async_onRemoteMessageRequest interface
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00500", 0, async function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00500--------------------");
+ try{
+ var data = rpc.MessageParcel.create();
+ var reply = rpc.MessageParcel.create();
+ let option = new rpc.MessageOption();
+ let token = "async onRemoteMessageRequest invoking";
+ var result = data.writeString(token);
+ expect(result == true).assertTrue();
+ if (gIRemoteObject == undefined)
+ expect(gIRemoteObject != undefined).assertTrue();
+ await gIRemoteObject.sendRequest(CODE_ASYNC_ONREMOTEMESSAGE, data, reply, option).then((result) => {
+ expect(result.errCode).assertEqual(0);
+ expect(result.reply.readString()).assertEqual("async onRemoteMessageRequest invoking");
+ });
+ } catch (error) {
+ expect(error).assertEqual(null);
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00500--------------------");
+ });
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00600
+ * @tc.name Verifying the processing of the MessageParcel synchronous callback information of the async_onRemoteMessageRequest interface
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00600", 0, async function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00600--------------------");
+ try{
+ var data = rpc.MessageParcel.create();
+ var reply = rpc.MessageParcel.create();
+ let option = new rpc.MessageOption(1);
+ let token = 'async onRemoteMessageRequest invoking';
+ var result = data.writeString(token);
+ expect(result == true).assertTrue();
+ expect(gIRemoteObject != undefined).assertTrue();
+ await gIRemoteObject.sendRequest(CODE_ASYNC_ONREMOTEMESSAGE, data, reply, option).then((result) => {
+ expect(result.errCode).assertEqual(0);
+ expect(result.reply.readString()).assertEqual("async onRemoteMessageRequest invoking");
+ });
+ } catch (error) {
+ expect(error).assertEqual(null);
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00600--------------------");
+ });
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00700
+ * @tc.name To test the processing priority of the MessageParcel interface for Asynchronously invoking
+ * onRemoteRequest and async_onRemoteMessageRequest callback information
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00700", 0, async function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00700--------------------");
+ try{
+ var data = rpc.MessageParcel.create();
+ var reply = rpc.MessageParcel.create();
+ let option = new rpc.MessageOption();
+ let token = 'onRemoteRequest or async onRemoteMessageRequest invoking';
+ var result = data.writeString(token);
+ expect(result == true).assertTrue();
+ expect(gIRemoteObject != undefined).assertTrue();
+ await gIRemoteObject.sendRequest(CODE_ONREMOTE_ASYNC_ONREMOTEMESSAGE, data, reply, option).then((result) => {
+ expect(result.errCode).assertEqual(0);
+ var replyReadResult = result.reply.readString();
+ expect(replyReadResult).assertEqual("async onRemoteMessageRequest invoking");
+ });
+ } catch (error) {
+ expect(error).assertEqual(null);
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00700--------------------");
+ });
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00800
+ * @tc.name To test the processing priority of the MessageParcel interface for synchronously invoking
+ * onRemoteRequest and async_onRemoteMessageRequest callback information
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00800", 0, async function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00800--------------------");
+ try{
+ var data = rpc.MessageParcel.create();
+ var reply = rpc.MessageParcel.create();
+ let option = new rpc.MessageOption(1);
+ let token = 'onRemoteRequest or async onRemoteMessageRequest invoking';
+ var result = data.writeString(token);
+ expect(result == true).assertTrue();
+ expect(gIRemoteObject != undefined).assertTrue();
+ await gIRemoteObject.sendRequest(CODE_ONREMOTE_ASYNC_ONREMOTEMESSAGE, data, reply, option).then((result) => {
+ expect(result.errCode).assertEqual(0);
+ expect(result.reply.readString()).assertEqual("async onRemoteMessageRequest invoking");
+ });
+ } catch (error) {
+ expect(error).assertEqual(null);
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00800--------------------");
+ });
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00900
+ * @tc.name Invoke async_onRemoteMessageRequest to process information in synchronization mode and call back in AsyncCallback mode
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00900", 0, function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00900--------------------");
+ try{
+ function sendMessageRequestCallback(result) {
+ try{
+ expect(result.errCode).assertEqual(0);
+ expect(result.reply.readString()).assertEqual("async onRemoteMessageRequest invoking");
+ } catch(e) {
+ expect(e == null).assertTrue();
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ }
+ var data = rpc.MessageSequence.create();
+ var reply = rpc.MessageSequence.create();
+ let option = new rpc.MessageOption();
+ let token = "onRemoteRequest or async onRemoteMessageRequest invoking";
+ data.writeString(token);
+ console.info("start sendMessageRequestCallback");
+ gIRemoteObject.sendMessageRequest(CODE_ASYNC_ONREMOTEMESSAGE, data, reply, option, sendMessageRequestCallback);
+ } catch (error) {
+ expect(error == null).assertTrue();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_00900--------------------");
+ });
+
+ /*
+ * @tc.number SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_01000
+ * @tc.name Invoke async_onRemoteMessageRequest to process information in asynchronous mode and call back in AsyncCallback mode
+ * @tc.desc [G-DISTRIBUTED-0212]禁止修改IPC中定义的数据结构和接口,并提供对应完整实现
+ * @tc.level 3
+ */
+ it("SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_01000", 0, function(done){
+ console.info("--------------------start SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_01000--------------------");
+ try{
+ var data = rpc.MessageSequence.create();
+ var reply = rpc.MessageSequence.create();
+ let option = new rpc.MessageOption(1);
+ let token = "onRemoteRequest or async onRemoteMessageRequest invoking";
+ data.writeString(token);
+ function sendMessageRequestCallback(result) {
+ try{
+ expect(result.errCode).assertEqual(0);
+ expect(result.reply.readString()).assertEqual("async onRemoteMessageRequest invoking");
+ } catch(e) {
+ expect(e == null).assertTrue();
+ }finally{
+ data.reclaim();
+ reply.reclaim();
+ done();
+ }
+ }
+ console.info("start sendMessageRequestCallback");
+ gIRemoteObject.sendMessageRequest(CODE_ASYNC_ONREMOTEMESSAGE, data, reply, option,sendMessageRequestCallback);
+ } catch (error) {
+ expect(error == null).assertTrue();
+ }
+ console.info("--------------------end SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_01000--------------------");
+ });
+ console.info("-----------------------SUB_Softbus_IPC_Compatibility_onRemoteMessageRequest_Test is end-----------------------");
+ });
+}
diff --git a/communication/dsoftbus/rpc_request/src/main/resources/base/element/string.json b/communication/dsoftbus/rpc_request/src/main/resources/base/element/string.json
new file mode 100644
index 0000000000000000000000000000000000000000..95c259acf18391a8b6bff3c3041a7c4860f6991a
--- /dev/null
+++ b/communication/dsoftbus/rpc_request/src/main/resources/base/element/string.json
@@ -0,0 +1,28 @@
+{
+ "string": [
+ {
+ "name": "app_name",
+ "value": "rpctest"
+ },
+ {
+ "name": "mainability_description",
+ "value": "JS_Phone_Empty Rpc"
+ },
+ {
+ "name": "MainAbility_desc",
+ "value": "description"
+ },
+ {
+ "name": "MainAbility_label",
+ "value": "label"
+ },
+ {
+ "name": "TestAbility_desc",
+ "value": "description"
+ },
+ {
+ "name": "TestAbility_label",
+ "value": "label"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/communication/dsoftbus/rpc_request/src/main/resources/base/media/icon.png b/communication/dsoftbus/rpc_request/src/main/resources/base/media/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c
Binary files /dev/null and b/communication/dsoftbus/rpc_request/src/main/resources/base/media/icon.png differ