From 8aa20da2f184c695a9a0d986f276a8784e2ea83c Mon Sep 17 00:00:00 2001 From: Alan Hamlett Date: Tue, 8 Sep 2015 15:15:16 -0700 Subject: [PATCH] tests for logging --- dev-requirements.txt | 1 + tests/samples/debug_enabled.cfg | 3 ++ tests/samples/good_config.cfg | 3 ++ tests/test_logging.py | 76 +++++++++++++++++++++++++++++++++ wakatime/logger.py | 18 ++------ 5 files changed, 87 insertions(+), 14 deletions(-) create mode 100644 tests/samples/debug_enabled.cfg create mode 100644 tests/samples/good_config.cfg create mode 100644 tests/test_logging.py diff --git a/dev-requirements.txt b/dev-requirements.txt index 6ac7a9f..a045efe 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,5 +1,6 @@ coverage==3.7.1 mock==1.3.0 nose==1.3.7 +testfixtures==4.2.0 -e git://github.com/alanhamlett/nose-capturestderr.git@9f60083b756478258fdc800b6507f50ca6fc657c#egg=nose-capturestderr -e git://github.com/alanhamlett/nose-exclude.git@f8ad6b1111e3927ecfaafd26f6952745c4b8df0c#egg=nose-exclude diff --git a/tests/samples/debug_enabled.cfg b/tests/samples/debug_enabled.cfg new file mode 100644 index 0000000..f45d213 --- /dev/null +++ b/tests/samples/debug_enabled.cfg @@ -0,0 +1,3 @@ +[settings] +debug = true +api_key = 1234 diff --git a/tests/samples/good_config.cfg b/tests/samples/good_config.cfg new file mode 100644 index 0000000..6a7ef52 --- /dev/null +++ b/tests/samples/good_config.cfg @@ -0,0 +1,3 @@ +[settings] +debug = false +api_key = 1234 diff --git a/tests/test_logging.py b/tests/test_logging.py new file mode 100644 index 0000000..7564c72 --- /dev/null +++ b/tests/test_logging.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- + + +from wakatime.main import execute +from wakatime.packages import requests + +import logging +import os +import tempfile +import time +import sys +from testfixtures import log_capture +from wakatime.compat import u +from wakatime.packages.requests.models import Response +from . import utils + + +class LanguagesTestCase(utils.TestCase): + patch_these = [ + 'wakatime.packages.requests.adapters.HTTPAdapter.send', + 'wakatime.offlinequeue.Queue.push', + ['wakatime.offlinequeue.Queue.pop', None], + 'wakatime.session_cache.SessionCache.save', + 'wakatime.session_cache.SessionCache.delete', + ['wakatime.session_cache.SessionCache.get', requests.session], + ] + + @log_capture() + def test_default_log_file_used(self, logs): + logging.disable(logging.NOTSET) + + response = Response() + response.status_code = 0 + self.patched['wakatime.packages.requests.adapters.HTTPAdapter.send'].return_value = response + + now = u(int(time.time())) + entity = 'tests/samples/codefiles/python.py' + config = 'tests/samples/sample.cfg' + args = ['--file', entity, '--config', config, '--time', now] + + retval = execute(args) + self.assertEquals(retval, 102) + self.assertEquals(sys.stdout.getvalue(), '') + self.assertEquals(sys.stderr.getvalue(), '') + + self.assertEquals(logging.WARNING, logging.getLogger('WakaTime').level) + logfile = os.path.realpath(os.path.expanduser('~/.wakatime.log')) + self.assertEquals(logfile, logging.getLogger('WakaTime').handlers[0].baseFilename) + output = u("\n").join([u(' ').join(x) for x in logs.actual()]) + self.assertEquals(output, u("WakaTime WARNING Regex error (unbalanced parenthesis) for include pattern: \\(invalid regex)\nWakaTime WARNING Regex error (unbalanced parenthesis) for exclude pattern: \\(invalid regex)")) + + @log_capture() + def test_log_file_location_can_be_changed(self, logs): + logging.disable(logging.NOTSET) + + response = Response() + response.status_code = 0 + self.patched['wakatime.packages.requests.adapters.HTTPAdapter.send'].return_value = response + + with tempfile.NamedTemporaryFile() as fh: + now = u(int(time.time())) + entity = 'tests/samples/codefiles/python.py' + config = 'tests/samples/good_config.cfg' + logfile = os.path.realpath(fh.name) + args = ['--file', entity, '--config', config, '--time', now, '--logfile', logfile] + + execute(args) + + retval = execute(args) + self.assertEquals(retval, 102) + self.assertEquals(sys.stdout.getvalue(), '') + self.assertEquals(sys.stderr.getvalue(), '') + + self.assertEquals(logging.WARNING, logging.getLogger('WakaTime').level) + self.assertEquals(logfile, logging.getLogger('WakaTime').handlers[0].baseFilename) + logs.check() diff --git a/wakatime/logger.py b/wakatime/logger.py index 7e275db..93ec7ca 100644 --- a/wakatime/logger.py +++ b/wakatime/logger.py @@ -30,9 +30,9 @@ class CustomEncoder(json.JSONEncoder): if isinstance(obj, bytes): # pragma: nocover obj = u(obj) return json.dumps(obj) - try: + try: # pragma: nocover encoded = super(CustomEncoder, self).default(obj) - except UnicodeDecodeError: + except UnicodeDecodeError: # pragma: nocover obj = u(obj) encoded = super(CustomEncoder, self).default(obj) return encoded @@ -83,19 +83,9 @@ def set_log_level(logger, args): def setup_logging(args, version): logger = logging.getLogger('WakaTime') + for handler in logger.handlers: + logger.removeHandler(handler) set_log_level(logger, args) - if len(logger.handlers) > 0: - formatter = JsonFormatter(datefmt='%Y/%m/%d %H:%M:%S %z') - formatter.setup( - timestamp=args.timestamp, - isWrite=args.isWrite, - entity=args.entity, - version=version, - plugin=args.plugin, - verbose=args.verbose, - ) - logger.handlers[0].setFormatter(formatter) - return logger logfile = args.logfile if not logfile: logfile = '~/.wakatime.log'