1/* 2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16function requireModule(name) { 17 let mod = globalThis.requireNapi(name); 18 if (mod) { 19 return mod; 20 } 21 mod = globalThis.ohosplugin; 22 name.split('.').foreach(element => { 23 if (mod) { 24 mod = mod[element]; 25 } 26 }); 27 if (mod) { 28 return mod; 29 } 30 mod = globalThis.systemplugin; 31 name.split('.').foreach(element => { 32 if (mod) { 33 mod = mod[element]; 34 } 35 }); 36 return mod; 37} 38 39async function scheduleConnectionAsync(uitest) { 40 let procInfo = requireModule('process'); 41 if (procInfo == null) { 42 console.error('UiTestKit_exporter: Failed to require process napi module'); 43 return; 44 } 45 let registry = requireModule('application.abilityDelegatorRegistry'); 46 if (registry == null) { 47 console.error('UiTestKit_exporter: Failed to require AbilityDelegator napi module'); 48 return; 49 } 50 let delegator = registry.getAbilityDelegator(); 51 if (delegator == null) { 52 console.warn('UiTestKit_exporter: Cannot get AbilityDelegator, uitest_daemon need to be pre-started'); 53 uitest.scheduleEstablishConnection('default'); 54 } else { 55 let appContext = delegator.getAppContext(); 56 let connToken = `${appContext.applicationInfo.name}@${procInfo.pid}@${procInfo.uid}@${appContext.area}`; 57 console.info(`UiTestKit_exporter: ScheduleProbeAndEstablishConnection, token=${connToken}`); 58 uitest.scheduleEstablishConnection(connToken); 59 console.info('UiTestKit_exporter: Begin executing shell command to start server-daemon'); 60 delegator.executeShellCommand(`uitest start-daemon ${connToken}`, 3).then((value) => { 61 console.info(`UiTestKit_exporter: Start server-daemon finished: ${JSON.stringify(value)}`); 62 }).catch((error) => { 63 console.error(`UiTestKit_exporter: Start server-daemon failed: ${JSON.stringify(error)}`); 64 }); 65 } 66} 67 68function loadAndSetupUiTest() { 69 let uitest = globalThis.requireInternal('UiTest'); 70 if (uitest.uitestSetupCalled === true) { 71 return; 72 } 73 uitest.uitestSetupCalled = true; 74 // check 'persist.ace.testmode.enabled' property 75 let parameter = requireModule('systemparameter'); 76 if (parameter == null) { 77 console.error('UiTestKit_exporter: Failed to require systemparameter napi module!'); 78 return; 79 } 80 if (parameter.getSync('persist.ace.testmode.enabled', '0') !== '1') { 81 console.warn('UiTestKit_exporter: systemParameter "persist.ace.testmode.enabled" is not set!'); 82 } 83 // schedule startup server_daemon and establish connection 84 scheduleConnectionAsync(uitest).catch((error) => { 85 console.error(`UiTestKit_exporter: ScheduleConnectionAsync failed: ${JSON.stringify(error)}`); 86 }); 87 return uitest; 88} 89 90export default loadAndSetupUiTest(); 91