xref: /aosp_15_r20/external/angle/build/fuchsia/test/serve_repo_unittests.py (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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, register_device_args
14
15_REPO_DIR = 'test_repo_dir'
16_REPO_NAME = 'test_repo_name'
17_TARGET = 'test_target'
18
19
20# Tests private functions.
21# pylint: disable=protected-access
22class ServeRepoTest(unittest.TestCase):
23    """Unittests for serve_repo.py."""
24
25    @mock.patch('serve_repo.run_ffx_command')
26    def test_start_server(self, mock_ffx) -> None:
27        """Test |_start_serving| function for start."""
28
29        serve_repo._start_serving(_REPO_DIR, _REPO_NAME, _TARGET)
30        self.assertEqual(mock_ffx.call_count, 4)
31        second_call = mock_ffx.call_args_list[1]
32        self.assertEqual(mock.call(cmd=['repository', 'server', 'start']),
33                         second_call)
34        third_call = mock_ffx.call_args_list[2]
35        self.assertEqual(
36            mock.call(
37                cmd=['repository', 'add-from-pm', _REPO_DIR, '-r', _REPO_NAME
38                     ]), third_call)
39        fourth_call = mock_ffx.call_args_list[3]
40        self.assertEqual(
41            mock.call(cmd=[
42                'target', 'repository', 'register', '-r', _REPO_NAME,
43                '--alias', REPO_ALIAS
44            ],
45                      target_id=_TARGET), fourth_call)
46
47    @mock.patch('serve_repo.run_ffx_command')
48    def test_stop_server(self, mock_ffx) -> None:
49        """Test |_stop_serving| function for stop."""
50
51        serve_repo._stop_serving(_REPO_NAME, _TARGET)
52        self.assertEqual(mock_ffx.call_count, 3)
53        first_call = mock_ffx.call_args_list[0]
54        self.assertEqual(
55            mock.call(
56                cmd=['target', 'repository', 'deregister', '-r', _REPO_NAME],
57                target_id=_TARGET,
58                check=False), first_call)
59        second_call = mock_ffx.call_args_list[1]
60        self.assertEqual(
61            mock.call(cmd=['repository', 'remove', _REPO_NAME], check=False),
62            second_call)
63        third_call = mock_ffx.call_args_list[2]
64        self.assertEqual(
65            mock.call(cmd=['repository', 'server', 'stop'], check=False),
66            third_call)
67
68    @mock.patch('serve_repo._start_serving')
69    @mock.patch('serve_repo._stop_serving')
70    def test_serve_repository(self, mock_stop, mock_start) -> None:
71        """Tests |serve_repository| context manager."""
72
73        parser = argparse.ArgumentParser()
74        serve_repo.register_serve_args(parser)
75        register_device_args(parser)
76        with serve_repo.serve_repository(
77                parser.parse_args([
78                    '--repo', _REPO_DIR, '--repo-name', _REPO_NAME,
79                    '--target-id', _TARGET
80                ])):
81            self.assertEqual(mock_start.call_count, 1)
82        self.assertEqual(mock_stop.call_count, 1)
83
84
85if __name__ == '__main__':
86    unittest.main()
87