You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
4.9 KiB
179 lines
4.9 KiB
#!/usr/bin/env python2.7 -B |
|
|
|
import logs |
|
import ps |
|
|
|
import datetime |
|
import StringIO |
|
|
|
def test_empty(): |
|
"""Test parsing no tag and no text, not well formed.""" |
|
expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "", |
|
"") ] |
|
text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/ ] |
|
|
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
def test_none(): |
|
"""Test parsing no tag and no text.""" |
|
expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "", |
|
"") ] |
|
text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/ ] |
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
|
|
def test_trailing_blank(): |
|
"""Test parsing text containing an extra intended newline at the end.""" |
|
expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", |
|
"Newline after\n") ] |
|
text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] |
|
Newline after |
|
|
|
|
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
def test_blank_between(): |
|
"""Test parsing text containing a newline in the middle.""" |
|
expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", |
|
"Message\n\nNewline between") ] |
|
text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] |
|
Message |
|
|
|
Newline between |
|
|
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
def test_preceeding_blank(): |
|
"""Test parsing text containing a newline then text.""" |
|
expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", |
|
"\nNewline before") ] |
|
text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] |
|
|
|
Newline before |
|
|
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
def test_one_blank(): |
|
"""Test parsing text one blank line.""" |
|
expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", |
|
"\n") ] |
|
text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] |
|
|
|
|
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
def test_two_blanks(): |
|
"""Test parsing text two blank lines.""" |
|
expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", |
|
"\n\n") ] |
|
text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] |
|
|
|
|
|
|
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
def test_two_lines_noblanks(): |
|
"""Test parsing two lines of text with no blank lines.""" |
|
expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd", |
|
"One\nTwo") ] |
|
text = """[ 03-29 00:46:58.872 1000: 1815: 1816 I/abcd ] |
|
One |
|
Two |
|
|
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
def test_chatty(): |
|
"""Test a log with chatty identical messages.""" |
|
|
|
expected = [ |
|
logs.LogLine("system", "03-29 00:46:58.857", "1000", "1815", "1816", "I", "Noisy", "Message"), |
|
logs.LogLine("system", "03-29 00:46:58.858", "1000", "1815", "1816", "I", "Noisy", "Message"), |
|
logs.LogLine("system", "03-29 00:46:58.858", "1000", "1815", "1816", "I", "Noisy", "Message"), |
|
logs.LogLine("system", "03-29 00:46:58.858", "1000", "1815", "1816", "I", "Noisy", "Message"), |
|
logs.LogLine("system", "03-29 00:46:58.859", "1000", "1815", "1816", "I", "Noisy", "Message"), |
|
] |
|
text = """--------- beginning of system |
|
[ 03-29 00:46:58.857 1000: 1815: 1816 I/Noisy ] |
|
Message |
|
|
|
[ 03-29 00:46:58.858 1000: 1815: 1816 I/chatty ] |
|
uid=1000(system) Thread-6 identical 3 lines |
|
|
|
[ 03-29 00:46:58.859 1000: 1815: 1816 I/Noisy ] |
|
Message |
|
|
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
|
|
def test_normal(): |
|
"""Test a realistic (albeit short) log.""" |
|
expected = [ |
|
logs.LogLine("system", "03-29 00:46:58.857", "1000", "1815", "1816", "I", "Package: ]Manager", |
|
"/system/app/KeyChain changed; collecting certs"), |
|
logs.LogLine("system", "03-29 00:46:58.872", "1000", "1815", "1816", "I", "PackageManager", |
|
"/system/app/HiddenMenu changed; collecting certs"), |
|
logs.LogLine("main", "03-29 00:46:58.872", "1000", "1815", "1816", "I", "PackageManager", |
|
"/system/app/HiddenMenu changed; collecting certs"), |
|
] |
|
|
|
text = """--------- beginning of system |
|
[ 03-29 00:46:58.857 1000: 1815: 1816 I/Package: ]Manager ] |
|
/system/app/KeyChain changed; collecting certs |
|
|
|
[ 03-29 00:46:58.872 1000: 1815: 1816 I/PackageManager ] |
|
/system/app/HiddenMenu changed; collecting certs |
|
|
|
--------- switch to main |
|
[ 03-29 00:46:58.872 1000: 1815: 1816 I/PackageManager ] |
|
/system/app/HiddenMenu changed; collecting certs |
|
|
|
""" |
|
check_parsing(expected, text) |
|
|
|
|
|
|
|
def check_parsing(expected, text): |
|
"""Parse the text and see if it parsed as expected.""" |
|
processes = ps.ProcessSet() |
|
result = [x for x in logs.ParseLogcat(StringIO.StringIO(text), processes)] |
|
if result != expected: |
|
raise Exception("test failed.\nexpected:\n[%s]\nactual\n[%s]" % ( |
|
", ".join([str(r) for r in expected]), |
|
", ".join([str(r) for r in result]))) |
|
|
|
|
|
def main(): |
|
test_empty() |
|
test_none() |
|
test_trailing_blank() |
|
test_blank_between() |
|
test_preceeding_blank() |
|
test_one_blank() |
|
test_two_blanks() |
|
test_chatty() |
|
test_normal() |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |
|
|
|
|
|
# vim: set ts=2 sw=2 sts=2 tw=100 nocindent autoindent smartindent expandtab:
|
|
|