示例#1
0
 def __init__(
     self,
     repo: IDataRepo,
     env: iremote_environment.IRemoteEnvironment,
     file_manager: FileManager,
     display: IDisplay,
     state_updater: StateUpdater,
 ):
     self.repo = repo
     self.env = env
     self.file_manager = file_manager
     self.display = display
     self.state_updater = state_updater
     DataReporter(repo)
     logs_downloader = LogDownloader(env=self.env,
                                     file_manager=file_manager,
                                     display=self.display)
     final_zip_downloader = FinalZipDownloader(env=self.env,
                                               display=self.display)
     remote_server_cleaner = RemoteServerCleaner(env, display)
     zip_extractor = FinalZipExtractor(file_manager, display)
     self.study_retriever = StudyRetriever(
         state_updater,
         logs_downloader,
         final_zip_downloader,
         remote_server_cleaner,
         zip_extractor,
         DataReporter(repo),
     )
示例#2
0
 def setup_method(self):
     env = mock.Mock(spec_set=IRemoteEnvironment)
     display = mock.Mock(spec_set=IDisplay)
     file_manager = mock.Mock(spec_set=FileManager)
     repo = mock.Mock(spec_set=IDataRepo)
     self.reporter = DataReporter(repo)
     self.state_updater = StateUpdater(env, display)
     self.logs_downloader = LogDownloader(env, file_manager, display)
     self.final_zip_downloader = FinalZipDownloader(env, display)
     self.remote_server_cleaner = RemoteServerCleaner(env, display)
     self.zip_extractor = FinalZipExtractor(file_manager, display)
     self.study_retriever = StudyRetriever(
         self.state_updater,
         self.logs_downloader,
         self.final_zip_downloader,
         self.remote_server_cleaner,
         self.zip_extractor,
         self.reporter,
     )
示例#3
0
 def setup_method(self):
     self.remote_env_mock = mock.Mock(spec=iremote_environment.IRemoteEnvironment)
     self.display_mock = mock.Mock(spec_set=IDisplay)
     self.remote_server_cleaner = RemoteServerCleaner(
         self.remote_env_mock, self.display_mock
     )
示例#4
0
class TestServerCleaner:
    def setup_method(self):
        self.remote_env_mock = mock.Mock(spec=iremote_environment.IRemoteEnvironment)
        self.display_mock = mock.Mock(spec_set=IDisplay)
        self.remote_server_cleaner = RemoteServerCleaner(
            self.remote_env_mock, self.display_mock
        )

    @pytest.fixture(scope="function")
    def downloaded_zip_study(self):
        study = StudyDTO(
            path=Path("path") / "hello",
            started=True,
            finished=True,
            job_id=42,
            local_final_zipfile_path=str(Path("final") / "zip" / "path.zip"),
        )
        return study

    @pytest.mark.unit_test
    def test_clean_server_show_message_if_successful(self, downloaded_zip_study):
        self.remote_env_mock.clean_remote_server = mock.Mock(return_value=True)
        self.remote_server_cleaner.clean(downloaded_zip_study)

        expected_message = (
            f'"{downloaded_zip_study.name}": Clean remote server finished'
        )
        self.display_mock.show_message.assert_called_once_with(
            expected_message, mock.ANY
        )

    @pytest.mark.unit_test
    def test_clean_server_show_error_and_raise_exception_if_fails(
        self, downloaded_zip_study
    ):
        self.remote_env_mock.clean_remote_server = mock.Mock(return_value=False)

        with pytest.raises(RemoteServerNotCleanException):
            self.remote_server_cleaner.clean(downloaded_zip_study)

        expected_error = f'"{downloaded_zip_study.name}": Clean remote server failed'
        self.display_mock.show_error.assert_called_once_with(expected_error, mock.ANY)

    @pytest.mark.unit_test
    def test_remote_environment_not_called_if_final_zip_not_downloaded(self):
        self.remote_env_mock.clean_remote_server = mock.Mock()
        study = StudyDTO(path="hello")
        study.local_final_zipfile_path = ""
        new_study = self.remote_server_cleaner.clean(study)

        self.remote_env_mock.clean_remote_server.assert_not_called()
        assert new_study == study

        study.local_final_zipfile_path = None
        new_study = self.remote_server_cleaner.clean(study)

        self.remote_env_mock.clean_remote_server.assert_not_called()
        assert new_study == study

    @pytest.mark.unit_test
    def test_remote_environment_not_called_if_remote_server_is_already_clean(self):
        self.remote_env_mock.clean_remote_server = mock.Mock()
        study = StudyDTO(path="hello")
        study.local_final_zipfile_path = "hello.zip"
        study.remote_server_is_clean = True
        new_study = self.remote_server_cleaner.clean(study)

        self.remote_env_mock.clean_remote_server.assert_not_called()
        assert new_study == study

    @pytest.mark.unit_test
    def test_remote_environment_is_called_if_final_zip_is_downloaded(
        self, downloaded_zip_study
    ):
        self.remote_env_mock.clean_remote_server = mock.Mock(return_value=True)
        expected_study = copy(downloaded_zip_study)

        new_study = self.remote_server_cleaner.clean(downloaded_zip_study)
        first_call = self.remote_env_mock.clean_remote_server.call_args_list[0]
        first_argument = first_call[0][0]
        assert first_argument == expected_study
        assert new_study.remote_server_is_clean