123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- #!/usr/bin/env python3
- # Copyright (c) 2023 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- import io
- import os
- import os.path
- import sys
- import tempfile
- import unittest
- import unittest.mock
- ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- sys.path.insert(0, ROOT_DIR)
- import reclient_metrics
- class ReclientMetricsTest(unittest.TestCase):
- def test_is_googler(self):
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as abc@google.com.'
- self.assertTrue(reclient_metrics.is_googler())
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 1
- self.assertFalse(reclient_metrics.is_googler())
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = ''
- self.assertFalse(reclient_metrics.is_googler())
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as foo@example.com.'
- self.assertFalse(reclient_metrics.is_googler())
- with unittest.mock.patch('subprocess.run') as run_mock:
- self.assertTrue(reclient_metrics.is_googler({
- 'is-googler': True,
- }))
- self.assertFalse(
- reclient_metrics.is_googler({
- 'is-googler': False,
- }))
- run_mock.assert_not_called()
- def test_load_and_save_config(self):
- with tempfile.TemporaryDirectory() as tmpdir:
- reclient_metrics.CONFIG = os.path.join(tmpdir,
- 'reclient_metrics.cfg')
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as abc@google.com.'
- cfg1 = reclient_metrics.load_config()
- self.assertDictEqual(
- cfg1, {
- 'is-googler': True,
- 'countdown': 10,
- 'version': reclient_metrics.VERSION,
- })
- reclient_metrics.save_config(cfg1)
- cfg2 = reclient_metrics.load_config()
- self.assertDictEqual(
- cfg2, {
- 'is-googler': True,
- 'countdown': 9,
- 'version': reclient_metrics.VERSION,
- })
- run_mock.assert_called_once()
- def test_check_status(self):
- with tempfile.TemporaryDirectory() as tmpdir:
- reclient_metrics.CONFIG = os.path.join(tmpdir,
- 'reclient_metrics.cfg')
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as abc@google.com.'
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertFalse(reclient_metrics.check_status("outdir"))
- self.assertIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"), stdout_mock.getvalue())
- run_mock.assert_called_once()
- with tempfile.TemporaryDirectory() as tmpdir:
- reclient_metrics.CONFIG = os.path.join(tmpdir,
- 'reclient_metrics.cfg')
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as abc@google.com.'
- for i in range(10):
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertFalse(
- reclient_metrics.check_status("outdir"))
- self.assertIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"),
- stdout_mock.getvalue())
- self.assertIn(
- "you run autoninja another %d time(s)" % (10 - i),
- stdout_mock.getvalue())
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertTrue(reclient_metrics.check_status("outdir"))
- self.assertNotIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertNotIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"), stdout_mock.getvalue())
- run_mock.assert_called_once()
- with tempfile.TemporaryDirectory() as tmpdir:
- reclient_metrics.CONFIG = os.path.join(tmpdir,
- 'reclient_metrics.cfg')
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as abc@example.com.'
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertFalse(reclient_metrics.check_status("outdir"))
- self.assertNotIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertNotIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"), stdout_mock.getvalue())
- run_mock.assert_called_once()
- with tempfile.TemporaryDirectory() as tmpdir:
- reclient_metrics.CONFIG = os.path.join(tmpdir,
- 'reclient_metrics.cfg')
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 1
- run_mock.return_value.stdout = ''
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertFalse(reclient_metrics.check_status("outdir"))
- self.assertNotIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertNotIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"), stdout_mock.getvalue())
- run_mock.assert_called_once()
- with tempfile.TemporaryDirectory() as tmpdir:
- reclient_metrics.CONFIG = os.path.join(tmpdir,
- 'reclient_metrics.cfg')
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as abc@google.com.'
- reclient_metrics.main(["reclient_metrics.py", "opt-in"])
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertTrue(reclient_metrics.check_status("outdir"))
- self.assertNotIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertNotIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"), stdout_mock.getvalue())
- run_mock.assert_called_once()
- with tempfile.TemporaryDirectory() as tmpdir:
- reclient_metrics.CONFIG = os.path.join(tmpdir,
- 'reclient_metrics.cfg')
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as abc@google.com.'
- for i in range(3):
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertFalse(
- reclient_metrics.check_status("outdir"))
- self.assertIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"),
- stdout_mock.getvalue())
- self.assertIn(
- "you run autoninja another %d time(s)" % (10 - i),
- stdout_mock.getvalue())
- reclient_metrics.main(["reclient_metrics.py", "opt-in"])
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertTrue(reclient_metrics.check_status("outdir"))
- self.assertNotIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertNotIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"), stdout_mock.getvalue())
- run_mock.assert_called_once()
- with tempfile.TemporaryDirectory() as tmpdir:
- reclient_metrics.CONFIG = os.path.join(tmpdir,
- 'reclient_metrics.cfg')
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as abc@example.com.'
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertFalse(reclient_metrics.check_status("outdir"))
- self.assertNotIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertNotIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"), stdout_mock.getvalue())
- reclient_metrics.main(["reclient_metrics.py", "opt-in"])
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertFalse(reclient_metrics.check_status("outdir"))
- self.assertNotIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertNotIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"), stdout_mock.getvalue())
- run_mock.assert_called_once()
- with tempfile.TemporaryDirectory() as tmpdir:
- reclient_metrics.CONFIG = os.path.join(tmpdir,
- 'reclient_metrics.cfg')
- with unittest.mock.patch('subprocess.run') as run_mock:
- run_mock.return_value.returncode = 0
- run_mock.return_value.stdout = 'Logged in as abc@google.com.'
- for i in range(3):
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertFalse(
- reclient_metrics.check_status("outdir"))
- self.assertIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"),
- stdout_mock.getvalue())
- self.assertIn(
- "you run autoninja another %d time(s)" % (10 - i),
- stdout_mock.getvalue())
- reclient_metrics.main(["reclient_metrics.py", "opt-out"])
- with unittest.mock.patch('sys.stdout',
- new=io.StringIO()) as stdout_mock:
- self.assertFalse(reclient_metrics.check_status("outdir"))
- self.assertNotIn("Your reclient metrics will",
- stdout_mock.getvalue())
- self.assertNotIn(
- os.path.join("outdir", ".reproxy_tmp", "logs",
- "rbe_metrics.txt"), stdout_mock.getvalue())
- run_mock.assert_called_once()
- if __name__ == '__main__':
- unittest.main()
|