111 lines
3.8 KiB
Python
111 lines
3.8 KiB
Python
# Copyright 2014 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 logging
|
|
|
|
import common
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.server import test
|
|
from autotest_lib.server.cros import debugd_dev_tools
|
|
|
|
|
|
class debugd_DevTools(test.test):
|
|
"""
|
|
Debugd dev tools test. See control file for details.
|
|
"""
|
|
version = 1
|
|
|
|
|
|
def create_tools(self, host):
|
|
"""
|
|
Creates and initializes the tools needed for the test.
|
|
|
|
Saves a RootfsVerificationTool to self.rootfs_tool and the rest
|
|
to self.tools. The RootfsVerificationTool is handled separately
|
|
because it can't be disabled and is required first for the
|
|
other tools to function properly.
|
|
|
|
@param host: Host device.
|
|
|
|
@throw error.TestNAError: Dev tools are unavailable.
|
|
"""
|
|
if not debugd_dev_tools.are_dev_tools_available(host):
|
|
raise error.TestNAError('Cannot access dev tools. Make sure the '
|
|
'device is in dev mode with no owner and '
|
|
'the boot lockbox is not finalized.')
|
|
|
|
logging.debug('Creating dev tools.')
|
|
self.rootfs_tool = debugd_dev_tools.RootfsVerificationTool()
|
|
self.tools = (debugd_dev_tools.BootFromUsbTool(),
|
|
debugd_dev_tools.SshServerTool(),
|
|
debugd_dev_tools.SystemPasswordTool())
|
|
|
|
logging.debug('Initializing dev tools.')
|
|
self.rootfs_tool.initialize(host)
|
|
for tool in self.tools:
|
|
tool.initialize(host, save_initial_state=True)
|
|
|
|
|
|
def cleanup_tools(self, host):
|
|
"""
|
|
Performs cleanup to return the device to its initial state.
|
|
|
|
Any tools that fail to clean up will print a warning but will
|
|
not register a test failure.
|
|
|
|
@param host: Host device.
|
|
"""
|
|
logging.debug('Cleaning up tools.')
|
|
for tool in self.tools:
|
|
try:
|
|
tool.restore_state()
|
|
except debugd_dev_tools.FeatureUnavailableError as e:
|
|
logging.warning('Could not restore %s - device state may be '
|
|
'altered by test (%s).', tool, e)
|
|
debugd_dev_tools.remove_temp_files(host)
|
|
|
|
|
|
def test_tool(self, tool):
|
|
"""
|
|
Tests an individual tool by disabling, enabling, then disabling again.
|
|
|
|
@param tool: Tool object to test.
|
|
|
|
@throw debugd_dev_tools.AccessError: Dev tool access failed.
|
|
@throw error.TestFail: A tool failed to affect device state.
|
|
"""
|
|
# Start by disabling the tool. If disable fails we may still be
|
|
# able to test enabling the tool.
|
|
logging.debug('Disabling %s.', tool)
|
|
tool.disable()
|
|
if tool.is_enabled():
|
|
raise error.TestFail('%s did not disable correctly.' % tool)
|
|
|
|
# Now enable the tool and make sure it worked.
|
|
logging.debug('Enabling %s.', tool)
|
|
tool.enable()
|
|
if not tool.is_enabled():
|
|
raise error.TestFail('%s did not enable correctly.' % tool)
|
|
|
|
# Disable one more time to confirm our disable routine works.
|
|
logging.debug('Disabling %s.', tool)
|
|
tool.disable()
|
|
if tool.is_enabled():
|
|
raise error.TestFail('%s did not disable correctly.' % tool)
|
|
|
|
|
|
def run_once(self, host=None):
|
|
"""Main test function."""
|
|
self.create_tools(host)
|
|
try:
|
|
# First remove rootfs verification if it's not already.
|
|
if not self.rootfs_tool.is_enabled():
|
|
logging.debug('Removing rootfs verification.')
|
|
self.rootfs_tool.enable()
|
|
|
|
for tool in self.tools:
|
|
self.test_tool(tool)
|
|
finally:
|
|
self.cleanup_tools(host)
|