# 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 logging import common from autotest_lib.client.cros.cellular.mbim_compliance import entity from autotest_lib.client.cros.cellular.mbim_compliance import mbim_errors class Sequence(entity.Entity): """ Base class for all sequences. """ def run(self, **kwargs): """ Run the sequence. @returns The result of the sequence. The type of value returned varies by the sequence type. """ logging.info('---- Sequence (%s) begin ----', self.name()) result = self.run_internal(**kwargs) logging.info('---- Sequence (%s) end ----', self.name()) return result def run_internal(self): """ The actual method runs the sequence. Subclasses should override this method to run their own sequence. """ mbim_errors.log_and_raise(NotImplementedError) def name(self): """ Return str name. """ return self.__class__.__name__ def detach_kernel_driver_if_active(self, interface_number): """ Check if interfaces are occupied by kernel driver. If kernel driver is active, then we can't exclusively use the inteface for tests. @param interface_number: The bInterfaceNumber value of the interface under check. """ if self.device_context.device.is_kernel_driver_active(interface_number): self.device_context.device.detach_kernel_driver(interface_number)