コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
    def validateFortune(self, htmlString, out, err):
        try:
            parser = FortuneHTMLParser()
            parser.feed(htmlString)

            return parser.isValidFortune()
        except:
            pass
        return False
コード例 #4
0
    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
コード例 #5
0
    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
コード例 #6
0
    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)]