| # 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) |