Exemple #1
0
def test_uses_stop_unless_rules():
    queue = []
    logger = HttpLogger(
        queue=queue, rules="!response_header:blahblahblah! stop_unless !.*!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 0

    queue = []
    logger = HttpLogger(queue=queue, rules="!response_body! stop_unless !.*!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1

    queue = []
    logger = HttpLogger(queue=queue,
                        rules="!response_body! stop_unless !.*World.*!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1

    queue = []
    logger = HttpLogger(queue=queue,
                        rules="!response_body! stop_unless !.*blahblahblah.*!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 0
Exemple #2
0
def test_creates_multiple_instances():
    url1 = "https://resurface.io"
    url2 = "https://whatever.com"
    logger1 = HttpLogger(url=url1)
    logger2 = HttpLogger(url=url2)
    logger3 = HttpLogger(url=DEMO_URL)

    assert logger1.agent == HttpLogger.AGENT
    assert logger1.enableable is True
    assert logger1.enabled is True
    assert logger1.url == url1
    assert logger2.agent == HttpLogger.AGENT
    assert logger2.enableable is True
    assert logger2.enabled is True
    assert logger2.url == url2
    assert logger3.agent == HttpLogger.AGENT
    assert logger3.enableable is True
    assert logger3.enabled is True
    assert logger3.url == DEMO_URL

    UsageLoggers.disable()
    assert UsageLoggers.is_enabled() is False
    assert logger1.enabled is False
    assert logger2.enabled is False
    assert logger3.enabled is False
    UsageLoggers.enable()
    assert UsageLoggers.is_enabled() is True
    assert logger1.enabled is True
    assert logger2.enabled is True
    assert logger3.enabled is True
Exemple #3
0
def test_uses_skip_submission_rules():
    logger = HttpLogger(url="http://mysite.com")
    assert logger.skip_submission is False
    logger = HttpLogger(url="http://mysite.com", rules="")
    assert logger.skip_submission is False
    logger = HttpLogger(url="http://mysite.com", rules="skip_submission")
    assert logger.skip_submission is True
def test_uses_replace_rules_with_complex_expressions():
    queue = []
    logger = HttpLogger(
        queue=queue,
        rules=
        "/response_body/ replace /[a-zA-Z0-9.!#$%&’*+\\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)/, /[email protected]/"
    )
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html(),
                     response_body=MOCK_HTML.replace('World',
                                                     '*****@*****.**'))
    assert len(queue) == 1
    assert "[\"response_body\",\"<html>Hello [email protected]!</html>\"]," in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules="/response_body/ replace /[0-9\\.\\-\\/]{9,}/, /xyxy/")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html(),
                     response_body=MOCK_HTML.replace('World', '123-45-1343'))
    assert len(queue) == 1
    assert "[\"response_body\",\"<html>Hello xyxy!</html>\"]," in queue[0]

    # todo this specific case not working (Clubhouse #150)
    # queue = []
    # logger = HttpLogger(queue=queue, rules="!response_body! replace !World!, !<b>\\0</b>!")
    # HttpMessage.send(logger, request=mock_request_with_json2(), response=mock_response_with_html())
    # assert len(queue) == 1
    # assert "[\"response_body\",\"<html>Hello <b>World</b>!</html>\"]," in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue, rules="!response_body! replace !(World)!, !<b>\\1</b>!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert "[\"response_body\",\"<html>Hello <b>World</b>!</html>\"]," in queue[
        0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules=
        "!response_body! replace !<input([^>]*)>([^<]*)</input>!, !<input\\1></input>!"
    )
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html(),
                     response_body=MOCK_HTML5)
    assert len(queue) == 1
    assert "[\"response_body\",\"<html>\\n<input type=\\\"hidden\\\"></input>\\n<input class='foo' type=\\\"hidden\\\"></input>\\n</html>\"]," in queue[
        0]
