1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3""" 4Copyright (c) 2024 Huawei Device Co., Ltd. 5Licensed under the Apache License, Version 2.0 (the "License"); 6you may not use this file except in compliance with the License. 7You may obtain a copy of the License at 8 9 http://www.apache.org/licenses/LICENSE-2.0 10 11Unless required by applicable law or agreed to in writing, software 12distributed under the License is distributed on an "AS IS" BASIS, 13WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14See the License for the specific language governing permissions and 15limitations under the License. 16 17Description: Fixtures of pytest. 18""" 19 20import logging 21import os 22 23import pytest 24 25from aw import Application, Fport, WebSocket, TaskPool, Utils 26 27 28@pytest.fixture(scope='class') 29def test_suite_main_instance_01_debug(): 30 logging.info('running main_instance_01 in debug mode') 31 config = { 32 'start_mode': '-D', 33 'connect_server_port': 15700, 34 'debugger_server_port': 15701, 35 'bundle_name': 'com.example.mainInstance01', 36 'hap_name': 'MainInstance01.hap', 37 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MainInstance01.hap', 38 'file_path': { 39 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 40 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 41 } 42 } 43 launch_hap(config) 44 return config 45 46 47@pytest.fixture(scope='class') 48def test_suite_main_instance_02_debug(): 49 logging.info('running main_instance_02 in debug mode') 50 config = { 51 'start_mode': '-D', 52 'connect_server_port': 15702, 53 'debugger_server_port': 15703, 54 'bundle_name': 'com.example.mainInstance02', 55 'hap_name': 'MainInstance02.hap', 56 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MainInstance02.hap', 57 'file_path': { 58 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 59 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 60 } 61 } 62 launch_hap(config) 63 return config 64 65 66@pytest.fixture(scope='class') 67def test_suite_main_instance_03_debug(): 68 logging.info('running main_instance_03 in debug mode') 69 config = { 70 'start_mode': '-D', 71 'connect_server_port': 15704, 72 'debugger_server_port': 15705, 73 'bundle_name': 'com.example.mainInstance03', 74 'hap_name': 'MainInstance03.hap', 75 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MainInstance03.hap', 76 'file_path': { 77 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 78 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 79 } 80 } 81 launch_hap(config) 82 return config 83 84 85@pytest.fixture(scope='class') 86def test_suite_main_instance_04_debug(): 87 logging.info('running main_instance_04 in debug mode') 88 config = { 89 'start_mode': '-D', 90 'connect_server_port': 15706, 91 'debugger_server_port': 15707, 92 'bundle_name': 'com.example.mainInstance04', 93 'hap_name': 'MainInstance04.hap', 94 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MainInstance04.hap', 95 'file_path': { 96 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 97 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 98 } 99 } 100 launch_hap(config) 101 return config 102 103 104@pytest.fixture(scope='class') 105def test_suite_worker_08_debug(): 106 logging.info('running worker_08 in debug mode') 107 config = { 108 'start_mode': '-D', 109 'connect_server_port': 15698, 110 'debugger_server_port': 15699, 111 'bundle_name': 'com.example.multiWorker08', 112 'hap_name': 'MultiWorker08.hap', 113 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker08.hap', 114 'file_path': { 115 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 116 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 117 'worker': 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts' 118 } 119 } 120 launch_hap(config) 121 return config 122 123 124@pytest.fixture(scope='class') 125def test_suite_worker_07_debug(): 126 logging.info('running worker_07 in debug mode') 127 config = { 128 'start_mode': '-D', 129 'connect_server_port': 15696, 130 'debugger_server_port': 15697, 131 'bundle_name': 'com.example.multiWorker07', 132 'hap_name': 'MultiWorker07.hap', 133 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker07.hap', 134 'file_path': { 135 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 136 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 137 'worker': 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts' 138 } 139 } 140 launch_hap(config) 141 return config 142 143 144@pytest.fixture(scope='class') 145def test_suite_worker_06_debug(): 146 logging.info('running worker_06 in debug mode') 147 config = { 148 'start_mode': '-D', 149 'connect_server_port': 15694, 150 'debugger_server_port': 15695, 151 'bundle_name': 'com.example.multiWorker06', 152 'hap_name': 'MultiWorker06.hap', 153 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker06.hap', 154 'file_path': { 155 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 156 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 157 'worker': 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts' 158 } 159 } 160 launch_hap(config) 161 return config 162 163 164@pytest.fixture(scope='class') 165def test_suite_worker_05_debug(): 166 logging.info('running worker_05 in debug mode') 167 config = { 168 'start_mode': '-D', 169 'connect_server_port': 15692, 170 'debugger_server_port': 15693, 171 'bundle_name': 'com.example.multiWorker05', 172 'hap_name': 'MultiWorker05.hap', 173 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker05.hap', 174 'file_path': { 175 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 176 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 177 'worker': 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts' 178 } 179 } 180 launch_hap(config) 181 return config 182 183 184@pytest.fixture(scope='class') 185def test_suite_worker_04_debug(): 186 logging.info('running worker_04 in debug mode') 187 config = { 188 'start_mode': '-D', 189 'connect_server_port': 15690, 190 'debugger_server_port': 15691, 191 'bundle_name': 'com.example.multiWorker04', 192 'hap_name': 'MultiWorker04.hap', 193 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker04.hap', 194 'file_path': { 195 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 196 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 197 'worker': 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts' 198 } 199 } 200 launch_hap(config) 201 return config 202 203 204@pytest.fixture(scope='class') 205def test_suite_worker_03_debug(): 206 logging.info('running worker_03 in debug mode') 207 config = { 208 'start_mode': '-D', 209 'connect_server_port': 15688, 210 'debugger_server_port': 15689, 211 'bundle_name': 'com.example.multiWorker03', 212 'hap_name': 'MultiWorker03.hap', 213 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker03.hap', 214 'file_path': { 215 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 216 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 217 'worker': 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts' 218 } 219 } 220 launch_hap(config) 221 return config 222 223 224@pytest.fixture(scope='class') 225def test_suite_worker_02_dumpheap(): 226 logging.info('running worker_02 in profile mode') 227 config = { 228 'start_mode': '-p dumpheap', 229 'connect_server_port': 15686, 230 'debugger_server_port': 15687, 231 'bundle_name': 'com.example.multiWorker02', 232 'hap_name': 'MultiWorker02.hap', 233 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker02.hap' 234 } 235 launch_hap(config) 236 return config 237 238 239@pytest.fixture(scope='class') 240def test_suite_worker_02_profile_jsperf(): 241 logging.info('running worker_02 in profile mode') 242 config = { 243 'start_mode': '-p profile jsperf', 244 'connect_server_port': 15686, 245 'debugger_server_port': 15687, 246 'bundle_name': 'com.example.multiWorker02', 247 'hap_name': 'MultiWorker02.hap', 248 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker02.hap' 249 } 250 launch_hap(config) 251 return config 252 253 254@pytest.fixture(scope='class') 255def test_suite_worker_02(): 256 logging.info('running worker_02 in default mode') 257 config = { 258 'start_mode': None, 259 'connect_server_port': 15684, 260 'debugger_server_port': 15685, 261 'bundle_name': 'com.example.multiWorker02', 262 'hap_name': 'MultiWorker02.hap', 263 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker02.hap' 264 } 265 launch_hap(config) 266 return config 267 268 269@pytest.fixture(scope='class') 270def test_suite_worker_01_debug(): 271 logging.info('running worker_01 in debug mode') 272 config = { 273 'start_mode': '-D', 274 'connect_server_port': 15682, 275 'debugger_server_port': 15683, 276 'bundle_name': 'com.example.multiWorker01', 277 'hap_name': 'MultiWorker01.hap', 278 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker01.hap', 279 'file_path': { 280 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 281 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 282 'worker': 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts' 283 } 284 } 285 launch_hap(config) 286 return config 287 288 289@pytest.fixture(scope='class') 290def test_suite_worker_01(): 291 logging.info('running worker_01 in default mode') 292 config = { 293 'start_mode': None, 294 'connect_server_port': 15680, 295 'debugger_server_port': 15681, 296 'bundle_name': 'com.example.multiWorker01', 297 'hap_name': 'MultiWorker01.hap', 298 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\MultiWorker01.hap', 299 'file_path': { 300 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 301 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 302 'worker': 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts' 303 } 304 } 305 launch_hap(config) 306 return config 307 308 309@pytest.fixture(scope='class') 310def test_suite_native_02_debug(): 311 logging.info('running native_02 in debug mode') 312 config = { 313 'start_mode': '-D', 314 'connect_server_port': 15678, 315 'debugger_server_port': 15679, 316 'bundle_name': 'com.example.native02', 317 'hap_name': 'Native02.hap', 318 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\Native02.hap', 319 'file_path': { 320 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 321 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 322 'worker': 'entry|entry|1.0.0|src/main/ets/workers/Worker.ts' 323 } 324 } 325 launch_hap(config) 326 return config 327 328 329@pytest.fixture(scope='class') 330def test_suite_native_01_debug(): 331 logging.info('running native_01 in debug mode') 332 config = { 333 'start_mode': '-D', 334 'connect_server_port': 15676, 335 'debugger_server_port': 15677, 336 'bundle_name': 'com.example.native01', 337 'hap_name': 'Native01.hap', 338 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\Native01.hap', 339 'file_path': { 340 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 341 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts' 342 } 343 } 344 launch_hap(config) 345 return config 346 347 348@pytest.fixture(scope='class') 349def test_suite_taskpool_02_debug(): 350 logging.info('running taskpool_02 in debug mode') 351 config = { 352 'start_mode': '-D', 353 'connect_server_port': 15674, 354 'debugger_server_port': 15675, 355 'bundle_name': 'com.example.taskPool02', 356 'hap_name': 'TaskPool02.hap', 357 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\TaskPool02.hap', 358 'file_path': { 359 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 360 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 361 } 362 } 363 launch_hap(config) 364 return config 365 366 367@pytest.fixture(scope='class') 368def test_suite_taskpool_01(): 369 logging.info('running taskpool_01 in default mode') 370 config = { 371 'start_mode': None, 372 'connect_server_port': 15672, 373 'debugger_server_port': 15673, 374 'bundle_name': 'com.example.taskPool01', 375 'hap_name': 'TaskPool01.hap', 376 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\TaskPool01.hap', 377 'file_path': { 378 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 379 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 380 } 381 } 382 launch_hap(config) 383 return config 384 385 386@pytest.fixture(scope='class') 387def test_suite_taskpool_01_debug(): 388 logging.info('running taskpool_01 in debug mode') 389 config = { 390 'start_mode': '-D', 391 'connect_server_port': 15670, 392 'debugger_server_port': 15671, 393 'bundle_name': 'com.example.taskPool01', 394 'hap_name': 'TaskPool01.hap', 395 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\TaskPool01.hap', 396 'file_path': { 397 'entry_ability': 'entry|entry|1.0.0|src/main/ets/entryability/EntryAbility.ts', 398 'index': 'entry|entry|1.0.0|src/main/ets/pages/Index.ts', 399 } 400 } 401 launch_hap(config) 402 return config 403 404 405@pytest.fixture(scope='class') 406def test_suite_hotreload_har_hsp_01(): 407 logging.info('running application HotReloadHarHsp01') 408 config = { 409 'bundle_name': 'com.example.HotReloadHarHsp01', 410 'hap_dir': rf'{os.path.dirname(__file__)}\..\resource\HotReloadHarHsp01', 411 'hap_entry_name': 'HotReloadHarHsp01.hap', 412 'hsp_discovery_name': 'HspDiscovery.hsp', 413 414 'local_hqf_entry_path': rf'{os.path.dirname(__file__)}\..\resource\HotReloadHarHsp01.hqf', 415 'remote_hqf_entry_path': '/data/HotReloadHarHsp01.hqf', 416 'hqf_entry_name': 'HotReloadHarHsp01.hqf', 417 418 'local_hqf_discovery_path': rf'{os.path.dirname(__file__)}\..\resource\HspDiscovery.hqf', 419 'remote_hqf_discovery_path': '/data/HspDiscovery.hqf', 420 'hqf_discovery_name': 'HspDiscovery.hap', 421 } 422 pid = Application.launch_application(config['bundle_name'], config['hap_dir']) 423 assert pid != 0, logging.error(f'Pid of {config["bundle_name"]} is 0!') 424 config['pid'] = pid 425 return config 426 427 428@pytest.fixture(scope='class') 429def test_suite_hotreload_pages_01(): 430 logging.info('running application HotReloadPages01') 431 config = { 432 'bundle_name': 'com.example.HotReloadPages01', 433 'hap_path': rf'{os.path.dirname(__file__)}\..\resource\HotReloadPages01.hap', 434 435 'hqf_01_name': 'HotReloadPages01.01.hqf', 436 'local_hqf_01_path': rf'{os.path.dirname(__file__)}\..\resource\HotReloadPages01.01.hqf', 437 'remote_hqf_01_path': '/data/HotReloadPages01.01.hqf', 438 439 'hqf_02_name': 'HotReloadPages01.02.hqf', 440 'local_hqf_02_path': rf'{os.path.dirname(__file__)}\..\resource\HotReloadPages01.02.hqf', 441 'remote_hqf_02_path': '/data/HotReloadPages01.02.hqf', 442 443 'hqf_03_name': 'HotReloadPages01.03.hqf', 444 'local_hqf_03_path': rf'{os.path.dirname(__file__)}\..\resource\HotReloadPages01.03.hqf', 445 'remote_hqf_03_path': '/data/HotReloadPages01.03.hqf', 446 447 'hqf_04_name': 'HotReloadPages01.04.hqf', 448 'local_hqf_04_path': rf'{os.path.dirname(__file__)}\..\resource\HotReloadPages01.04.hqf', 449 'remote_hqf_04_path': '/data/HotReloadPages01.04.hqf', 450 } 451 pid = Application.launch_application(config['bundle_name'], config['hap_path']) 452 assert pid != 0, logging.error(f'Pid of {config["bundle_name"]} is 0!') 453 config['pid'] = pid 454 return config 455 456 457def launch_hap(config): 458 pid = Application.launch_application(config['bundle_name'], config['hap_path'], start_mode=config['start_mode']) 459 assert pid != 0, logging.error(f'Pid of {config["hap_name"]} is 0!') 460 config['pid'] = pid 461 462 Fport.clear_fport() 463 connect_server_port = Fport.fport_connect_server(config['connect_server_port'], 464 config['pid'], 465 config['bundle_name']) 466 assert connect_server_port > 0, logging.error('Failed to fport connect server for 3 times, ' 467 'the port is very likely occupied') 468 config['connect_server_port'] = connect_server_port 469 470 config['websocket'] = WebSocket(config['connect_server_port'], config['debugger_server_port']) 471 config['taskpool'] = TaskPool() 472