|
13 | 13 | from __future__ import absolute_import
|
14 | 14 |
|
15 | 15 | import unittest
|
16 |
| -import subprocess |
17 |
| -from unittest.mock import patch, Mock |
| 16 | +from unittest.mock import patch, call |
18 | 17 |
|
19 |
| -from sagemaker.serve.mode.in_process_mode import InProcessMode |
20 | 18 | from sagemaker.serve.builder.requirements_manager import RequirementsManager
|
21 | 19 |
|
22 |
| -class TestRequirementsManager(unittest.TestCase): |
23 |
| - |
24 |
| - def test_detect_file_exists_fail(self, mock_dependencies: str = None) -> str: |
25 |
| - mock_dependencies = "mock.ini" |
26 |
| - self.assertRaises(ValueError, RequirementsManager().detect_file_exists(mock_dependencies)) |
27 | 20 |
|
28 |
| - @patch("sagemaker.serve.mode.in_process_mode.logger") |
29 |
| - @patch("sagemaker.session.Session") |
30 |
| - def test_install_requirements_txt(self, mock_logger): |
| 21 | +class TestRequirementsManager(unittest.TestCase): |
31 | 22 |
|
32 |
| - mock_logger.info.assert_called_once_with("Running command to pip install") |
| 23 | + @patch( |
| 24 | + "sagemaker.serve.builder.requirements_manager.RequirementsManager._update_conda_env_in_path" |
| 25 | + ) |
| 26 | + @patch( |
| 27 | + "sagemaker.serve.builder.requirements_manager.RequirementsManager._install_requirements_txt" |
| 28 | + ) |
| 29 | + @patch( |
| 30 | + "sagemaker.serve.builder.requirements_manager.RequirementsManager._capture_from_local_runtime" |
| 31 | + ) |
| 32 | + def test_detect_file_exists( |
| 33 | + self, |
| 34 | + mock_capture_from_local_runtime, |
| 35 | + mock_install_requirements_txt, |
| 36 | + mock_update_conda_env_in_path, |
| 37 | + ) -> str: |
33 | 38 |
|
34 |
| - mock_logger.info.assert_called_once_with("Command ran successfully") |
| 39 | + mock_capture_from_local_runtime.side_effect = lambda: ".txt" |
| 40 | + RequirementsManager().detect_file_exists() |
| 41 | + mock_install_requirements_txt.assert_called_once() |
35 | 42 |
|
36 |
| - @patch("sagemaker.serve.mode.in_process_mode.logger") |
37 |
| - @patch("sagemaker.session.Session") |
38 |
| - def test_update_conda_env_in_path(self, mock_logger): |
| 43 | + mock_capture_from_local_runtime.side_effect = lambda: ".yml" |
| 44 | + RequirementsManager().detect_file_exists() |
| 45 | + mock_update_conda_env_in_path.assert_called_once() |
39 | 46 |
|
40 |
| - mock_logger.info.assert_called_once_with("Updating conda env") |
| 47 | + @patch( |
| 48 | + "sagemaker.serve.builder.requirements_manager.RequirementsManager._capture_from_local_runtime" |
| 49 | + ) |
| 50 | + def test_detect_file_exists_fail(self, mock__capture_from_local_runtime) -> str: |
| 51 | + mock_dependencies = "mock.ini" |
| 52 | + mock__capture_from_local_runtime.side_effect = lambda: "invalid requirement" |
| 53 | + self.assertRaises( |
| 54 | + ValueError, lambda: RequirementsManager().detect_file_exists(mock_dependencies) |
| 55 | + ) |
41 | 56 |
|
| 57 | + @patch("sagemaker.serve.builder.requirements_manager.logger") |
| 58 | + @patch("sagemaker.serve.builder.requirements_manager.subprocess") |
| 59 | + def test_install_requirements_txt(self, mock_subprocess, mock_logger): |
42 | 60 |
|
43 |
| - # mock_multi_model_server_deep_ping = Mock() |
44 |
| - # mock_multi_model_server_deep_ping.side_effect = lambda *args, **kwargs: ( |
45 |
| - # True, |
46 |
| - # ) |
| 61 | + RequirementsManager()._install_requirements_txt() |
47 | 62 |
|
48 |
| - # in_process_mode = InProcessMode( |
49 |
| - # model_server=ModelServer.MMS, |
50 |
| - # inference_spec=mock_inference_spec, |
51 |
| - # schema_builder=SchemaBuilder(mock_sample_input, mock_sample_output), |
52 |
| - # session=mock_session, |
53 |
| - # model_path="model_path", |
54 |
| - # ) |
| 63 | + calls = [call("Running command to pip install"), call("Command ran successfully")] |
| 64 | + mock_logger.info.assert_has_calls(calls) |
| 65 | + mock_subprocess.run.assert_called_once_with( |
| 66 | + "pip install -r requirements.txt", shell=True, check=True |
| 67 | + ) |
55 | 68 |
|
56 |
| - # in_process_mode._multi_model_server_deep_ping = mock_multi_model_server_deep_ping |
| 69 | + @patch("sagemaker.serve.builder.requirements_manager.logger") |
| 70 | + @patch("sagemaker.serve.builder.requirements_manager.subprocess") |
| 71 | + def test_update_conda_env_in_path(self, mock_subprocess, mock_logger): |
57 | 72 |
|
58 |
| - # in_process_mode.create_server(predictor=mock_predictor) |
| 73 | + RequirementsManager()._update_conda_env_in_path() |
59 | 74 |
|
60 |
| - mock_logger.info.assert_called_once_with("Conda env updated successfully") |
| 75 | + calls = [call("Updating conda env"), call("Conda env updated successfully")] |
| 76 | + mock_logger.info.assert_has_calls(calls) |
| 77 | + mock_subprocess.run.assert_called_once_with( |
| 78 | + "conda env update -f conda_in_process.yml", shell=True, check=True |
| 79 | + ) |
0 commit comments