Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(697)

Unified Diff: scripts/slave/recipe_modules/chromium_android/tests/spawn_device_temp_monitor_test.py

Issue 1308173006: Create daemon to monitor android device temperatures (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: scripts/slave/recipe_modules/chromium_android/tests/spawn_device_temp_monitor_test.py
diff --git a/scripts/slave/recipe_modules/chromium_android/tests/spawn_device_temp_monitor_test.py b/scripts/slave/recipe_modules/chromium_android/tests/spawn_device_temp_monitor_test.py
new file mode 100755
index 0000000000000000000000000000000000000000..d6589d34ce78813786aac42816898f8c376a62e5
--- /dev/null
+++ b/scripts/slave/recipe_modules/chromium_android/tests/spawn_device_temp_monitor_test.py
@@ -0,0 +1,139 @@
+#!/usr/bin/env python
+
+import json
+import os
+import shutil
+import signal
+import subprocess
+import sys
+import tempfile
+import unittest
+
+THIS_DIR = os.path.dirname(os.path.abspath(__file__))
+
+# For 'test_env'.
+sys.path.insert(
+ 0, os.path.abspath(os.path.join(THIS_DIR, '..', '..', '..', 'unittests')))
+# For 'spawn_device_temp_monitor.py'.
+sys.path.insert(
+ 0, os.path.abspath(os.path.join(THIS_DIR, '..', 'resources')))
+
+# Imported for side effects on sys.path.
+import test_env
+import mock
+
+# In depot_tools/
+from testing_support import auto_stub
+import spawn_device_temp_monitor
+
+class MainFuncTest(auto_stub.TestCase):
+
+ def setUp(self):
+ # Collect calls to 'subprocess.Popen', which calls send_ts_mon_values.py
+ self.send_ts_mon_call = []
+ def mocked_ts_mon_calls(args):
+ self.send_ts_mon_call = args
+ self.mock(
+ spawn_device_temp_monitor.subprocess,
+ 'Popen',
+ mocked_ts_mon_calls)
+
+ # Make sleep throw sigterm to simulate a kill and break out of loop
+ def mocked_sleep_call(duration):
+ self.assertEquals(30, duration)
+ raise spawn_device_temp_monitor.SigtermError()
+ self.mock(
+ spawn_device_temp_monitor.time,
+ 'sleep',
+ mocked_sleep_call)
+
+ # Collect calls to os.kill
+ self.kill_calls = []
+ def mocked_kill_call(pid, thrown_signal):
+ self.kill_calls.append([pid, thrown_signal])
+ self.mock(
+ spawn_device_temp_monitor.os,
+ 'kill',
+ mocked_kill_call)
+
+ def test_main_responsive_device(self):
+ # Collect calls to 'subprocess.check_output', which calls adb, and
+ # simulate a responsive device
+ adb_calls = []
+ def mocked_adb_calls(args):
+ adb_calls.append(args)
+ if args[4].startswith('grep'):
+ return "some_thermal_file_name"
+ elif args[4].startswith('cat'):
+ return "123"
+ elif args[4].startswith('dumpsys'):
+ return "temperature: 456"
luqui 2015/09/03 01:10:41 else: die horribly
bpastene 2015/09/04 03:47:21 Done.
+
+ self.mock(
+ spawn_device_temp_monitor.subprocess,
+ 'check_output',
+ mocked_adb_calls)
+ spawn_device_temp_monitor.main(
+ '/some/adb/path',
+ '["device_serial_1"]',
+ 'metric_prefix', None)
+
+ # Should build args to send_ts_mon_values correctly
+ self.assertEquals(6, len(self.send_ts_mon_call))
luqui 2015/09/03 01:10:41 Woah that's a lot of asserts, why not just assert
bpastene 2015/09/04 03:47:21 Done.
+ self.assertEquals(
+ spawn_device_temp_monitor._RUN_PY,
+ self.send_ts_mon_call[0])
+ self.assertEquals(
+ 'infra.tools.send_ts_mon_values',
+ self.send_ts_mon_call[1])
+ self.assertEquals('--float', self.send_ts_mon_call[2])
+ self.assertEquals(
+ '{"name": "metric_prefix/device_serial_1/cpu_temp", "value": 123}',
+ self.send_ts_mon_call[3])
+ self.assertEquals('--float', self.send_ts_mon_call[4])
+ self.assertEquals(
+ '{"name": "metric_prefix/device_serial_1/battery_temp", "value": 456}',
+ self.send_ts_mon_call[5])
+
+ def test_main_unresponsive_device(self):
+ # Collect calls to 'subprocess.check_output', which calls adb, and
+ # simulate an unresponsive device
+ adb_calls = []
+ def mocked_adb_calls(args):
+ adb_calls.append(args)
+ raise subprocess.CalledProcessError
+
+ self.mock(
+ spawn_device_temp_monitor.subprocess,
+ 'check_output',
+ mocked_adb_calls)
+ spawn_device_temp_monitor.main(
+ '/some/adb/path',
+ '["device_serial_1"]',
+ 'metric_prefix',
+ None)
+
+ # Should build args to send_ts_mon_values without any metrics
+ self.assertEquals(2, len(self.send_ts_mon_call))
+ self.assertEquals(
+ spawn_device_temp_monitor._RUN_PY,
+ self.send_ts_mon_call[0])
+ self.assertEquals(
+ 'infra.tools.send_ts_mon_values',
+ self.send_ts_mon_call[1])
+
+ def test_pid_file_creation(self):
+ m_open = mock.mock_open()
+ m_open.return_value.readline = lambda: "789"
+ with mock.patch('__builtin__.open', m_open):
+ spawn_device_temp_monitor.main(
+ '/some/adb/path',
+ '[]',
+ 'metric_prefix',
+ '/tmp/tmp_pid')
+ self.assertEquals(1, len(self.kill_calls))
+ self.assertEquals(789, self.kill_calls[0][0])
+ self.assertEquals(signal.SIGTERM, self.kill_calls[0][1])
+
+if __name__ == '__main__':
+ unittest.main()

Powered by Google App Engine
This is Rietveld 408576698