#!/usr/bin/python2
#
# 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)
