import shutil import unittest import os.path import os import sh from test.helpers.md5 import md5_file from test.helpers.plc import dcpPLC class Qplc(unittest.TestCase): params = None __resultlist = None # resultlist is a python list of python dictionaries __QPLCName = None __plc = None def __init__(self, testname, testfunc, varlist): self.params = varlist super(Qplc, self).__init__(testfunc) self._testMethodDoc = testname self.__xmlObj = varlist["xml"] self.__QPLCName = varlist.get('name', 'qplc') self.__firmware = varlist.get('firmware', self.__xmlObj.getKeyVal(self.__QPLCName, "firmware", "")) self.__firmware_md5 = varlist.get('firmware_md5', self.__xmlObj.getKeyVal(self.__QPLCName, "firmware_md5", "")) self.__factoryTool = varlist.get('factory_tool', self.__xmlObj.getKeyVal(self.__QPLCName, "factory_tool", "")) self.__gen_ip = varlist.get('gen_ip', self.__xmlObj.getKeyVal(self.__QPLCName, "gen_ip", "0")) self.__gen_mac = varlist.get('gen_mac', self.__xmlObj.getKeyVal(self.__QPLCName, "gen_mac", "0")) self.__mtd_device = varlist.get('mtd_device', self.__xmlObj.getKeyVal(self.__QPLCName, "mtd_device", "/dev/mtd0")) self.__plc = dcpPLC(self.__factoryTool, self.__mtd_device) self.__resultlist = [] def checkfiles(self): if not os.path.isfile('{}/{}'.format(self.__filepath_from, self.__file_source)): return False, 'File test binary Not found {}/{}'.format(self.__filepath_from, self.__file_source) if not os.path.isfile('{}/{}'.format(self.__filepath_from, self.__file_md5)): return False, 'File test binary md5 Not found {}/{}'.format(self.__filepath_from, self.__file_md5) if self.__check_mounted != '': if not os.path.ismount('{}'.format(self.__check_mounted)): return False, 'Required mounted failed: {}'.format(self.__path_to) r, s = self.removefileIfExist('{}/{}'.format(self.__path_to, self.__file_source)) if not r: return r, s return True, '' def __flashMemory(self): self.__plc.setSaveFirmwareMode() r, v = self.__plc.SaveFirmware(self.__firmware) if not r: self.fail(v) def execute(self): # Check files v, m = self.checkfiles() if not v: self.fail(m) # do flash & verify self.__flashMemory() # do Plc boot self.__plc.setBootMode() # Wait plc goes UP def getresults(self): return self.__resultlist def gettextresult(self): return ""