1cc290419Sopenharmony_ci#!/usr/bin/env python3
2cc290419Sopenharmony_ci# -*- coding: utf-8 -*-
3cc290419Sopenharmony_ci# Copyright (C) 2024 Huawei Device Co., Ltd.
4cc290419Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
5cc290419Sopenharmony_ci# you may not use this file except in compliance with the License.
6cc290419Sopenharmony_ci# You may obtain a copy of the License at
7cc290419Sopenharmony_ci#
8cc290419Sopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
9cc290419Sopenharmony_ci#
10cc290419Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
11cc290419Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
12cc290419Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cc290419Sopenharmony_ci# See the License for the specific language governing permissions and
14cc290419Sopenharmony_ci# limitations under the License.
15cc290419Sopenharmony_ci# 运行环境: python 3.10+, pytest, pytest-repeat, pytest-testreport
16cc290419Sopenharmony_ci# 准备文件:package.zip
17cc290419Sopenharmony_ci# pip install pytest pytest-testreport pytest-repeat
18cc290419Sopenharmony_ci# python hdc_normal_test.py
19cc290419Sopenharmony_ci
20cc290419Sopenharmony_ci
21cc290419Sopenharmony_ciimport argparse
22cc290419Sopenharmony_ciimport time
23cc290419Sopenharmony_ciimport os
24cc290419Sopenharmony_ci
25cc290419Sopenharmony_ciimport pytest
26cc290419Sopenharmony_ci
27cc290419Sopenharmony_cifrom dev_hdc_test import GP
28cc290419Sopenharmony_cifrom dev_hdc_test import check_library_installation, check_hdc_version, check_cmd_time
29cc290419Sopenharmony_cifrom dev_hdc_test import check_hdc_cmd, check_hdc_targets, get_local_path, get_remote_path, run_command_with_timeout
30cc290419Sopenharmony_cifrom dev_hdc_test import check_app_install, check_app_uninstall, prepare_source, pytest_run, update_source, check_rate, get_shell_result
31cc290419Sopenharmony_cifrom dev_hdc_test import make_multiprocess_file, rmdir
32cc290419Sopenharmony_cifrom dev_hdc_test import check_app_install_multi, check_app_uninstall_multi
33cc290419Sopenharmony_cifrom dev_hdc_test import check_rom, check_shell
34cc290419Sopenharmony_ci
35cc290419Sopenharmony_ci
36cc290419Sopenharmony_cidef test_list_targets():
37cc290419Sopenharmony_ci    assert check_hdc_targets()
38cc290419Sopenharmony_ci    assert check_hdc_cmd("shell rm -rf data/local/tmp/it_*")
39cc290419Sopenharmony_ci    assert check_hdc_cmd("shell mkdir data/local/tmp/it_send_dir")
40cc290419Sopenharmony_ci
41cc290419Sopenharmony_ci
42cc290419Sopenharmony_ci@pytest.mark.repeat(5)
43cc290419Sopenharmony_cidef test_empty_file():
44cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file send {get_local_path('empty')} {get_remote_path('it_empty')}")
45cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file recv {get_remote_path('it_empty')} {get_local_path('empty_recv')}")
46cc290419Sopenharmony_ci
47cc290419Sopenharmony_ci
48cc290419Sopenharmony_ci@pytest.mark.repeat(5)
49cc290419Sopenharmony_cidef test_empty_dir():
50cc290419Sopenharmony_ci    assert check_shell(f"file send {get_local_path('empty_dir')} {get_remote_path('it_empty_dir')}", "the source folder is empty")
51cc290419Sopenharmony_ci    assert check_hdc_cmd("shell mkdir data/local/tmp/it_empty_dir_recv")
52cc290419Sopenharmony_ci    assert check_shell(f"file recv {get_remote_path('it_empty_dir_recv')} {get_local_path('empty_dir_recv')}", "the source folder is empty")
53cc290419Sopenharmony_ci
54cc290419Sopenharmony_ci
55cc290419Sopenharmony_ci@pytest.mark.repeat(5)
56cc290419Sopenharmony_cidef test_long_path():
57cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file send {get_local_path('deep_test_dir')} {get_remote_path('it_send_dir')}")
58cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file recv {get_remote_path('it_send_dir/deep_test_dir')} {get_local_path('recv_test_dir')}")
59cc290419Sopenharmony_ci
60cc290419Sopenharmony_ci
61cc290419Sopenharmony_ci@pytest.mark.repeat(5)
62cc290419Sopenharmony_cidef test_small_file():
63cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file send {get_local_path('small')} {get_remote_path('it_small')}")
64cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file recv {get_remote_path('it_small')} {get_local_path('small_recv')}")
65cc290419Sopenharmony_ci
66cc290419Sopenharmony_ci
67cc290419Sopenharmony_ci@pytest.mark.repeat(1)
68cc290419Sopenharmony_cidef test_node_file():
69cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file recv {get_remote_path('../../../sys/power/state')} {get_local_path('state')}")
70cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file recv {get_remote_path('../../../sys/firmware/fdt')} {get_local_path('fdt')}")
71cc290419Sopenharmony_ci
72cc290419Sopenharmony_ci
73cc290419Sopenharmony_ci@pytest.mark.repeat(1)
74cc290419Sopenharmony_cidef test_medium_file():
75cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file send {get_local_path('medium')} {get_remote_path('it_medium')}")
76cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file recv {get_remote_path('it_medium')} {get_local_path('medium_recv')}")
77cc290419Sopenharmony_ci
78cc290419Sopenharmony_ci
79cc290419Sopenharmony_ci@pytest.mark.repeat(1)
80cc290419Sopenharmony_cidef test_large_file():
81cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file send {get_local_path('large')} {get_remote_path('it_large')}")
82cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file recv {get_remote_path('it_large')} {get_local_path('large_recv')}")
83cc290419Sopenharmony_ci
84cc290419Sopenharmony_ci
85cc290419Sopenharmony_ci@pytest.mark.repeat(1)
86cc290419Sopenharmony_cidef test_running_file():
87cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file recv /system/bin/hdcd {get_local_path('running_recv')}")
88cc290419Sopenharmony_ci
89cc290419Sopenharmony_ci
90cc290419Sopenharmony_ci@pytest.mark.repeat(1)
91cc290419Sopenharmony_cidef test_rate():
92cc290419Sopenharmony_ci    assert check_rate(f"file send {get_local_path('large')} {get_remote_path('it_large')}", 18000)
93cc290419Sopenharmony_ci    assert check_rate(f"file recv {get_remote_path('it_large')} {get_local_path('large_recv')}", 18000)
94cc290419Sopenharmony_ci
95cc290419Sopenharmony_ci
96cc290419Sopenharmony_ci@pytest.mark.repeat(1)
97cc290419Sopenharmony_cidef test_file_error():
98cc290419Sopenharmony_ci    assert check_hdc_cmd("target mount")
99cc290419Sopenharmony_ci    assert check_shell(
100cc290419Sopenharmony_ci        f"file send {get_local_path('small')} system/bin/hdcd",
101cc290419Sopenharmony_ci        "busy"
102cc290419Sopenharmony_ci    )
103cc290419Sopenharmony_ci    assert check_shell(
104cc290419Sopenharmony_ci        f"file recv",
105cc290419Sopenharmony_ci        "[Fail]There is no local and remote path"
106cc290419Sopenharmony_ci    )
107cc290419Sopenharmony_ci    assert check_shell(
108cc290419Sopenharmony_ci        f"file send",
109cc290419Sopenharmony_ci        "[Fail]There is no local and remote path"
110cc290419Sopenharmony_ci    )
111cc290419Sopenharmony_ci    assert check_hdc_cmd(f"shell rm -rf {get_remote_path('../../../large')}")
112cc290419Sopenharmony_ci    assert check_hdc_cmd(f"shell param set persist.hdc.control.file false")
113cc290419Sopenharmony_ci    assert check_shell(
114cc290419Sopenharmony_ci        f"file send {get_local_path('small')} {get_remote_path('it_small_false')}",
115cc290419Sopenharmony_ci        "debugging is not allowed"
116cc290419Sopenharmony_ci    )
117cc290419Sopenharmony_ci    assert check_hdc_cmd(f"shell param set persist.hdc.control.file true")
118cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file send {get_local_path('small')} {get_remote_path('it_small_true')}")
119cc290419Sopenharmony_ci
120cc290419Sopenharmony_ci
121cc290419Sopenharmony_ci@pytest.mark.repeat(5)
122cc290419Sopenharmony_cidef test_recv_dir():
123cc290419Sopenharmony_ci    if os.path.exists(get_local_path('it_problem_dir')):
124cc290419Sopenharmony_ci        rmdir(get_local_path('it_problem_dir'))
125cc290419Sopenharmony_ci    assert check_hdc_cmd(f"shell rm -rf {get_remote_path('it_problem_dir')}")
126cc290419Sopenharmony_ci    assert check_hdc_cmd(f"shell rm -rf {get_remote_path('problem_dir')}")
127cc290419Sopenharmony_ci    assert make_multiprocess_file(get_local_path('problem_dir'), get_remote_path(''), 'send', 1, "dir")
128cc290419Sopenharmony_ci    assert check_hdc_cmd(f"shell mv {get_remote_path('problem_dir')} {get_remote_path('it_problem_dir')}")
129cc290419Sopenharmony_ci    assert make_multiprocess_file(get_local_path(''), get_remote_path('it_problem_dir'), 'recv', 1, "dir")
130cc290419Sopenharmony_ci
131cc290419Sopenharmony_ci
132cc290419Sopenharmony_ci@pytest.mark.repeat(5)
133cc290419Sopenharmony_cidef test_hap_install():
134cc290419Sopenharmony_ci    assert check_hdc_cmd(f"install -r {get_local_path('entry-default-signed-debug.hap')}",
135cc290419Sopenharmony_ci                            bundle="com.hmos.diagnosis")
136cc290419Sopenharmony_ci
137cc290419Sopenharmony_ci
138cc290419Sopenharmony_ci@pytest.mark.repeat(5)
139cc290419Sopenharmony_cidef test_install_hap():
140cc290419Sopenharmony_ci    package_hap = "entry-default-signed-debug.hap"
141cc290419Sopenharmony_ci    app_name_default = "com.hmos.diagnosis"
142cc290419Sopenharmony_ci
143cc290419Sopenharmony_ci    # default
144cc290419Sopenharmony_ci    assert check_app_install(package_hap, app_name_default)
145cc290419Sopenharmony_ci    assert check_app_uninstall(app_name_default)
146cc290419Sopenharmony_ci
147cc290419Sopenharmony_ci    # -r
148cc290419Sopenharmony_ci    assert check_app_install(package_hap, app_name_default, "-r")
149cc290419Sopenharmony_ci    assert check_app_uninstall(app_name_default)
150cc290419Sopenharmony_ci
151cc290419Sopenharmony_ci    # -k
152cc290419Sopenharmony_ci    assert check_app_install(package_hap, app_name_default, "-r")
153cc290419Sopenharmony_ci    assert check_app_uninstall(app_name_default, "-k")
154cc290419Sopenharmony_ci
155cc290419Sopenharmony_ci    # -s
156cc290419Sopenharmony_ci    assert check_app_install(package_hap, app_name_default, "-s")
157cc290419Sopenharmony_ci
158cc290419Sopenharmony_ci
159cc290419Sopenharmony_ci@pytest.mark.repeat(5)
160cc290419Sopenharmony_cidef test_install_hsp():
161cc290419Sopenharmony_ci    package_hsp = "libA_v10001.hsp"
162cc290419Sopenharmony_ci    hsp_name_default = "com.example.liba"
163cc290419Sopenharmony_ci
164cc290419Sopenharmony_ci    assert check_app_install(package_hsp, hsp_name_default, "-s")
165cc290419Sopenharmony_ci    assert check_app_uninstall(hsp_name_default, "-s")
166cc290419Sopenharmony_ci    assert check_app_install(package_hsp, hsp_name_default)
167cc290419Sopenharmony_ci
168cc290419Sopenharmony_ci
169cc290419Sopenharmony_ci@pytest.mark.repeat(5)
170cc290419Sopenharmony_cidef test_install_multi_hap():
171cc290419Sopenharmony_ci    # default multi hap
172cc290419Sopenharmony_ci    tables = {
173cc290419Sopenharmony_ci        "entry-default-signed-debug.hap" : "com.hmos.diagnosis",
174cc290419Sopenharmony_ci        "ActsAudioRecorderJsTest.hap" : "ohos.acts.multimedia.audio.audiorecorder"
175cc290419Sopenharmony_ci    }
176cc290419Sopenharmony_ci    assert check_app_install_multi(tables)
177cc290419Sopenharmony_ci    assert check_app_uninstall_multi(tables)
178cc290419Sopenharmony_ci    assert check_app_install_multi(tables, "-s")
179cc290419Sopenharmony_ci
180cc290419Sopenharmony_ci    # default multi hap -r -k
181cc290419Sopenharmony_ci    tables = {
182cc290419Sopenharmony_ci        "entry-default-signed-debug.hap" : "com.hmos.diagnosis",
183cc290419Sopenharmony_ci        "ActsAudioRecorderJsTest.hap" : "ohos.acts.multimedia.audio.audiorecorder"
184cc290419Sopenharmony_ci    }
185cc290419Sopenharmony_ci    assert check_app_install_multi(tables, "-r")
186cc290419Sopenharmony_ci    assert check_app_uninstall_multi(tables, "-k")
187cc290419Sopenharmony_ci
188cc290419Sopenharmony_ci
189cc290419Sopenharmony_ci@pytest.mark.repeat(5)
190cc290419Sopenharmony_cidef test_install_multi_hsp():
191cc290419Sopenharmony_ci    # default multi hsp -s
192cc290419Sopenharmony_ci    tables = {
193cc290419Sopenharmony_ci        "libA_v10001.hsp" : "com.example.liba",
194cc290419Sopenharmony_ci        "libB_v10001.hsp" : "com.example.libb",
195cc290419Sopenharmony_ci    }
196cc290419Sopenharmony_ci    assert check_app_install_multi(tables, "-s")
197cc290419Sopenharmony_ci    assert check_app_uninstall_multi(tables, "-s")
198cc290419Sopenharmony_ci    assert check_app_install_multi(tables)
199cc290419Sopenharmony_ci
200cc290419Sopenharmony_ci
201cc290419Sopenharmony_ci@pytest.mark.repeat(5)
202cc290419Sopenharmony_cidef test_install_hsp_and_hap():
203cc290419Sopenharmony_ci    #default multi hsp and hsp
204cc290419Sopenharmony_ci    tables = {
205cc290419Sopenharmony_ci        "libA_v10001.hsp" : "com.example.liba",
206cc290419Sopenharmony_ci        "entry-default-signed-debug.hap" : "com.hmos.diagnosis",
207cc290419Sopenharmony_ci    }
208cc290419Sopenharmony_ci    assert check_app_install_multi(tables)
209cc290419Sopenharmony_ci    assert check_app_install_multi(tables, "-s")
210cc290419Sopenharmony_ci
211cc290419Sopenharmony_ci
212cc290419Sopenharmony_ci@pytest.mark.repeat(5)
213cc290419Sopenharmony_cidef test_install_dir():
214cc290419Sopenharmony_ci    package_haps_dir = "app_dir"
215cc290419Sopenharmony_ci    app_name_default = "com.hmos.diagnosis"
216cc290419Sopenharmony_ci    assert check_app_install(package_haps_dir, app_name_default)
217cc290419Sopenharmony_ci    assert check_app_uninstall(app_name_default)
218cc290419Sopenharmony_ci
219cc290419Sopenharmony_ci
220cc290419Sopenharmony_cidef test_server_kill():
221cc290419Sopenharmony_ci    assert check_hdc_cmd("kill", "Kill server finish")
222cc290419Sopenharmony_ci    assert check_hdc_cmd("start server", "")
223cc290419Sopenharmony_ci
224cc290419Sopenharmony_ci
225cc290419Sopenharmony_cidef test_target_cmd():
226cc290419Sopenharmony_ci    assert check_hdc_targets()
227cc290419Sopenharmony_ci    time.sleep(3)
228cc290419Sopenharmony_ci    check_hdc_cmd("target boot")
229cc290419Sopenharmony_ci    start_time = time.time()
230cc290419Sopenharmony_ci    run_command_with_timeout("hdc wait", 60) # reboot takes up to 60 seconds
231cc290419Sopenharmony_ci    end_time = time.time()
232cc290419Sopenharmony_ci    print(f"command exec time {end_time - start_time}")
233cc290419Sopenharmony_ci    assert (end_time - start_time) > 5 # Reboot takes at least 5 seconds
234cc290419Sopenharmony_ci
235cc290419Sopenharmony_ci
236cc290419Sopenharmony_ci@pytest.mark.repeat(1)
237cc290419Sopenharmony_cidef test_file_switch_off():
238cc290419Sopenharmony_ci    assert check_hdc_cmd("shell param set persist.hdc.control.file false")
239cc290419Sopenharmony_ci    assert check_shell(f"shell param get persist.hdc.control.file", "false")
240cc290419Sopenharmony_ci    assert check_shell(f"file send {get_local_path('small')} {get_remote_path('it_small')}",
241cc290419Sopenharmony_ci                       "debugging is not allowed")
242cc290419Sopenharmony_ci    assert check_shell(f"file recv {get_remote_path('it_small')} {get_local_path('small_recv')}",
243cc290419Sopenharmony_ci                       "debugging is not allowed")
244cc290419Sopenharmony_ci
245cc290419Sopenharmony_ci
246cc290419Sopenharmony_ci@pytest.mark.repeat(1)
247cc290419Sopenharmony_cidef test_file_switch_on():
248cc290419Sopenharmony_ci    assert check_hdc_cmd("shell param set persist.hdc.control.file true")
249cc290419Sopenharmony_ci    assert check_shell(f"shell param get persist.hdc.control.file", "true")
250cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file send {get_local_path('small')} {get_remote_path('it_small')}")
251cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file recv {get_remote_path('it_small')} {get_local_path('small_recv')}")
252cc290419Sopenharmony_ci
253cc290419Sopenharmony_ci
254cc290419Sopenharmony_cidef test_target_mount():
255cc290419Sopenharmony_ci    assert (check_hdc_cmd("target mount", "Mount finish" or "[Fail]Operate need running as root"))
256cc290419Sopenharmony_ci    remount_vendor = get_shell_result(f'shell "mount |grep /vendor |head -1"')
257cc290419Sopenharmony_ci    print(remount_vendor)
258cc290419Sopenharmony_ci    assert "rw" in remount_vendor
259cc290419Sopenharmony_ci    remount_system = get_shell_result(f'shell "cat /proc/mounts | grep /system |head -1"')
260cc290419Sopenharmony_ci    print(remount_system)
261cc290419Sopenharmony_ci    assert "rw" in remount_system
262cc290419Sopenharmony_ci
263cc290419Sopenharmony_ci
264cc290419Sopenharmony_cidef test_tmode_port():
265cc290419Sopenharmony_ci    assert (check_hdc_cmd("tmode port", "Set device run mode successful"))
266cc290419Sopenharmony_ci    time.sleep(5)
267cc290419Sopenharmony_ci    assert (check_hdc_cmd("tmode port 12345"))
268cc290419Sopenharmony_ci    time.sleep(5)
269cc290419Sopenharmony_ci    netstat_port = get_shell_result(f'shell "netstat -anp | grep 12345"')
270cc290419Sopenharmony_ci    print(netstat_port)
271cc290419Sopenharmony_ci    assert "LISTEN" in netstat_port
272cc290419Sopenharmony_ci    assert "hdcd" in netstat_port
273cc290419Sopenharmony_ci
274cc290419Sopenharmony_ci
275cc290419Sopenharmony_cidef test_target_key():
276cc290419Sopenharmony_ci    device_key = get_shell_result(f"list targets").split("\r\n")[0]
277cc290419Sopenharmony_ci    hdcd_pid = get_shell_result(f"-t {device_key} shell pgrep -x hdcd").split("\r\n")[0]
278cc290419Sopenharmony_ci    assert hdcd_pid.isdigit()
279cc290419Sopenharmony_ci
280cc290419Sopenharmony_ci
281cc290419Sopenharmony_cidef test_version_cmd():
282cc290419Sopenharmony_ci    version = "Ver: 2.0.0a"
283cc290419Sopenharmony_ci    assert check_hdc_version("-v", version)
284cc290419Sopenharmony_ci    assert check_hdc_version("version", version)
285cc290419Sopenharmony_ci    assert check_hdc_version("checkserver", version)
286cc290419Sopenharmony_ci
287cc290419Sopenharmony_ci
288cc290419Sopenharmony_cidef test_fport_cmd():
289cc290419Sopenharmony_ci    fport_list = []
290cc290419Sopenharmony_ci    rport_list = []
291cc290419Sopenharmony_ci    start_port = 10000
292cc290419Sopenharmony_ci    end_port = 10020
293cc290419Sopenharmony_ci    for i in range(start_port, end_port):
294cc290419Sopenharmony_ci        fport = f"tcp:{i+100} tcp:{i+200}"
295cc290419Sopenharmony_ci        rport = f"tcp:{i+300} tcp:{i+400}"
296cc290419Sopenharmony_ci        localabs = f"tcp:{i+500} localabstract:{f'helloworld.com.app.{i+600}'}"
297cc290419Sopenharmony_ci        fport_list.append(fport)
298cc290419Sopenharmony_ci        rport_list.append(rport)
299cc290419Sopenharmony_ci        fport_list.append(localabs)
300cc290419Sopenharmony_ci
301cc290419Sopenharmony_ci    for fport in fport_list:
302cc290419Sopenharmony_ci        assert check_hdc_cmd(f"fport {fport}", "Forwardport result:OK")
303cc290419Sopenharmony_ci        assert check_hdc_cmd(f"fport {fport}", "TCP Port listen failed at")
304cc290419Sopenharmony_ci        assert check_hdc_cmd("fport ls", fport)
305cc290419Sopenharmony_ci
306cc290419Sopenharmony_ci    for fport in fport_list:
307cc290419Sopenharmony_ci        assert check_hdc_cmd(f"fport rm {fport}", "success")
308cc290419Sopenharmony_ci        assert not check_hdc_cmd("fport ls", fport)
309cc290419Sopenharmony_ci
310cc290419Sopenharmony_ci    for rport in rport_list:
311cc290419Sopenharmony_ci        assert check_hdc_cmd(f"rport {rport}", "Forwardport result:OK")
312cc290419Sopenharmony_ci        assert check_hdc_cmd(f"rport {rport}", "TCP Port listen failed at")
313cc290419Sopenharmony_ci        assert check_hdc_cmd("rport ls", rport) or check_hdc_cmd("fport ls", rport)
314cc290419Sopenharmony_ci
315cc290419Sopenharmony_ci    for rport in rport_list:
316cc290419Sopenharmony_ci        assert check_hdc_cmd(f"fport rm {rport}", "success")
317cc290419Sopenharmony_ci        assert not check_hdc_cmd("rport ls", fport) and not check_hdc_cmd("fport ls", fport)
318cc290419Sopenharmony_ci
319cc290419Sopenharmony_ci    task_str1 = "tcp:33333 tcp:33333"
320cc290419Sopenharmony_ci    assert check_hdc_cmd(f"fport {task_str1}", "Forwardport result:OK")
321cc290419Sopenharmony_ci    assert check_hdc_cmd(f"fport rm {task_str1}", "success")
322cc290419Sopenharmony_ci    assert check_hdc_cmd(f"fport {task_str1}", "Forwardport result:OK")
323cc290419Sopenharmony_ci    assert check_hdc_cmd(f"fport rm {task_str1}", "success")
324cc290419Sopenharmony_ci
325cc290419Sopenharmony_ci    task_str2 = "tcp:44444 tcp:44444"
326cc290419Sopenharmony_ci    assert check_hdc_cmd(f"rport {task_str2}", "Forwardport result:OK")
327cc290419Sopenharmony_ci    assert check_hdc_cmd(f"fport rm {task_str2}", "success")
328cc290419Sopenharmony_ci    assert check_hdc_cmd(f"rport {task_str2}", "Forwardport result:OK")
329cc290419Sopenharmony_ci    assert check_hdc_cmd(f"fport rm {task_str2}", "success")
330cc290419Sopenharmony_ci
331cc290419Sopenharmony_ci
332cc290419Sopenharmony_cidef test_shell_cmd_timecost():
333cc290419Sopenharmony_ci    assert check_cmd_time(
334cc290419Sopenharmony_ci        cmd="shell \"ps -ef | grep hdcd\"",
335cc290419Sopenharmony_ci        pattern="hdcd",
336cc290419Sopenharmony_ci        duration=None,
337cc290419Sopenharmony_ci        times=10)
338cc290419Sopenharmony_ci
339cc290419Sopenharmony_ci
340cc290419Sopenharmony_cidef test_shell_huge_cat():
341cc290419Sopenharmony_ci    assert check_hdc_cmd(f"file send {get_local_path('word_100M.txt')} {get_remote_path('it_word_100M.txt')}")
342cc290419Sopenharmony_ci    assert check_cmd_time(
343cc290419Sopenharmony_ci        cmd=f"shell cat {get_remote_path('it_word_100M.txt')}",
344cc290419Sopenharmony_ci        pattern=None,
345cc290419Sopenharmony_ci        duration=10000, # 10 seconds
346cc290419Sopenharmony_ci        times=10)
347cc290419Sopenharmony_ci
348cc290419Sopenharmony_ci
349cc290419Sopenharmony_cidef test_hdcd_rom():
350cc290419Sopenharmony_ci    baseline = 2200 # 2200KB
351cc290419Sopenharmony_ci    assert check_rom(baseline)
352cc290419Sopenharmony_ci
353cc290419Sopenharmony_ci
354cc290419Sopenharmony_cidef test_smode_r():
355cc290419Sopenharmony_ci    assert check_hdc_cmd(f'smode -r')
356cc290419Sopenharmony_ci    run_command_with_timeout("hdc wait", 5)
357cc290419Sopenharmony_ci    time.sleep(1)
358cc290419Sopenharmony_ci    assert check_shell(f"shell id", "context=u:r:sh:s0")
359cc290419Sopenharmony_ci
360cc290419Sopenharmony_ci
361cc290419Sopenharmony_cidef test_smode():
362cc290419Sopenharmony_ci    assert check_hdc_cmd(f'smode')
363cc290419Sopenharmony_ci    run_command_with_timeout("hdc wait", 5)
364cc290419Sopenharmony_ci    time.sleep(1)
365cc290419Sopenharmony_ci    assert check_shell(f"shell id", "context=u:r:su:s0")
366cc290419Sopenharmony_ci    assert not check_hdc_cmd("ls /data/log/faultlog/faultlogger | grep hdcd", "hdcd")
367cc290419Sopenharmony_ci
368cc290419Sopenharmony_ci
369cc290419Sopenharmony_cidef setup_class():
370cc290419Sopenharmony_ci    print("setting up env ...")
371cc290419Sopenharmony_ci    check_hdc_cmd("shell rm -rf data/local/tmp/it_*")
372cc290419Sopenharmony_ci    GP.load()
373cc290419Sopenharmony_ci
374cc290419Sopenharmony_ci
375cc290419Sopenharmony_cidef teardown_class():
376cc290419Sopenharmony_ci    pass
377cc290419Sopenharmony_ci
378cc290419Sopenharmony_ci
379cc290419Sopenharmony_cidef run_main():
380cc290419Sopenharmony_ci    if check_library_installation("pytest"):
381cc290419Sopenharmony_ci        exit(1)
382cc290419Sopenharmony_ci
383cc290419Sopenharmony_ci    if check_library_installation("pytest-testreport"):
384cc290419Sopenharmony_ci        exit(1)
385cc290419Sopenharmony_ci
386cc290419Sopenharmony_ci    if check_library_installation("pytest-repeat"):
387cc290419Sopenharmony_ci        exit(1)
388cc290419Sopenharmony_ci
389cc290419Sopenharmony_ci    GP.init()
390cc290419Sopenharmony_ci
391cc290419Sopenharmony_ci    prepare_source()
392cc290419Sopenharmony_ci    update_source()
393cc290419Sopenharmony_ci
394cc290419Sopenharmony_ci    choice_default = ""
395cc290419Sopenharmony_ci    parser = argparse.ArgumentParser()
396cc290419Sopenharmony_ci    parser.add_argument('--count', type=int, default=1,
397cc290419Sopenharmony_ci                        help='test times')
398cc290419Sopenharmony_ci    parser.add_argument('--verbose', '-v', default=__file__,
399cc290419Sopenharmony_ci                        help='filename')
400cc290419Sopenharmony_ci    parser.add_argument('--desc', '-d', default='Test for function.',
401cc290419Sopenharmony_ci                        help='Add description on report')
402cc290419Sopenharmony_ci    args = parser.parse_args()
403cc290419Sopenharmony_ci
404cc290419Sopenharmony_ci    pytest_run(args)
405cc290419Sopenharmony_ci
406cc290419Sopenharmony_ci
407cc290419Sopenharmony_ciif __name__ == "__main__":
408cc290419Sopenharmony_ci    run_main()
409