1ba991379Sopenharmony_ci#-*- coding:utf-8 -*-
2ba991379Sopenharmony_ciimport uuid
3ba991379Sopenharmony_ciimport sys
4ba991379Sopenharmony_ciimport subprocess
5ba991379Sopenharmony_ciimport os
6ba991379Sopenharmony_ciimport serial
7ba991379Sopenharmony_ci
8ba991379Sopenharmony_cifrom core.base import BaseApp, dec_stepmsg
9ba991379Sopenharmony_cifrom util.file_locker import FileLock
10ba991379Sopenharmony_cifrom util.log_info import logger
11ba991379Sopenharmony_cifrom util.time_info import get_now_time_str_info, get_now_time_info, Timeout, timeout
12ba991379Sopenharmony_cifrom aw.Telnet.TelnetClient import TelConnect
13ba991379Sopenharmony_cifrom aw.Common.Constant import CONSTANT
14ba991379Sopenharmony_cifrom aw.Download.Download import *
15ba991379Sopenharmony_cifrom aw.Common.Common import getHostIp
16ba991379Sopenharmony_cifrom aw.ExtractFile.ExtractFile import *
17ba991379Sopenharmony_cifrom aw.poweronoff.serial_power_on_off import serialPowerOnOff
18ba991379Sopenharmony_ci
19ba991379Sopenharmony_cilock_suffix = CONSTANT.File.LOCK_SUFFIX  #通过文件锁实现并发下载
20ba991379Sopenharmony_cisuc_file = CONSTANT.File.SUC_FILE        #通过本文件是区分版本是否成功下载
21ba991379Sopenharmony_cifailed_file = CONSTANT.File.FAILED_FILE  #通过本文件是标记文件下载失败
22ba991379Sopenharmony_ciREAD_MAXTIMEOUT = 600
23ba991379Sopenharmony_ciREAD_TIMEOUT = 30
24ba991379Sopenharmony_ciREAD_MINITIMEOUT = 5
25ba991379Sopenharmony_ciuboot_finish = 'hisilicon #'
26ba991379Sopenharmony_cicmd_finish = ' #'
27ba991379Sopenharmony_ci
28ba991379Sopenharmony_ciclass liteOsUpgrade_L3(BaseApp):
29ba991379Sopenharmony_ci    '''
30ba991379Sopenharmony_ci    @author: w00278233
31ba991379Sopenharmony_ci    '''
32ba991379Sopenharmony_ci
33ba991379Sopenharmony_ci    def __init__(self, param_file):
34ba991379Sopenharmony_ci        super().__init__(param_file)
35ba991379Sopenharmony_ci        self.param_List = ["upgrade_upgradeLocation"]
36ba991379Sopenharmony_ci
37ba991379Sopenharmony_ci    @dec_stepmsg("hongmeng L3 flash")
38ba991379Sopenharmony_ci    def excute(self):
39ba991379Sopenharmony_ci        '''
40ba991379Sopenharmony_ci        #===================================================================================
41ba991379Sopenharmony_ci        #   @Method:        excute(self)
42ba991379Sopenharmony_ci        #   @Precondition:  none
43ba991379Sopenharmony_ci        #   @Func:          升级执行入口
44ba991379Sopenharmony_ci        #   @PostStatus:    none
45ba991379Sopenharmony_ci        #   @eg:            excute()
46ba991379Sopenharmony_ci        #   @return:        True or Flase
47ba991379Sopenharmony_ci        #===================================================================================
48ba991379Sopenharmony_ci        '''
49ba991379Sopenharmony_ci        step_index = self.params_dict.get("step_list").index("liteOsUpgrade_L3_app")
50ba991379Sopenharmony_ci
51ba991379Sopenharmony_ci        # 执行下载
52ba991379Sopenharmony_ci        try:
53ba991379Sopenharmony_ci            if not self.download():
54ba991379Sopenharmony_ci                CONSTANT.ENVERRMESSAGE = "image download fail"
55ba991379Sopenharmony_ci                logger.printLog(CONSTANT.ENVERRMESSAGE)
56ba991379Sopenharmony_ci                return False
57ba991379Sopenharmony_ci        except Exception as e:
58ba991379Sopenharmony_ci            raise e
59ba991379Sopenharmony_ci
60ba991379Sopenharmony_ci        # 执行升级
61ba991379Sopenharmony_ci        try:
62ba991379Sopenharmony_ci            status = self.upgrade()
63ba991379Sopenharmony_ci            logger.info(status)
64ba991379Sopenharmony_ci            logger.info(type(status))
65ba991379Sopenharmony_ci            logger.info(f'升级状态:{str(status)}')
66ba991379Sopenharmony_ci            if not status:
67ba991379Sopenharmony_ci                CONSTANT.ENVERRMESSAGE = "board upgrade fail"
68ba991379Sopenharmony_ci                logger.printLog(CONSTANT.ENVERRMESSAGE)
69ba991379Sopenharmony_ci                return False
70ba991379Sopenharmony_ci            return True
71ba991379Sopenharmony_ci        except Exception as e:
72ba991379Sopenharmony_ci            raise e
73ba991379Sopenharmony_ci
74ba991379Sopenharmony_ci    @dec_stepmsg("download")
75ba991379Sopenharmony_ci    @timeout(1800)
76ba991379Sopenharmony_ci    def download(self):
77ba991379Sopenharmony_ci        '''
78ba991379Sopenharmony_ci        #===================================================================================
79ba991379Sopenharmony_ci        #   @Method:        download(self)
80ba991379Sopenharmony_ci        #   @Precondition:  none
81ba991379Sopenharmony_ci        #   @Func:          构建下载到本地的路径,执行相应包的下载
82ba991379Sopenharmony_ci        #   @PostStatus:    none
83ba991379Sopenharmony_ci        #   @eg:            download()
84ba991379Sopenharmony_ci        #   @return:        True or Flase
85ba991379Sopenharmony_ci        #===================================================================================
86ba991379Sopenharmony_ci        '''
87ba991379Sopenharmony_ci        global version_savepath, version_name
88ba991379Sopenharmony_ci        dir_path = CONSTANT.Path.getDirPath()
89ba991379Sopenharmony_ci        if self.params_dict.get("pbiid"):
90ba991379Sopenharmony_ci            version_path = self.params_dict.get("pbiid")
91ba991379Sopenharmony_ci            version_name = str(uuid.uuid5(uuid.NAMESPACE_URL, str(self.params_dict.get("pbiid")) + "FASTBOOT"))
92ba991379Sopenharmony_ci            version_savepath = os.path.join(dir_path, self.params_dict.get("flash_type"), version_name)
93ba991379Sopenharmony_ci        else:
94ba991379Sopenharmony_ci            version_path = self.params_dict.get("upgrade_upgradeLocation")
95ba991379Sopenharmony_ci            version_name = str(uuid.uuid5(uuid.NAMESPACE_URL, (self.params_dict.get("upgrade_upgradeLocation"))))
96ba991379Sopenharmony_ci            version_savepath = os.path.join(dir_path, version_name)
97ba991379Sopenharmony_ci            logger.printLog(version_savepath)
98ba991379Sopenharmony_ci
99ba991379Sopenharmony_ci        if self.params_dict.get("isDownload") == "True":
100ba991379Sopenharmony_ci            logger.printLog("不需要做下载,直接返回")
101ba991379Sopenharmony_ci            return True
102ba991379Sopenharmony_ci
103ba991379Sopenharmony_ci        #执行img下载
104ba991379Sopenharmony_ci        import hashlib
105ba991379Sopenharmony_ci        save_file_str = version_path.replace("/", "").replace("\\", "")
106ba991379Sopenharmony_ci        save_file_name = hashlib.sha1(save_file_str.encode("utf-8")).hexdigest()
107ba991379Sopenharmony_ci        logger.info("download hash string:%s, hash value:%s" % (save_file_str, save_file_name))
108ba991379Sopenharmony_ci        save_path_file = os.path.join(dir_path, "record", "%s%s" % (save_file_name, ".txt"))
109ba991379Sopenharmony_ci        if not self.excutedown(version_path, os.path.join(version_savepath, "img"), save_path_file, False):
110ba991379Sopenharmony_ci            logger.error("download img fail")
111ba991379Sopenharmony_ci            return False
112ba991379Sopenharmony_ci
113ba991379Sopenharmony_ci        #保存本地版本路径给devicetest去版本路径下取用例
114ba991379Sopenharmony_ci        saveVersion(save_path_file, os.path.join(version_savepath, "img"))
115ba991379Sopenharmony_ci
116ba991379Sopenharmony_ci        # 执行升级脚本下载
117ba991379Sopenharmony_ci        if self.params_dict.get("upgrade_script"):
118ba991379Sopenharmony_ci            suc_mark = os.path.join(version_savepath, "scriptfile", suc_file)
119ba991379Sopenharmony_ci            if not self.excutedown(self.params_dict.get("upgrade_script"),
120ba991379Sopenharmony_ci                                   os.path.join(version_savepath, "scriptfile"), suc_mark, True):
121ba991379Sopenharmony_ci                logger.error("download upgrade script fail")
122ba991379Sopenharmony_ci                return False
123ba991379Sopenharmony_ci            with open(suc_mark, "a+") as fp:
124ba991379Sopenharmony_ci                fp.write("")
125ba991379Sopenharmony_ci
126ba991379Sopenharmony_ci        return True
127ba991379Sopenharmony_ci
128ba991379Sopenharmony_ci    def excutedown(self, source_path, download_dir, suc_mark, is_file):
129ba991379Sopenharmony_ci        '''
130ba991379Sopenharmony_ci        #===================================================================================
131ba991379Sopenharmony_ci        #   @Method:        excutedown(source_path, download_dir, is_file)
132ba991379Sopenharmony_ci        #   @Precondition:  none
133ba991379Sopenharmony_ci        #   @Func:          执行下载动作
134ba991379Sopenharmony_ci        #   @PostStatus:    none
135ba991379Sopenharmony_ci        #   @Param:         source_path:资源文件路径
136ba991379Sopenharmony_ci        #                   download_dir:文件下载到本地的文件夹路径
137ba991379Sopenharmony_ci        #                   is_file:是否是文件
138ba991379Sopenharmony_ci        #
139ba991379Sopenharmony_ci        #   @eg:            excutedown("xxxx", "D:\\local\\image", Flase, os_method)
140ba991379Sopenharmony_ci        #   @return:        True or Flase
141ba991379Sopenharmony_ci        #===================================================================================
142ba991379Sopenharmony_ci        '''
143ba991379Sopenharmony_ci        failed_mark = os.path.join(download_dir, failed_file)
144ba991379Sopenharmony_ci        lock_path = os.path.join(download_dir, lock_suffix)
145ba991379Sopenharmony_ci        file_lock = FileLock()
146ba991379Sopenharmony_ci        if isDownLoadSuccess(download_dir, suc_mark, failed_mark):
147ba991379Sopenharmony_ci            return True
148ba991379Sopenharmony_ci        try:
149ba991379Sopenharmony_ci            nowtime = get_now_time_str_info()
150ba991379Sopenharmony_ci            logger.printLog("%s Downloading, please wait" % nowtime)
151ba991379Sopenharmony_ci            file_lock.lockFile(lock_path)
152ba991379Sopenharmony_ci            ret = ""
153ba991379Sopenharmony_ci            logger.info("Get lock. Start to ")
154ba991379Sopenharmony_ci            if self.params_dict.get("bt_enable") and self.params_dict.get("bt_enable") == "True":
155ba991379Sopenharmony_ci                ret = downloadByBitComet(source_path, download_dir, os_method)
156ba991379Sopenharmony_ci            elif source_path.startswith('\\\\'):
157ba991379Sopenharmony_ci                ret = downloadByCopy(source_path, download_dir, is_file)
158ba991379Sopenharmony_ci            elif self.params_dict.get("pbiid"):
159ba991379Sopenharmony_ci                ret = downlaodByDownloadTool(version_savepath, self.params_dict.get("version_type"), "FASTBOOT", self.params_dict.get("pbiid"))
160ba991379Sopenharmony_ci            elif source_path.startswith("http"):
161ba991379Sopenharmony_ci                # 临时修改下载链接
162ba991379Sopenharmony_ci                source_path = self.modifyHttpLink(source_path)
163ba991379Sopenharmony_ci                logger.info(f'modify path:{source_path}')
164ba991379Sopenharmony_ci                ret = downloadFileFromDevCloud(source_path, "", "", download_dir)
165ba991379Sopenharmony_ci
166ba991379Sopenharmony_ci            if source_path.endswith(".zip"):
167ba991379Sopenharmony_ci                zip_name = os.path.basename(source_path)
168ba991379Sopenharmony_ci                ret = extractZipFile(os.path.join(download_dir, zip_name), download_dir)
169ba991379Sopenharmony_ci            if source_path.endswith(".tar.gz") or (source_path.startswith("http") and ("file_id=" in source_path)):
170ba991379Sopenharmony_ci                if source_path.startswith("http") and ("file_id=" in source_path):
171ba991379Sopenharmony_ci                    if source_path.endswith(".tar.gz"):
172ba991379Sopenharmony_ci                        zip_name = source_path.split('=')[-1]
173ba991379Sopenharmony_ci                    else:
174ba991379Sopenharmony_ci                        zip_name = "out.tar.gz"
175ba991379Sopenharmony_ci                else:
176ba991379Sopenharmony_ci                    zip_name = os.path.basename(source_path)
177ba991379Sopenharmony_ci                ret = unTarFile(os.path.join(download_dir, zip_name), download_dir)
178ba991379Sopenharmony_ci            nowtime = get_now_time_str_info()
179ba991379Sopenharmony_ci            logger.printLog("%s download to %s end" % (nowtime, download_dir))
180ba991379Sopenharmony_ci
181ba991379Sopenharmony_ci            if not ret:
182ba991379Sopenharmony_ci                with open(failed_mark, "a+") as fp:
183ba991379Sopenharmony_ci                    fp.write("")
184ba991379Sopenharmony_ci            return ret
185ba991379Sopenharmony_ci        except Exception as e:
186ba991379Sopenharmony_ci            logger.printLog(e)
187ba991379Sopenharmony_ci            raise Exception(e)
188ba991379Sopenharmony_ci        finally:
189ba991379Sopenharmony_ci            file_lock.releaseFile()
190ba991379Sopenharmony_ci
191ba991379Sopenharmony_ci    def modifyHttpLink(self,link):
192ba991379Sopenharmony_ci        try:
193ba991379Sopenharmony_ci            base_link = 'https://hm-verify.obs.cn-north-4.myhuaweicloud.com/'
194ba991379Sopenharmony_ci            filename = link.split('&')[-1].split('=')[-1]
195ba991379Sopenharmony_ci            names = filename.split('-')
196ba991379Sopenharmony_ci            link_1 = '/'.join(names[0:-1])
197ba991379Sopenharmony_ci            link_2 = f'/{filename}'
198ba991379Sopenharmony_ci            final_link = base_link + link_1 + link_2
199ba991379Sopenharmony_ci            return final_link
200ba991379Sopenharmony_ci        except Exception as e:
201ba991379Sopenharmony_ci            logger.info('path is errror.check the link_path is right,please')
202ba991379Sopenharmony_ci            logger.info(str(e))
203ba991379Sopenharmony_ci
204ba991379Sopenharmony_ci
205ba991379Sopenharmony_ci    @dec_stepmsg("upgrade")
206ba991379Sopenharmony_ci    @timeout(900)
207ba991379Sopenharmony_ci    def upgrade(self):
208ba991379Sopenharmony_ci        '''
209ba991379Sopenharmony_ci        #===================================================================================
210ba991379Sopenharmony_ci        #   @Method:        upgrade(self)
211ba991379Sopenharmony_ci        #   @Precondition:  none
212ba991379Sopenharmony_ci        #   @Func:          升级相关业务逻辑
213ba991379Sopenharmony_ci        #   @PostStatus:    none
214ba991379Sopenharmony_ci        #   @eg:            upgrade()
215ba991379Sopenharmony_ci        #   @return:        True or Flase
216ba991379Sopenharmony_ci        #===================================================================================
217ba991379Sopenharmony_ci        '''
218ba991379Sopenharmony_ci        try:
219ba991379Sopenharmony_ci            #time.sleep(1000)
220ba991379Sopenharmony_ci            logger.printLog('开始升级')
221ba991379Sopenharmony_ci            self.enterTheDevice()
222ba991379Sopenharmony_ci            time.sleep(5)
223ba991379Sopenharmony_ci            self.flashSystemImg()
224ba991379Sopenharmony_ci            time.sleep(5)
225ba991379Sopenharmony_ci            self.rebootDevice()
226ba991379Sopenharmony_ci            return True
227ba991379Sopenharmony_ci        except Exception as e:
228ba991379Sopenharmony_ci            logger.error('***********************************')
229ba991379Sopenharmony_ci            logger.error(str(e))
230ba991379Sopenharmony_ci            logger.error('flash fail')
231ba991379Sopenharmony_ci            logger.error('***********************************')
232ba991379Sopenharmony_ci            return False
233ba991379Sopenharmony_ci
234ba991379Sopenharmony_ci    #@timeout(30*3)
235ba991379Sopenharmony_ci    def enterTheDevice(self):
236ba991379Sopenharmony_ci        logger.info('enter fastboot status'.center(50,'*'))
237ba991379Sopenharmony_ci        devices_status_count = 0
238ba991379Sopenharmony_ci        while devices_status_count < 3 :
239ba991379Sopenharmony_ci            if self.isFastbootStatus():
240ba991379Sopenharmony_ci                break
241ba991379Sopenharmony_ci            devices_status_count += 1
242ba991379Sopenharmony_ci            time.sleep(20)
243ba991379Sopenharmony_ci        else:
244ba991379Sopenharmony_ci            logger.error(f'device {self.params_dict.get("sn")} is not exist ,please make sure the sn is True')
245ba991379Sopenharmony_ci            raise Exception('ERROR_SN_DEVICE_NOT_EXIST')
246ba991379Sopenharmony_ci
247ba991379Sopenharmony_ci    #@timeout(20)
248ba991379Sopenharmony_ci    def isFastbootStatus(self):
249ba991379Sopenharmony_ci        adb_retcode, adb_output = subprocess.getstatusoutput('adb devices')
250ba991379Sopenharmony_ci
251ba991379Sopenharmony_ci        fastboot_retcode, fastboot_output = subprocess.getstatusoutput('fastboot devices')
252ba991379Sopenharmony_ci
253ba991379Sopenharmony_ci        if self.params_dict.get('sn') in adb_output:
254ba991379Sopenharmony_ci            retcode, output = subprocess.getstatusoutput('adb -s %s reboot fastboot' % self.params_dict.get('sn'))
255ba991379Sopenharmony_ci            logger.info('adb -s %s reboot fastboot retcode: %s'% (self.params_dict.get('sn'),str(retcode)))
256ba991379Sopenharmony_ci            logger.info('adb -s %s reboot fastboot output: %s'% (self.params_dict.get('sn'),output))
257ba991379Sopenharmony_ci            logger.info('device from adb mode to fastboot mode,please wait')
258ba991379Sopenharmony_ci            time.sleep(30)
259ba991379Sopenharmony_ci            retcode, output = subprocess.getstatusoutput('fastboot devices')
260ba991379Sopenharmony_ci            logger.info('fastboot devices fastboot_retcode: %s'% str(fastboot_retcode))
261ba991379Sopenharmony_ci            logger.info('fastboot devices fastboot_output: %s'% fastboot_output)
262ba991379Sopenharmony_ci            if self.params_dict.get('sn') in output:
263ba991379Sopenharmony_ci                logger.info('device enter fastboot mode success')
264ba991379Sopenharmony_ci                return True
265ba991379Sopenharmony_ci            else:
266ba991379Sopenharmony_ci                logger.info('device enter fastboot mode fail')
267ba991379Sopenharmony_ci                return False
268ba991379Sopenharmony_ci        elif self.params_dict.get('sn') in fastboot_output:
269ba991379Sopenharmony_ci            logger.info('device has been in fastboot mode')
270ba991379Sopenharmony_ci            return True
271ba991379Sopenharmony_ci        else:
272ba991379Sopenharmony_ci            logger.info('设备未找到,重新尝试')
273ba991379Sopenharmony_ci            return False
274ba991379Sopenharmony_ci
275ba991379Sopenharmony_ci    @timeout(60*2*3)
276ba991379Sopenharmony_ci    def flashSystemImg(self):
277ba991379Sopenharmony_ci        logger.info('flash system.img '.center(50,'*'))
278ba991379Sopenharmony_ci        flash_count = 0
279ba991379Sopenharmony_ci        while flash_count < 3:
280ba991379Sopenharmony_ci            status = self.isFlashSuccess()
281ba991379Sopenharmony_ci            logger.info(status)
282ba991379Sopenharmony_ci            if status:
283ba991379Sopenharmony_ci                break
284ba991379Sopenharmony_ci            flash_count +=1
285ba991379Sopenharmony_ci            time.sleep(3)
286ba991379Sopenharmony_ci        else:
287ba991379Sopenharmony_ci            logger.error('system.img镜像刷写失败')
288ba991379Sopenharmony_ci            raise Exception('[ERROR] ERROR_FLASH_SYSTEM.IMG_FAIL')
289ba991379Sopenharmony_ci
290ba991379Sopenharmony_ci    @timeout(60*2)
291ba991379Sopenharmony_ci    def isFlashSuccess(self):
292ba991379Sopenharmony_ci        #local_image_path = os.path.join(version_savepath, 'img', r'aosp\target\product\generic_arm64', 'system.img')
293ba991379Sopenharmony_ci        local_image_path = os.path.join(version_savepath, 'img', 'system.img')
294ba991379Sopenharmony_ci        logger.info(f'flash img path: {local_image_path}')
295ba991379Sopenharmony_ci        if os.path.exists(local_image_path):
296ba991379Sopenharmony_ci            retcode, output = subprocess.getstatusoutput('fastboot -s %s flash system %s' % (self.params_dict.get('sn'), local_image_path))
297ba991379Sopenharmony_ci            logger.info('fastboot -s %s flash system %s retcode: %s'% (self.params_dict.get('sn'),local_image_path,str(retcode)))
298ba991379Sopenharmony_ci            logger.info('fastboot -s %s flash system %s output: %s'% (self.params_dict.get('sn'),local_image_path,output))
299ba991379Sopenharmony_ci            if retcode == 0:
300ba991379Sopenharmony_ci                logger.info('flash system.img success')
301ba991379Sopenharmony_ci                return True
302ba991379Sopenharmony_ci            else:
303ba991379Sopenharmony_ci                flash_count += 1
304ba991379Sopenharmony_ci                logger.info('再次尝试刷system.img镜像')
305ba991379Sopenharmony_ci
306ba991379Sopenharmony_ci        else:
307ba991379Sopenharmony_ci            logger.error('镜像文件路径不对')
308ba991379Sopenharmony_ci            raise Exception('[ERROR] ERROR_IMG_PATH_NOT_EXIST')
309ba991379Sopenharmony_ci
310ba991379Sopenharmony_ci    def rebootDevice(self):
311ba991379Sopenharmony_ci        logger.info('reboot the device '.center(50,'*'))
312ba991379Sopenharmony_ci        reboot_count = 0
313ba991379Sopenharmony_ci        while reboot_count < 3 :
314ba991379Sopenharmony_ci            logger.info('start reboot')
315ba991379Sopenharmony_ci            if self.isRebootSuccess():
316ba991379Sopenharmony_ci                break
317ba991379Sopenharmony_ci            else:
318ba991379Sopenharmony_ci                reboot_count +=1
319ba991379Sopenharmony_ci                time.sleep(10)
320ba991379Sopenharmony_ci        else:
321ba991379Sopenharmony_ci            raise Exception('[ERROR] ERROR_REBOOT_DEVICE_FAIL')
322ba991379Sopenharmony_ci
323ba991379Sopenharmony_ci    def isRebootSuccess(self):
324ba991379Sopenharmony_ci        retcode, output = subprocess.getstatusoutput('fastboot -s %s reboot' % self.params_dict.get('sn'))
325ba991379Sopenharmony_ci        logger.info('fastboot -s %s reboot  retcode: %s'% (self.params_dict.get('sn'),str(retcode)))
326ba991379Sopenharmony_ci        logger.info('fastboot -s %s reboot  output: %s'% (self.params_dict.get('sn'),output))
327ba991379Sopenharmony_ci        time.sleep(50)
328ba991379Sopenharmony_ci        retcode, output = subprocess.getstatusoutput('adb devices')
329ba991379Sopenharmony_ci        logger.info('adb devices: %s'% str(retcode))
330ba991379Sopenharmony_ci        logger.info('adb devices: %s'% output)
331ba991379Sopenharmony_ci        if self.params_dict.get('sn') in output:
332ba991379Sopenharmony_ci            logger.info('reboot success')
333ba991379Sopenharmony_ci            return True
334ba991379Sopenharmony_ci        else:
335ba991379Sopenharmony_ci            logger.info('reboot fail')
336ba991379Sopenharmony_ci            return False
337ba991379Sopenharmony_ci
338ba991379Sopenharmony_ci
339ba991379Sopenharmony_ci
340ba991379Sopenharmony_ciif __name__ == '__main__':
341ba991379Sopenharmony_ci    liteOsUpgrade_L3.modifyHttpLink(liteOsUpgrade_L3,
342ba991379Sopenharmony_ci    'https://devrepo.devcloud.cn-north-4.huaweicloud.com/DevRepoServer/v1/files/download?file_id=0fe39c430a364f59bd040c53e7a3ef1c&type=archive&filename=Daily_Version#2021-05-19_06-38-31#L35_aosp_arm64.tar.gz')