1#!/usr/bin/env python3 2# 3# Copyright 2020 - The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the 'License'); 6 7# you may not use this file except in compliance with the License. 8# You may obtain a copy of the License at 9# 10# http://www.apache.org/licenses/LICENSE-2.0 11# 12# Unless required by applicable law or agreed to in writing, software 13# distributed under the License is distributed on an 'AS IS' BASIS, 14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15# See the License for the specific language governing permissions and 16# limitations under the License. 17 18import unittest 19from acts.controllers import bits 20from acts.controllers import power_metrics 21 22 23class BitsTest(unittest.TestCase): 24 25 def test_metric_name_transformation_for_legacy_support(self): 26 avg_current = bits._transform_name('default_name.Monsoon.Monsoon:mA') 27 avg_power = bits._transform_name('default_name.Monsoon.Monsoon:mW') 28 29 self.assertEqual('avg_current', avg_current) 30 self.assertEqual('avg_power', avg_power) 31 32 def test_metric_name_transformation(self): 33 avg_current = bits._transform_name('default_name.slider.XYZ:mA') 34 avg_power = bits._transform_name('default_name.slider.ABCD:mW') 35 unknown_unit = bits._transform_name('default_name.aaaaa.QWERTY:unknown') 36 37 self.assertEqual('XYZ_avg_current', avg_current) 38 self.assertEqual('ABCD_avg_power', avg_power) 39 self.assertEqual('QWERTY', unknown_unit) 40 41 def test_raw_data_to_metrics(self): 42 raw_data = {'data': [ 43 {'name': 'default_device.Monsoon.Monsoon:mA', 44 'avg': 21, 45 'unit': 'mA'}, 46 {'name': 'default_device.Monsoon.Monsoon:mW', 47 'avg': 91, 48 'unit': 'mW'}]} 49 50 metrics = bits._raw_data_to_metrics(raw_data) 51 self.assertEqual(2, len(metrics)) 52 self.assertEqual( 53 power_metrics.Metric(21, 'current', 'mA', 'avg_current'), 54 metrics[0]) 55 self.assertEqual( 56 power_metrics.Metric(91, 'power', 'mW', 'avg_power'), 57 metrics[1]) 58 59 def test_raw_data_to_metrics_messages_are_ignored(self): 60 raw_data = {'data': [ 61 {'name': 'default_device.Log.UserInputs', 62 'avg': float('nan'), 63 'unit': 'Msg'}, 64 {'name': 'default_device.Log.Warnings', 65 'avg': float('nan'), 66 'unit': 'Msg'}]} 67 68 metrics = bits._raw_data_to_metrics(raw_data) 69 self.assertEqual(0, len(metrics)) 70 71 def test_get_single_file_get_first_element_of_a_list(self): 72 registry = {'some_key': ['first_element', 'second_element']} 73 74 result = bits._get_single_file(registry, 'some_key') 75 76 self.assertEqual('first_element', result) 77 78 def test_get_single_file_gets_string_if_registry_contains_string(self): 79 registry = {'some_key': 'this_is_a_string'} 80 81 result = bits._get_single_file(registry, 'some_key') 82 83 self.assertEqual('this_is_a_string', result) 84 85 def test_get_single_file_gets_none_if_value_is_undefined_or_empty_list(self): 86 registry = {'some_key': []} 87 88 result1 = bits._get_single_file(registry, 'some_key') 89 result2 = bits._get_single_file(registry, 'key_that_is_not_in_registry') 90 91 self.assertEqual(None, result1) 92 self.assertEqual(None, result2) 93 94 95 96if __name__ == '__main__': 97 unittest.main() 98