Exemple #5
0
def test_uses_allow_http_url_rules():
    logger = HttpLogger(url="http://mysite.com")
    assert logger.enableable is False
    logger = HttpLogger(url="http://mysite.com", rules="")
    assert logger.enableable is False
    logger = HttpLogger(url="https://mysite.com")
    assert logger.enableable is True
    logger = HttpLogger(url="http://mysite.com", rules="allow_http_url")
    assert logger.enableable is True
    logger = HttpLogger(url="http://mysite.com",
                        rules="allow_http_url\nallow_http_url")
    assert logger.enableable is True
def test_uses_sample_rules():
    queue = []

    try:
        HttpLogger(queue=queue, rules="sample 10\nsample 99")
        assert False is True
    except Exception as e:
        assert str(e) == 'Multiple sample rules'

    logger = HttpLogger(queue=queue, rules="sample 10")
    for i in range(1, 101):
        HttpMessage.send(logger,
                         request=mock_request_with_json2(),
                         response=mock_response_with_html())
    assert 2 <= len(queue) <= 20
Exemple #7
0
 def __init__(self,
              url: Optional[str] = None,
              rules: Optional[str] = None,
              *args,
              **kwargs):
     self.logger = HttpLogger(url=url, rules=rules)
     self.start_time = 0
Exemple #8
0
def HttpLoggerForAIOHTTP(url: Optional[str] = None,
                         rules: Optional[str] = None):
    logger = HttpLogger(url=url, rules=rules)

    @web.middleware
    async def resurface_logger_middleware(request, handler):
        start_time = time.time()
        response = await handler(request)

        interval = str((time.time() - start_time) * 1000)
        data__: bytes = await request.read()

        HttpMessage.send(
            logger,
            request=HttpRequestImpl(
                url=str(request.url),
                headers=request.headers,
                params=request.query,
                method=request.method,
                body=data__.decode(),
            ),
            response=HttpResponseImpl(
                status=response.status,
                headers=response.headers,
                body=response.body.decode("utf8"),
            ),
            interval=interval,
        )

        return response

    return resurface_logger_middleware
Exemple #9
0
def test_has_valid_agent():
    agent = HttpLogger.AGENT
    assert len(agent) > 0
    assert agent.endswith(".py")
    assert ("\\" in agent) is False
    assert ('"' in agent) is False
    assert ("'" in agent) is False
    assert HttpLogger().agent == agent
Exemple #10
0
def test_creates_instance():
    logger = HttpLogger()
    assert logger is not None
    assert logger.agent == HttpLogger.AGENT
    assert logger.enableable is False
    assert logger.enabled is False
    assert logger.queue is None
    assert logger.url is None
Exemple #11
0
 def __call__(self, request):
     response = self.get_response(request)
     status = response.status_code
     if (status < 300
             or status == 302) and HttpLogger.is_string_content_type(
                 response['Content-Type']):
         HttpMessage.send(self.logger, request=request,
                          response=response)  # todo add timing details
     return response
Exemple #12
0
    def send(
        cls,
        logger: HttpLogger,
        request,
        response,
        response_body: Optional[str] = None,
        request_body: Optional[str] = None,
        now=None,
        interval=None,
    ) -> None:  # TODO: missing type hints

        if not logger.enabled:
            return

        # copy details from request & response
        message: List[List[str]] = cls.build(request, response, response_body,
                                             request_body)

        # copy details from active session
        if logger.rules.copy_session_field:
            session_dict = logger.conn.__dict__
            if session_dict:
                for r in logger.rules.copy_session_field:
                    for d0 in session_dict:
                        if match(r.param1, d0):
                            d1 = session_dict[d0]
                            if d0 == "cookies":
                                d1 = d1.get_dict()
                            if isinstance(d1, dict):
                                d1 = {k: v for k, v in d1.items() if v}
                            message.append(
                                [f"session_field:{d0.lower()}",
                                 str(d1)])

        # add timing details
        message.append([
            "now",
            str(now) if now is not None else str(round(time() * 1000))
        ])
        if interval is not None:
            message.append(["interval", interval])

        logger.submit_if_passing(message)
