# Copyright (C) 2016 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 os from acts.libs.proto.proto_utils import parse_proto_to_ascii from acts_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest from acts_contrib.test_utils.bt.bt_metrics_utils import get_bluetooth_metrics from acts.utils import dump_string_to_file class BtMetricsBaseTest(BluetoothBaseTest): """ Base class for tests that requires dumping and parsing Bluetooth Metrics """ def __init__(self, controllers): BluetoothBaseTest.__init__(self, controllers) self.ad = self.android_devices[0] def setup_class(self): """ This method finds bluetooth protobuf definitions from config file, compile the protobuf and create a log directory for metrics dumping :return: True on success, False on failure """ super(BtMetricsBaseTest, self).setup_class() for ad in self.android_devices: ad.metrics_path = os.path.join(ad.log_path, "BluetoothMetrics") os.makedirs(ad.metrics_path, exist_ok=True) return True def setup_test(self): """ This method clears the current metrics, should be called after child class setup_test() :return: True """ super(BtMetricsBaseTest, self).setup_test() # Clear all metrics for ad in self.android_devices: get_bluetooth_metrics(ad) return True def collect_bluetooth_manager_metrics_logs(self, ads): """ Collect Bluetooth metrics logs, save an ascii log to disk and return both binary and ascii logs to caller :param ads: list of active Android devices :return: List of binary metrics logs, List of ascii metrics logs """ bluetooth_logs = [] bluetooth_logs_ascii = [] for ad in ads: serial = ad.serial out_name = "{}_{}".format(serial, "bluetooth_metrics.txt") bluetooth_log = get_bluetooth_metrics(ad) bluetooth_log_ascii = parse_proto_to_ascii(bluetooth_log) dump_string_to_file(bluetooth_log_ascii, os.path.join(ad.metrics_path, out_name)) bluetooth_logs.append(bluetooth_log) bluetooth_logs_ascii.append(bluetooth_log_ascii) return bluetooth_logs, bluetooth_logs_ascii