1cc290419Sopenharmony_ci#!/usr/bin/env python3
2cc290419Sopenharmony_ci# -*- coding: utf-8 -*-
3cc290419Sopenharmony_ci# Copyright (C) 2021 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# 1.运行环境
16cc290419Sopenharmony_ci#   pycharm
17cc290419Sopenharmony_ci#   Python 3.10
18cc290419Sopenharmony_ci#   测试框架 pytest (pycharm setting -> Tools -> Testing -> pytest)
19cc290419Sopenharmony_ci# 2.配置测试脚本
20cc290419Sopenharmony_ci#   需配置hdc环境变量-NORMAL_HEAD为可执行程序hdc
21cc290419Sopenharmony_ci#   配置TEST_FILE_PATH为测试用文件所在路径,取resource测试文件放入该路径下
22cc290419Sopenharmony_ci#   测试tcp模式连接设备,需设备,PC连同一网络(手机热点):配置TCP_CFG['ip']为设备的ip
23cc290419Sopenharmony_ciimport os
24cc290419Sopenharmony_ciimport random
25cc290419Sopenharmony_ciimport subprocess
26cc290419Sopenharmony_ciimport socket
27cc290419Sopenharmony_ciimport time
28cc290419Sopenharmony_ciimport threading
29cc290419Sopenharmony_ci
30cc290419Sopenharmony_ciTCP_CFG = {
31cc290419Sopenharmony_ci    'ip': '',
32cc290419Sopenharmony_ci    'port': "8710",
33cc290419Sopenharmony_ci}
34cc290419Sopenharmony_ci
35cc290419Sopenharmony_ciNORMAL_HEAD = "hdc "
36cc290419Sopenharmony_ciREMOTE_PATH = "/data/local/tmp/"
37cc290419Sopenharmony_ciIP = ""
38cc290419Sopenharmony_ciTEST_FILE_PATH = "{}{}".format(os.path.abspath("D:/Download/sdk/"), '\\')
39cc290419Sopenharmony_ci
40cc290419Sopenharmony_ciHAP_ONE = {
41cc290419Sopenharmony_ci    'HAP_NAME': "entry-default-signed-debug.hap",
42cc290419Sopenharmony_ci    'PACKAGE_NAME': "com.hmos.diagnosis",
43cc290419Sopenharmony_ci}
44cc290419Sopenharmony_ci
45cc290419Sopenharmony_ciTCP_CONN = {
46cc290419Sopenharmony_ci    'bright_screen': "shell \"power-shell setmode 602\"",
47cc290419Sopenharmony_ci    'tmode': "{}{}".format("tmode port ", TCP_CFG['port']),
48cc290419Sopenharmony_ci    'tconn': "{}{}{}{}".format("tconn ", TCP_CFG['ip'], ":", TCP_CFG['port']),
49cc290419Sopenharmony_ci}
50cc290419Sopenharmony_ci
51cc290419Sopenharmony_ciPATH = {
52cc290419Sopenharmony_ci    'file_send': {
53cc290419Sopenharmony_ci        'local': "{}{}".format(TEST_FILE_PATH, "hdc.log"),
54cc290419Sopenharmony_ci        'remote': "{}{}".format(REMOTE_PATH, "hdc.log")
55cc290419Sopenharmony_ci    },
56cc290419Sopenharmony_ci    'dir_send': {
57cc290419Sopenharmony_ci        'local': "{}{}".format(TEST_FILE_PATH, "log"),
58cc290419Sopenharmony_ci        'remote': "{}{}".format(REMOTE_PATH, "log")
59cc290419Sopenharmony_ci    },
60cc290419Sopenharmony_ci    'file_recv': {
61cc290419Sopenharmony_ci        'remote': "{}{}".format(REMOTE_PATH, "hdc.log"),
62cc290419Sopenharmony_ci        'local': "{}{}".format(TEST_FILE_PATH, "dev_data")
63cc290419Sopenharmony_ci    },
64cc290419Sopenharmony_ci    'dir_recv': {
65cc290419Sopenharmony_ci        'remote': "{}{}".format(REMOTE_PATH, "log"),
66cc290419Sopenharmony_ci        'local': "{}{}".format(TEST_FILE_PATH, "hdc\\log")
67cc290419Sopenharmony_ci    },
68cc290419Sopenharmony_ci    'file_empty': {
69cc290419Sopenharmony_ci        'local': "{}{}".format(TEST_FILE_PATH, "empty.txt"),
70cc290419Sopenharmony_ci        'remote': "{}{}".format(REMOTE_PATH, "empty.txt")
71cc290419Sopenharmony_ci    }
72cc290419Sopenharmony_ci}
73cc290419Sopenharmony_ci
74cc290419Sopenharmony_ciEXTRA_COMMANDS = {
75cc290419Sopenharmony_ci    'global': ["kill -r", "kill", "-l5 start", "start -r", "-v", "version", "checkserver"],
76cc290419Sopenharmony_ci    'smode': ["smode -r", "smode"],
77cc290419Sopenharmony_ci    'boot': ["target boot"],
78cc290419Sopenharmony_ci    'choose': "-t "
79cc290419Sopenharmony_ci}
80cc290419Sopenharmony_ci
81cc290419Sopenharmony_ciBASIC_COMMANDS = {
82cc290419Sopenharmony_ci    'shell': [
83cc290419Sopenharmony_ci        "shell \"ls\""
84cc290419Sopenharmony_ci    ],
85cc290419Sopenharmony_ci    'component': [
86cc290419Sopenharmony_ci        "list targets", "list targets -v", "target mount"
87cc290419Sopenharmony_ci    ],
88cc290419Sopenharmony_ci    'file_task': [
89cc290419Sopenharmony_ci        "{}{}{}{}".format("file send ", PATH['file_send']['local'], " ", PATH['file_send']['remote']),
90cc290419Sopenharmony_ci        "{}{}{}{}".format("file send ", PATH['file_empty']['local'], " ", PATH['file_empty']['remote']),
91cc290419Sopenharmony_ci        "{}{}{}{}".format("file send ", PATH['dir_send']['local'], " ", PATH['dir_send']['remote']),
92cc290419Sopenharmony_ci        "{}{}{}{}".format("file recv ", PATH['file_recv']['remote'], " ", PATH['file_recv']['local']),
93cc290419Sopenharmony_ci        "{}{}{}{}".format("file recv ", PATH['file_empty']['remote'], " ", PATH['file_empty']['local']),
94cc290419Sopenharmony_ci        "{}{}{}{}".format("file recv ", PATH['dir_recv']['remote'], " ", PATH['dir_recv']['local'])
95cc290419Sopenharmony_ci    ],
96cc290419Sopenharmony_ci    'fport_task': [
97cc290419Sopenharmony_ci        "fport tcp:1234 tcp:1080",
98cc290419Sopenharmony_ci        "rport tcp:13608 localabstract:8888BananaBanana",
99cc290419Sopenharmony_ci        "fport ls",
100cc290419Sopenharmony_ci        "fport rm tcp:1234 tcp:1080"
101cc290419Sopenharmony_ci    ],
102cc290419Sopenharmony_ci    'install_task': [
103cc290419Sopenharmony_ci        "{}{}{}".format("install ", TEST_FILE_PATH, HAP_ONE['HAP_NAME']),
104cc290419Sopenharmony_ci        "{}{}".format("uninstall ", HAP_ONE['PACKAGE_NAME'])
105cc290419Sopenharmony_ci    ]
106cc290419Sopenharmony_ci}
107cc290419Sopenharmony_ci
108cc290419Sopenharmony_ciTEST_FILES = {
109cc290419Sopenharmony_ci    'one': {
110cc290419Sopenharmony_ci        'send_file': "{}{}".format(TEST_FILE_PATH, "100M.txt"),
111cc290419Sopenharmony_ci        'send_file_one': "{}{}".format(REMOTE_PATH, "a100M.txt"),
112cc290419Sopenharmony_ci        'send_file_two': "{}{}".format(REMOTE_PATH, "c100M.txt"),
113cc290419Sopenharmony_ci        'recv_file': "{}{}".format(REMOTE_PATH, "recv100M.txt"),
114cc290419Sopenharmony_ci        'recv_file_one': "{}{}".format(TEST_FILE_PATH, "recv100M.txt"),
115cc290419Sopenharmony_ci        'recv_file_two': "{}{}".format(TEST_FILE_PATH, "recv200M.txt"),
116cc290419Sopenharmony_ci    },
117cc290419Sopenharmony_ci    'two': {
118cc290419Sopenharmony_ci        'send_file': "{}{}".format(TEST_FILE_PATH, "hdc_file.log"),
119cc290419Sopenharmony_ci        'send_file_one': "{}{}".format(REMOTE_PATH, "send_one.log"),
120cc290419Sopenharmony_ci        'send_file_two': "{}{}".format(REMOTE_PATH, "send_two.log"),
121cc290419Sopenharmony_ci        'recv_file': "{}{}".format(REMOTE_PATH, "hdcd.log"),
122cc290419Sopenharmony_ci        'recv_file_one': "{}{}".format(TEST_FILE_PATH, "recv_one.log"),
123cc290419Sopenharmony_ci        'recv_file_two': "{}{}".format(TEST_FILE_PATH, "recv_two.log"),
124cc290419Sopenharmony_ci    }
125cc290419Sopenharmony_ci}
126cc290419Sopenharmony_ci
127cc290419Sopenharmony_ci
128cc290419Sopenharmony_cidef command_judge(cmd):
129cc290419Sopenharmony_ci    ret = False
130cc290419Sopenharmony_ci    cmd_parts = cmd.split()
131cc290419Sopenharmony_ci    if 'file send' in cmd and cmd[:9] == 'file send' and len(cmd_parts) == 4:
132cc290419Sopenharmony_ci        ret = True
133cc290419Sopenharmony_ci    if 'file recv' in cmd and cmd[:9] == 'file recv' and len(cmd_parts) == 4:
134cc290419Sopenharmony_ci        ret = True
135cc290419Sopenharmony_ci    if 'install' in cmd and cmd[:7] == 'install' and len(cmd_parts) == 2:
136cc290419Sopenharmony_ci        ret = True
137cc290419Sopenharmony_ci    return ret
138cc290419Sopenharmony_ci
139cc290419Sopenharmony_ci
140cc290419Sopenharmony_cidef command_callback(cmd, head, need_del, res=""):
141cc290419Sopenharmony_ci    cmd_parts = cmd.split()
142cc290419Sopenharmony_ci    if 'file send' in cmd and cmd[:9] == 'file send' and len(cmd_parts) == 4:
143cc290419Sopenharmony_ci        if need_del:
144cc290419Sopenharmony_ci            assert "FileTransfer finish" in res
145cc290419Sopenharmony_ci        check_file_send(cmd_parts[2], cmd_parts[3], head, need_del)
146cc290419Sopenharmony_ci    if 'file recv' in cmd and cmd[:9] == 'file recv' and len(cmd_parts) == 4:
147cc290419Sopenharmony_ci        if need_del:
148cc290419Sopenharmony_ci            assert "FileTransfer finish" in res
149cc290419Sopenharmony_ci        check_file_recv(cmd_parts[2], cmd_parts[3], head, need_del)
150cc290419Sopenharmony_ci    if 'install' in cmd and cmd[:7] == 'install' and len(cmd_parts) == 2:
151cc290419Sopenharmony_ci        check_install(head, res)
152cc290419Sopenharmony_ci    if cmd == 'smode':
153cc290419Sopenharmony_ci        time.sleep(4)
154cc290419Sopenharmony_ci        check_root(head)
155cc290419Sopenharmony_ci    if cmd == 'smode -r':
156cc290419Sopenharmony_ci        time.sleep(4)
157cc290419Sopenharmony_ci        check_user(head)
158cc290419Sopenharmony_ci    if cmd == 'target boot':
159cc290419Sopenharmony_ci        time.sleep(35)
160cc290419Sopenharmony_ci
161cc290419Sopenharmony_ci
162cc290419Sopenharmony_cidef check_file_send(local_file, remote_file, head, need_del):
163cc290419Sopenharmony_ci    ret = get_win_file_type(local_file)
164cc290419Sopenharmony_ci    file_type = ""
165cc290419Sopenharmony_ci    if 'file' in ret:
166cc290419Sopenharmony_ci        file_type = '-f'
167cc290419Sopenharmony_ci    if "dir" in ret:
168cc290419Sopenharmony_ci        file_type = '-d'
169cc290419Sopenharmony_ci    res = run_command_stdout("{}{}{}{}{}".format("shell \"[ ", file_type, " ", remote_file,
170cc290419Sopenharmony_ci                             " ] && echo yes || echo no\""), head)
171cc290419Sopenharmony_ci    assert 'yes' in res
172cc290419Sopenharmony_ci    if file_type == '-d' or 'empty.txt' in local_file:
173cc290419Sopenharmony_ci        rm_send_file(remote_file, head, need_del)
174cc290419Sopenharmony_ci        return
175cc290419Sopenharmony_ci    local_md5 = get_win_md5(local_file)
176cc290419Sopenharmony_ci    remote_md5 = get_md5(remote_file, head)
177cc290419Sopenharmony_ci    rm_send_file(remote_file, head, need_del)
178cc290419Sopenharmony_ci    assert local_md5 == remote_md5
179cc290419Sopenharmony_ci    print("check_file_send success ", res)
180cc290419Sopenharmony_ci
181cc290419Sopenharmony_ci
182cc290419Sopenharmony_cidef rm_send_file(file_path, head, need_del):
183cc290419Sopenharmony_ci    if need_del:
184cc290419Sopenharmony_ci        run_command("{}{}{}{}".format("shell \"rm -rf ", file_path, "\"", head))
185cc290419Sopenharmony_ci
186cc290419Sopenharmony_ci
187cc290419Sopenharmony_cidef check_file_recv(remote_file, local_file, head, need_del):
188cc290419Sopenharmony_ci    if 'dir' in get_win_file_type(local_file) or 'empty.txt' in local_file:
189cc290419Sopenharmony_ci        rm_recv_file(local_file, need_del)
190cc290419Sopenharmony_ci        return
191cc290419Sopenharmony_ci    res = run_command_stdout("{}{}{}".format("attrib ", local_file, ""))
192cc290419Sopenharmony_ci    local_md5 = get_win_md5(local_file)
193cc290419Sopenharmony_ci    remote_md5 = get_md5(remote_file, head)
194cc290419Sopenharmony_ci    assert '-' not in res
195cc290419Sopenharmony_ci    if local_md5 != remote_md5:
196cc290419Sopenharmony_ci        print("check_file_recv fail ", remote_file, local_file)
197cc290419Sopenharmony_ci    assert local_md5 == remote_md5
198cc290419Sopenharmony_ci    rm_recv_file(local_file, need_del)
199cc290419Sopenharmony_ci    print("check_file_recv success ", res)
200cc290419Sopenharmony_ci
201cc290419Sopenharmony_ci
202cc290419Sopenharmony_cidef get_win_file_type(file_path):
203cc290419Sopenharmony_ci    ret = run_command_stdout("{}{}{}".format("if exist ", file_path, " echo yes"), '')
204cc290419Sopenharmony_ci    assert "yes" in ret
205cc290419Sopenharmony_ci    res = run_command_stdout("{}{}{}".format("dir/ad ", file_path, " >nul 2>nul && echo dir || echo file"), '')
206cc290419Sopenharmony_ci    return res
207cc290419Sopenharmony_ci
208cc290419Sopenharmony_ci
209cc290419Sopenharmony_cidef rm_recv_file(file_path, need_del):
210cc290419Sopenharmony_ci    if need_del:
211cc290419Sopenharmony_ci        res = get_win_file_type(file_path)
212cc290419Sopenharmony_ci        if "dir" in res:
213cc290419Sopenharmony_ci            run_command("{}{}".format("rmdir /s/q ", file_path), "")
214cc290419Sopenharmony_ci        if "file" in res:
215cc290419Sopenharmony_ci            run_command("{}{}".format("del ", file_path), "")
216cc290419Sopenharmony_ci
217cc290419Sopenharmony_ci
218cc290419Sopenharmony_cidef check_install(head, res):
219cc290419Sopenharmony_ci    print("check_install")
220cc290419Sopenharmony_ci    print(res)
221cc290419Sopenharmony_ci    if "msg:install bundle successfully." not in res:
222cc290419Sopenharmony_ci        print("install msg error")
223cc290419Sopenharmony_ci        assert False
224cc290419Sopenharmony_ci    res = run_command_stdout("shell \"bm dump -a\"", head)
225cc290419Sopenharmony_ci    if HAP_ONE['PACKAGE_NAME'] in res:
226cc290419Sopenharmony_ci        print("check_install success ", HAP_ONE['PACKAGE_NAME'])
227cc290419Sopenharmony_ci        assert True
228cc290419Sopenharmony_ci    else:
229cc290419Sopenharmony_ci        assert False
230cc290419Sopenharmony_ci
231cc290419Sopenharmony_ci
232cc290419Sopenharmony_cidef check_root(head):
233cc290419Sopenharmony_ci    res = run_command_stdout("shell \"whoami\"", head)
234cc290419Sopenharmony_ci    print("check_root res: ", res)
235cc290419Sopenharmony_ci    assert 'root' in res
236cc290419Sopenharmony_ci
237cc290419Sopenharmony_ci
238cc290419Sopenharmony_cidef check_user(head):
239cc290419Sopenharmony_ci    res = run_command_stdout("shell \"whoami\"", head)
240cc290419Sopenharmony_ci    print("check_user res: ", res)
241cc290419Sopenharmony_ci    assert 'shell' in res
242cc290419Sopenharmony_ci    return 'shell' in res
243cc290419Sopenharmony_ci
244cc290419Sopenharmony_ci
245cc290419Sopenharmony_cidef get_devs(head=NORMAL_HEAD):
246cc290419Sopenharmony_ci    res = run_command_stdout(BASIC_COMMANDS['component'][0], head)
247cc290419Sopenharmony_ci    devs = res.split()
248cc290419Sopenharmony_ci    print(devs)
249cc290419Sopenharmony_ci    return devs
250cc290419Sopenharmony_ci
251cc290419Sopenharmony_ci
252cc290419Sopenharmony_cidef tmode_to_tcp():
253cc290419Sopenharmony_ci    run_command(TCP_CONN['tmode'])
254cc290419Sopenharmony_ci    res = run_command_stdout(TCP_CONN['tconn'])
255cc290419Sopenharmony_ci    print(res)
256cc290419Sopenharmony_ci    if "Connect OK" in res:
257cc290419Sopenharmony_ci        return True
258cc290419Sopenharmony_ci    return False
259cc290419Sopenharmony_ci
260cc290419Sopenharmony_ci
261cc290419Sopenharmony_cidef remote_server_start(server_head):
262cc290419Sopenharmony_ci    global IP
263cc290419Sopenharmony_ci    cmd = "{}{}".format(server_head, "-m")
264cc290419Sopenharmony_ci    print(cmd)
265cc290419Sopenharmony_ci    os.popen(cmd)
266cc290419Sopenharmony_ci
267cc290419Sopenharmony_ci
268cc290419Sopenharmony_cidef run_command(cmd, head=NORMAL_HEAD, need_del=True, need_callback=True):
269cc290419Sopenharmony_ci    command = "{}{}".format(head, cmd)
270cc290419Sopenharmony_ci    if head != '':
271cc290419Sopenharmony_ci        print(command)
272cc290419Sopenharmony_ci
273cc290419Sopenharmony_ci    subprocess.Popen(command,
274cc290419Sopenharmony_ci                     shell=True).communicate()
275cc290419Sopenharmony_ci    if need_callback:
276cc290419Sopenharmony_ci        command_callback(cmd, head, need_del)
277cc290419Sopenharmony_ci
278cc290419Sopenharmony_ci
279cc290419Sopenharmony_cidef run_command_stdout(cmd, head=NORMAL_HEAD, need_del=True, need_callback=True):
280cc290419Sopenharmony_ci    command = "{}{}".format(head, cmd)
281cc290419Sopenharmony_ci    if head != '' and 'echo' not in cmd:
282cc290419Sopenharmony_ci        print(command)
283cc290419Sopenharmony_ci    dec = "UTF-8"
284cc290419Sopenharmony_ci    if head == '':
285cc290419Sopenharmony_ci        dec = 'gbk'
286cc290419Sopenharmony_ci    res = subprocess.Popen(command,
287cc290419Sopenharmony_ci                           shell=True,
288cc290419Sopenharmony_ci                           stdout=subprocess.PIPE).communicate()
289cc290419Sopenharmony_ci    res = res[0].decode(dec)
290cc290419Sopenharmony_ci    if need_callback:
291cc290419Sopenharmony_ci        command_callback(cmd, head, need_del, res)
292cc290419Sopenharmony_ci    return res
293cc290419Sopenharmony_ci
294cc290419Sopenharmony_ci
295cc290419Sopenharmony_cidef run_commands(cmds, head=NORMAL_HEAD, need_del=True):
296cc290419Sopenharmony_ci    for command in cmds:
297cc290419Sopenharmony_ci        run_command(command, head, need_del)
298cc290419Sopenharmony_ci
299cc290419Sopenharmony_ci
300cc290419Sopenharmony_cidef get_basic_commands():
301cc290419Sopenharmony_ci    commands = []
302cc290419Sopenharmony_ci    for tasks in BASIC_COMMANDS.values():
303cc290419Sopenharmony_ci        commands += tasks
304cc290419Sopenharmony_ci    return commands
305cc290419Sopenharmony_ci
306cc290419Sopenharmony_ci
307cc290419Sopenharmony_cidef run_global_cmd():
308cc290419Sopenharmony_ci    global_commands = EXTRA_COMMANDS['global']
309cc290419Sopenharmony_ci    run_commands(global_commands)
310cc290419Sopenharmony_ci
311cc290419Sopenharmony_ci
312cc290419Sopenharmony_cidef run_split_commands(commands, head=NORMAL_HEAD):
313cc290419Sopenharmony_ci    for command in commands:
314cc290419Sopenharmony_ci        if command_judge(command):
315cc290419Sopenharmony_ci            run_command_stdout(command, head, False)
316cc290419Sopenharmony_ci        else:
317cc290419Sopenharmony_ci            run_command(command, head, False)
318cc290419Sopenharmony_ci
319cc290419Sopenharmony_ci
320cc290419Sopenharmony_cidef run_device_cmd(head=NORMAL_HEAD):
321cc290419Sopenharmony_ci    run_command_stdout("{}{}{}{}".format("file send ", PATH['dir_send']['local'], " ", PATH['dir_recv']['remote']),
322cc290419Sopenharmony_ci                       head, False)
323cc290419Sopenharmony_ci    for smd in EXTRA_COMMANDS['smode']:
324cc290419Sopenharmony_ci        run_command(smd)
325cc290419Sopenharmony_ci        commands = get_basic_commands() + EXTRA_COMMANDS['boot']
326cc290419Sopenharmony_ci        if smd == "smode -r":
327cc290419Sopenharmony_ci            for item in commands:
328cc290419Sopenharmony_ci                if "{}{}".format(REMOTE_PATH, "log") in item:
329cc290419Sopenharmony_ci                    print(item)
330cc290419Sopenharmony_ci                    commands.remove(item)
331cc290419Sopenharmony_ci        run_split_commands(commands, head)
332cc290419Sopenharmony_ci
333cc290419Sopenharmony_ci
334cc290419Sopenharmony_cidef extract_ip():
335cc290419Sopenharmony_ci    global IP
336cc290419Sopenharmony_ci    st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
337cc290419Sopenharmony_ci    try:
338cc290419Sopenharmony_ci        st.connect(('10.255.255.255', 1))
339cc290419Sopenharmony_ci        IP = st.getsockname()[0]
340cc290419Sopenharmony_ci    except Exception:
341cc290419Sopenharmony_ci        IP = ""
342cc290419Sopenharmony_ci    finally:
343cc290419Sopenharmony_ci        st.close()
344cc290419Sopenharmony_ci    return IP
345cc290419Sopenharmony_ci
346cc290419Sopenharmony_ci
347cc290419Sopenharmony_cidef mix_path(path, i):
348cc290419Sopenharmony_ci    ret = path.find('.')
349cc290419Sopenharmony_ci    if ret > 0:
350cc290419Sopenharmony_ci        return "{}{}{}".format(path[:ret], i, path[ret:])
351cc290419Sopenharmony_ci    return path
352cc290419Sopenharmony_ci
353cc290419Sopenharmony_ci
354cc290419Sopenharmony_cidef file_send(send_path, recv_path, i, wait_time=0):
355cc290419Sopenharmony_ci    time.sleep(wait_time)
356cc290419Sopenharmony_ci    res = run_command_stdout("{}{}{}{}".format("file send ", send_path, " ", mix_path(recv_path, str(i))))
357cc290419Sopenharmony_ci    print(res)
358cc290419Sopenharmony_ci
359cc290419Sopenharmony_ci
360cc290419Sopenharmony_cidef file_recv(remote_path, recv_path, i, wait_time=0):
361cc290419Sopenharmony_ci    time.sleep(wait_time)
362cc290419Sopenharmony_ci    res = run_command_stdout("{}{}{}{}".format("file recv ", remote_path, " ", mix_path(recv_path, str(i))))
363cc290419Sopenharmony_ci    print(res)
364cc290419Sopenharmony_ci
365cc290419Sopenharmony_ci
366cc290419Sopenharmony_cidef get_win_md5(file_path):
367cc290419Sopenharmony_ci    real_md5 = "win_md5"
368cc290419Sopenharmony_ci    send_md5 = run_command_stdout("{}{}{}".format("certutil -hashfile ", os.path.abspath(file_path), " MD5"),
369cc290419Sopenharmony_ci                                  "").split()
370cc290419Sopenharmony_ci    for x in send_md5:
371cc290419Sopenharmony_ci        if len(x) == 32:
372cc290419Sopenharmony_ci            real_md5 = x
373cc290419Sopenharmony_ci    return real_md5
374cc290419Sopenharmony_ci
375cc290419Sopenharmony_ci
376cc290419Sopenharmony_cidef get_md5(file_path, head=NORMAL_HEAD):
377cc290419Sopenharmony_ci    md5 = run_command_stdout("{}{}{}".format("shell \"md5sum ", file_path, "\""), head)
378cc290419Sopenharmony_ci    return md5.split()[0]
379cc290419Sopenharmony_ci
380cc290419Sopenharmony_ci
381cc290419Sopenharmony_ciclass TestCommands:
382cc290419Sopenharmony_ci    def test_file_cmd(self):
383cc290419Sopenharmony_ci        print("HDC TEST: start test_file_cmd\n")
384cc290419Sopenharmony_ci        for item in TEST_FILES:
385cc290419Sopenharmony_ci            send_file = TEST_FILES[item]['send_file']
386cc290419Sopenharmony_ci            send_file_one = TEST_FILES[item]['send_file_one']
387cc290419Sopenharmony_ci            send_file_two = TEST_FILES[item]['send_file_two']
388cc290419Sopenharmony_ci
389cc290419Sopenharmony_ci            recv_file = TEST_FILES[item]['recv_file']
390cc290419Sopenharmony_ci            recv_file_one = TEST_FILES[item]['recv_file_one']
391cc290419Sopenharmony_ci            recv_file_two = TEST_FILES[item]['recv_file_two']
392cc290419Sopenharmony_ci
393cc290419Sopenharmony_ci            run_command_stdout("{}{}{}{}".format("file send ", os.path.abspath(PATH['file_empty']['local']), ' ',
394cc290419Sopenharmony_ci                               PATH['file_empty']['remote']), NORMAL_HEAD, False, False)
395cc290419Sopenharmony_ci            run_command_stdout("{}{}{}{}".format("file send ", os.path.abspath(send_file), ' ', recv_file),
396cc290419Sopenharmony_ci                               NORMAL_HEAD, False)
397cc290419Sopenharmony_ci            for i in range(10):
398cc290419Sopenharmony_ci                wait_time = random.uniform(0, 1)
399cc290419Sopenharmony_ci                if i == 0:
400cc290419Sopenharmony_ci                    wait_time = 0
401cc290419Sopenharmony_ci                print("{}{}".format("HDC TEST: start test_file_cmd \n", str(i)))
402cc290419Sopenharmony_ci                send_one = threading.Thread(target=file_send, args=(os.path.abspath(send_file), send_file_one, i))
403cc290419Sopenharmony_ci                send_two = threading.Thread(target=file_send,
404cc290419Sopenharmony_ci                                            args=(os.path.abspath(send_file), send_file_two, i, wait_time))
405cc290419Sopenharmony_ci                recv_one = threading.Thread(target=file_recv, args=(recv_file, os.path.abspath(recv_file_one), i))
406cc290419Sopenharmony_ci                recv_two = threading.Thread(target=file_recv,
407cc290419Sopenharmony_ci                                            args=(recv_file, os.path.abspath(recv_file_two), i, wait_time))
408cc290419Sopenharmony_ci
409cc290419Sopenharmony_ci                send_one.start()
410cc290419Sopenharmony_ci                send_two.start()
411cc290419Sopenharmony_ci                recv_one.start()
412cc290419Sopenharmony_ci                recv_two.start()
413cc290419Sopenharmony_ci                send_one.join()
414cc290419Sopenharmony_ci                send_two.join()
415cc290419Sopenharmony_ci                recv_one.join()
416cc290419Sopenharmony_ci                recv_two.join()
417cc290419Sopenharmony_ci
418cc290419Sopenharmony_ci    def test_global_server(self):
419cc290419Sopenharmony_ci        print("HDC TEST: start test_global_server_cmd\n")
420cc290419Sopenharmony_ci        run_global_cmd()
421cc290419Sopenharmony_ci
422cc290419Sopenharmony_ci    def test_device_cmd(self):
423cc290419Sopenharmony_ci        print("HDC TEST: start test_device_cmd\n")
424cc290419Sopenharmony_ci        devs = get_devs()
425cc290419Sopenharmony_ci        if len(devs) == 1:
426cc290419Sopenharmony_ci            run_device_cmd()
427cc290419Sopenharmony_ci        if len(devs) > 1:
428cc290419Sopenharmony_ci            for dev in devs:
429cc290419Sopenharmony_ci                run_device_cmd("{}{}{}{}".format(NORMAL_HEAD, EXTRA_COMMANDS['choose'], dev, " "))
430cc290419Sopenharmony_ci
431cc290419Sopenharmony_ci    def test_tcp_mode(self):
432cc290419Sopenharmony_ci        print("HDC TEST: start test_tcp_mode\n")
433cc290419Sopenharmony_ci        extract_ip()
434cc290419Sopenharmony_ci        global IP
435cc290419Sopenharmony_ci        if len(IP) == 0 or TCP_CFG['ip'] == '':
436cc290419Sopenharmony_ci            print("请连接热点 配置TCP_CFG")
437cc290419Sopenharmony_ci            return
438cc290419Sopenharmony_ci        if tmode_to_tcp():
439cc290419Sopenharmony_ci            commands = get_basic_commands()
440cc290419Sopenharmony_ci            run_commands(commands, NORMAL_HEAD, False)
441cc290419Sopenharmony_ci
442cc290419Sopenharmony_ci    def test_remote_server(self):
443cc290419Sopenharmony_ci        time.sleep(10)
444cc290419Sopenharmony_ci        print("HDC TEST: start test_remote_server\n")
445cc290419Sopenharmony_ci        extract_ip()
446cc290419Sopenharmony_ci        ret = run_command_stdout("kill")
447cc290419Sopenharmony_ci        if 'finish' not in ret:
448cc290419Sopenharmony_ci            print('test_remote_server kill server failed')
449cc290419Sopenharmony_ci            return
450cc290419Sopenharmony_ci        global IP
451cc290419Sopenharmony_ci        server_head = "{}{}{}{}{}".format(NORMAL_HEAD, "-s ", IP, ":", "8710 ")
452cc290419Sopenharmony_ci        thread_start = threading.Thread(target=remote_server_start(server_head))
453cc290419Sopenharmony_ci        thread_start.start()
454cc290419Sopenharmony_ci        thread_start.join()
455cc290419Sopenharmony_ci        devs = get_devs(server_head)
456cc290419Sopenharmony_ci        for dev in devs:
457cc290419Sopenharmony_ci            head = "{}{}{}{}".format(server_head, EXTRA_COMMANDS['choose'], dev, " ")
458cc290419Sopenharmony_ci            run_command_stdout("{}{}{}{}".format("file send ", PATH['dir_send']['local'], " ",
459cc290419Sopenharmony_ci                                                 PATH['dir_recv']['remote']), head, False)
460cc290419Sopenharmony_ci            threading.Thread(target=run_split_commands(get_basic_commands(), head)).start()
461cc290419Sopenharmony_ci        run_command("kill", server_head)
462