Exemple #13
0
def test_formats_response_with_empty_body():
    queue = []
    logger = HttpLogger(queue=queue, rules="include debug")
    HttpMessage.send(logger, request=mock_request(), response=mock_response_with_html(), response_body='')
    assert len(queue) == 1
    msg = queue[0]
    assert parseable(msg) is True
    assert f"[\"response_code\",\"200\"]" in msg
    assert f"[\"response_header:content-type\",\"text/html; charset=utf-8\"]" in msg
    assert f"response_body" not in msg
Exemple #14
0
def test_formats_response():
    queue = []
    logger = HttpLogger(queue=queue, rules="include debug")
    HttpMessage.send(logger, request=mock_request(), response=mock_response())
    assert len(queue) == 1
    msg = queue[0]
    assert parseable(msg) is True
    assert '["response_code","200"]' in msg
    assert "response_body" not in msg
    assert "response_header" not in msg
Exemple #15
0
 def __init__(self,
              app,
              url: Optional[str] = None,
              rules: Optional[str] = None):
     self.app = app
     self.logger = HttpLogger(url=url, rules=rules)
     self.start_time: float = 0.0
     self.interval: float = 0.0
     self.response: List[bytes] = []
     self.response_headers: Iterable[Tuple[str, str]] = []
     self.status: Optional[int] = None
Exemple #16
0
def test_formats_response_with_missing_details():
    queue = []
    logger = HttpLogger(queue=queue, rules="include debug")
    HttpMessage.send(logger, request=mock_request(), response=HttpResponseImpl(), response_body=None, request_body=None,
                     now=None, interval=None)
    assert len(queue) == 1
    msg = queue[0]
    assert parseable(msg) is True
    assert f"response_body" not in msg
    assert f"response_code" not in msg
    assert f"response_header" not in msg
    assert f"interval" not in msg
