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