xref: /aosp_15_r20/external/cronet/build/fuchsia/test/serve_repo_unittests.py (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1#!/usr/bin/env vpython3
2# Copyright 2022 The Chromium Authors
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5"""File for testing serve_repo.py."""
6
7import argparse
8import unittest
9import unittest.mock as mock
10
11import serve_repo
12
13from common import REPO_ALIAS
14
15_REPO_DIR = 'test_repo_dir'
16_REPO_NAME = 'test_repo_name'
17_TARGET = 'test_target'
18
19
20class ServeRepoTest(unittest.TestCase):
21    """Unittests for serve_repo.py."""
22
23    def setUp(self) -> None:
24        self._namespace = argparse.Namespace(repo=_REPO_DIR,
25                                             repo_name=_REPO_NAME,
26                                             target_id=_TARGET)
27
28    @mock.patch('serve_repo.run_ffx_command')
29    def test_run_serve_cmd_start(self, mock_ffx) -> None:
30        """Test |run_serve_cmd| function for start."""
31
32        serve_repo.run_serve_cmd('start', self._namespace)
33        self.assertEqual(mock_ffx.call_count, 4)
34        second_call = mock_ffx.call_args_list[1]
35        self.assertEqual(mock.call(cmd=['repository', 'server', 'start']),
36                         second_call)
37        third_call = mock_ffx.call_args_list[2]
38        self.assertEqual(
39            mock.call(
40                cmd=['repository', 'add-from-pm', _REPO_DIR, '-r', _REPO_NAME
41                     ]), third_call)
42        fourth_call = mock_ffx.call_args_list[3]
43        self.assertEqual(
44            mock.call(cmd=[
45                'target', 'repository', 'register', '-r', _REPO_NAME,
46                '--alias', REPO_ALIAS
47            ],
48                      target_id=_TARGET), fourth_call)
49
50    @mock.patch('serve_repo.run_ffx_command')
51    def test_run_serve_cmd_stop(self, mock_ffx) -> None:
52        """Test |run_serve_cmd| function for stop."""
53
54        serve_repo.run_serve_cmd('stop', self._namespace)
55        self.assertEqual(mock_ffx.call_count, 3)
56        first_call = mock_ffx.call_args_list[0]
57        self.assertEqual(
58            mock.call(
59                cmd=['target', 'repository', 'deregister', '-r', _REPO_NAME],
60                target_id=_TARGET,
61                check=False), first_call)
62        second_call = mock_ffx.call_args_list[1]
63        self.assertEqual(
64            mock.call(cmd=['repository', 'remove', _REPO_NAME], check=False),
65            second_call)
66        third_call = mock_ffx.call_args_list[2]
67        self.assertEqual(
68            mock.call(cmd=['repository', 'server', 'stop'], check=False),
69            third_call)
70
71    @mock.patch('serve_repo.serve_repository')
72    def test_run_serve_cmd_run(self, mock_serve) -> None:
73        """Test |run_serve_cmd| function for run."""
74
75        with mock.patch('common.time.sleep', side_effect=KeyboardInterrupt):
76            serve_repo.run_serve_cmd('run', self._namespace)
77        self.assertEqual(mock_serve.call_count, 1)
78
79    @mock.patch('serve_repo.run_serve_cmd')
80    def test_serve_repository(self, mock_serve) -> None:
81        """Tests |serve_repository| context manager."""
82
83        with serve_repo.serve_repository(self._namespace):
84            self.assertEqual(mock_serve.call_count, 1)
85        self.assertEqual(mock_serve.call_count, 2)
86
87    def test_main_start_no_serve_repo_flag(self) -> None:
88        """Tests not specifying directory for start raises a ValueError."""
89
90        with mock.patch('sys.argv', ['serve_repo.py', 'start']):
91            with self.assertRaises(ValueError):
92                serve_repo.main()
93
94    @mock.patch('serve_repo.run_serve_cmd')
95    def test_main_stop(self, mock_serve) -> None:
96        """Tests |main| function."""
97
98        with mock.patch('sys.argv', ['serve_repo.py', 'stop']):
99            serve_repo.main()
100            self.assertEqual(mock_serve.call_count, 1)
101
102    @mock.patch('serve_repo.run_serve_cmd')
103    def test_main_run(self, mock_serve) -> None:
104        """Tests |main| function."""
105
106        with mock.patch('sys.argv', [
107                'serve_repo.py', 'run', '--serve-repo', _REPO_NAME
108              ]), \
109             mock.patch('common.time.sleep', side_effect=KeyboardInterrupt):
110            serve_repo.main()
111            self.assertEqual(mock_serve.call_count, 1)
112
113
114if __name__ == '__main__':
115    unittest.main()
116