blob: 2725b2cfabbbd0516f8a48111c66be5881c96f65 [file] [log] [blame]
# Copyright (C) 2017 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
import time
from acts.test_decorators import test_tracker_info
from acts import asserts
from acts.test_utils.bt.BtFunhausBaseTest import BtFunhausBaseTest
class BtFunhausMetricsTest(BtFunhausBaseTest):
def __init__(self, controllers):
BtFunhausBaseTest.__init__(self, controllers)
self.bluetooth_proto_path = None
self.metrics_path = None
self.bluetooth_proto_module = None
def setup_class(self):
return super(BtFunhausMetricsTest, self).setup_class()
def setup_test(self):
return super(BtFunhausMetricsTest, self).setup_test()
@test_tracker_info(uuid='b712ed0e-c1fb-4bc8-9dee-83891aa22205')
def test_run_bt_audio(self):
"""Test run Bluetooth A2DP audio for one iteration
This test runs Bluetooth A2DP Audio for 60 seconds and sleep for 20
seconds.
Steps:
1. For the first Android device, run audio for 60 seconds
2. Sleep while connected to A2DP sink for 20 seconds
3. Pull Bluetooth metrics
4. Verify metrics values
Expected Result:
The correct metrics should have one Bluetooth session with
audio_duration_millis = 60000 +/- 10000
session_duration_sec = 80 +/- 10
Returns:
Pass if True
Fail if False
TAGS: Classic, A2DP
Priority: 1
"""
play_duration_seconds = 60
start_time = time.time()
if not self.play_music_for_duration(play_duration_seconds):
return False
self.ad.droid.mediaPlayStopAll()
time.sleep(20)
bt_duration = time.time() - start_time
bluetooth_logs, bluetooth_logs_ascii = \
self.collect_bluetooth_manager_metrics_logs(
[self.ad])
bluetooth_log = bluetooth_logs[0]
bluetooth_log_ascii = bluetooth_logs_ascii[0]
self.log.info(bluetooth_log_ascii)
asserts.assert_equal(len(bluetooth_log.session), 1)
a2dp_session_log = bluetooth_log.session[0]
asserts.assert_almost_equal(
a2dp_session_log.session_duration_sec, bt_duration, delta=10)
asserts.assert_almost_equal(
a2dp_session_log.a2dp_session.audio_duration_millis,
play_duration_seconds * 1000,
delta=10000)
return True
@test_tracker_info(uuid='ab6b8c61-057b-4bf6-b0cf-8bec3ae3a7eb')
def test_run_multiple_bt_audio(self):
"""Test metrics for multiple Bluetooth audio sessions
This test will run Bluetooth A2DP audio for five 30 seconds sessions
and collect metrics after that
Steps:
1. For the first Android device connected, run A2DP audio for 30
seconds for 5 times
2. Dump and compare metrics
Expected Result:
There should be a single Bluetooth session with
session_duration_sec = 250 +/- 10
audio_duration_millis = 150000 +/- 20000
Note: The discrepancies are mainly due to command delays
Returns:
Pass if True
Fail if False
TAGS: Classic, A2DP
Priority: 1
"""
num_play = 5
play_duration_seconds = 30
bt_duration = 0
a2dp_duration = 0
for i in range(num_play):
start_time = time.time()
if not self.play_music_for_duration(play_duration_seconds):
return False
a2dp_duration += (time.time() - start_time)
time.sleep(20)
bt_duration += (time.time() - start_time)
bluetooth_logs, bluetooth_logs_ascii = \
self.collect_bluetooth_manager_metrics_logs(
[self.android_devices[0]])
bluetooth_log = bluetooth_logs[0]
bluetooth_log_ascii = bluetooth_logs_ascii[0]
self.log.info(bluetooth_log_ascii)
asserts.assert_equal(len(bluetooth_log.session), 1)
a2dp_session_log = bluetooth_log.session[0]
asserts.assert_almost_equal(
a2dp_session_log.session_duration_sec, bt_duration, delta=10)
asserts.assert_almost_equal(
a2dp_session_log.a2dp_session.audio_duration_millis,
a2dp_duration * 1000,
delta=20000)
return True
def test_run_multiple_bt_audio_dump_each(self):
"""Test run Bluetooth A2DP audio multiple times and dump metrics each time
Steps:
1. For the first Android device connected, run A2DP audio for 30 seconds
2. Sleep for 20 seconds
3. Dump metrics and compare
4. Repeate steps 1-3 five times
Expected Result:
Each time, we should observe the following:
session_duration_sec = 50 +/- 10
audio_duration_millis = 30 +/- 5
Returns:
Pass if True
Fail if False
TAGS: Classic, A2DP
Priority: 1
"""
num_play = 5
play_duration_seconds = 30
for i in range(num_play):
start_time = time.time()
if not self.play_music_for_duration(play_duration_seconds):
return False
time.sleep(20)
bt_duration = time.time() - start_time
bluetooth_logs, bluetooth_logs_ascii = \
self.collect_bluetooth_manager_metrics_logs(
[self.android_devices[0]])
bluetooth_log = bluetooth_logs[0]
bluetooth_log_ascii = bluetooth_logs_ascii[0]
self.log.info(bluetooth_log_ascii)
asserts.assert_equal(len(bluetooth_log.session), 1)
a2dp_session_log = bluetooth_log.session[0]
asserts.assert_almost_equal(
a2dp_session_log.session_duration_sec, bt_duration, delta=10)
asserts.assert_almost_equal(
a2dp_session_log.a2dp_session.audio_duration_millis,
play_duration_seconds * 1000,
delta=5000)
return True