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
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_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
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]
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
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
def __init__(self, url: Optional[str] = None, rules: Optional[str] = None, *args, **kwargs): self.logger = HttpLogger(url=url, rules=rules) self.start_time = 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
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
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
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
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
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
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
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]
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
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 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
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
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
def __init__(self, get_response): self.get_response = get_response self.logger = HttpLogger(url=__read_settings__("url"), rules=__read_settings__("rules"))
def __init__(self, get_response): self.get_response = get_response self.logger = HttpLogger(url=__read_settings__('url'), rules=__read_settings__('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])
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]
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]
def test_uses_remove_unless_rules(): queue = [] logger = HttpLogger( queue=queue, rules='!response_header:blahblahblah! remove_unless !.*!') 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 !.*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 !.*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 !.*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 !.*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 !.*!') 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] queue = [] logger = HttpLogger( queue=queue, rules= "!response_body! remove_unless !.*!\n!request_body! remove_unless !.*!" ) 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]