| #!/usr/bin/env python3 |
| # Copyright (C) 2023 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 a |
| # |
| # 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. |
| |
| from python.generators.diff_tests.testing import Path, DataPath, Metric |
| from python.generators.diff_tests.testing import Csv, Json, TextProto |
| from python.generators.diff_tests.testing import DiffTestBlueprint |
| from python.generators.diff_tests.testing import TestSuite |
| |
| |
| class LinuxSysfsPower(TestSuite): |
| |
| # Test basic battery counters. |
| def test_counters(self): |
| return DiffTestBlueprint( |
| trace=TextProto(""" |
| packet { |
| timestamp: 3000000 |
| battery { |
| charge_counter_uah: 3005000 |
| capacity_percent: 100.000000 |
| current_ua: 0 |
| } |
| } |
| """), |
| query=""" |
| SELECT * FROM ( |
| (SELECT AVG(value) AS capacity_percent FROM counters |
| WHERE name='batt.capacity_pct'), |
| (SELECT AVG(value) AS charge_uah FROM counters |
| WHERE name='batt.charge_uah'), |
| (SELECT AVG(value) AS current_ua FROM counters |
| WHERE name='batt.current_ua') |
| ); |
| """, |
| out=Csv(""" |
| "capacity_percent","charge_uah","current_ua" |
| 100.000000,3005000.000000,0.000000 |
| """)) |
| |
| # Test multiple batteries. |
| def test_multiple_batteries(self): |
| return DiffTestBlueprint( |
| trace=TextProto(""" |
| packet { |
| timestamp: 3000000 |
| battery { |
| charge_counter_uah: 3005000 |
| capacity_percent: 100.000000 |
| current_ua: 0 |
| name: "BAT0" |
| } |
| } |
| packet { |
| timestamp: 3000000 |
| battery { |
| capacity_percent: 90.000000 |
| name: "BAT1" |
| } |
| } |
| """), |
| query=""" |
| SELECT name, value FROM counters WHERE name like "batt.%" ORDER BY name |
| """, |
| out=Csv(""" |
| "name","value" |
| "batt.BAT0.capacity_pct",100.000000 |
| "batt.BAT0.charge_uah",3005000.000000 |
| "batt.BAT0.current_ua",0.000000 |
| "batt.BAT1.capacity_pct",90.000000 |
| """)) |
| |
| # Test convertion to charge counter from energy and voltage. |
| def test_charge_from_energy_and_voltage(self): |
| return DiffTestBlueprint( |
| trace=TextProto(""" |
| packet { |
| timestamp: 3000000 |
| battery { |
| energy_counter_uwh: 56680000 |
| voltage_uv: 17356000 |
| } |
| } |
| packet { |
| timestamp: 4000000 |
| battery { |
| energy_counter_uwh: 56600000 |
| voltage_uv: 17356000 |
| } |
| } |
| """), |
| query=""" |
| SELECT value |
| FROM counters |
| WHERE name = "batt.charge_uah" |
| """, |
| out=Csv(""" |
| "value" |
| 3265729.000000 |
| 3261120.000000 |
| """)) |
| |
| # Test convertion to charge counter from energy and voltage: bad voltage |
| # value. |
| def test_charge_from_energy_and_bad_voltage(self): |
| return DiffTestBlueprint( |
| trace=TextProto(""" |
| packet { |
| timestamp: 3000000 |
| battery { |
| energy_counter_uwh: 56680000 |
| voltage_uv: 0 |
| } |
| } |
| """), |
| query=""" |
| SELECT value |
| FROM counters |
| WHERE name = "batt.charge_uah" |
| """, |
| out=Csv(""" |
| "value" |
| """)) |