File: test_get_logger.py

package info (click to toggle)
python-eth-utils 5.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,140 kB
  • sloc: python: 5,985; makefile: 238
file content (78 lines) | stat: -rw-r--r-- 2,472 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import logging
import pickle
import uuid

from eth_utils.logging import (
    ExtendedDebugLogger,
    get_extended_debug_logger,
    get_logger,
)


class CustomLogger(logging.Logger):
    pass


def test_get_logger_with_no_class():
    path = f"testing.{uuid.uuid4()}"
    logger = get_logger(path)
    assert isinstance(logger, logging.Logger)
    assert logger.name == path


def test_get_logger_with_default_class():
    path = f"testing.{uuid.uuid4()}"
    logger = get_logger(path, logging.Logger)
    assert isinstance(logger, logging.Logger)
    assert logger.name == path


def test_get_logger_with_CustomLogger():
    path = f"testing.{uuid.uuid4()}"
    logger = get_logger(path, CustomLogger)
    assert isinstance(logger, CustomLogger)
    assert logger.name == path


def test_get_extended_debug_logger():
    path = f"testing.{uuid.uuid4()}"
    logger = get_extended_debug_logger(path)
    assert isinstance(logger, ExtendedDebugLogger)
    assert logger.name == path


def test_get_extended_debug_logger_if_other_logger_in_cache():
    path = f"testing.{uuid.uuid4()}"
    normal_logger = get_logger(path)
    assert not isinstance(normal_logger, ExtendedDebugLogger)
    assert normal_logger.name == path

    extended_logger = get_extended_debug_logger(path)
    assert isinstance(extended_logger, ExtendedDebugLogger)
    assert extended_logger.name == path


def test_get_logger_preserves_logging_module_config():
    assert logging.getLoggerClass() is logging.Logger

    path = f"testing.{uuid.uuid4()}"
    logger = get_logger(path, CustomLogger)
    assert isinstance(logger, CustomLogger)

    assert logging.getLoggerClass() is logging.Logger


def test_extended_debug_logger_pickling():
    name = f"testing.{uuid.uuid4()}"
    extended_logger = get_extended_debug_logger(name)
    pickled = pickle.dumps(extended_logger)

    # logging.Logger.__reduce__() returns (getLogger, name), which could give us a
    # regular Logger instance after pickling/unpickling an ExtendedDebugLogger
    # (e.g. when crossing process boundaries since the other process wouldn't have an
    # ExtendedDebugLogger with that name in the logging module's cache). This test
    # ensures an unpickled ExtendedDebugLogger is still an ExtendedDebugLogger even
    # when it's not in the logging's module cache.
    del logging.Logger.manager.loggerDict[name]
    unpickled_logger = pickle.loads(pickled)
    assert isinstance(unpickled_logger, ExtendedDebugLogger)