普通文本  |  179行  |  6.39 KB

# 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