Add logblame and some log buffer tests.
A utility to read a logcat and print statistics about who is spamming the log. And tests that use it Bug: 37252687 Test: ./test_analyze.py ; test_logs.py ; test_ps.py Change-Id: I811ba482b4be9779047f97c3f3b7ea5f996bd503
This commit is contained in:
179
tools/logblame/test_logs.py
Executable file
179
tools/logblame/test_logs.py
Executable file
@@ -0,0 +1,179 @@
|
||||
#!/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:
|
||||
Reference in New Issue
Block a user