コード例 #1
0
ファイル: test_LogDefer.py プロジェクト: Python3pkg/LogDefer
class LogDeferTest(unittest.TestCase):
    def setUp(self):
        self.logger = LogDefer()

    def test_default_levels(self):
        self.assertEqual(self.logger.levels, (40, 30, 20, 10))

    def test_message_object(self):
        self.assertTrue('start' in self.logger.message)
        self.assertTrue('logs' in self.logger.message)
        self.assertTrue('timers' in self.logger.message)
        self.assertTrue('data' in self.logger.message)

        self.assertTrue(type(self.logger.message['start']), float)

        self.assertTrue(type(self.logger.message['logs']), list)

        self.assertTrue(type(self.logger.message['timers']), dict)

        self.assertTrue(type(self.logger.message['data']), dict)

    def test_empty_log_defer_object(self):
        # Log defer message should only have start and end if no
        # logs/timers/data is added.
        #
        log_object = self.__log_defer_to_dict__()

        self.assertEqual(len(list(log_object.keys())), 2)

        self.assertTrue('start' in log_object)
        self.assertTrue('end' in log_object)

        self.assertFalse('logs' in log_object)
        self.assertFalse('timers' in log_object)
        self.assertFalse('data' in log_object)

    def test_log_one_message(self):
        # Logging one message should only have 1 log object in the output
        # message.
        #

        log_message = "This is a debug message"
        self.logger.debug(log_message)
        log_object = self.__log_defer_to_dict__()

        self.assertTrue('logs' in log_object)

        self.assertEqual(type(log_object['logs']), list)
        self.assertEqual(len(log_object['logs']), 1)

        self.assertEqual(type(log_object['logs'][0]), list)
        self.assertEqual(len(log_object['logs'][0]), 3)

        # LogDefer log message format:
        # [elapsedTime, logLevel, logMessage, <data>]
        #
        message = log_object['logs'][0]

        # elapsedTime
        self.assertEqual(type(message[0]), float)
        self.assertTrue(message[0] < log_object['end'])

        # logLevel
        self.assertEqual(type(message[1]), int)
        self.assertEqual(log_levels[message[1]], 'debug')

        # logMessage
        self.assertEqual(message[2], log_message)

    def test_log_one_message_with_data(self):
        # Logging one message should only have 1 log object in the output
        # message and it should have a data object.
        #

        log_message = "This is a debug message"
        log_data = {"key": "value", "123": "abc"}

        self.logger.debug(log_message, log_data)
        log_object = self.__log_defer_to_dict__()

        self.assertTrue('logs' in log_object)

        self.assertEqual(type(log_object['logs']), list)
        self.assertEqual(len(log_object['logs']), 1)

        self.assertEqual(type(log_object['logs'][0]), list)
        self.assertEqual(len(log_object['logs'][0]), 4)

        # LogDefer log message format:
        # [elapsedTime, logLevel, logMessage, <data>]
        #
        message = log_object['logs'][0]

        # elapsedTime
        self.assertEqual(type(message[0]), float)
        self.assertTrue(message[0] < log_object['end'])

        # logLevel
        self.assertEqual(type(message[1]), int)
        self.assertEqual(log_levels[message[1]], 'debug')

        # logMessage
        self.assertEqual(message[2], log_message)

        # data
        self.assertEqual(type(message[3]), dict)
        self.assertTrue("key" in message[3])
        self.assertTrue("123" in message[3])

        for k in list(log_data.keys()):
            self.assertEqual(message[3][k], log_data[k])

    def test_log_multiple_messages(self):
        # Logging one message should only have 1 log object in the output
        # message and it should have a data object.
        #

        log_messages = ["debug", "info", "warn", "error", "warn"]

        log_data = [
            None,
            None,
            {
                "key": "value",
                "123": "abc"
            },
            None,
            {
                "key": "value",
                "123": "abc"
            },
        ]

        self.logger.debug(log_messages[0], log_data[0])
        self.logger.info(log_messages[1], log_data[1])
        self.logger.warn(log_messages[2], log_data[2])
        self.logger.error(log_messages[3], log_data[3])
        self.logger.add_message(20, log_messages[4], log_data[4])

        log_object = self.__log_defer_to_dict__()

        self.assertTrue('logs' in log_object)

        self.assertEqual(type(log_object['logs']), list)
        self.assertEqual(len(log_object['logs']), 5)

        for i, log in enumerate(log_object['logs']):
            self.assertEqual(type(log), list)
            if log_data[i]:
                self.assertEqual(len(log), 4)
            else:
                self.assertEqual(len(log), 3)

            # LogDefer log message format:
            # [elapsedTime, logLevel, logMessage, <data>]
            #

            # elapsedTime
            self.assertEqual(type(log[0]), float)
            self.assertTrue(log[0] < log_object['end'])

            # logLevel
            self.assertEqual(type(log[1]), int)
            self.assertEqual(log_levels[log[1]], log_messages[i])

            # logMessage
            self.assertEqual(log[2], log_messages[i])

            if log_data[i]:
                # data
                self.assertEqual(type(log[3]), dict)

                for k in list(log_data[i].keys()):
                    self.assertEqual(log[3][k], log_data[i][k])

    def test_log_timer(self):
        with self.logger.timer("junktimer"):
            time.sleep(0.01)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('timers' in log_object)

        self.assertEqual(log_object['timers'][0][0], 'junktimer')
        self.assertEqual(len(log_object['timers']), 1)

        self.assertEqual(
            "{timer:.2f}".format(timer=(log_object['timers'][0][2] -
                                        log_object['timers'][0][1])), '0.01')

    def test_log_timers(self):
        with self.logger.timer("junktimer"):
            time.sleep(0.01)

        with self.logger.timer("junktimer2"):
            time.sleep(0.01)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('timers' in log_object)

        self.assertEqual(log_object['timers'][0][0], 'junktimer')
        self.assertEqual(log_object['timers'][1][0], 'junktimer2')
        self.assertEqual(len(log_object['timers']), 2)

        self.assertEqual(
            "{timer:.2f}".format(timer=(log_object['timers'][0][2] -
                                        log_object['timers'][0][1])), '0.01')

        self.assertEqual(
            "{timer:.2f}".format(timer=(log_object['timers'][1][2] -
                                        log_object['timers'][1][1])), '0.01')

    def test_data(self):
        data = {'key': 'value'}
        self.logger.data(data)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('data' in log_object)
        self.assertEqual(data, log_object['data'])

    def test_message_data(self):
        data = {'key': 'value'}
        more = {'k2': 'v2'}
        self.logger.warn("aaa", data, more)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('logs' in log_object)
        self.assertEqual(dict(list(data.items()) + list(more.items())),
                         log_object['logs'][0][-1])

    def test_data_non_serializable_object(self):
        data = {'key': self.logger}

        self.logger.data(data)
        self.logger.data({'key2': [self.logger, self.logger]})

        self.logger.debug('message', [self.logger, self.logger])
        self.logger.debug('message', (self.logger, self.logger))

        self.logger.warn('junk', self.logger)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('data' in log_object)

        self.assertEqual(2, len(list(log_object['data'].keys())))
        self.assertEqual(log_object['data']['key'], str(data['key']))

    def __log_defer_to_dict__(self):
        json_output = self.logger.finalize_log()
        return json.loads(json_output)
