"""
Loads KVM virtualization kernel module before a test cycle and unloads it after.
Intended to help in qualifying KVM in the kernel by comparing runs of kernel
tests with and without this "profiler".

author: jsmiller@google.com
"""

import os

from autotest.client import kvm_control, profiler, utils


class kvm_modload(profiler.profiler):
    version = 4

    def initialize(self, interval=None, options=None, **dargs):
        pass

    def log_lsmod(self, log):
        log.write("lsmod: \n")
        cmd_status = utils.run("lsmod")
        if cmd_status.stdout:
            log.write(cmd_status.stdout)
            log.write("\n")
        if cmd_status.stderr:
            log.write(cmd_status.stderr)
            log.write("\n")

    def start(self, test):
        load_status = kvm_control.load_kvm()
        self.logfile = open(os.path.join(test.profdir, "kvm_modload"), 'w')
        self.logfile.write("Loaded KVM module with status %s.\n" %
                           repr(load_status))
        self.log_lsmod(self.logfile)

    def stop(self, test):
        unload_status = kvm_control.unload_kvm()
        self.logfile.write("Unloaded KVM module with status %s.\n" %
                           repr(unload_status))
        self.log_lsmod(self.logfile)
        self.logfile.close()

    def report(self, test):
        output = os.path.join(test.profdir, "kvm_modload")
