def transactional_setup_method(self): self.test_user = TestFactory.create_user('Rest_User') self.test_project = TestFactory.create_project(self.test_user, 'Rest_Project', users=[self.test_user.id]) self.operations_resource = GetOperationsInProjectResource() self.status_resource = GetOperationStatusResource() self.results_resource = GetOperationResultsResource() self.launch_resource = LaunchOperationResource() self.storage_interface = StorageInterface()
def transactional_setup_method(self): self.test_user = TestFactory.create_user('Rest_User') self.test_project = TestFactory.create_project(self.test_user, 'Rest_Project') self.operations_resource = GetOperationsInProjectResource() self.status_resource = GetOperationStatusResource() self.results_resource = GetOperationResultsResource() self.launch_resource = LaunchOperationResource() self.files_helper = FilesHelper()
class TestOperationResource(RestResourceTest): def transactional_setup_method(self): self.test_user = TestFactory.create_user('Rest_User') self.test_project = TestFactory.create_project(self.test_user, 'Rest_Project', users=[self.test_user.id]) self.operations_resource = GetOperationsInProjectResource() self.status_resource = GetOperationStatusResource() self.results_resource = GetOperationResultsResource() self.launch_resource = LaunchOperationResource() self.storage_interface = StorageInterface() def test_server_get_operation_status_inexistent_gid(self, mocker): self._mock_user(mocker) operation_gid = "inexistent-gid" with pytest.raises(InvalidIdentifierException): self.status_resource.get(operation_gid=operation_gid) def test_server_get_operation_status(self, mocker): self._mock_user(mocker) zip_path = os.path.join(os.path.dirname(tvb_data.__file__), 'connectivity', 'connectivity_96.zip') TestFactory.import_zip_connectivity(self.test_user, self.test_project, zip_path) request_mock = mocker.patch.object(flask, 'request', spec={}) request_mock.args = {Strings.PAGE_NUMBER: '1'} operations_and_pages = self.operations_resource.get(project_gid=self.test_project.gid) result = self.status_resource.get(operation_gid=operations_and_pages['operations'][0].gid) assert type(result) is str assert result in OperationPossibleStatus def test_server_get_operation_results_inexistent_gid(self, mocker): self._mock_user(mocker) operation_gid = "inexistent-gid" with pytest.raises(InvalidIdentifierException): self.results_resource.get(operation_gid=operation_gid) def test_server_get_operation_results(self, mocker): self._mock_user(mocker) zip_path = os.path.join(os.path.dirname(tvb_data.__file__), 'connectivity', 'connectivity_96.zip') TestFactory.import_zip_connectivity(self.test_user, self.test_project, zip_path) request_mock = mocker.patch.object(flask, 'request', spec={}) request_mock.args = {Strings.PAGE_NUMBER: '1'} operations_and_pages = self.operations_resource.get(project_gid=self.test_project.gid) result = self.results_resource.get(operation_gid=operations_and_pages['operations'][0].gid) assert type(result) is list assert len(result) == 1 def test_server_get_operation_results_failed_operation(self, mocker): self._mock_user(mocker) zip_path = os.path.join(os.path.dirname(tvb_data.__file__), 'connectivity', 'connectivity_90.zip') with pytest.raises(TVBException): TestFactory.import_zip_connectivity(self.test_user, self.test_project, zip_path) request_mock = mocker.patch.object(flask, 'request', spec={}) request_mock.args = {Strings.PAGE_NUMBER: '1'} operations_and_pages = self.operations_resource.get(project_gid=self.test_project.gid) result = self.results_resource.get(operation_gid=operations_and_pages['operations'][0].gid) assert type(result) is list assert len(result) == 0 def test_server_launch_operation_no_file(self, mocker): self._mock_user(mocker) # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request', spec={}) request_mock.files = {} with pytest.raises(InvalidIdentifierException): self.launch_resource.post(project_gid='', algorithm_module='', algorithm_classname='') def test_server_launch_operation_wrong_file_extension(self, mocker): self._mock_user(mocker) dummy_file = FileStorage(BytesIO(b"test"), 'test.txt') # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request', spec={}) request_mock.files = {RequestFileKey.LAUNCH_ANALYZERS_MODEL_FILE.value: dummy_file} with pytest.raises(InvalidIdentifierException): self.launch_resource.post(project_gid='', algorithm_module='', algorithm_classname='') def test_server_launch_operation_inexistent_gid(self, mocker): self._mock_user(mocker) project_gid = "inexistent-gid" dummy_file = FileStorage(BytesIO(b"test"), 'test.h5') # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request', spec={}) request_mock.files = {RequestFileKey.LAUNCH_ANALYZERS_MODEL_FILE.value: dummy_file} with pytest.raises(InvalidIdentifierException): self.launch_resource.post(project_gid=project_gid, algorithm_module='', algorithm_classname='') def test_server_launch_operation_inexistent_algorithm(self, mocker): self._mock_user(mocker) inexistent_algorithm = "inexistent-algorithm" dummy_file = FileStorage(BytesIO(b"test"), 'test.h5') # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request', spec={}) request_mock.files = {RequestFileKey.LAUNCH_ANALYZERS_MODEL_FILE.value: dummy_file} with pytest.raises(ServiceException): self.launch_resource.post(project_gid=self.test_project.gid, algorithm_module=inexistent_algorithm, algorithm_classname='') def test_server_launch_operation(self, mocker, time_series_index_factory): self._mock_user(mocker) algorithm_module = "tvb.adapters.analyzers.fourier_adapter" algorithm_class = "FourierAdapter" input_ts_index = time_series_index_factory() fft_model = FFTAdapterModel() fft_model.time_series = UUID(input_ts_index.gid) fft_model.window_function = list(SUPPORTED_WINDOWING_FUNCTIONS)[0] input_folder = self.storage_interface.get_project_folder(self.test_project.name) view_model_h5_path = h5.store_view_model(fft_model, input_folder) # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request', spec={}) fp = open(view_model_h5_path, 'rb') request_mock.files = { RequestFileKey.LAUNCH_ANALYZERS_MODEL_FILE.value: FileStorage(fp, os.path.basename(view_model_h5_path))} # Mock launch_operation() call and current_user mocker.patch.object(OperationService, 'launch_operation') operation_gid, status = self.launch_resource.post(project_gid=self.test_project.gid, algorithm_module=algorithm_module, algorithm_classname=algorithm_class) fp.close() assert type(operation_gid) is str assert len(operation_gid) > 0
class TestOperationResource(TransactionalTestCase): def transactional_setup_method(self): self.test_user = TestFactory.create_user('Rest_User') self.test_project = TestFactory.create_project(self.test_user, 'Rest_Project') self.operations_resource = GetOperationsInProjectResource() self.status_resource = GetOperationStatusResource() self.results_resource = GetOperationResultsResource() self.launch_resource = LaunchOperationResource() self.files_helper = FilesHelper() def test_server_get_operation_status_inexistent_gid(self): operation_gid = "inexistent-gid" with pytest.raises(InvalidIdentifierException): self.status_resource.get(operation_gid) def test_server_get_operation_status(self): zip_path = os.path.join(os.path.dirname(tvb_data.__file__), 'connectivity', 'connectivity_96.zip') TestFactory.import_zip_connectivity(self.test_user, self.test_project, zip_path) operations = self.operations_resource.get(self.test_project.gid) result = self.status_resource.get(operations[0].gid) assert type(result) is str assert result in OperationPossibleStatus def test_server_get_operation_results_inexistent_gid(self): operation_gid = "inexistent-gid" with pytest.raises(InvalidIdentifierException): self.results_resource.get(operation_gid) def test_server_get_operation_results(self): zip_path = os.path.join(os.path.dirname(tvb_data.__file__), 'connectivity', 'connectivity_96.zip') TestFactory.import_zip_connectivity(self.test_user, self.test_project, zip_path) operations = self.operations_resource.get(self.test_project.gid) result = self.results_resource.get(operations[0].gid) assert type(result) is list assert len(result) == 1 def test_server_get_operation_results_failed_operation(self): zip_path = os.path.join(os.path.dirname(tvb_data.__file__), 'connectivity', 'connectivity_90.zip') with pytest.raises(TVBException): TestFactory.import_zip_connectivity(self.test_user, self.test_project, zip_path) operations = self.operations_resource.get(self.test_project.gid) result = self.results_resource.get(operations[0].gid) assert type(result) is list assert len(result) == 0 def test_server_launch_operation_no_file(self, mocker): # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request') request_mock.files = {} with pytest.raises(BadRequestException): self.launch_resource.post('', '', '') def test_server_launch_operation_wrong_file_extension(self, mocker): dummy_file = FileStorage(BytesIO(b"test"), 'test.txt') # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request') request_mock.files = {'file': dummy_file} with pytest.raises(BadRequestException): self.launch_resource.post('', '', '') def test_server_launch_operation_inexistent_gid(self, mocker): project_gid = "inexistent-gid" dummy_file = FileStorage(BytesIO(b"test"), 'test.h5') # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request') request_mock.files = {'file': dummy_file} with pytest.raises(InvalidIdentifierException): self.launch_resource.post(project_gid, '', '') def test_server_launch_operation_inexistent_algorithm(self, mocker): inexistent_algorithm = "inexistent-algorithm" dummy_file = FileStorage(BytesIO(b"test"), 'test.h5') # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request') request_mock.files = {'file': dummy_file} with pytest.raises(InvalidIdentifierException): self.launch_resource.post(self.test_project.gid, inexistent_algorithm, '') def test_server_launch_operation(self, mocker, time_series_index_factory): algorithm_module = "tvb.adapters.analyzers.fourier_adapter" algorithm_class = "FourierAdapter" input_ts_index = time_series_index_factory() fft_model = FFTAdapterModel() fft_model.time_series = UUID(input_ts_index.gid) fft_model.window_function = list(SUPPORTED_WINDOWING_FUNCTIONS)[0] input_folder = self.files_helper.get_project_folder(self.test_project) view_model_h5_path = h5.path_for(input_folder, ViewModelH5, fft_model.gid) view_model_h5 = ViewModelH5(view_model_h5_path, fft_model) view_model_h5.store(fft_model) view_model_h5.close() # Mock flask.request.files to return a dictionary request_mock = mocker.patch.object(flask, 'request') fp = open(view_model_h5_path, 'rb') request_mock.files = { 'file': FileStorage(fp, os.path.basename(view_model_h5_path)) } # Mock launch_operation() call mocker.patch.object(OperationService, 'launch_operation') operation_gid, status = self.launch_resource.post( self.test_project.gid, algorithm_module, algorithm_class) fp.close() assert type(operation_gid) is str assert len(operation_gid) > 0 def transactional_teardown_method(self): self.files_helper.remove_project_structure(self.test_project.name)