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.
180 lines
4.9 KiB
180 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:
|