def test_uses_stop_if_found_rules():
    queue = []
    logger = HttpLogger(
        queue=queue, rules='!response_header:blahblahblah! stop_if_found !.*!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1

    queue = []
    logger = HttpLogger(queue=queue,
                        rules='!response_body! stop_if_found !.*!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 0

    queue = []
    logger = HttpLogger(queue=queue,
                        rules='!response_body! stop_if_found !World!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 0

    queue = []
    logger = HttpLogger(queue=queue,
                        rules='!response_body! stop_if_found !.*World.*!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 0

    queue = []
    logger = HttpLogger(queue=queue,
                        rules='!response_body! stop_if_found !blahblahblah!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
Exemple #18
0
def test_formats_request_with_body():
    queue = []
    logger = HttpLogger(queue=queue, rules="include debug")
    HttpMessage.send(logger, request=mock_request_with_json(), response=mock_response(), request_body=MOCK_HTML)
    assert len(queue) == 1
    msg = queue[0]
    assert parseable(msg) is True
    assert f"[\"request_body\",\"{MOCK_HTML}\"]" in msg
    assert f"[\"request_header:content-type\",\"Application/JSON\"]" in msg
    assert f"[\"request_method\",\"POST\"]" in msg
    assert f"[\"request_param:message\",\"{MOCK_JSON_ESCAPED}\"]" in msg
    assert f"[\"request_url\",\"{MOCK_URL}?{MOCK_QUERY_STRING}\"]" in msg
    assert "request_param:foo" not in msg
Exemple #19
0
def test_silently_ignores_unexpected_option_classes():
    logger = HttpLogger(DEMO_URL)
    assert logger.enableable is False
    assert logger.enabled is False
    assert logger.queue is None
    assert logger.url is None

    logger = HttpLogger(True)
    assert logger.enableable is False
    assert logger.enabled is False
    assert logger.queue is None
    assert logger.url is None

    logger = HttpLogger([])
    assert logger.enableable is False
    assert logger.enabled is False
    assert logger.queue is None
    assert logger.url is None

    logger = HttpLogger(url=[])
    assert logger.enableable is False
    assert logger.enabled is False
    assert logger.queue is None
    assert logger.url is None

    logger = HttpLogger(url=23)
    assert logger.enableable is False
    assert logger.enabled is False
    assert logger.queue is None
    assert logger.url is None

    logger = HttpLogger(queue="asdf")
    assert logger.enableable is False
    assert logger.enabled is False
    assert logger.queue is None
    assert logger.url is None

    logger = HttpLogger(queue=45)
    assert logger.enableable is False
    assert logger.enabled is False
    assert logger.queue is None
    assert logger.url is None

    logger = HttpLogger(enabled=2)
    assert logger.enableable is False
    assert logger.enabled is False
    assert logger.queue is None
    assert logger.url is None
Exemple #20
0
def test_uses_remove_rules():
    queue = []
    logger = HttpLogger(queue=queue, rules="!.*! remove")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 0

    queue = []
    logger = HttpLogger(queue=queue, rules="!request_body! remove")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' not in queue[0]
    assert '["response_body",' in queue[0]

    queue = []
    logger = HttpLogger(queue=queue, rules="!response_body! remove")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' in queue[0]
    assert '["response_body",' not in queue[0]

    queue = []
    logger = HttpLogger(queue=queue,
                        rules="!request_body|response_body! remove")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' not in queue[0]
    assert '["response_body",' not in queue[0]

    queue = []
    logger = HttpLogger(queue=queue, rules="!request_header:.*! remove")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' in queue[0]
    assert '["request_header:' not in queue[0]
    assert '["response_body",' in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules="!request_header:abc! remove\n!response_body! remove")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' in queue[0]
    assert '["request_header:' in queue[0]
    assert '["request_header:abc' not in queue[0]
    assert '["response_body",' not in queue[0]
Exemple #21
0
def test_formats_response_with_body():
    queue = []
    logger = HttpLogger(queue=queue, rules="include debug")
    HttpMessage.send(
        logger,
        request=mock_request(),
        response=mock_response_with_html(),
        response_body=MOCK_HTML2,
    )
    assert len(queue) == 1
    msg = queue[0]
    assert parseable(msg) is True
    assert f'["response_body","{MOCK_HTML2}"]' in msg
    assert '["response_code","200"]' in msg
    assert '["response_header:content-type","text/html; charset=utf-8"]' in msg
    def send(cls,
             logger: HttpLogger,
             request,
             response,
             response_body: Optional[str] = None,
             request_body: Optional[str] = None,
             now=None,
             interval=None) -> None:  # todo missing type hints

        if not logger.enabled: return

        # copy details from request & resonse
        message = cls.build(request, response, response_body, request_body)

        # todo copy details from active session

        # add timing details
        message.append([
            'now',
            str(now) if now is not None else str(round(time() * 1000))
        ])
        if interval is not None: message.append(['interval', interval])

        logger.submit_if_passing(message)
Exemple #23
0
def test_formats_request():
    queue = []
    logger = HttpLogger(queue=queue, rules="include debug")
    HttpMessage.send(logger, request=mock_request(), response=mock_response(), now=MOCK_NOW)
    assert len(queue) == 1
    msg = queue[0]
    assert parseable(msg) is True
    assert f"[\"agent\",\"{HttpLogger.AGENT}\"]" in msg
    assert f"[\"host\",\"{HttpLogger.host_lookup()}\"]" in msg
    assert f"[\"version\",\"{HttpLogger.version_lookup()}\"]" in msg
    assert f"[\"now\",\"{MOCK_NOW}\"]" in msg
    assert f"[\"request_method\",\"GET\"]" in msg
    assert f"[\"request_url\",\"{MOCK_URL}\"]" in msg
    assert f"request_body" not in msg
    assert f"request_header" not in msg
    assert f"request_param" not in msg
    assert f"interval" not in msg
Exemple #24
0
def test_formats_request():
    queue = []
    logger = HttpLogger(queue=queue, rules="include debug")
    HttpMessage.send(logger,
                     request=mock_request(),
                     response=mock_response(),
                     now=MOCK_NOW)
    assert len(queue) == 1
    msg = queue[0]
    assert parseable(msg) is True
    assert f'["host","{HttpLogger.host_lookup()}"]' in msg
    assert f'["now","{MOCK_NOW}"]' in msg
    assert '["request_method","GET"]' in msg
    assert f'["request_url","{MOCK_URL}"]' in msg
    assert "request_body" not in msg
    assert "request_header" not in msg
    assert "request_param" not in msg
    assert "interval" not in msg
Exemple #25
0
def test_formats_request_with_empty_body():
    queue = []
    logger = HttpLogger(queue=queue, rules="include debug")
    HttpMessage.send(
        logger,
        request=mock_request_with_json2(),
        response=mock_response(),
        request_body="",
    )
    assert len(queue) == 1
    msg = queue[0]
    assert parseable(msg) is True
    assert '["request_header:a","1, 2"]' in msg
    assert '["request_header:abc","123"]' in msg
    assert '["request_header:content-type","Application/JSON"]' in msg
    assert '["request_method","POST"]' in msg
    assert '["request_param:abc","123, 234"]' in msg
    assert f'["request_param:message","{MOCK_JSON_ESCAPED}"]' in msg
    assert f'["request_url","{MOCK_URL}?{MOCK_QUERY_STRING}"]' in msg
    assert "request_body" not in msg
    assert "request_param:foo" not in msg
Exemple #26
0
 def __init__(self, get_response):
     self.get_response = get_response
     self.logger = HttpLogger(url=__read_settings__("url"),
                              rules=__read_settings__("rules"))
Exemple #27
0
def test_uses_replace_rules():
    queue = []
    logger = HttpLogger(
        queue=queue, rules="!response_body! replace !blahblahblah!, !ZZZZZ!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert "World" in queue[0]
    assert "ZZZZZ" not in queue[0]

    queue = []
    logger = HttpLogger(queue=queue,
                        rules="!response_body! replace !World!, !Mundo!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["response_body","<html>Hello Mundo!</html>"],' in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules="!request_body|response_body! replace !^.*!, !ZZZZZ!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body","ZZZZZ"' in queue[0]
    assert '["response_body","ZZZZZ"' in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules=
        "!request_body! replace !^.*!, !QQ!\n!response_body! replace !^.*!, !SS!",
    )
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body","QQ"' in queue[0]
    assert '["response_body","SS"' in queue[0]

    queue = []
    logger = HttpLogger(queue=queue,
                        rules="!response_body! replace !World!, !!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["response_body","<html>Hello !</html>"],' in queue[0]

    queue = []
    logger = HttpLogger(queue=queue, rules="!response_body! replace !.*!, !!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["response_body",' not in queue[0]

    queue = []
    logger = HttpLogger(queue=queue,
                        rules="!response_body! replace !World!, !Z!")
    HttpMessage.send(
        logger,
        request=mock_request_with_json2(),
        response=mock_response_with_html(),
        response_body=MOCK_HTML3,
    )
    assert len(queue) == 1
    assert '["response_body","<html>1 Z 2 Z Red Z Blue Z!</html>"],' in queue[
        0]

    queue = []
    logger = HttpLogger(queue=queue,
                        rules="!response_body! replace !World!, !Z!")
    HttpMessage.send(
        logger,
        request=mock_request_with_json2(),
        response=mock_response_with_html(),
        response_body=MOCK_HTML4,
    )
    assert len(queue) == 1
    assert ('["response_body","<html>1 Z\\n2 Z\\nRed Z \\nBlue Z!\\n</html>"],'
            in queue[0])
Exemple #28
0
def test_uses_remove_unless_found_rules():
    queue = []
    logger = HttpLogger(
        queue=queue,
        rules="!response_header:blahblahblah! remove_unless_found !.*!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1

    queue = []
    logger = HttpLogger(queue=queue,
                        rules="!.*! remove_unless_found !blahblahblah!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 0

    queue = []
    logger = HttpLogger(
        queue=queue, rules="!request_body! remove_unless_found !blahblahblah!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' not in queue[0]
    assert '["response_body",' in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules="!response_body! remove_unless_found !blahblahblah!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' in queue[0]
    assert '["response_body",' not in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules="!response_body|request_body! remove_unless_found !World!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' not in queue[0]
    assert '["response_body",' in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules="!response_body|request_body! remove_unless_found !.*World.*!",
    )
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' not in queue[0]
    assert '["response_body",' in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules="!response_body|request_body! remove_unless_found !.*!")
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert '["request_body",' in queue[0]
    assert '["response_body",' in queue[0]
Exemple #29
0
def test_overrides_default_rules():
    assert HttpRules.default_rules() == HttpRules.strict_rules()
    try:
        logger = HttpLogger(url="https://mysite.com")
        assert logger.rules.text == HttpRules.strict_rules()
        logger = HttpLogger(url="https://mysite.com", rules="# 123")
        assert logger.rules.text == "# 123"

        HttpRules.set_default_rules("")
        logger = HttpLogger(url="https://mysite.com")
        assert logger.rules.text == ""
        logger = HttpLogger(url="https://mysite.com", rules="   ")
        assert logger.rules.text == ""
        logger = HttpLogger(url="https://mysite.com", rules=" sample 42")
        assert logger.rules.text == " sample 42"

        HttpRules.set_default_rules("skip_compression")
        logger = HttpLogger(url="https://mysite.com")
        assert logger.rules.text == "skip_compression"
        logger = HttpLogger(url="https://mysite.com",
                            rules="include default\nskip_submission\n")
        assert logger.rules.text == "skip_compression\nskip_submission\n"

        HttpRules.set_default_rules("sample 42\n")
        logger = HttpLogger(url="https://mysite.com")
        assert logger.rules.text == "sample 42\n"
        logger = HttpLogger(url="https://mysite.com", rules="   ")
        assert logger.rules.text == "sample 42\n"
        logger = HttpLogger(url="https://mysite.com",
                            rules="include default\nskip_submission\n")
        assert logger.rules.text == "sample 42\n\nskip_submission\n"

        HttpRules.set_default_rules("include debug")
        logger = HttpLogger(url="https://mysite.com",
                            rules=HttpRules.strict_rules())
        assert logger.rules.text == HttpRules.strict_rules()
    finally:
        HttpRules.set_default_rules(HttpRules.strict_rules())
def test_uses_replace_rules():
    queue = []
    logger = HttpLogger(
        queue=queue, rules='!response_body! replace !blahblahblah!, !ZZZZZ!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert 'World' in queue[0]
    assert 'ZZZZZ' not in queue[0]

    queue = []
    logger = HttpLogger(queue=queue,
                        rules='!response_body! replace !World!, !Mundo!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert "[\"response_body\",\"<html>Hello Mundo!</html>\"]," in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules='!request_body|response_body! replace !^.*!, !ZZZZZ!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert "[\"request_body\",\"ZZZZZ\"" in queue[0]
    assert "[\"response_body\",\"ZZZZZ\"" in queue[0]

    queue = []
    logger = HttpLogger(
        queue=queue,
        rules=
        "!request_body! replace !^.*!, !QQ!\n!response_body! replace !^.*!, !SS!"
    )
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert "[\"request_body\",\"QQ\"" in queue[0]
    assert "[\"response_body\",\"SS\"" in queue[0]

    queue = []
    logger = HttpLogger(queue=queue,
                        rules='!response_body! replace !World!, !!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert "[\"response_body\",\"<html>Hello !</html>\"]," in queue[0]

    queue = []
    logger = HttpLogger(queue=queue, rules='!response_body! replace !.*!, !!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html())
    assert len(queue) == 1
    assert "[\"response_body\"," not in queue[0]

    queue = []
    logger = HttpLogger(queue=queue,
                        rules='!response_body! replace !World!, !Z!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html(),
                     response_body=MOCK_HTML3)
    assert len(queue) == 1
    assert "[\"response_body\",\"<html>1 Z 2 Z Red Z Blue Z!</html>\"]," in queue[
        0]

    queue = []
    logger = HttpLogger(queue=queue,
                        rules='!response_body! replace !World!, !Z!')
    HttpMessage.send(logger,
                     request=mock_request_with_json2(),
                     response=mock_response_with_html(),
                     response_body=MOCK_HTML4)
    assert len(queue) == 1
    assert "[\"response_body\",\"<html>1 Z\\n2 Z\\nRed Z \\nBlue Z!\\n</html>\"]," in queue[
        0]