14d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
24d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou# Use of this source code is governed by a BSD-style license that can be
34d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou# found in the LICENSE file.
44d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou
54d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou"""
64d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen ChouCM_13 Validation of Active Context Termination on Function's Closing
74d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou
84d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen ChouReference:
94d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou    [1] Universal Serial Bus Communication Class MBIM Compliance Testing: 42
104d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        http://www.usb.org/developers/docs/devclass_docs/MBIM-Compliance-1.0.pdf
114d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou"""
124d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chouimport common
134d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou
144d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Choufrom autotest_lib.client.cros.cellular.mbim_compliance import mbim_channel
154d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Choufrom autotest_lib.client.cros.cellular.mbim_compliance import mbim_constants
164d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Choufrom autotest_lib.client.cros.cellular.mbim_compliance import mbim_control
174d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Choufrom autotest_lib.client.cros.cellular.mbim_compliance import mbim_data
184d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Choufrom autotest_lib.client.cros.cellular.mbim_compliance import mbim_errors
194d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Choufrom autotest_lib.client.cros.cellular.mbim_compliance.sequences \
204d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        import connect_sequence
214d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Choufrom autotest_lib.client.cros.cellular.mbim_compliance.sequences \
224d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        import mbim_close_sequence
234d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Choufrom autotest_lib.client.cros.cellular.mbim_compliance.sequences \
244d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        import mbim_open_generic_sequence
254d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Choufrom autotest_lib.client.cros.cellular.mbim_compliance.tests import test
264d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou
274d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou
284d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chouclass CM13Test(test.Test):
294d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou    """ Implement the CM_13 test. """
304d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou
314d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou    def run_internal(self):
324d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        """ Run CM_13 test. """
334d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        # Precondition
344d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        mbim_open_generic_sequence.MBIMOpenGenericSequence(
354d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                self.test_context).run()
364d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        connect_sequence.ConnectSequence(self.test_context).run()
374d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        mbim_close_sequence.MBIMCloseSequence(self.test_context).run()
384d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        mbim_open_generic_sequence.MBIMOpenGenericSequence(
394d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                self.test_context).run()
404d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou
414d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        # Step 1
424d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        connect_info_structure = mbim_data.MBIMConnectInfoStructure(
434d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                session_id=0,
444d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                activation_state=0,
454d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                voice_call_state=0,
464d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                ip_type=0,
474d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                context_type=mbim_constants.MBIM_CONTEXT_TYPE_NONE.bytes,
484d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                nw_error=0)
494d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        command_message = mbim_control.MBIMCommandMessage(
504d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                message_length=84,
514d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                total_fragments=1,
524d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                current_fragment=0,
534d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                device_service_id=mbim_constants.UUID_BASIC_CONNECT.bytes,
544d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                cid=mbim_constants.MBIM_CID_CONNECT,
554d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                command_type=mbim_constants.COMMAND_TYPE_QUERY,
564d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                information_buffer_length=36,
574d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                information_buffer=connect_info_structure.pack())
584d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        packets = command_message.generate_packets()
594d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        channel = mbim_channel.MBIMChannel(
604d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                {'idVendor': self.test_context.id_vendor,
614d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                 'idProduct': self.test_context.id_product},
624d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                self.test_context.mbim_communication_interface.bInterfaceNumber,
634d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                self.test_context.interrupt_endpoint.bEndpointAddress,
644d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                self.test_context.mbim_functional.wMaxControlMessage)
654d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        response_packets = channel.bidirectional_transaction(*packets)
664d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        channel.close()
674d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou
684d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        # Step 2
694d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        response_message = mbim_control.parse_response_packets(response_packets)
704d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou
714d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        # Step 3
724d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou        if (response_message.status_codes !=
734d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou            mbim_constants.MBIM_STATUS_CONTEXT_NOT_ACTIVATED):
744d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou            mbim_errors.log_and_raise(mbim_errors.MBIMComplianceAssertionError,
754d427943bf1931aab7f9992b9f034334e36ec7dbMiao-chen Chou                                      'mbim1.0:9.3.2#3')
76