xref: /aosp_15_r20/development/tools/logblame/test_logs.py (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Worker#!/usr/bin/env python2.7 -B
2*90c8c64dSAndroid Build Coastguard Worker
3*90c8c64dSAndroid Build Coastguard Workerimport logs
4*90c8c64dSAndroid Build Coastguard Workerimport ps
5*90c8c64dSAndroid Build Coastguard Worker
6*90c8c64dSAndroid Build Coastguard Workerimport datetime
7*90c8c64dSAndroid Build Coastguard Workerimport StringIO
8*90c8c64dSAndroid Build Coastguard Worker
9*90c8c64dSAndroid Build Coastguard Workerdef test_empty():
10*90c8c64dSAndroid Build Coastguard Worker  """Test parsing no tag and no text, not well formed."""
11*90c8c64dSAndroid Build Coastguard Worker  expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "",
12*90c8c64dSAndroid Build Coastguard Worker      "") ]
13*90c8c64dSAndroid Build Coastguard Worker  text = """[ 03-29 00:46:58.872  1000: 1815: 1816 I/ ]
14*90c8c64dSAndroid Build Coastguard Worker
15*90c8c64dSAndroid Build Coastguard Worker"""
16*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
17*90c8c64dSAndroid Build Coastguard Worker
18*90c8c64dSAndroid Build Coastguard Worker
19*90c8c64dSAndroid Build Coastguard Workerdef test_none():
20*90c8c64dSAndroid Build Coastguard Worker  """Test parsing no tag and no text."""
21*90c8c64dSAndroid Build Coastguard Worker  expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "",
22*90c8c64dSAndroid Build Coastguard Worker      "") ]
23*90c8c64dSAndroid Build Coastguard Worker  text = """[ 03-29 00:46:58.872  1000: 1815: 1816 I/ ]
24*90c8c64dSAndroid Build Coastguard Worker"""
25*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
26*90c8c64dSAndroid Build Coastguard Worker
27*90c8c64dSAndroid Build Coastguard Worker
28*90c8c64dSAndroid Build Coastguard Worker
29*90c8c64dSAndroid Build Coastguard Workerdef test_trailing_blank():
30*90c8c64dSAndroid Build Coastguard Worker  """Test parsing text containing an extra intended newline at the end."""
31*90c8c64dSAndroid Build Coastguard Worker  expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd",
32*90c8c64dSAndroid Build Coastguard Worker      "Newline after\n") ]
33*90c8c64dSAndroid Build Coastguard Worker  text = """[ 03-29 00:46:58.872  1000: 1815: 1816 I/abcd ]
34*90c8c64dSAndroid Build Coastguard WorkerNewline after
35*90c8c64dSAndroid Build Coastguard Worker
36*90c8c64dSAndroid Build Coastguard Worker
37*90c8c64dSAndroid Build Coastguard Worker"""
38*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
39*90c8c64dSAndroid Build Coastguard Worker
40*90c8c64dSAndroid Build Coastguard Worker
41*90c8c64dSAndroid Build Coastguard Workerdef test_blank_between():
42*90c8c64dSAndroid Build Coastguard Worker  """Test parsing text containing a newline in the middle."""
43*90c8c64dSAndroid Build Coastguard Worker  expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd",
44*90c8c64dSAndroid Build Coastguard Worker      "Message\n\nNewline between") ]
45*90c8c64dSAndroid Build Coastguard Worker  text = """[ 03-29 00:46:58.872  1000: 1815: 1816 I/abcd ]
46*90c8c64dSAndroid Build Coastguard WorkerMessage
47*90c8c64dSAndroid Build Coastguard Worker
48*90c8c64dSAndroid Build Coastguard WorkerNewline between
49*90c8c64dSAndroid Build Coastguard Worker
50*90c8c64dSAndroid Build Coastguard Worker"""
51*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
52*90c8c64dSAndroid Build Coastguard Worker
53*90c8c64dSAndroid Build Coastguard Worker
54*90c8c64dSAndroid Build Coastguard Workerdef test_preceeding_blank():
55*90c8c64dSAndroid Build Coastguard Worker  """Test parsing text containing a newline then text."""
56*90c8c64dSAndroid Build Coastguard Worker  expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd",
57*90c8c64dSAndroid Build Coastguard Worker      "\nNewline before") ]
58*90c8c64dSAndroid Build Coastguard Worker  text = """[ 03-29 00:46:58.872  1000: 1815: 1816 I/abcd ]
59*90c8c64dSAndroid Build Coastguard Worker
60*90c8c64dSAndroid Build Coastguard WorkerNewline before
61*90c8c64dSAndroid Build Coastguard Worker
62*90c8c64dSAndroid Build Coastguard Worker"""
63*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
64*90c8c64dSAndroid Build Coastguard Worker
65*90c8c64dSAndroid Build Coastguard Worker
66*90c8c64dSAndroid Build Coastguard Workerdef test_one_blank():
67*90c8c64dSAndroid Build Coastguard Worker  """Test parsing text one blank line."""
68*90c8c64dSAndroid Build Coastguard Worker  expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd",
69*90c8c64dSAndroid Build Coastguard Worker      "\n") ]
70*90c8c64dSAndroid Build Coastguard Worker  text = """[ 03-29 00:46:58.872  1000: 1815: 1816 I/abcd ]
71*90c8c64dSAndroid Build Coastguard Worker
72*90c8c64dSAndroid Build Coastguard Worker
73*90c8c64dSAndroid Build Coastguard Worker"""
74*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
75*90c8c64dSAndroid Build Coastguard Worker
76*90c8c64dSAndroid Build Coastguard Worker
77*90c8c64dSAndroid Build Coastguard Workerdef test_two_blanks():
78*90c8c64dSAndroid Build Coastguard Worker  """Test parsing text two blank lines."""
79*90c8c64dSAndroid Build Coastguard Worker  expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd",
80*90c8c64dSAndroid Build Coastguard Worker      "\n\n") ]
81*90c8c64dSAndroid Build Coastguard Worker  text = """[ 03-29 00:46:58.872  1000: 1815: 1816 I/abcd ]
82*90c8c64dSAndroid Build Coastguard Worker
83*90c8c64dSAndroid Build Coastguard Worker
84*90c8c64dSAndroid Build Coastguard Worker
85*90c8c64dSAndroid Build Coastguard Worker"""
86*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
87*90c8c64dSAndroid Build Coastguard Worker
88*90c8c64dSAndroid Build Coastguard Worker
89*90c8c64dSAndroid Build Coastguard Workerdef test_two_lines_noblanks():
90*90c8c64dSAndroid Build Coastguard Worker  """Test parsing two lines of text with no blank lines."""
91*90c8c64dSAndroid Build Coastguard Worker  expected = [ logs.LogLine(None, "03-29 00:46:58.872", "1000", "1815", "1816", "I", "abcd",
92*90c8c64dSAndroid Build Coastguard Worker      "One\nTwo") ]
93*90c8c64dSAndroid Build Coastguard Worker  text = """[ 03-29 00:46:58.872  1000: 1815: 1816 I/abcd ]
94*90c8c64dSAndroid Build Coastguard WorkerOne
95*90c8c64dSAndroid Build Coastguard WorkerTwo
96*90c8c64dSAndroid Build Coastguard Worker
97*90c8c64dSAndroid Build Coastguard Worker"""
98*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
99*90c8c64dSAndroid Build Coastguard Worker
100*90c8c64dSAndroid Build Coastguard Worker
101*90c8c64dSAndroid Build Coastguard Workerdef test_chatty():
102*90c8c64dSAndroid Build Coastguard Worker  """Test a log with chatty identical messages."""
103*90c8c64dSAndroid Build Coastguard Worker
104*90c8c64dSAndroid Build Coastguard Worker  expected = [
105*90c8c64dSAndroid Build Coastguard Worker      logs.LogLine("system", "03-29 00:46:58.857", "1000", "1815", "1816", "I", "Noisy", "Message"),
106*90c8c64dSAndroid Build Coastguard Worker      logs.LogLine("system", "03-29 00:46:58.858", "1000", "1815", "1816", "I", "Noisy", "Message"),
107*90c8c64dSAndroid Build Coastguard Worker      logs.LogLine("system", "03-29 00:46:58.858", "1000", "1815", "1816", "I", "Noisy", "Message"),
108*90c8c64dSAndroid Build Coastguard Worker      logs.LogLine("system", "03-29 00:46:58.858", "1000", "1815", "1816", "I", "Noisy", "Message"),
109*90c8c64dSAndroid Build Coastguard Worker      logs.LogLine("system", "03-29 00:46:58.859", "1000", "1815", "1816", "I", "Noisy", "Message"),
110*90c8c64dSAndroid Build Coastguard Worker      ]
111*90c8c64dSAndroid Build Coastguard Worker  text = """--------- beginning of system
112*90c8c64dSAndroid Build Coastguard Worker[ 03-29 00:46:58.857  1000: 1815: 1816 I/Noisy ]
113*90c8c64dSAndroid Build Coastguard WorkerMessage
114*90c8c64dSAndroid Build Coastguard Worker
115*90c8c64dSAndroid Build Coastguard Worker[ 03-29 00:46:58.858  1000: 1815: 1816 I/chatty ]
116*90c8c64dSAndroid Build Coastguard Workeruid=1000(system) Thread-6 identical 3 lines
117*90c8c64dSAndroid Build Coastguard Worker
118*90c8c64dSAndroid Build Coastguard Worker[ 03-29 00:46:58.859  1000: 1815: 1816 I/Noisy ]
119*90c8c64dSAndroid Build Coastguard WorkerMessage
120*90c8c64dSAndroid Build Coastguard Worker
121*90c8c64dSAndroid Build Coastguard Worker"""
122*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
123*90c8c64dSAndroid Build Coastguard Worker
124*90c8c64dSAndroid Build Coastguard Worker
125*90c8c64dSAndroid Build Coastguard Worker
126*90c8c64dSAndroid Build Coastguard Workerdef test_normal():
127*90c8c64dSAndroid Build Coastguard Worker  """Test a realistic (albeit short) log."""
128*90c8c64dSAndroid Build Coastguard Worker  expected = [
129*90c8c64dSAndroid Build Coastguard Worker      logs.LogLine("system", "03-29 00:46:58.857", "1000", "1815", "1816", "I", "Package: ]Manager",
130*90c8c64dSAndroid Build Coastguard Worker        "/system/app/KeyChain changed; collecting certs"),
131*90c8c64dSAndroid Build Coastguard Worker      logs.LogLine("system", "03-29 00:46:58.872", "1000", "1815", "1816", "I", "PackageManager",
132*90c8c64dSAndroid Build Coastguard Worker        "/system/app/HiddenMenu changed; collecting certs"),
133*90c8c64dSAndroid Build Coastguard Worker      logs.LogLine("main", "03-29 00:46:58.872", "1000", "1815", "1816", "I", "PackageManager",
134*90c8c64dSAndroid Build Coastguard Worker        "/system/app/HiddenMenu changed; collecting certs"),
135*90c8c64dSAndroid Build Coastguard Worker  ]
136*90c8c64dSAndroid Build Coastguard Worker
137*90c8c64dSAndroid Build Coastguard Worker  text = """--------- beginning of system
138*90c8c64dSAndroid Build Coastguard Worker[ 03-29 00:46:58.857  1000: 1815: 1816 I/Package: ]Manager ]
139*90c8c64dSAndroid Build Coastguard Worker/system/app/KeyChain changed; collecting certs
140*90c8c64dSAndroid Build Coastguard Worker
141*90c8c64dSAndroid Build Coastguard Worker[ 03-29 00:46:58.872  1000: 1815: 1816 I/PackageManager ]
142*90c8c64dSAndroid Build Coastguard Worker/system/app/HiddenMenu changed; collecting certs
143*90c8c64dSAndroid Build Coastguard Worker
144*90c8c64dSAndroid Build Coastguard Worker--------- switch to main
145*90c8c64dSAndroid Build Coastguard Worker[ 03-29 00:46:58.872  1000: 1815: 1816 I/PackageManager ]
146*90c8c64dSAndroid Build Coastguard Worker/system/app/HiddenMenu changed; collecting certs
147*90c8c64dSAndroid Build Coastguard Worker
148*90c8c64dSAndroid Build Coastguard Worker"""
149*90c8c64dSAndroid Build Coastguard Worker  check_parsing(expected, text)
150*90c8c64dSAndroid Build Coastguard Worker
151*90c8c64dSAndroid Build Coastguard Worker
152*90c8c64dSAndroid Build Coastguard Worker
153*90c8c64dSAndroid Build Coastguard Workerdef check_parsing(expected, text):
154*90c8c64dSAndroid Build Coastguard Worker  """Parse the text and see if it parsed as expected."""
155*90c8c64dSAndroid Build Coastguard Worker  processes = ps.ProcessSet()
156*90c8c64dSAndroid Build Coastguard Worker  result = [x for x in logs.ParseLogcat(StringIO.StringIO(text), processes)]
157*90c8c64dSAndroid Build Coastguard Worker  if result != expected:
158*90c8c64dSAndroid Build Coastguard Worker    raise Exception("test failed.\nexpected:\n[%s]\nactual\n[%s]" % (
159*90c8c64dSAndroid Build Coastguard Worker        ", ".join([str(r) for r in expected]),
160*90c8c64dSAndroid Build Coastguard Worker        ", ".join([str(r) for r in result])))
161*90c8c64dSAndroid Build Coastguard Worker
162*90c8c64dSAndroid Build Coastguard Worker
163*90c8c64dSAndroid Build Coastguard Workerdef main():
164*90c8c64dSAndroid Build Coastguard Worker  test_empty()
165*90c8c64dSAndroid Build Coastguard Worker  test_none()
166*90c8c64dSAndroid Build Coastguard Worker  test_trailing_blank()
167*90c8c64dSAndroid Build Coastguard Worker  test_blank_between()
168*90c8c64dSAndroid Build Coastguard Worker  test_preceeding_blank()
169*90c8c64dSAndroid Build Coastguard Worker  test_one_blank()
170*90c8c64dSAndroid Build Coastguard Worker  test_two_blanks()
171*90c8c64dSAndroid Build Coastguard Worker  test_chatty()
172*90c8c64dSAndroid Build Coastguard Worker  test_normal()
173*90c8c64dSAndroid Build Coastguard Worker
174*90c8c64dSAndroid Build Coastguard Worker
175*90c8c64dSAndroid Build Coastguard Workerif __name__ == "__main__":
176*90c8c64dSAndroid Build Coastguard Worker    main()
177*90c8c64dSAndroid Build Coastguard Worker
178*90c8c64dSAndroid Build Coastguard Worker
179*90c8c64dSAndroid Build Coastguard Worker# vim: set ts=2 sw=2 sts=2 tw=100 nocindent autoindent smartindent expandtab:
180