from string import Template import os import re class TestcaseObject(object): _rawTemplate = '' templateRequest = Template('') selectRegExFromRequest = '' flagRegExStrInResponse = '' inverseFlag = False description = '' timeout = 0 isEnabled = True isRateLimited = False sendInitialChars = 0 sendBodyCharRate = 1 delayInBetween = 0 autoContentLength = False # The class "constructor" - It's actually an initializer def __init__(self, rawTemplate='',selectRegExFromRequest='',flagRegExStrInResponse='', inverseFlag=False,description='' ,isEnabled=True,timeout=0, isRateLimited=False, sendInitialChars=0, sendBodyCharRate=1, delayInBetween=0, autoContentLength=False): self._rawTemplate = rawTemplate self.selectRegExFromRequest = selectRegExFromRequest self.flagRegExStrInResponse = flagRegExStrInResponse self.inverseFlag = inverseFlag self.description = description self.isEnabled = isEnabled self.timeout = timeout self.isRateLimited = isRateLimited self.sendInitialChars = sendInitialChars self.sendBodyCharRate = sendBodyCharRate self.delayInBetween = delayInBetween self.autoContentLength = autoContentLength self._setParams() def _setParams(self): self.templateRequest = Template(self._rawTemplate) def ReqBuilder(self, target_BoxObject): filename, extension = os.path.splitext(target_BoxObject.path) extension = extension[1:] # removing the dot character before the extension result = self.templateRequest.safe_substitute(ip=target_BoxObject.ip, port=target_BoxObject.port, path=target_BoxObject.path, filename=filename, extension=extension, hostname=target_BoxObject.hostname, description=target_BoxObject.description) if self.autoContentLength: bodylength = len(result) - re.search("(\r\n\r\n)|(\n\n)", result).end() if re.search("content\\-length", result, re.IGNORECASE): result = re.sub(r"(?i)content\-length:\s*\d+", "Content-Length: " + str(bodylength), result, 1) else: result = re.sub(r"(\r\n\r\n)|(\n\n)", "\r\nContent-Length: " + str(bodylength) + "\r\n\r\n", result, 1) return result