1#!/usr/bin/env python3 2# 3# Copyright (C) 2019 The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); you may not 6# use this file except in compliance with the License. You may obtain a copy of 7# the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 14# License for the specific language governing permissions and limitations under 15# the License. 16""" 17A2DP PTS Tests. 18""" 19from acts.test_utils.abstract_devices.bluetooth_device import AndroidBluetoothDevice 20from acts.test_utils.abstract_devices.bluetooth_device import FuchsiaBluetoothDevice 21from acts.test_utils.bt.pts.pts_base_class import PtsBaseClass 22 23import acts.test_utils.bt.pts.fuchsia_pts_ics_lib as f_ics_lib 24import acts.test_utils.bt.pts.fuchsia_pts_ixit_lib as f_ixit_lib 25 26 27class A2dpPtsTest(PtsBaseClass): 28 ble_advertise_interval = 100 29 pts_action_mapping = None 30 31 def setup_class(self): 32 super().setup_class() 33 self.dut.initialize_bluetooth_controller() 34 # self.dut.set_bluetooth_local_name(self.dut_bluetooth_local_name) 35 local_dut_mac_address = self.dut.get_local_bluetooth_address() 36 37 ics = None 38 ixit = None 39 if isinstance(self.dut, FuchsiaBluetoothDevice): 40 fuchsia_ixit = f_ixit_lib.A2DP_IXIT 41 fuchsia_ixit[b'TSPX_bd_addr_iut'] = (b'OCTETSTRING', 42 local_dut_mac_address.replace( 43 ':', '').encode()) 44 ics = f_ics_lib.A2DP_ICS 45 ixit = fuchsia_ixit 46 elif isinstance(self.dut, AndroidBluetoothDevice): 47 # TODO: Add ICS and IXIT values for Android 48 self.log.warn( 49 "ICS/IXIT values not set for Android, using Fuchsia as default." 50 ) 51 fuchsia_ixit = f_ixit_lib.A2DP_IXIT 52 fuchsia_ixit[b'TSPX_bd_addr_iut'] = (b'OCTETSTRING', 53 local_dut_mac_address.replace( 54 ':', '').encode()) 55 ics = f_ics_lib.A2DP_ICS 56 ixit = fuchsia_ixit 57 58 ### PTS SETUP: Required after ICS, IXIT, and profile is setup ### 59 self.pts.set_profile_under_test("A2DP") 60 self.pts.set_ics_and_ixit(ics, ixit) 61 self.pts.setup_pts() 62 ### End PTS Setup ### 63 64 self.dut.unbond_all_known_devices() 65 self.dut.start_pairing_helper() 66 67 def setup_test(self): 68 super(A2dpPtsTest, self).setup_test() 69 # Make sure there were no lingering answers due to a failed test. 70 self.pts.extra_answers = [] 71 72 def teardown_test(self): 73 super(A2dpPtsTest, self).teardown_test() 74 75 def teardown_class(self): 76 super(A2dpPtsTest, self).teardown_class() 77 self.dut.stop_profile_a2dp_sink() 78 79 # BEGIN A2DP SINK TESTCASES # 80 @PtsBaseClass.pts_test_wrap 81 def test_a2dp_snk_as_bv_01_i(self): 82 return self.pts.execute_test("A2DP/SNK/AS/BV-01-I") 83 84 @PtsBaseClass.pts_test_wrap 85 def test_a2dp_snk_as_bv_02_i(self): 86 return self.pts.execute_test("A2DP/SNK/AS/BV-02-I") 87 88 @PtsBaseClass.pts_test_wrap 89 def test_a2dp_snk_cc_bv_01_i(self): 90 return self.pts.execute_test("A2DP/SNK/CC/BV-01-I") 91 92 @PtsBaseClass.pts_test_wrap 93 def test_a2dp_snk_cc_bv_02_i(self): 94 return self.pts.execute_test("A2DP/SNK/CC/BV-02-I") 95 96 @PtsBaseClass.pts_test_wrap 97 def test_a2dp_snk_cc_bv_05_i(self): 98 return self.pts.execute_test("A2DP/SNK/CC/BV-05-I") 99 100 @PtsBaseClass.pts_test_wrap 101 def test_a2dp_snk_cc_bv_06_i(self): 102 return self.pts.execute_test("A2DP/SNK/CC/BV-06-I") 103 104 @PtsBaseClass.pts_test_wrap 105 def test_a2dp_snk_cc_bv_07_i(self): 106 return self.pts.execute_test("A2DP/SNK/CC/BV-07-I") 107 108 @PtsBaseClass.pts_test_wrap 109 def test_a2dp_snk_cc_bv_08_i(self): 110 return self.pts.execute_test("A2DP/SNK/CC/BV-08-I") 111 112 @PtsBaseClass.pts_test_wrap 113 def test_a2dp_snk_rel_bv_01_i(self): 114 return self.pts.execute_test("A2DP/SNK/REL/BV-01-I") 115 116 @PtsBaseClass.pts_test_wrap 117 def test_a2dp_snk_set_bv_01_i(self): 118 return self.pts.execute_test("A2DP/SNK/SET/BV-01-I") 119 120 @PtsBaseClass.pts_test_wrap 121 def test_a2dp_snk_set_bv_02_i(self): 122 return self.pts.execute_test("A2DP/SNK/SET/BV-02-I") 123 124 @PtsBaseClass.pts_test_wrap 125 def test_a2dp_snk_set_bv_03_i(self): 126 return self.pts.execute_test("A2DP/SNK/SET/BV-03-I") 127 128 @PtsBaseClass.pts_test_wrap 129 def test_a2dp_snk_set_bv_03_i_bv_05_i(self): 130 return self.pts.execute_test("A2DP/SNK/SET/BV-05-I") 131 132 @PtsBaseClass.pts_test_wrap 133 def test_a2dp_snk_sus_bv_01_i(self): 134 return self.pts.execute_test("A2DP/SNK/SUS/BV-01-I") 135 136 # END A2DP SINK TESTCASES # 137