Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Side by Side Diff: client/site_tests/logging_CrashSender/logging_CrashSender.py

Issue 4113004: autotest: Test new crash_reporter error diagnostics (Closed) Base URL: http://git.chromium.org/git/autotest.git
Patch Set: Add signature for error logs Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import logging, os, re 5 import logging, os, re
6 from autotest_lib.client.bin import site_crash_test, site_utils, test 6 from autotest_lib.client.bin import site_crash_test, site_utils, test
7 from autotest_lib.client.common_lib import error, utils 7 from autotest_lib.client.common_lib import error, utils
8 8
9 _25_HOURS_AGO = -25 * 60 * 60 9 _25_HOURS_AGO = -25 * 60 * 60
10 _CRASH_SENDER_CRON_PATH = '/etc/cron.hourly/crash_sender.hourly' 10 _CRASH_SENDER_CRON_PATH = '/etc/cron.hourly/crash_sender.hourly'
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 55
56 def _shift_file_mtime(self, path, delta): 56 def _shift_file_mtime(self, path, delta):
57 statinfo = os.stat(path) 57 statinfo = os.stat(path)
58 os.utime(path, (statinfo.st_atime, 58 os.utime(path, (statinfo.st_atime,
59 statinfo.st_mtime + delta)) 59 statinfo.st_mtime + delta))
60 60
61 61
62 def _test_sender_simple_old_minidump(self): 62 def _test_sender_simple_old_minidump(self):
63 """Test that old minidumps and metadata are sent.""" 63 """Test that old minidumps and metadata are sent."""
64 dmp_path = self.write_crash_dir_entry('fake.dmp', '') 64 dmp_path = self.write_crash_dir_entry('fake.dmp', '')
65 meta_path = self.write_fake_meta('fake.meta', 'fake') 65 meta_path = self.write_fake_meta('fake.meta', 'fake', dmp_path)
66 self._shift_file_mtime(dmp_path, _25_HOURS_AGO) 66 self._shift_file_mtime(dmp_path, _25_HOURS_AGO)
67 self._shift_file_mtime(meta_path, _25_HOURS_AGO) 67 self._shift_file_mtime(meta_path, _25_HOURS_AGO)
68 self._check_simple_minidump_send(meta_path) 68 self._check_simple_minidump_send(meta_path)
69 69
70 70
71 def _test_sender_simple_kernel_crash(self): 71 def _test_sender_simple_kernel_crash(self):
72 """Test sending a single kcrash report.""" 72 """Test sending a single kcrash report."""
73 kcrash_fake_report = self.write_crash_dir_entry( 73 kcrash_fake_report = self.write_crash_dir_entry(
74 'kernel.today.kcrash', '') 74 'kernel.today.kcrash', '')
75 self.write_fake_meta('kernel.today.meta', 'kernel') 75 self.write_fake_meta('kernel.today.meta',
76 'kernel',
77 kcrash_fake_report)
76 result = self._call_sender_one_crash(report=kcrash_fake_report) 78 result = self._call_sender_one_crash(report=kcrash_fake_report)
77 if (result['report_exists'] or 79 if (result['report_exists'] or
78 result['rate_count'] != 1 or 80 result['rate_count'] != 1 or
79 not result['send_attempt'] or 81 not result['send_attempt'] or
80 not result['send_success'] or 82 not result['send_success'] or
81 result['sleep_time'] < 0 or 83 result['sleep_time'] < 0 or
82 result['sleep_time'] >= _SECONDS_SEND_SPREAD or 84 result['sleep_time'] >= _SECONDS_SEND_SPREAD or
83 result['report_kind'] != 'kcrash' or 85 result['report_kind'] != 'kcrash' or
84 (result['report_payload'] != 86 (result['report_payload'] !=
85 '/var/spool/crash/kernel.today.kcrash') or 87 '/var/spool/crash/kernel.today.kcrash') or
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 self._shift_file_mtime(unknown_file, _25_HOURS_AGO) 193 self._shift_file_mtime(unknown_file, _25_HOURS_AGO)
192 results = self._call_sender_one_crash() 194 results = self._call_sender_one_crash()
193 if (not 'Removing old orphaned file' in results['output'] or 195 if (not 'Removing old orphaned file' in results['output'] or
194 os.path.exists(core_file) or os.path.exists(unknown_file)): 196 os.path.exists(core_file) or os.path.exists(unknown_file)):
195 raise error.TestFail( 197 raise error.TestFail(
196 'Old orphaned files were not removed') 198 'Old orphaned files were not removed')
197 199
198 200
199 def _test_sender_incomplete_metadata(self): 201 def _test_sender_incomplete_metadata(self):
200 """Test that incomplete metadata file is removed once old.""" 202 """Test that incomplete metadata file is removed once old."""
201 meta_file = self.write_crash_dir_entry('incomplete.meta', 'half=1')
202 dmp_file = self.write_crash_dir_entry('incomplete.dmp', '') 203 dmp_file = self.write_crash_dir_entry('incomplete.dmp', '')
204 meta_file = self.write_fake_meta('incomplete.meta',
205 'unknown',
206 dmp_file,
207 complete=False)
203 # As new files, we expect crash_sender to leave these alone. 208 # As new files, we expect crash_sender to leave these alone.
204 results = self._call_sender_one_crash() 209 results = self._call_sender_one_crash()
205 if ('Removing recent incomplete report' in results['output'] or 210 if ('Removing recent incomplete report' in results['output'] or
206 not os.path.exists(meta_file) or 211 not os.path.exists(meta_file) or
207 not os.path.exists(dmp_file)): 212 not os.path.exists(dmp_file)):
208 raise error.TestFail('New unknown files were removed') 213 raise error.TestFail('New unknown files were removed')
209 self._shift_file_mtime(meta_file, _25_HOURS_AGO) 214 self._shift_file_mtime(meta_file, _25_HOURS_AGO)
210 results = self._call_sender_one_crash() 215 results = self._call_sender_one_crash()
211 if (not 'Removing old incomplete metadata' in results['output'] or 216 if (not 'Removing old incomplete metadata' in results['output'] or
212 os.path.exists(meta_file) or os.path.exists(dmp_file)): 217 os.path.exists(meta_file) or os.path.exists(dmp_file)):
213 raise error.TestFail( 218 raise error.TestFail(
214 'Old unknown/incomplete files were not removed') 219 'Old unknown/incomplete files were not removed')
215 220
216 221
222 def _test_sender_missing_payload(self):
223 meta_file = self.write_fake_meta('bad.meta',
224 'unknown',
225 'bad.dmp')
226 other_file = self.write_crash_dir_entry('bad.other', '')
227 results = self._call_sender_one_crash(report=meta_file)
228 # Should remove this file.
229 if (not 'Missing payload' in results['output'] or
230 os.path.exists(meta_file) or
231 os.path.exists(other_file)):
232 raise error.TestFail('Missing payload case handled wrong')
233
234
217 def _test_cron_runs(self): 235 def _test_cron_runs(self):
218 """Test sender runs successfully as part of the hourly cron job. 236 """Test sender runs successfully as part of the hourly cron job.
219 237
220 Assuming we've run test_sender_simple which shows that a minidump 238 Assuming we've run test_sender_simple which shows that a minidump
221 gets removed as part of sending, we run the cron job (which is 239 gets removed as part of sending, we run the cron job (which is
222 asynchronous) and wait for that file to be removed to just verify 240 asynchronous) and wait for that file to be removed to just verify
223 the job eventually runs the sender.""" 241 the job eventually runs the sender."""
224 minidump = self._prepare_sender_one_crash(send_success=True, 242 minidump = self._prepare_sender_one_crash(send_success=True,
225 reports_enabled=True, 243 reports_enabled=True,
226 username='root', 244 username='root',
(...skipping 18 matching lines...) Expand all
245 'sender_simple_minidump', 263 'sender_simple_minidump',
246 'sender_simple_old_minidump', 264 'sender_simple_old_minidump',
247 'sender_simple_kernel_crash', 265 'sender_simple_kernel_crash',
248 'sender_pausing', 266 'sender_pausing',
249 'sender_reports_disabled', 267 'sender_reports_disabled',
250 'sender_rate_limiting', 268 'sender_rate_limiting',
251 'sender_single_instance', 269 'sender_single_instance',
252 'sender_send_fails', 270 'sender_send_fails',
253 'sender_orphaned_files', 271 'sender_orphaned_files',
254 'sender_incomplete_metadata', 272 'sender_incomplete_metadata',
273 'sender_missing_payload',
255 'cron_runs']) 274 'cron_runs'])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698