90 lines
3.2 KiB
Python
90 lines
3.2 KiB
Python
|
|
#!/usr/bin/env vpython3
|
||
|
|
# Copyright 2022 The Chromium Authors
|
||
|
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
|
# found in the LICENSE file.
|
||
|
|
"""File for testing serve_repo.py."""
|
||
|
|
|
||
|
|
import argparse
|
||
|
|
import unittest
|
||
|
|
import unittest.mock as mock
|
||
|
|
|
||
|
|
import serve_repo
|
||
|
|
|
||
|
|
from common import REPO_ALIAS
|
||
|
|
|
||
|
|
_REPO_DIR = 'test_repo_dir'
|
||
|
|
_REPO_NAME = 'test_repo_name'
|
||
|
|
_TARGET = 'test_target'
|
||
|
|
|
||
|
|
|
||
|
|
class ServeRepoTest(unittest.TestCase):
|
||
|
|
"""Unittests for serve_repo.py."""
|
||
|
|
|
||
|
|
def setUp(self) -> None:
|
||
|
|
self._namespace = argparse.Namespace(repo=_REPO_DIR,
|
||
|
|
repo_name=_REPO_NAME,
|
||
|
|
target_id=_TARGET)
|
||
|
|
|
||
|
|
@mock.patch('serve_repo.run_ffx_command')
|
||
|
|
def test_run_serve_cmd_start(self, mock_ffx) -> None:
|
||
|
|
"""Test |run_serve_cmd| function for start."""
|
||
|
|
|
||
|
|
serve_repo.run_serve_cmd('start', self._namespace)
|
||
|
|
self.assertEqual(mock_ffx.call_count, 4)
|
||
|
|
second_call = mock_ffx.call_args_list[1]
|
||
|
|
self.assertEqual(['repository', 'server', 'start'], second_call[0][0])
|
||
|
|
third_call = mock_ffx.call_args_list[2]
|
||
|
|
self.assertEqual(
|
||
|
|
['repository', 'add-from-pm', _REPO_DIR, '-r', _REPO_NAME],
|
||
|
|
third_call[0][0])
|
||
|
|
fourth_call = mock_ffx.call_args_list[3]
|
||
|
|
self.assertEqual([
|
||
|
|
'target', 'repository', 'register', '-r', _REPO_NAME, '--alias',
|
||
|
|
REPO_ALIAS
|
||
|
|
], fourth_call[0][0])
|
||
|
|
self.assertEqual(_TARGET, fourth_call[0][1])
|
||
|
|
|
||
|
|
@mock.patch('serve_repo.run_ffx_command')
|
||
|
|
def test_run_serve_cmd_stop(self, mock_ffx) -> None:
|
||
|
|
"""Test |run_serve_cmd| function for stop."""
|
||
|
|
|
||
|
|
serve_repo.run_serve_cmd('stop', self._namespace)
|
||
|
|
self.assertEqual(mock_ffx.call_count, 3)
|
||
|
|
first_call = mock_ffx.call_args_list[0]
|
||
|
|
self.assertEqual(
|
||
|
|
['target', 'repository', 'deregister', '-r', _REPO_NAME],
|
||
|
|
first_call[0][0])
|
||
|
|
self.assertEqual(_TARGET, first_call[0][1])
|
||
|
|
second_call = mock_ffx.call_args_list[1]
|
||
|
|
self.assertEqual(['repository', 'remove', _REPO_NAME],
|
||
|
|
second_call[0][0])
|
||
|
|
third_call = mock_ffx.call_args_list[2]
|
||
|
|
self.assertEqual(['repository', 'server', 'stop'], third_call[0][0])
|
||
|
|
|
||
|
|
@mock.patch('serve_repo.run_serve_cmd')
|
||
|
|
def test_serve_repository(self, mock_serve) -> None:
|
||
|
|
"""Tests |serve_repository| context manager."""
|
||
|
|
|
||
|
|
with serve_repo.serve_repository(self._namespace):
|
||
|
|
self.assertEqual(mock_serve.call_count, 1)
|
||
|
|
self.assertEqual(mock_serve.call_count, 2)
|
||
|
|
|
||
|
|
def test_main_start_no_serve_repo_flag(self) -> None:
|
||
|
|
"""Tests not specifying directory for start raises a ValueError."""
|
||
|
|
|
||
|
|
with mock.patch('sys.argv', ['serve_repo.py', 'start']):
|
||
|
|
with self.assertRaises(ValueError):
|
||
|
|
serve_repo.main()
|
||
|
|
|
||
|
|
@mock.patch('serve_repo.run_serve_cmd')
|
||
|
|
def test_main_stop(self, mock_serve) -> None:
|
||
|
|
"""Tests |main| function."""
|
||
|
|
|
||
|
|
with mock.patch('sys.argv', ['serve_repo.py', 'stop']):
|
||
|
|
serve_repo.main()
|
||
|
|
self.assertEqual(mock_serve.call_count, 1)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
unittest.main()
|