source: anuga_core/source/anuga/utilities/log_test.py @ 6587

Last change on this file since 6587 was 6587, checked in by rwilson, 15 years ago

Move log.py test to a test file OUTSIDE the test_all.py environment.

File size: 3.3 KB
Line 
1#!/usr/bin/env python
2
3import os
4import sys
5import unittest
6import logging
7import log
8
9LOGFILE_NAME = 'test.log'
10STDOUT_LOG_NAME = 'stdout.log'
11
12
13class Test_Log(unittest.TestCase):
14    def setUp(self):
15        # just in case
16        if os.path.exists(LOGFILE_NAME):
17            os.remove(LOGFILE_NAME)
18        if os.path.exists(STDOUT_LOG_NAME):
19            os.remove(STDOUT_LOG_NAME)
20
21        # set log module logfile name
22        log.log_filename = LOGFILE_NAME
23
24        # set logging levels for this test
25        log.console_logging_level = logging.INFO
26        log.log_logging_level = logging.DEBUG
27
28    def tearDown(self):
29        if os.path.exists(LOGFILE_NAME):
30            os.remove(LOGFILE_NAME)
31        if os.path.exists(STDOUT_LOG_NAME):
32            os.remove(STDOUT_LOG_NAME)
33        pass
34
35    ##
36    # @brief Test the logging routines.
37    # @note HAVE ONE TEST CASE ONLY! Multiple tests would concatenate
38    #       multiple test output in one log file.
39    def test_simple(self):
40        '''Check that logging works in simple case.'''
41
42        # vvvvv  WARNING - DO NOT REFORMAT THESE LINES!  vvvvv
43        log_expect = '''2009-03-23 12:16:53,487 CRITICAL                       log:0   |Logfile is 'test.log' with logging level of DEBUG, console logging level is INFO
442009-03-23 12:16:53,488 DEBUG                     test_log:37  |test at level DEBUG
452009-03-23 12:35:26,107 INFO                      test_log:97  |Resource usage: memory=0.0 resident=0.0 stacksize=0.0
462009-03-23 12:16:53,488 INFO                      test_log:38  |test at level INFO'''
47
48        stdout_expect = '''Logfile is 'test.log' with logging level of DEBUG, console logging level is INFO
49Resource usage: memory=0.0 resident=0.0 stacksize=0.0
50test at level INFO'''
51        # ^^^^^  WARNING - DO NOT REFORMAT THESE LINES!  ^^^^^
52
53        # capture stdout to a file
54        save_stdout = sys.stdout
55        save_stderr = sys.stderr
56        sys.stdout = sys.stderr = open(STDOUT_LOG_NAME, 'w')
57
58        # do some logging
59        log.debug('test at level DEBUG')
60        log.resource_usage(logging.INFO)
61        log.info('test at level INFO')
62
63        # put stdout/stderr back to normal
64        sys.stderr = save_stderr
65        sys.stdout = save_stdout
66
67        # check logfile is as expected
68        fd = open(LOGFILE_NAME, 'r')
69        lines = fd.readlines()
70        fd.close()
71        result = []
72        for line in lines:
73            l = line.strip('\n')
74            ndx = l.index('|')
75            result.append([l.split()[2], l[ndx:]])
76        expected = []
77        for line in log_expect.split('\n'):
78            ndx = line.index('|')
79            expected.append([line.split()[2], line[ndx:]])
80        self.failUnlessEqual(result, expected)
81
82        # check that captured stdout is as expected
83        fd = open(STDOUT_LOG_NAME, 'r')
84        lines = fd.readlines()
85        fd.close()
86        result = []
87        for line in lines:
88            l = line.strip('\n')
89            result.append(l)
90        expected = []
91        for line in stdout_expect.split('\n'):
92            expected.append(line)
93        self.failUnlessEqual(result, expected)
94
95################################################################################
96
97if __name__ == "__main__":
98    suite = unittest.makeSuite(Test_Log, 'test')
99    runner = unittest.TextTestRunner()
100    runner.run(suite)
Note: See TracBrowser for help on using the repository browser.