def verify(self, base_url): '''Parses the given HTML string and asks the FortuneHTMLParser whether the parsed string is a valid fortune response ''' url = base_url + self.fortune_url headers, body = self.request_headers_and_body(url) _, problems = basic_body_verification(body, url, is_json_check=False) if len(problems) > 0: return problems parser = FortuneHTMLParser() parser.feed(body) (valid, diff) = parser.isValidFortune(self.out) if valid: problems += verify_headers(headers, url, should_be='html') if len(problems) == 0: return [('pass', '', url)] else: return problems else: failures = [] failures.append( ('fail', 'Invalid according to FortuneHTMLParser', url)) failures += self._parseDiffForFailure(diff, failures, url) return failures
def verify(self, base_url): '''Parses the given HTML string and asks the FortuneHTMLParser whether the parsed string is a valid fortune response ''' url = base_url + self.fortune_url full_response = self._curl(url) body = self._curl_body(url) # Empty response if body is None: return [('fail', 'No response', url)] elif len(body) == 0: return [('fail', 'Empty Response', url)] parser = FortuneHTMLParser() parser.feed(body) (valid, diff) = parser.isValidFortune(self.out) if valid: # Ensure required response headers are present if any(v.lower() not in full_response.lower() for v in ('Server','Date','Content-Type: text/html')) \ or all(v.lower() not in full_response.lower() for v in ('Content-Length','Transfer-Encoding')): return [('warn', 'Required response header missing.', url)] return [('pass', '', url)] else: failures = [('fail', 'Invalid according to FortuneHTMLParser', url) ] # Catch exceptions because we are relying on internal code try: # Parsing this: # --- Valid # +++ Response # @@ -1 +1 @@ # # -<!doctype html><html><head><title>Fortunes</title></head><body><table> # +<!doctype html><html><head><meta></meta><title>Fortunes</title></head><body><div><table> # @@ -16 +16 @@ current_neg = [] current_pos = [] for line in diff[3:]: if line[0] == '+': current_neg.append(line[1:]) elif line[0] == '-': current_pos.append(line[1:]) elif line[0] == '@': failures.append( ('fail', "`%s` should be `%s`" % (''.join(current_neg), ''.join(current_pos)), url)) if len(current_pos) != 0: failures.append( ('fail', "`%s` should be `%s`" % (''.join(current_neg), ''.join(current_pos)), url)) except: pass return failures
def validateFortune(self, htmlString, out, err): try: parser = FortuneHTMLParser() parser.feed(htmlString) return parser.isValidFortune() except: pass return False
def verify(self, base_url): '''Parses the given HTML string and asks the FortuneHTMLParser whether the parsed string is a valid fortune response ''' url = base_url + self.fortune_url full_response = self._curl(url) body = self._curl_body(url) # Empty response if body is None: return [('fail','No response', url)] elif len(body) == 0: return [('fail','Empty Response', url)] parser = FortuneHTMLParser() parser.feed(body) (valid, diff) = parser.isValidFortune(self.out) if valid: # Ensure required response headers are present if any(v.lower() not in full_response.lower() for v in ('Server','Date','Content-Type: text/html')) \ or all(v.lower() not in full_response.lower() for v in ('Content-Length','Transfer-Encoding')): return[('warn','Required response header missing.',url)] return [('pass','',url)] else: failures = [('fail','Invalid according to FortuneHTMLParser',url)] # Catch exceptions because we are relying on internal code try: # Parsing this: # --- Valid # +++ Response # @@ -1 +1 @@ # # -<!doctype html><html><head><title>Fortunes</title></head><body><table> # +<!doctype html><html><head><meta></meta><title>Fortunes</title></head><body><div><table> # @@ -16 +16 @@ current_neg = [] current_pos = [] for line in diff[3:]: if line[0] == '+': current_neg.append(line[1:]) elif line[0] == '-': current_pos.append(line[1:]) elif line[0] == '@': failures.append( ('fail', "`%s` should be `%s`" % (''.join(current_neg), ''.join(current_pos)), url) ) if len(current_pos) != 0: failures.append( ('fail', "`%s` should be `%s`" % (''.join(current_neg), ''.join(current_pos)), url) ) except: pass return failures
def validateFortune(self, htmlString, out, err): err_str = "" try: parser = FortuneHTMLParser() parser.feed(htmlString) return parser.isValidFortune(out) except: print "Got exception when trying to validate the fortune test: {exception} ".format(exception=sys.exc_info()[0:2]) return False
def verify(self, base_url): '''Parses the given HTML string and asks the FortuneHTMLParser whether the parsed string is a valid fortune response ''' url = base_url + self.fortune_url body = self._curl(url) # Empty response if body is None: return [('fail', 'No response', url)] elif len(body) == 0: return [('fail', 'Empty Response', url)] parser = FortuneHTMLParser() parser.feed(body) (valid, diff) = parser.isValidFortune(self.out) if valid: return [('pass', '', url)] else: failures = [('fail', 'Invalid according to FortuneHTMLParser', url) ] # Catch exceptions because we are relying on internal code try: # Parsing this: # --- Valid # +++ Response # @@ -1 +1 @@ # # -<!doctype html><html><head><title>Fortunes</title></head><body><table> # +<!doctype html><html><head><meta></meta><title>Fortunes</title></head><body><div><table> # @@ -16 +16 @@ current_neg = [] current_pos = [] for line in diff[3:]: if line[0] == '+': current_neg.append(line[1:]) elif line[0] == '-': current_pos.append(line[1:]) elif line[0] == '@': failures.append( ('fail', "`%s` should be `%s`" % (''.join(current_neg), ''.join(current_pos)), url)) if len(current_pos) != 0: failures.append( ('fail', "`%s` should be `%s`" % (''.join(current_neg), ''.join(current_pos)), url)) except: pass return failures
def validateFortune(self, htmlString, out, err): try: parser = FortuneHTMLParser() parser.feed(htmlString) return parser.isValidFortune() except: err.write(textwrap.dedent(""" ----------------------------------------------------- Error: validateFortune raised exception ----------------------------------------------------- {trace} """.format( trace=sys.exc_info()[:2]))) return False
def validateFortune(self, htmlString, out, err): try: parser = FortuneHTMLParser() parser.feed(htmlString) return parser.isValidFortune() except: err.write( textwrap.dedent(""" ----------------------------------------------------- Error: validateFortune raised exception ----------------------------------------------------- {trace} """.format(trace=sys.exc_info()[:2]))) return False
def verify(self, base_url): """Parses the given HTML string and asks the FortuneHTMLParser whether the parsed string is a valid fortune response """ url = base_url + self.fortune_url body = self._curl(url) # Empty response if body is None: return [("fail", "No response", url)] elif len(body) == 0: return [("fail", "Empty Response", url)] parser = FortuneHTMLParser() parser.feed(body) (valid, diff) = parser.isValidFortune(self.out) if valid: return [("pass", "", url)] else: failures = [("fail", "Invalid according to FortuneHTMLParser", url)] # Catch exceptions because we are relying on internal code try: # Parsing this: # --- Valid # +++ Response # @@ -1 +1 @@ # # -<!doctype html><html><head><title>Fortunes</title></head><body><table> # +<!doctype html><html><head><meta></meta><title>Fortunes</title></head><body><div><table> # @@ -16 +16 @@ current_neg = [] current_pos = [] for line in diff[3:]: if line[0] == "+": current_neg.append(line[1:]) elif line[0] == "-": current_pos.append(line[1:]) elif line[0] == "@": failures.append( ("fail", "`%s` should be `%s`" % ("".join(current_neg), "".join(current_pos)), url) ) if len(current_pos) != 0: failures.append(("fail", "`%s` should be `%s`" % ("".join(current_neg), "".join(current_pos)), url)) except: pass return failures
def verify(self, base_url): '''Parses the given HTML string and asks the FortuneHTMLParser whether the parsed string is a valid fortune response ''' url = base_url + self.fortune_url body = self._curl(url) # Empty response if body is None: return [('fail','No response', url)] elif len(body) == 0: return [('fail','Empty Response', url)] parser = FortuneHTMLParser() parser.feed(body) if parser.isValidFortune(self.out): return [('pass','',url)] else: return [('fail','Invalid according to FortuneHTMLParser',url)]
def verify(self, base_url): '''Parses the given HTML string and asks the FortuneHTMLParser whether the parsed string is a valid fortune response ''' url = base_url + self.fortune_url body = self._curl(url) # Empty response if body is None: return [('fail', 'No response', url)] elif len(body) == 0: return [('fail', 'Empty Response', url)] parser = FortuneHTMLParser() parser.feed(body) if parser.isValidFortune(self.out): return [('pass', '', url)] else: return [('fail', 'Invalid according to FortuneHTMLParser', url)]