Home | History | Annotate | Download | only in sequences
      1 # Copyright (c) 2015 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging
      6 
      7 import common
      8 from autotest_lib.client.cros.cellular.mbim_compliance import entity
      9 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_errors
     10 
     11 
     12 class Sequence(entity.Entity):
     13     """ Base class for all sequences. """
     14 
     15     def run(self, **kwargs):
     16         """
     17         Run the sequence.
     18 
     19         @returns The result of the sequence. The type of value returned varies
     20                  by the sequence type.
     21 
     22         """
     23         logging.info('---- Sequence (%s) begin ----', self.name())
     24         result = self.run_internal(**kwargs)
     25         logging.info('---- Sequence (%s) end ----', self.name())
     26         return result
     27 
     28     def run_internal(self):
     29         """
     30         The actual method runs the sequence.
     31         Subclasses should override this method to run their own sequence.
     32 
     33         """
     34         mbim_errors.log_and_raise(NotImplementedError)
     35 
     36 
     37     def name(self):
     38         """ Return str name. """
     39         return self.__class__.__name__
     40 
     41 
     42     def detach_kernel_driver_if_active(self, interface_number):
     43         """
     44         Check if interfaces are occupied by kernel driver. If kernel driver is
     45         active, then we can't exclusively use the inteface for tests.
     46 
     47         @param interface_number: The bInterfaceNumber value of the interface
     48                 under check.
     49 
     50         """
     51         if self.device_context.device.is_kernel_driver_active(interface_number):
     52             self.device_context.device.detach_kernel_driver(interface_number)
     53