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

#!/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: