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

Unified Diff: server/site_tests/platform_KernelErrorPaths/platform_KernelErrorPaths.py

Issue 6596002: Fix kernel error paths test. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git@master
Patch Set: Fix platform_KernelErrorPaths Created 9 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: server/site_tests/platform_KernelErrorPaths/platform_KernelErrorPaths.py
diff --git a/server/site_tests/platform_KernelErrorPaths/platform_KernelErrorPaths.py b/server/site_tests/platform_KernelErrorPaths/platform_KernelErrorPaths.py
index 6ef099fb987317007b97cc7e35c3db046807acc2..7a597efbd3adfe45c74e6fc588d0641e0977e2b5 100644
--- a/server/site_tests/platform_KernelErrorPaths/platform_KernelErrorPaths.py
+++ b/server/site_tests/platform_KernelErrorPaths/platform_KernelErrorPaths.py
@@ -2,103 +2,63 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import logging, os, re, shutil
-from autotest_lib.server import test, autotest
+import logging, os
+
from autotest_lib.client.common_lib import error
+from autotest_lib.client.cros.crash_test import CrashTest as CrashTestDefs
+from autotest_lib.server import test
class platform_KernelErrorPaths(test.test):
version = 1
- def breakme(self, command):
- logging.info('KernelErrorPaths: causing %s on host %s' %
+ def breakme(self, text):
+ command = "echo %s > /proc/breakme" % text
+ logging.info("KernelErrorPaths: executing '%s' on %s" %
(command, self.client.hostname))
try:
- self.client.run("echo %s > /proc/breakme" % command)
+ self.client.run(command)
except error.AutoservRunError, e:
# it is expected that this will cause a non-zero exit status
pass
+ def pause_crash_sending(self):
+ result = self.client.run(
+ 'ls %s' % os.path.dirname(CrashTestDefs._PAUSE_FILE))
+ self.client.run('touch %s' % CrashTestDefs._PAUSE_FILE)
+ return not os.path.basename(
+ CrashTestDefs._PAUSE_FILE) in result.stdout.splitlines()
- def test_bug(self):
- """
- Cause the target to log a kernel bug, and then check in the
- messages to make sure it did.
- """
- # Clear the messages so we can compare.
- self.client.run('dmesg -c')
- # Cause the client to report a kernel BUG.
- self.breakme('bug')
- # Now get messages and check to make sure it's in there.
- result = self.client.run('dmesg')
- marker = "Kernel BUG at"
- found = False
- for line in result.stdout.split('\n'):
- if line.find(marker) != -1:
- found = True
- break
- if not found:
- raise error.TestFail("Kernel BUG reporting not working.")
-
-
- def test_deadlock(self):
- # Cause the target to go into a deadlock (have to run it twice).
- self.breakme('deadlock')
- self.breakme('deadlock')
-
-
- def test_soft_lockup(self):
- # Cause the target to go into an infinite loop.
- self.breakme('softlockup')
-
-
- def test_irq_lockup(self):
- # Cause the target to go into a lockup with interrupts enabled.
- self.breakme('irqlockup')
-
-
- def test_no_irq_lockup(self):
- # Cause the target to go into a lockup with interrupts disabled.
- self.breakme('nmiwatchdog')
-
-
- def test_null_dereference(self):
- # Clear the messages so we can compare.
- self.client.run('dmesg -c')
- # Cause the target to dereference a null pointer.
- self.breakme('nullptr')
- # Now get messages and check to make sure it was noticed.
- result = self.client.run('dmesg')
- found = False
- marker = "BUG: unable to handle kernel NULL pointer dereference"
- for line in result.stdout.split('\n'):
- if line.find(marker) != -1:
- found = True
- break
- if not found:
- raise error.TestFail("Kernel NULL pointer dereference detection "
- "not working.")
-
-
- def test_panic(self):
- # Cause the target to panic.
- self.breakme('panic')
- if not self.client.wait_down(timeout=30):
- raise error.TestFail("Kernel panic went unnoticed.")
- if not self.client.wait_up(timeout=40):
- raise error.TestFail("Kernel panic didn't cause successful reboot.")
-
+ def resume_crash_sending(self):
petkov 2011/02/25 19:54:35 who calls this method? it seems it needs to be cal
vb 2011/02/25 23:27:37 right, this got lost when I cleaned up the code be
+ self.client.run('rm -f %s' % CrashTestDefs._PAUSE_FILE)
def run_once(self, host=None):
self.client = host
- self.test_bug()
- # TODO: Fill in the tests for these.
- # self.test_deadlock()
- # self.test_soft_lockup()
- # self.test_irq_lockup()
- # self.test_no_irq_lockup()
- self.test_null_dereference()
- # TODO(mbligh): crosbug.com/2269 - panic currently halts the
- # DUT instead of rebooting it. Commenting out until
- # fixed.
- #self.test_panic()
+ crash_sending_needs_resuming = self.pause_crash_sending()
petkov 2011/02/25 19:54:35 unused?
+
+ crash_log_dir = CrashTestDefs._SYSTEM_CRASH_DIR
+
+ # Each tuple consists of two strings: the 'breakme' string to send
+ # into /proc/breakme on the target, and the crash report string to
+ # look for in the crash dump after target restarts.
+ # TODO(vbendeb): add the following breakme strings after fixing kernel
+ # bugs:
+ # 'deadlock' (has to be sent twice), 'softlockup', 'irqlockup'
+ test_tuples = (
+ ('bug', 'kernel BUG at'),
+ ('nmiwatchdog', 'BUG: NMI Watchdog detected LOCKUP'),
+ ('nullptr',
+ 'BUG: unable to handle kernel NULL pointer dereference at'),
+ ('panic', 'Kernel panic - not syncing:'),
+ )
+
+ for action, text in test_tuples:
+ # Delete crash results, if any
+ self.client.run('rm -f %s/*' % crash_log_dir)
+ boot_id = self.client.get_boot_id()
+ self.breakme(action) # This should cause target reset.
+ self.client.wait_for_restart(timeout=25, old_boot_id=boot_id)
+ result = self.client.run('cat %s/kernel.*.kcrash' % crash_log_dir)
+ if text not in result.stdout:
+ raise error.TestFail(
+ "No '%s' in the log after sending '%s'" % (text, cmd))
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698