• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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