1# Copyright 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
5import common
6from autotest_lib.client.cros.cellular.mbim_compliance import mbim_constants
7from autotest_lib.client.cros.cellular.mbim_compliance import mbim_errors
8from autotest_lib.client.cros.cellular.mbim_compliance import mbim_test_base
9from autotest_lib.client.cros.cellular.mbim_compliance.sequences \
10        import get_descriptors_sequence
11from autotest_lib.client.cros.cellular.mbim_compliance.sequences \
12        import mbim_cid_device_caps_sequence
13from autotest_lib.client.cros.cellular.mbim_compliance.sequences \
14        import mbim_open_generic_sequence
15
16
17class cellular_MbimComplianceCID01(mbim_test_base.MbimTestBase):
18    """
19    Validation of IP flags for functions that support CDMA.
20
21    This test verifies that a function that supports CDMA specifies at least
22    one of the following IP flags: MBIMCtrlCapsCdmaMobileIP,
23    MBIMCtrlCapsCdmaSimpleIP.
24
25    Reference:
26        [1] Universal Serial Bus Communication Class MBIM Compliance Testing: 52
27        http://www.usb.org/developers/docs/devclass_docs/MBIM-Compliance-1.0.pdf
28
29    """
30    version = 1
31
32    def run_internal(self):
33        """ Run the CM_01 test. """
34        # Precondition.
35        desc_sequence = get_descriptors_sequence.GetDescriptorsSequence(
36                self.device_context)
37        descriptors = desc_sequence.run()
38        self.device_context.update_descriptor_cache(descriptors)
39        open_sequence = mbim_open_generic_sequence.MBIMOpenGenericSequence(
40                self.device_context)
41        open_sequence.run()
42        caps_sequence = mbim_cid_device_caps_sequence.MBIMCIDDeviceCapsSequence(
43                self.device_context)
44        _, caps_response = caps_sequence.run()
45
46        # Step1
47        if (caps_response.cellular_class &
48            mbim_constants.CELLULAR_CLASS_MASK_CDMA):
49            if not ((caps_response.control_caps &
50                     mbim_constants.CTRL_CAPS_MASK_CDMA_MOBILE_IP) or
51                    (caps_response.control_caps &
52                     mbim_constants.CTRL_CAPS_MASK_CDMA_SIMPLE_IP)):
53                mbim_errors.log_and_raise(
54                        mbim_errors.MBIMComplianceAssertionError,
55                        'mbim1.0:10.5.1.3#1')
56