~mgedmin/+junk/conflict-analyzer

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/python
import unittest
import doctest
import datetime
from cStringIO import StringIO

from analyze import (ErrorInfo, parse_timestamp, parse_error_info, parse_log,
                     print_stats)


def doctest_ErrorInfo():
    """Tests for ErrorInfo

        >>> ErrorInfo()
        ErrorInfo(None, None, None, None)

        >>> ErrorInfo(datetime.datetime(2010, 1, 19, 2, 18, 4), oid=0x1234dd,
        ...           classname='foo.bar.Baz', url='/path/info.html?q=123')
        ErrorInfo(datetime.datetime(2010, 1, 19, 2, 18, 4), 0x1234dd, 'foo.bar.Baz', '/path/info.html?q=123')

    """


def doctest_parse_timestamp():
    """Tests for parse_timestamp.

        >>> parse_timestamp('2001-12-13T14:15:16')
        datetime.datetime(2001, 12, 13, 14, 15, 16)

    """


def doctest_parse_error_info():
    r"""Tests for parse_error_info()

        >>> parse_error_info('2010-12-22T02:01:04 WARNING ZopePublication Competing writes/reads at /: database conflict error\n')
        ErrorInfo(datetime.datetime(2010, 12, 22, 2, 1, 4), None, None, '/')

        >>> parse_error_info('2010-01-19T02:18:04 WARNING ZopePublication Competing writes/reads at /foo/bar: database conflict error (oid 0x12435af)\n')
        ErrorInfo(datetime.datetime(2010, 1, 19, 2, 18, 4), 0x12435af, None, '/foo/bar')

        >>> parse_error_info('2010-01-19T02:18:04 WARNING ZopePublication Competing writes/reads at /foo/bar: database conflict error (class foo.bar.Baz)\n')
        ErrorInfo(datetime.datetime(2010, 1, 19, 2, 18, 4), None, 'foo.bar.Baz', '/foo/bar')

        >>> parse_error_info('2010-01-19T02:18:04 WARNING ZopePublication Competing writes/reads at /foo/bar: database conflict error (oid 0x12435af, class foo.bar.Baz)\n')
        ErrorInfo(datetime.datetime(2010, 1, 19, 2, 18, 4), 0x12435af, 'foo.bar.Baz', '/foo/bar')

        >>> parse_error_info('2010-01-19T02:18:04 WARNING ZopePublication Competing writes/reads at /foo/bar: database conflict error (oid 0x12435af, class foo.bar.Baz, serial this txn started with 0x01234ff 2010-01-27 12:13:14.555666, serial currently committed 0x014df23 2010-01-27 11:04:27.663456)\n')
        ErrorInfo(datetime.datetime(2010, 1, 19, 2, 18, 4), 0x12435af, 'foo.bar.Baz', '/foo/bar')

        >>> parse_error_info('2010-01-19T02:18:04 WARNING ZopePublication Competing writes/reads at /++vh++http:localhost:8080/foo/bar: database conflict error (oid 0x12435af, class foo.bar.Baz, serial this txn started with 0x01234ff 2010-01-27 12:13:14.555666, serial currently committed 0x014df23 2010-01-27 11:04:27.663456)\n')
        ErrorInfo(datetime.datetime(2010, 1, 19, 2, 18, 4), 0x12435af, 'foo.bar.Baz', '/++vh++http:localhost:8080/foo/bar')

    """


def doctest_parse_log():
    """Tests for parse_log()

        >>> input_stream = StringIO('''
        ... irrelevant stuf
        ... --------
        ... 2010-01-19T02:18:04 WARNING ZopePublication Competing writes/reads at /foo/bar: database conflict error (oid 0x12435af, class foo.bar.Baz)
        ... --------
        ... 2010-12-19T12:18:54 WARNING ZopePublication Something unrelated
        ... --------
        ... 2010-12-22T02:01:04 WARNING ZopePublication Competing writes/reads at /: database conflict error
        ... --------
        ... ''')

        >>> for e in parse_log(input_stream):
        ...     print repr(e)
        ErrorInfo(datetime.datetime(2010, 1, 19, 2, 18, 4), 0x12435af, 'foo.bar.Baz', '/foo/bar')
        ErrorInfo(datetime.datetime(2010, 12, 22, 2, 1, 4), None, None, '/')

    """


def doctest_print_stats():
    """Tests for print_stats()

        >>> print_stats({}, 'Empty')

        >>> print_stats({'a': 1, 'b': 10, 'c': 3, None: 0}, 'Title')
        Title
        ------- ----------------------------------------------------------------------
             10 b
              3 c
              1 a
              0 (unknown)

        >>> print_stats({'a': 1, 'b': 10, 'c': 3, None: 0}, 'Title', cutoff=1)
        Title
        ------- ----------------------------------------------------------------------
             10 b
              3 c
              1 a
              0 (unknown)

        >>> print_stats({'a': 1, 'b': 10, 'c': 3, None: 0}, 'Title', cutoff=1, leeway=0)
        Title
        ------- ----------------------------------------------------------------------
             10 b
        3 less common cases omitted

    """


def test_suite():
    return doctest.DocTestSuite()


if __name__ == '__main__':
    unittest.main(defaultTest='test_suite')