# Copyright (c) 2012 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 subprocess from autotest_lib.client.bin import test from autotest_lib.client.common_lib import error class kernel_AsyncDriverProbe(test.test): """ Handle checking asynchronous device probing. """ version = 1 def module_loaded(self, module): """ Detect if the given module is already loaded in the kernel. @param module: name of module to check """ module = module.replace('-', '_') match = "%s " % (module) for line in open("/proc/modules"): if line.startswith(match): return True return False def rmmod(self, module): """ Unload a module if it is already loaded in the kernel. @param module: name of module to unload """ if self.module_loaded(module): subprocess.call(["rmmod", module]) def run_once(self): """ Try loading the test module. It will time registration for synchronous and asynchronous cases and will fail to load if timing is off. """ module = "test_async_driver_probe" # Start from a clean slate. self.rmmod(module) exit_code = subprocess.call(["modprobe", "-n", "-q", module]) if exit_code: raise error.TestNAError( "%s.ko module does not seem to be available " "(modprobe rc=%s); skipping async probe test" % (module, exit_code)) # Try loading the module. If it loads successfully test passes. subprocess.call(["modprobe", module]) loaded = self.module_loaded(module) # Clean up after ourselves self.rmmod(module) if not loaded: raise error.TestFail("Test module failed to load")