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

Side by Side Diff: kernel_collector_test.cc

Issue 6599022: Add ARM support (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crash-reporter.git@master
Patch Set: Removed 3 tests from ARM as they don't really test anything new Created 9 years, 8 months 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
« no previous file with comments | « kernel_collector.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <unistd.h> 5 #include <unistd.h>
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "chromeos/syslog_logging.h" 9 #include "chromeos/syslog_logging.h"
10 #include "chromeos/test_helpers.h" 10 #include "chromeos/test_helpers.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 } 43 }
44 protected: 44 protected:
45 void WriteStringToFile(const FilePath &file_path, 45 void WriteStringToFile(const FilePath &file_path,
46 const char *data) { 46 const char *data) {
47 ASSERT_EQ(strlen(data), 47 ASSERT_EQ(strlen(data),
48 file_util::WriteFile(file_path, data, strlen(data))); 48 file_util::WriteFile(file_path, data, strlen(data)));
49 } 49 }
50 50
51 void SetUpSuccessfulCollect(); 51 void SetUpSuccessfulCollect();
52 void CheckPreservedDumpClear(); 52 void CheckPreservedDumpClear();
53 void ComputeKernelStackSignatureCommon();
53 54
54 KernelCollector collector_; 55 KernelCollector collector_;
55 FilePath test_kcrash_; 56 FilePath test_kcrash_;
56 }; 57 };
57 58
59 TEST_F(KernelCollectorTest, ComputeKernelStackSignatureBase) {
60 // Make sure the normal build architecture is detected
61 EXPECT_TRUE(collector_.GetArch() != KernelCollector::archUnknown);
62 }
63
58 TEST_F(KernelCollectorTest, LoadPreservedDump) { 64 TEST_F(KernelCollectorTest, LoadPreservedDump) {
59 ASSERT_FALSE(file_util::PathExists(test_kcrash_)); 65 ASSERT_FALSE(file_util::PathExists(test_kcrash_));
60 std::string dump; 66 std::string dump;
61 ASSERT_FALSE(collector_.LoadPreservedDump(&dump)); 67 ASSERT_FALSE(collector_.LoadPreservedDump(&dump));
62 WriteStringToFile(test_kcrash_, ""); 68 WriteStringToFile(test_kcrash_, "");
63 ASSERT_TRUE(collector_.LoadPreservedDump(&dump)); 69 ASSERT_TRUE(collector_.LoadPreservedDump(&dump));
64 ASSERT_EQ("", dump); 70 ASSERT_EQ("", dump);
65 WriteStringToFile(test_kcrash_, "something"); 71 WriteStringToFile(test_kcrash_, "something");
66 ASSERT_TRUE(collector_.LoadPreservedDump(&dump)); 72 ASSERT_TRUE(collector_.LoadPreservedDump(&dump));
67 ASSERT_EQ("something", dump); 73 ASSERT_EQ("something", dump);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 filename = filename.substr(0, end_pos); 161 filename = filename.substr(0, end_pos);
156 ASSERT_EQ(0, filename.find(kTestCrashDirectory)); 162 ASSERT_EQ(0, filename.find(kTestCrashDirectory));
157 ASSERT_TRUE(file_util::PathExists(FilePath(filename))); 163 ASSERT_TRUE(file_util::PathExists(FilePath(filename)));
158 std::string contents; 164 std::string contents;
159 ASSERT_TRUE(file_util::ReadFileToString(FilePath(filename), &contents)); 165 ASSERT_TRUE(file_util::ReadFileToString(FilePath(filename), &contents));
160 ASSERT_EQ("something", contents); 166 ASSERT_EQ("something", contents);
161 167
162 CheckPreservedDumpClear(); 168 CheckPreservedDumpClear();
163 } 169 }
164 170
165 TEST_F(KernelCollectorTest, ComputeKernelStackSignature) { 171 // Perform tests which are common across architectures
172 void KernelCollectorTest::ComputeKernelStackSignatureCommon() {
173 std::string signature;
174
175 const char kStackButNoPC[] =
176 "<4>[ 6066.829029] [<790340af>] __do_softirq+0xa6/0x143\n";
177 EXPECT_TRUE(
178 collector_.ComputeKernelStackSignature(kStackButNoPC, &signature, false));
179 EXPECT_EQ("kernel--83615F0A", signature);
180
181 const char kMissingEverything[] =
182 "<4>[ 6066.829029] [<790340af>] ? __do_softirq+0xa6/0x143\n";
183 EXPECT_FALSE(
184 collector_.ComputeKernelStackSignature(kMissingEverything,
185 &signature,
186 false));
187
188 // Long message.
189 const char kTruncatedMessage[] =
190 "<0>[ 87.485611] Kernel panic - not syncing: 01234567890123456789"
191 "01234567890123456789X\n";
192 EXPECT_TRUE(
193 collector_.ComputeKernelStackSignature(kTruncatedMessage,
194 &signature,
195 false));
196 EXPECT_EQ("kernel-0123456789012345678901234567890123456789-00000000",
197 signature);
198 }
199
200 TEST_F(KernelCollectorTest, ComputeKernelStackSignatureARM) {
201 const char kBugToPanic[] =
202 "<5>[ 123.412524] Modules linked in:\n"
203 "<5>[ 123.412534] CPU: 0 Tainted: G W "
204 "(2.6.37-01030-g51cee64 #153)\n"
205 "<5>[ 123.412552] PC is at write_breakme+0xd0/0x1b4\n"
206 "<5>[ 123.412560] LR is at write_breakme+0xc8/0x1b4\n"
207 "<5>[ 123.412569] pc : [<c0058220>] lr : [<c005821c>] "
208 "psr: 60000013\n"
209 "<5>[ 123.412574] sp : f4e0ded8 ip : c04d104c fp : 000e45e0\n"
210 "<5>[ 123.412581] r10: 400ff000 r9 : f4e0c000 r8 : 00000004\n"
211 "<5>[ 123.412589] r7 : f4e0df80 r6 : f4820c80 r5 : 00000004 "
212 "r4 : f4e0dee8\n"
213 "<5>[ 123.412598] r3 : 00000000 r2 : f4e0decc r1 : c05f88a9 "
214 "r0 : 00000039\n"
215 "<5>[ 123.412608] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA "
216 "ARM Segment user\n"
217 "<5>[ 123.412617] Control: 10c53c7d Table: 34dcc04a DAC: 00000015\n"
218 "<0>[ 123.412626] Process bash (pid: 1014, stack limit = 0xf4e0c2f8)\n"
219 "<0>[ 123.412634] Stack: (0xf4e0ded8 to 0xf4e0e000)\n"
220 "<0>[ 123.412641] dec0: "
221 " f4e0dee8 c0183678\n"
222 "<0>[ 123.412654] dee0: 00000000 00000000 00677562 0000081f c06a6a78 "
223 "400ff000 f4e0dfb0 00000000\n"
224 "<0>[ 123.412666] df00: bec7ab44 000b1719 bec7ab0c c004f498 bec7a314 "
225 "c024acc8 00000001 c018359c\n"
226 "<0>[ 123.412679] df20: f4e0df34 c04d10fc f5803c80 271beb39 000e45e0 "
227 "f5803c80 c018359c c017bfe0\n"
228 "<0>[ 123.412691] df40: 00000004 f4820c80 400ff000 f4e0df80 00000004 "
229 "f4e0c000 00000000 c01383e4\n"
230 "<0>[ 123.412703] df60: f4820c80 400ff000 f4820c80 400ff000 00000000 "
231 "00000000 00000004 c0138578\n"
232 "<0>[ 123.412715] df80: 00000000 00000000 00000004 00000000 00000004 "
233 "402f95d0 00000004 00000004\n"
234 "<0>[ 123.412727] dfa0: c0054984 c00547c0 00000004 402f95d0 00000001 "
235 "400ff000 00000004 00000000\n"
236 "<0>[ 123.412739] dfc0: 00000004 402f95d0 00000004 00000004 400ff000 "
237 "000c194c bec7ab58 000e45e0\n"
238 "<0>[ 123.412751] dfe0: 00000000 bec7aad8 40232520 40284e9c 60000010 "
239 "00000001 00000000 00000000\n"
240 "<5>[ 39.496577] Backtrace:\n"
241 "<5>[ 123.412782] [<c0058220>] (__bug+0x20/0x2c) from [<c0183678>] "
242 "(write_breakme+0xdc/0x1bc)\n"
243 "<5>[ 123.412798] [<c0183678>] (write_breakme+0xdc/0x1bc) from "
244 "[<c017bfe0>] (proc_reg_write+0x88/0x9c)\n";
245 std::string signature;
246
247 collector_.SetArch(KernelCollector::archArm);
248 EXPECT_TRUE(
249 collector_.ComputeKernelStackSignature(kBugToPanic, &signature, false));
250 EXPECT_EQ("kernel-write_breakme-97D3E92F", signature);
251
252 ComputeKernelStackSignatureCommon();
253 }
254
255
256 TEST_F(KernelCollectorTest, ComputeKernelStackSignatureX86) {
166 const char kBugToPanic[] = 257 const char kBugToPanic[] =
167 "<4>[ 6066.829029] [<79039d16>] ? run_timer_softirq+0x165/0x1e6\n" 258 "<4>[ 6066.829029] [<79039d16>] ? run_timer_softirq+0x165/0x1e6\n"
168 "<4>[ 6066.829029] [<790340af>] ignore_old_stack+0xa6/0x143\n" 259 "<4>[ 6066.829029] [<790340af>] ignore_old_stack+0xa6/0x143\n"
169 "<0>[ 6066.829029] EIP: [<b82d7c15>] ieee80211_stop_tx_ba_session+" 260 "<0>[ 6066.829029] EIP: [<b82d7c15>] ieee80211_stop_tx_ba_session+"
170 "0xa3/0xb5 [mac80211] SS:ESP 0068:7951febc\n" 261 "0xa3/0xb5 [mac80211] SS:ESP 0068:7951febc\n"
171 "<0>[ 6066.829029] CR2: 00000000323038a7\n" 262 "<0>[ 6066.829029] CR2: 00000000323038a7\n"
172 "<4>[ 6066.845422] ---[ end trace 12b058bb46c43500 ]---\n" 263 "<4>[ 6066.845422] ---[ end trace 12b058bb46c43500 ]---\n"
173 "<0>[ 6066.845747] Kernel panic - not syncing: Fatal exception " 264 "<0>[ 6066.845747] Kernel panic - not syncing: Fatal exception "
174 "in interrupt\n" 265 "in interrupt\n"
175 "<0>[ 6066.846902] Call Trace:\n" 266 "<0>[ 6066.846902] Call Trace:\n"
176 "<4>[ 6066.846902] [<7937a07b>] ? printk+0x14/0x19\n" 267 "<4>[ 6066.846902] [<7937a07b>] ? printk+0x14/0x19\n"
177 "<4>[ 6066.949779] [<79379fc1>] panic+0x3e/0xe4\n" 268 "<4>[ 6066.949779] [<79379fc1>] panic+0x3e/0xe4\n"
178 "<4>[ 6066.949971] [<7937c5c5>] oops_end+0x73/0x81\n" 269 "<4>[ 6066.949971] [<7937c5c5>] oops_end+0x73/0x81\n"
179 "<4>[ 6066.950208] [<7901b260>] no_context+0x10d/0x117\n"; 270 "<4>[ 6066.950208] [<7901b260>] no_context+0x10d/0x117\n";
180 std::string signature; 271 std::string signature;
272
273 collector_.SetArch(KernelCollector::archX86);
181 EXPECT_TRUE( 274 EXPECT_TRUE(
182 collector_.ComputeKernelStackSignature(kBugToPanic, &signature, false)); 275 collector_.ComputeKernelStackSignature(kBugToPanic, &signature, false));
183 EXPECT_EQ("kernel-ieee80211_stop_tx_ba_session-DE253569", signature); 276 EXPECT_EQ("kernel-ieee80211_stop_tx_ba_session-DE253569", signature);
184 277
185 const char kPCButNoStack[] = 278 const char kPCButNoStack[] =
186 "<0>[ 6066.829029] EIP: [<b82d7c15>] ieee80211_stop_tx_ba_session+"; 279 "<0>[ 6066.829029] EIP: [<b82d7c15>] ieee80211_stop_tx_ba_session+";
187 EXPECT_TRUE( 280 EXPECT_TRUE(
188 collector_.ComputeKernelStackSignature(kPCButNoStack, &signature, false)); 281 collector_.ComputeKernelStackSignature(kPCButNoStack, &signature, false));
189 EXPECT_EQ("kernel-ieee80211_stop_tx_ba_session-00000000", signature); 282 EXPECT_EQ("kernel-ieee80211_stop_tx_ba_session-00000000", signature);
190 283
191 const char kStackButNoPC[] =
192 "<4>[ 6066.829029] [<790340af>] __do_softirq+0xa6/0x143\n";
193 EXPECT_TRUE(
194 collector_.ComputeKernelStackSignature(kStackButNoPC, &signature, false));
195 EXPECT_EQ("kernel--83615F0A", signature);
196
197 const char kMissingEverything[] =
198 "<4>[ 6066.829029] [<790340af>] ? __do_softirq+0xa6/0x143\n";
199 EXPECT_FALSE(
200 collector_.ComputeKernelStackSignature(kMissingEverything,
201 &signature,
202 false));
203
204 const char kBreakmeBug[] = 284 const char kBreakmeBug[] =
205 "<4>[ 180.492137] [<790970c6>] ? handle_mm_fault+0x67f/0x96d\n" 285 "<4>[ 180.492137] [<790970c6>] ? handle_mm_fault+0x67f/0x96d\n"
206 "<4>[ 180.492137] [<790dcdfe>] ? proc_reg_write+0x5f/0x73\n" 286 "<4>[ 180.492137] [<790dcdfe>] ? proc_reg_write+0x5f/0x73\n"
207 "<4>[ 180.492137] [<790e2224>] ? write_breakme+0x0/0x108\n" 287 "<4>[ 180.492137] [<790e2224>] ? write_breakme+0x0/0x108\n"
208 "<4>[ 180.492137] [<790dcd9f>] ? proc_reg_write+0x0/0x73\n" 288 "<4>[ 180.492137] [<790dcd9f>] ? proc_reg_write+0x0/0x73\n"
209 "<4>[ 180.492137] [<790ac0aa>] vfs_write+0x85/0xe4\n" 289 "<4>[ 180.492137] [<790ac0aa>] vfs_write+0x85/0xe4\n"
210 "<0>[ 180.492137] Code: c6 44 05 b2 00 89 d8 e8 0c ef 09 00 85 c0 75 " 290 "<0>[ 180.492137] Code: c6 44 05 b2 00 89 d8 e8 0c ef 09 00 85 c0 75 "
211 "0b c7 00 00 00 00 00 e9 8e 00 00 00 ba e6 75 4b 79 89 d8 e8 f1 ee 09 " 291 "0b c7 00 00 00 00 00 e9 8e 00 00 00 ba e6 75 4b 79 89 d8 e8 f1 ee 09 "
212 "00 85 c0 75 04 <0f> 0b eb fe ba 58 47 49 79 89 d8 e8 dd ee 09 00 85 " 292 "00 85 c0 75 04 <0f> 0b eb fe ba 58 47 49 79 89 d8 e8 dd ee 09 00 85 "
213 "c0 75 0a 68\n" 293 "c0 75 0a 68\n"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 "C 2.6.32.23+drm33.10 #1\n" 328 "C 2.6.32.23+drm33.10 #1\n"
249 "<4>[ 87.485639] Call Trace:\n" 329 "<4>[ 87.485639] Call Trace:\n"
250 "<4>[ 87.485660] [<8133f71d>] ? printk+0x14/0x17\n" 330 "<4>[ 87.485660] [<8133f71d>] ? printk+0x14/0x17\n"
251 "<4>[ 87.485674] [<8133f663>] panic+0x3e/0xe4\n" 331 "<4>[ 87.485674] [<8133f663>] panic+0x3e/0xe4\n"
252 "<4>[ 87.485689] [<810d062e>] write_breakme+0xaa/0x124\n"; 332 "<4>[ 87.485689] [<810d062e>] write_breakme+0xaa/0x124\n";
253 EXPECT_TRUE( 333 EXPECT_TRUE(
254 collector_.ComputeKernelStackSignature(kExamplePanicOnly, 334 collector_.ComputeKernelStackSignature(kExamplePanicOnly,
255 &signature, 335 &signature,
256 false)); 336 false));
257 EXPECT_EQ("kernel-Testing panic-E0FC3552", signature); 337 EXPECT_EQ("kernel-Testing panic-E0FC3552", signature);
258 338 ComputeKernelStackSignatureCommon();
259 // Long message.
260 const char kTruncatedMessage[] =
261 "<0>[ 87.485611] Kernel panic - not syncing: 01234567890123456789"
262 "01234567890123456789X\n";
263 EXPECT_TRUE(
264 collector_.ComputeKernelStackSignature(kTruncatedMessage,
265 &signature,
266 false));
267 EXPECT_EQ("kernel-0123456789012345678901234567890123456789-00000000",
268 signature);
269
270 } 339 }
271 340
272 int main(int argc, char **argv) { 341 int main(int argc, char **argv) {
273 SetUpTests(&argc, argv, false); 342 SetUpTests(&argc, argv, false);
274 return RUN_ALL_TESTS(); 343 return RUN_ALL_TESTS();
275 } 344 }
OLDNEW
« no previous file with comments | « kernel_collector.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698