1# Copyright 2024 The Chromium Authors 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import json 6import unittest 7 8from crossbench.browsers.settings import Settings 9from crossbench.probes.thermal_monitor import (ThermalMonitorProbe, 10 ThermalStatus) 11from tests import test_helper 12from tests.crossbench.mock_browser import MockChromeAndroidStable 13from tests.crossbench.mock_helper import AndroidAdbMockPlatform, MockAdb 14from tests.crossbench.runner.helper import BaseRunnerTestCase 15 16 17class ThermalStatusTestCase(unittest.TestCase): 18 19 def test_thermal_status_short_names(self): 20 self.assertIs(ThermalStatus.parse("none"), ThermalStatus.NONE) 21 self.assertIs(ThermalStatus.parse("light"), ThermalStatus.LIGHT) 22 self.assertIs(ThermalStatus.parse("moderate"), ThermalStatus.MODERATE) 23 self.assertIs(ThermalStatus.parse("severe"), ThermalStatus.SEVERE) 24 self.assertIs(ThermalStatus.parse("critical"), ThermalStatus.CRITICAL) 25 self.assertIs(ThermalStatus.parse("emergency"), ThermalStatus.EMERGENCY) 26 self.assertIs(ThermalStatus.parse("shutdown"), ThermalStatus.SHUTDOWN) 27 28 def test_thermal_status_long_names(self): 29 self.assertIs( 30 ThermalStatus.parse("THERMAL_STATUS_NONE"), ThermalStatus.NONE) 31 self.assertIs( 32 ThermalStatus.parse("THERMAL_STATUS_LIGHT"), ThermalStatus.LIGHT) 33 self.assertIs( 34 ThermalStatus.parse("THERMAL_STATUS_MODERATE"), ThermalStatus.MODERATE) 35 self.assertIs( 36 ThermalStatus.parse("THERMAL_STATUS_SEVERE"), ThermalStatus.SEVERE) 37 self.assertIs( 38 ThermalStatus.parse("THERMAL_STATUS_CRITICAL"), ThermalStatus.CRITICAL) 39 self.assertIs( 40 ThermalStatus.parse("THERMAL_STATUS_EMERGENCY"), 41 ThermalStatus.EMERGENCY) 42 self.assertIs( 43 ThermalStatus.parse("THERMAL_STATUS_SHUTDOWN"), ThermalStatus.SHUTDOWN) 44 45 def test_thermal_status_numbers(self): 46 self.assertIs(ThermalStatus.parse("-1"), ThermalStatus.UNAVAILABLE) 47 self.assertIs(ThermalStatus.parse("0"), ThermalStatus.NONE) 48 self.assertIs(ThermalStatus.parse("1"), ThermalStatus.LIGHT) 49 self.assertIs(ThermalStatus.parse("2"), ThermalStatus.MODERATE) 50 self.assertIs(ThermalStatus.parse("3"), ThermalStatus.SEVERE) 51 self.assertIs(ThermalStatus.parse("4"), ThermalStatus.CRITICAL) 52 self.assertIs(ThermalStatus.parse("5"), ThermalStatus.EMERGENCY) 53 self.assertIs(ThermalStatus.parse("6"), ThermalStatus.SHUTDOWN) 54 55 56class TestThermalMonitorProbe(BaseRunnerTestCase): 57 58 def test_android_run(self): 59 self.platform.expect_sh( 60 "/usr/bin/adb", 61 "devices", 62 "-l", 63 result="List of devices attached\n123 device usb:0 product:a model:b") 64 adb_platform = AndroidAdbMockPlatform( 65 self.platform, adb=MockAdb(self.platform)) 66 runner = self.default_runner(browsers=[ 67 MockChromeAndroidStable( 68 "adb:chrome", settings=Settings(platform=adb_platform)) 69 ]) 70 71 adb_platform.expect_sh( 72 "dumpsys", 73 "thermalservice", 74 result="HAL Ready: true\nThermal Status: 0") 75 adb_platform.expect_sh( 76 "dumpsys", 77 "thermalservice", 78 result="HAL Ready: true\nThermal Status: 1") 79 adb_platform.expect_sh( 80 "dumpsys", 81 "thermalservice", 82 result="HAL Ready: true\nThermal Status: 2") 83 adb_platform.expect_sh( 84 "dumpsys", 85 "thermalservice", 86 result="HAL Ready: true\nThermal Status: 0") 87 88 runner.run(is_dry_run=False) 89 90 self.assertEqual(len(runner.runs), 2) 91 self.assertTrue(runner.is_success) 92 93 run = runner.runs[0] 94 self.assertTrue(run.is_success) 95 results = run.results.get_by_name(ThermalMonitorProbe.NAME) 96 with results.json.open() as f: 97 thermal_data = json.load(f) 98 self.assertIn("max_observed_status", thermal_data) 99 self.assertEqual(thermal_data["max_observed_status"], 1) 100 101 run = runner.runs[1] 102 self.assertTrue(run.is_success) 103 results = run.results.get_by_name(ThermalMonitorProbe.NAME) 104 with results.json.open() as f: 105 thermal_data = json.load(f) 106 self.assertIn("max_observed_status", thermal_data) 107 self.assertEqual(thermal_data["max_observed_status"], 2) 108 109 110if __name__ == "__main__": 111 test_helper.run_pytest(__file__) 112