Skip to content

Commit

Permalink
Better tests for the log filter level
Browse files Browse the repository at this point in the history
  • Loading branch information
tcalmant committed May 29, 2016
1 parent 8ab4c47 commit 1bffb6f
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 16 deletions.
27 changes: 13 additions & 14 deletions pelix/misc/log.py
Expand Up @@ -340,20 +340,19 @@ def get_level(context):
"""
# Get the log level
level_value = context.get_property(PROPERTY_LOG_LEVEL)
if not level_value:
level = logging.INFO
else:
try:
# Try to get an int
level = int(level_value)
except (ValueError, TypeError):
# Try to get a level value from a string
level = logging.getLevelName(level_value)
if type(level) is str:
# Got a string back: not a valid level
level = logging.INFO

return level

if level_value:
for converter in (int, logging.getLevelName):
try:
parsed_level = converter(level_value)
if isinstance(parsed_level, int):
# Got a valid level
return parsed_level
except (ValueError, TypeError):
pass

# By default, use the INFO level
return logging.INFO

def start(self, context):
"""
Expand Down
43 changes: 41 additions & 2 deletions tests/misc/test_log.py
Expand Up @@ -26,13 +26,15 @@

__version__ = "1.0.0"


# ------------------------------------------------------------------------------


class LogServiceTest(unittest.TestCase):
"""
Tests the log service
"""

def setUp(self):
"""
Prepares a framework and a registers a service to export
Expand Down Expand Up @@ -155,13 +157,49 @@ def test_logging_filter_level(self):
"""
for filter_level in (logging.DEBUG, logging.INFO, logging.WARNING,
logging.ERROR):
for int_level in (True, False):
# Restart the framework
self.tearDown()
self.setUp()

# Change the framework property and reload the log service
if int_level:
self.framework.add_property(
pelix.misc.PROPERTY_LOG_LEVEL, filter_level)
else:
self.framework.add_property(
pelix.misc.PROPERTY_LOG_LEVEL,
logging.getLevelName(filter_level))

self.framework.get_bundle_by_name("pelix.misc.log").update()
self.service = self._get_service()

# Log for each level
for level in (logging.DEBUG, logging.INFO, logging.WARNING,
logging.ERROR):
# Log something
logging.log(level, "Some log at %s",
logging.getLevelName(level))

try:
latest = self.service.get_log()[-1]
if level >= filter_level:
self.assertIn(logging.getLevelName(level),
latest.message)
except IndexError:
if level >= filter_level:
self.fail("Missing a log matching the filter")

# Try with invalid levels, default level is INFO
filter_level = logging.INFO
for invalid in (None, "", "deb", "ug", "foobar", {1: 2}, [1, 2]):
# Restart the framework
self.tearDown()
self.setUp()

# Change the framework property and reload the log service
self.framework.add_property(
pelix.misc.PROPERTY_LOG_LEVEL, filter_level)
self.framework.add_property(pelix.misc.PROPERTY_LOG_LEVEL, invalid)

self.framework.get_bundle_by_name("pelix.misc.log").update()
self.service = self._get_service()

Expand Down Expand Up @@ -231,6 +269,7 @@ def test_bad_listener(self):
"""
Tests a listener raising an exception
"""

# Prepare the listener
class GoodListener:
def __init__(self):
Expand Down

0 comments on commit 1bffb6f

Please sign in to comment.