コード例 #2
0
ファイル: test_LogDefer.py プロジェクト: mikep/LogDefer
 def setUp(self):
     self.logger = LogDefer()
コード例 #3
0
ファイル: test_LogDefer.py プロジェクト: Python3pkg/LogDefer
 def setUp(self):
     self.logger = LogDefer()
コード例 #4
0
ファイル: test_LogDefer.py プロジェクト: mikep/LogDefer
class LogDeferTest(unittest.TestCase):
    def setUp(self):
        self.logger = LogDefer()

    def test_default_levels(self):
        self.assertEqual(self.logger.levels, (40, 30, 20, 10))

    def test_message_object(self):
        self.assertTrue('start' in self.logger.message)
        self.assertTrue('logs' in self.logger.message)
        self.assertTrue('timers' in self.logger.message)
        self.assertTrue('data' in self.logger.message)

        self.assertTrue(
            type(self.logger.message['start']),
            float
        )

        self.assertTrue(
            type(self.logger.message['logs']),
            list
        )

        self.assertTrue(
            type(self.logger.message['timers']),
            dict
        )

        self.assertTrue(
            type(self.logger.message['data']),
            dict
        )

    def test_empty_log_defer_object(self):
        # Log defer message should only have start and end if no
        # logs/timers/data is added.
        #
        log_object = self.__log_defer_to_dict__()

        self.assertEqual(len(list(log_object.keys())), 2)

        self.assertTrue('start' in log_object)
        self.assertTrue('end' in log_object)

        self.assertFalse('logs' in log_object)
        self.assertFalse('timers' in log_object)
        self.assertFalse('data' in log_object)

    def test_log_one_message(self):
        # Logging one message should only have 1 log object in the output
        # message.
        #

        log_message = "This is a debug message"
        self.logger.debug(log_message)
        log_object = self.__log_defer_to_dict__()

        self.assertTrue('logs' in log_object)

        self.assertEqual(type(log_object['logs']), list)
        self.assertEqual(len(log_object['logs']), 1)

        self.assertEqual(type(log_object['logs'][0]), list)
        self.assertEqual(len(log_object['logs'][0]), 3)

        # LogDefer log message format:
        # [elapsedTime, logLevel, logMessage, <data>]
        #
        message = log_object['logs'][0]

        # elapsedTime
        self.assertEqual(type(message[0]), float)
        self.assertTrue(message[0] < log_object['end'])

        # logLevel
        self.assertEqual(type(message[1]), int)
        self.assertEqual(log_levels[message[1]], 'debug')

        # logMessage
        self.assertEqual(message[2], log_message)

    def test_log_one_message_with_data(self):
        # Logging one message should only have 1 log object in the output
        # message and it should have a data object.
        #

        log_message = "This is a debug message"
        log_data = {"key": "value", "123": "abc"}

        self.logger.debug(log_message, log_data)
        log_object = self.__log_defer_to_dict__()

        self.assertTrue('logs' in log_object)

        self.assertEqual(type(log_object['logs']), list)
        self.assertEqual(len(log_object['logs']), 1)

        self.assertEqual(type(log_object['logs'][0]), list)
        self.assertEqual(len(log_object['logs'][0]), 4)

        # LogDefer log message format:
        # [elapsedTime, logLevel, logMessage, <data>]
        #
        message = log_object['logs'][0]

        # elapsedTime
        self.assertEqual(type(message[0]), float)
        self.assertTrue(message[0] < log_object['end'])

        # logLevel
        self.assertEqual(type(message[1]), int)
        self.assertEqual(log_levels[message[1]], 'debug')

        # logMessage
        self.assertEqual(message[2], log_message)

        # data
        self.assertEqual(type(message[3]), dict)
        self.assertTrue("key" in message[3])
        self.assertTrue("123" in message[3])

        for k in list(log_data.keys()):
            self.assertEqual(message[3][k], log_data[k])

    def test_log_multiple_messages(self):
        # Logging one message should only have 1 log object in the output
        # message and it should have a data object.
        #

        log_messages = [
            "debug",
            "info",
            "warn",
            "error",
            "warn"
        ]

        log_data = [
            None,
            None,
            {"key": "value", "123": "abc"},
            None,
            {"key": "value", "123": "abc"},
        ]

        self.logger.debug(log_messages[0], log_data[0])
        self.logger.info(log_messages[1], log_data[1])
        self.logger.warn(log_messages[2], log_data[2])
        self.logger.error(log_messages[3], log_data[3])
        self.logger.add_message(20, log_messages[4], log_data[4])

        log_object = self.__log_defer_to_dict__()

        self.assertTrue('logs' in log_object)

        self.assertEqual(type(log_object['logs']), list)
        self.assertEqual(len(log_object['logs']), 5)

        for i, log in enumerate(log_object['logs']):
            self.assertEqual(type(log), list)
            if log_data[i]:
                self.assertEqual(len(log), 4)
            else:
                self.assertEqual(len(log), 3)

            # LogDefer log message format:
            # [elapsedTime, logLevel, logMessage, <data>]
            #

            # elapsedTime
            self.assertEqual(type(log[0]), float)
            self.assertTrue(log[0] < log_object['end'])

            # logLevel
            self.assertEqual(type(log[1]), int)
            self.assertEqual(log_levels[log[1]], log_messages[i])

            # logMessage
            self.assertEqual(log[2], log_messages[i])

            if log_data[i]:
                # data
                self.assertEqual(type(log[3]), dict)

                for k in list(log_data[i].keys()):
                    self.assertEqual(log[3][k], log_data[i][k])

    def test_log_timer(self):
        with self.logger.timer("junktimer"):
            time.sleep(0.01)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('timers' in log_object)

        self.assertEqual(log_object['timers'][0][0], 'junktimer')
        self.assertEqual(len(log_object['timers']), 1)

        self.assertEqual("{timer:.2f}".format(
            timer=(log_object['timers'][0][2] - log_object['timers'][0][1])), '0.01'
        )

    def test_log_timers(self):
        with self.logger.timer("junktimer"):
            time.sleep(0.01)

        with self.logger.timer("junktimer2"):
            time.sleep(0.01)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('timers' in log_object)

        self.assertEqual(log_object['timers'][0][0], 'junktimer')
        self.assertEqual(log_object['timers'][1][0], 'junktimer2')
        self.assertEqual(len(log_object['timers']), 2)

        self.assertEqual("{timer:.2f}".format(
            timer=(log_object['timers'][0][2] - log_object['timers'][0][1])), '0.01'
        )

        self.assertEqual("{timer:.2f}".format(
            timer=(log_object['timers'][1][2] - log_object['timers'][1][1])), '0.01'
        )

    def test_data(self):
        data = {'key': 'value'}
        self.logger.data(data)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('data' in log_object)
        self.assertEqual(data, log_object['data'])

    def test_message_data(self):
        data = {'key': 'value'}
        more = {'k2': 'v2'}
        self.logger.warn("aaa", data, more)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('logs' in log_object)
        self.assertEqual(
            dict(list(data.items()) + list(more.items())), log_object['logs'][0][-1]
        )

    def test_data_non_serializable_object(self):
        data = {'key': self.logger}

        self.logger.data(data)
        self.logger.data({'key2': [self.logger, self.logger]})

        self.logger.debug('message', [self.logger, self.logger])
        self.logger.debug('message', (self.logger, self.logger))

        self.logger.warn('junk', self.logger)

        log_object = self.__log_defer_to_dict__()
        self.assertTrue('data' in log_object)

        self.assertEqual(2, len(list(log_object['data'].keys())))
        self.assertEqual(log_object['data']['key'], str(data['key']))

    def __log_defer_to_dict__(self):
        json_output = self.logger.finalize_log()
        return json.loads(json_output)