• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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