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