• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env vpython3
2
3# Copyright 2024 The Chromium Authors
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6"""File for testing monitors.py."""
7
8import importlib
9import os
10import tempfile
11import unittest
12import unittest.mock as mock
13
14import monitors
15
16
17def dump() -> bool:
18    """Tries to dump the metrics into a temporary file and returns if the
19    file exits."""
20    with tempfile.TemporaryDirectory() as tmpdir:
21        monitors.dump(tmpdir)
22        return os.path.isfile(
23            os.path.join(tmpdir, 'test_script_metrics.jsonpb'))
24
25
26class MonitorsRealTest(unittest.TestCase):
27    """Test real implementation of monitors.py."""
28
29    def test_run_real_implementation(self) -> None:
30        """Ensures the real version of the monitors is loaded."""
31        importlib.reload(monitors)
32        ave = monitors.average('test', 'run', 'real', 'implementation')
33        ave.record(1)
34        ave.record(2)
35        self.assertTrue(dump())
36
37    @mock.patch('os.path.isdir', side_effect=[False, True])
38    def test_run_dummy_implementation(self, *_) -> None:
39        """Ensures the dummy version of the monitors is loaded."""
40        importlib.reload(monitors)
41        ave = monitors.average('test', 'run', 'dummy', 'implementation')
42        ave.record(1)
43        ave.record(2)
44        self.assertFalse(dump())
45
46    @mock.patch('os.path.isdir', side_effect=[False, True])
47    def test_with_dummy_implementation(self, *_) -> None:
48        """Ensures the dummy version of the monitors can be used by 'with'
49        statement."""
50        importlib.reload(monitors)
51        executed = False
52        with monitors.time_consumption('test', 'with', 'dummy'):
53            executed = True
54        self.assertTrue(executed)
55        self.assertFalse(dump())
56
57
58if __name__ == '__main__':
59    unittest.main()
60