Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/h2/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class OutputLogger:

def __init__(self, file=None, trace_level=False) -> None: # type: ignore
super().__init__()
self.file = file or sys.stderr
self.file = sys.stderr if file is None else file
self.trace_level = trace_level

def debug(self, fmtstr, *args) -> None: # type: ignore
Expand Down Expand Up @@ -184,7 +184,7 @@ def __init__(self,
self.split_outbound_cookies = split_outbound_cookies
self.validate_inbound_headers = validate_inbound_headers
self.normalize_inbound_headers = normalize_inbound_headers
self.logger = logger or DummyLogger(__name__)
self.logger = DummyLogger(__name__) if logger is None else logger

@property
def header_encoding(self) -> bool | str | None:
Expand Down
41 changes: 41 additions & 0 deletions tests/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"""
from __future__ import annotations

import io
import logging

import pytest
Expand Down Expand Up @@ -129,6 +130,46 @@ def test_logger_instance_is_reflected(self) -> None:
config.logger = logger
assert config.logger is logger

def test_falsey_logger_is_used(self) -> None:
messages: list[str] = []

class EmptyLogger(h2.config.DummyLogger):
def __len__(self) -> int:
return len(messages)

def debug(self, *args: object, **kwargs: object) -> None:
messages.append("debug")

def trace(self, *args: object, **kwargs: object) -> None:
messages.append("trace")

logger = EmptyLogger()
assert not logger
config = h2.config.H2Configuration(logger=logger)

assert config.logger is logger
config.logger.debug("owned debug")
config.logger.trace("owned trace")
assert messages == ["debug", "trace"]

@pytest.mark.parametrize("trace_level", [False, True])
def test_falsey_file_is_used(self, capsys, trace_level) -> None:
class FalseyFile(io.StringIO):
def __bool__(self) -> bool:
return False

with FalseyFile() as output:
logger = h2.config.OutputLogger(file=output, trace_level=trace_level)
logger.debug("owned debug")
logger.trace("owned trace")

expected = "h2 (debug): owned debug\n"
if trace_level:
expected += "h2 (trace): owned trace\n"
assert output.getvalue() == expected
assert not output.closed
assert capsys.readouterr().err == ""

@pytest.mark.parametrize("trace_level", [False, True])
def test_output_logger(self, capsys, trace_level) -> None:
logger = h2.config.OutputLogger(trace_level=trace_level)
Expand Down