| #!/usr/bin/python |
| # |
| # Copyright (c) 2015 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import re |
| |
| from autotest_lib.client.bin import test |
| from autotest_lib.client.common_lib import error |
| |
| |
| class kernel_sysrq_info(test.test): |
| """ |
| Verify the Magic SysRq show-* commands |
| (i.e. don't verify reBoot, Crash, kill-all-tasks, etc.) |
| """ |
| version = 1 |
| |
| def sysrq_trigger(self, key): |
| """ |
| Trigger one SysRq command, and return the kernel log output |
| @param key: lowercase SysRq keystroke (e.g. 'm') |
| @return dmesg log from running the command |
| """ |
| os.system("dmesg --clear") |
| with open("/proc/sysrq-trigger", "w") as f: |
| f.write(key + "\n") |
| with os.popen("dmesg --raw") as f: |
| return f.read() |
| |
| def run_once(self): |
| test_cases = {'l': 'all active CPUs', |
| 'm': '[0-9]+ pages.*RAM', |
| 'p': 'Show Regs', |
| 'q': 'Tick Device:', |
| 't': 'init.*\s1\s', |
| 'w': 'pid father' |
| } |
| |
| for key in test_cases: |
| s = self.sysrq_trigger(key) |
| if re.search(test_cases[key], s) == None: |
| raise error.TestFail('Unexpected output from SysRq key %s' % |
| key) |