def __callRest(self, resultPath, fileName, fileContent, callId=None): """ <<<<<<< HEAD <<<<<<< HEAD Internal function XMLRPC call """ self.trace("upload data through xml rpc") # prepare the xml body call_string = xmlrpclib.dumps( (self.login, self.password, xmlrpcData, True ), xmlrpcFunc ) # prepare the headers headers = { "Host": "%s" % self.controllerIp, "User-Agent": "%s" % Settings.get('Common', 'acronym' ), "Connexion": "Keep-Alive", "Content-Type": "text/xml", "Content-Length": "%s" % len(call_string) } # prepare the ip and port httpsMode = Settings.getBool( 'Server', 'xmlrpc-https' ) dstPort = self.controllerPort # Fix issue to upload file with a different tcp port than the default tcp/443
def __init__(self, controllerIp, controllerPort, toolName, toolDesc, defaultTool, supportProxy=False, proxyIp=None, proxyPort=None, sslSupport=True, toolType=NetLayerLib.TYPE_AGENT_AGENT, fromCmd=False, name=None): """ Constructor for tool @param version: @type version: string """ self.__LAST_ERROR = None self.defaultTool = defaultTool self.login = "******" self.password = "******" self.toolType = toolType self.fromCmd = fromCmd # init ssl self.sslSupportFinal = sslSupport if not Settings.getBool('Server', 'ssl-support'): self.sslSupportFinal = False # init websocket wsSupport = False if Settings.getBool('Server', 'websocket-support'): wsSupport = True NetLayerLib.ClientAgent.__init__( self, typeAgent=toolType, startAuto=True, keepAliveInterval=Settings.getInt('Network', 'keepalive-interval'), inactivityTimeout=Settings.getInt('Network', 'inactivity-timeout'), timeoutTcpConnect=Settings.getInt('Network', 'tcp-connect-timeout'), responseTimeout=Settings.getInt('Network', 'response-timeout'), selectTimeout=Settings.get('Network', 'select-timeout'), sslSupport=self.sslSupportFinal, wsSupport=wsSupport, pickleVer=Settings.getInt('Network', 'pickle-version'), tcpKeepAlive=Settings.getBool('Network', 'tcp-keepalive'), tcpKeepIdle=Settings.getInt('Network', 'tcp-keepidle'), tcpKeepCnt=Settings.getInt('Network', 'tcp-keepcnt'), tcpKeepIntvl=Settings.getInt('Network', 'tcp-keepintvl')) serverPort = Settings.getInt('Server', 'port') if controllerPort is not None: serverPort = int(controllerPort) self.setServerAddress(ip=controllerIp, port=serverPort) if supportProxy: self.setProxyAddress(ip=proxyIp, port=int(proxyPort)) self.setAgentName(name=toolName) toolMore = {'details': toolDesc, 'default': defaultTool} if name is not None: self.setDetails(name=name, desc=toolMore, ver=Settings.getVersion()) else: self.setDetails(name=self.__class__.__name__, desc=toolMore, ver=Settings.getVersion()) self.controllerIp = controllerIp self.controllerPort = serverPort self.pathTraces = Settings.get('Paths', 'tmp') self.toolName = toolName self.__mutex__ = threading.RLock() self.regThread = None self.__REGISTERED_BEFORE__ = False self.regRequest = None if sys.platform == "win32": self.__tmpPath__ = "%s\\%s\\[%s]_%s\\" % (Settings.getDirExec(), self.pathTraces, toolType, self.toolName) else: self.__tmpPath__ = "%s/%s/[%s]_%s/" % (Settings.getDirExec(), self.pathTraces, toolType, self.toolName) self.__callId__ = 0 self.__callIds__ = {} self.__args__ = [] # new in v6.2 self.testsContext = {}
def __callXmlrpcFile(self, xmlrpcFunc, pathZip, xmlrpcData={}): """ Internal function to make a xmlrpc call """ # adding the file to the request try: fd = open(pathZip, 'rb') xmlrpcData['file-data'] = xmlrpclib.Binary(fd.read()) fd.close() except Exception: self.error("unable to pack file data in xmlrpc: %s" % e) else: # prepare the xml body call_string = xmlrpclib.dumps( (self.login, self.password, xmlrpcData, True ), xmlrpcFunc ) # prepare the headers headers = { "Host": "%s" % self.controllerIp, "User-Agent": "%s" % Settings.get('Common', 'acronym' ), "Connexion": "Keep-Alive", "Content-Type": "text/xml", "Content-Length": "%s" % len(call_string) } # prepare the ip and port httpsMode = Settings.getBool( 'Server', 'xmlrpc-https' ) dstPort = self.controllerPort # Fix issue to upload file with a different tcp port than the default tcp/443 # set proxy is activated if eval( Settings.get( 'Server', 'proxy-active' ) ): proxyAddr = Settings.get( 'Server', 'addr-proxy-http' ) proxyPort = Settings.get( 'Server', 'port-proxy-http' ) self.trace("Proxy activated for xmlrpc Ip=%s Port=%s" % (proxyAddr, proxyPort) ) if self.defaultTool: httpsMode = False dstPort = Settings.get( 'Server', 'default-xmlrpc-port' ) if httpsMode: if eval( Settings.get( 'Server', 'proxy-active' ) ): conn = httpclient.HTTPSConnection(proxyAddr, proxyPort, context=ssl._create_unverified_context()) else: conn = httpclient.HTTPSConnection(self.controllerIp, dstPort, context=ssl._create_unverified_context()) else: if eval( Settings.get( 'Server', 'proxy-active' ) ): conn = httpclient.HTTPConnection(proxyAddr, proxyPort) else: conn = httpclient.HTTPConnection(self.controllerIp, dstPort) # set proxy is activated if eval( Settings.get( 'Server', 'proxy-active' ) ): conn.set_tunnel(host=self.controllerIp, port=int(dstPort) ) # fix bad usage of the proxy uri = Settings.get( 'Server', 'xmlrpc-path' ) conn.request("POST", uri, call_string, headers) response = conn.getresponse() if response.status != 200: self.error( 'Upload failed: %s' % response.status ) self.onUploadErrorFile(callId=xmlrpcData['call-id']) else: self.trace( 'Http response OK' ) data = response.read() # decode xml rsp try: if sys.version_info > (3,): xml_rsp = xmlrpclib.loads( str(data, 'utf8').strip() ) else: xml_rsp = xmlrpclib.loads( unicode(data).strip() ) except xmlrpclib.Fault as e: self.error("A fault occurred: %s" % data) self.error("Fault code: %d" % e.faultCode) self.error("Fault string: %s" % e.faultString) else: # example of result: ((['uploadLogs', 200, {'ret': True}],), None) rsp = xml_rsp[0][0] appFunc, appRsp, appRet = rsp if appRsp != 200: self.onUploadErrorFile(callId=xmlrpcData['call-id']) else: if not appRet['ret']: self.onUploadErrorFile(callId=xmlrpcData['call-id']) else: # final signal self.onUploadTerminatedFile(callId=xmlrpcData['call-id'], resultPath=xmlrpcData['result-path'], fileName=xmlrpcData['filename'])