Home | History | Annotate | Download | only in tests
      1 # Copyright (c) 2014 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 """
      6 CM_13 Validation of Active Context Termination on Function's Closing
      7 
      8 Reference:
      9     [1] Universal Serial Bus Communication Class MBIM Compliance Testing: 42
     10         http://www.usb.org/developers/docs/devclass_docs/MBIM-Compliance-1.0.pdf
     11 """
     12 import common
     13 
     14 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_channel
     15 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_constants
     16 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_control
     17 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_data
     18 from autotest_lib.client.cros.cellular.mbim_compliance import mbim_errors
     19 from autotest_lib.client.cros.cellular.mbim_compliance.sequences \
     20         import connect_sequence
     21 from autotest_lib.client.cros.cellular.mbim_compliance.sequences \
     22         import mbim_close_sequence
     23 from autotest_lib.client.cros.cellular.mbim_compliance.sequences \
     24         import mbim_open_generic_sequence
     25 from autotest_lib.client.cros.cellular.mbim_compliance.tests import test
     26 
     27 
     28 class CM13Test(test.Test):
     29     """ Implement the CM_13 test. """
     30 
     31     def run_internal(self):
     32         """ Run CM_13 test. """
     33         # Precondition
     34         mbim_open_generic_sequence.MBIMOpenGenericSequence(
     35                 self.test_context).run()
     36         connect_sequence.ConnectSequence(self.test_context).run()
     37         mbim_close_sequence.MBIMCloseSequence(self.test_context).run()
     38         mbim_open_generic_sequence.MBIMOpenGenericSequence(
     39                 self.test_context).run()
     40 
     41         # Step 1
     42         connect_info_structure = mbim_data.MBIMConnectInfoStructure(
     43                 session_id=0,
     44                 activation_state=0,
     45                 voice_call_state=0,
     46                 ip_type=0,
     47                 context_type=mbim_constants.MBIM_CONTEXT_TYPE_NONE.bytes,
     48                 nw_error=0)
     49         command_message = mbim_control.MBIMCommandMessage(
     50                 message_length=84,
     51                 total_fragments=1,
     52                 current_fragment=0,
     53                 device_service_id=mbim_constants.UUID_BASIC_CONNECT.bytes,
     54                 cid=mbim_constants.MBIM_CID_CONNECT,
     55                 command_type=mbim_constants.COMMAND_TYPE_QUERY,
     56                 information_buffer_length=36,
     57                 information_buffer=connect_info_structure.pack())
     58         packets = command_message.generate_packets()
     59         channel = mbim_channel.MBIMChannel(
     60                 {'idVendor': self.test_context.id_vendor,
     61                  'idProduct': self.test_context.id_product},
     62                 self.test_context.mbim_communication_interface.bInterfaceNumber,
     63                 self.test_context.interrupt_endpoint.bEndpointAddress,
     64                 self.test_context.mbim_functional.wMaxControlMessage)
     65         response_packets = channel.bidirectional_transaction(*packets)
     66         channel.close()
     67 
     68         # Step 2
     69         response_message = mbim_control.parse_response_packets(response_packets)
     70 
     71         # Step 3
     72         if (response_message.status_codes !=
     73             mbim_constants.MBIM_STATUS_CONTEXT_NOT_ACTIVATED):
     74             mbim_errors.log_and_raise(mbim_errors.MBIMComplianceAssertionError,
     75                                       'mbim1.0:9.3.2#3')
     76