def test_atomizer_raises_exception_when_atomize_command_fails(self): mock_project = Mock(spec=ProjectType) mock_project.execute_command_in_project.return_value = ('ERROR ERROR ERROR', _FAILING_EXIT_CODE) atomizer = Atomizer([{'TEST_FILE': _FAKE_ATOMIZER_COMMAND}]) with self.assertRaises(AtomizerError): atomizer.atomize_in_project(mock_project) mock_project.execute_command_in_project.assert_called_once_with(_FAKE_ATOMIZER_COMMAND)
def test_atomizer_raises_exception_when_atomize_command_fails(self): mock_project = MagicMock(spec_set=ProjectType) mock_project.execute_command_in_project.return_value = ( 'ERROR ERROR ERROR', _FAILING_EXIT_CODE) atomizer = Atomizer([{'TEST_FILE': _FAKE_ATOMIZER_COMMAND}]) with self.assertRaises(AtomizerError): atomizer.atomize_in_project(mock_project) mock_project.execute_command_in_project.assert_called_once_with( _FAKE_ATOMIZER_COMMAND)
def test_atomizer_returns_expected_atom_list(self): mock_project = MagicMock(spec_set=ProjectType) mock_project.execute_command_in_project.return_value = (_FAKE_ATOMIZER_COMMAND_OUTPUT, _SUCCESSFUL_EXIT_CODE) atomizer = Atomizer([{'TEST_FILE': _FAKE_ATOMIZER_COMMAND}]) actual_atoms = atomizer.atomize_in_project(mock_project) expected_atoms = ['export TEST_FILE="./test_a.py";', 'export TEST_FILE="./test_b.py";', 'export TEST_FILE="./test_c.py";'] self.assertListEqual(expected_atoms, actual_atoms, 'List of actual atoms should match list of expected atoms.') mock_project.execute_command_in_project.assert_called_once_with(_FAKE_ATOMIZER_COMMAND)
def _construct_job_config(self, job_name, job_values): """ Produce a JobConfig object given a dictionary of values parsed from a yaml config file. :param job_name: The name of the job :type job_name: str :param job_values: The dict of config sections for this job as parsed from the yaml file :type job_values: dict :return: A JobConfig object wrapping the normalized data for the specified job :rtype: JobConfig """ # Each value should be transformed from a list of commands to a single command string. setup_build = self._shell_command_list_to_single_command( job_values.get(SETUP_BUILD)) teardown_build = self._shell_command_list_to_single_command( job_values.get(TEARDOWN_BUILD)) command = self._shell_command_list_to_single_command( job_values[COMMANDS]) atomizer = Atomizer(job_values[ATOMIZERS]) max_executors = job_values.get(MAX_EXECUTORS, self.DEFAULT_MAX_EXECUTORS) max_executors_per_slave = job_values.get(MAX_EXECUTORS_PER_SLAVE, self.DEFAULT_MAX_EXECUTORS) return JobConfig(job_name, setup_build, teardown_build, command, atomizer, max_executors, max_executors_per_slave)
def _create_job_config( self, max_executors=_FAKE_MAX_EXECUTORS, max_executors_per_slave=_FAKE_MAX_EXECUTORS_PER_SLAVE, ): atomizer = Atomizer([{'FAKE': 'fake atomizer command'}]) return JobConfig('', '', '', '', atomizer, max_executors, max_executors_per_slave)
def test_atomizer_returns_expected_atom_list(self): mock_project = MagicMock(spec_set=ProjectType) mock_project.execute_command_in_project.return_value = (_FAKE_ATOMIZER_COMMAND_OUTPUT, _SUCCESSFUL_EXIT_CODE) atomizer = Atomizer([{'TEST_FILE': _FAKE_ATOMIZER_COMMAND}]) actual_atoms = atomizer.atomize_in_project(mock_project) actual_atom_commands = [atom.command_string for atom in actual_atoms] expected_atom_commands = [ get_environment_variable_setter_command('TEST_FILE', 'test_a.py'), get_environment_variable_setter_command('TEST_FILE', 'test_b.py'), get_environment_variable_setter_command('TEST_FILE', 'test_c.py'), ] self.assertListEqual(expected_atom_commands, actual_atom_commands, 'List of actual atoms should match list of expected atoms.') mock_project.execute_command_in_project.assert_called_once_with(_FAKE_ATOMIZER_COMMAND)
def test_atomizer_returns_expected_atom_list(self): mock_project = MagicMock(spec_set=ProjectType) mock_project.execute_command_in_project.return_value = ( _FAKE_ATOMIZER_COMMAND_OUTPUT, _SUCCESSFUL_EXIT_CODE) atomizer = Atomizer([{'TEST_FILE': _FAKE_ATOMIZER_COMMAND}]) actual_atoms = atomizer.atomize_in_project(mock_project) expected_atoms = [ 'export TEST_FILE="./test_a.py";', 'export TEST_FILE="./test_b.py";', 'export TEST_FILE="./test_c.py";' ] self.assertListEqual( expected_atoms, actual_atoms, 'List of actual atoms should match list of expected atoms.') mock_project.execute_command_in_project.assert_called_once_with( _FAKE_ATOMIZER_COMMAND)
def test_atomizer_returns_expected_atom_list(self): mock_project = MagicMock(spec_set=ProjectType) mock_project.execute_command_in_project.return_value = ( _FAKE_ATOMIZER_COMMAND_OUTPUT, _SUCCESSFUL_EXIT_CODE) atomizer = Atomizer([{'TEST_FILE': _FAKE_ATOMIZER_COMMAND}]) actual_atoms = atomizer.atomize_in_project(mock_project) actual_atom_commands = [atom.command_string for atom in actual_atoms] expected_atom_commands = [ get_environment_variable_setter_command('TEST_FILE', 'test_a.py'), get_environment_variable_setter_command('TEST_FILE', 'test_b.py'), get_environment_variable_setter_command('TEST_FILE', 'test_c.py'), ] self.assertListEqual( expected_atom_commands, actual_atom_commands, 'List of actual atoms should match list of expected atoms.') mock_project.execute_command_in_project.assert_called_once_with( _FAKE_ATOMIZER_COMMAND)
def _unpack(cls, name, config_dict): """ Set class attributes from config dictionary. :type name: str :type config_dict: dict :rtype: JobConfig """ setup_build = cls._shell_command_list_to_single_command(config_dict.get(SETUP_BUILD)) teardown_build = cls._shell_command_list_to_single_command(config_dict.get(TEARDOWN_BUILD)) command = cls._shell_command_list_to_single_command(config_dict[COMMANDS]) atomizer = Atomizer(config_dict[ATOMIZERS]) max_executors = config_dict.get(MAX_EXECUTORS, cls.DEFAULT_MAX_EXECUTORS) max_executors_per_slave = config_dict.get(MAX_EXECUTORS_PER_SLAVE, cls.DEFAULT_MAX_EXECUTORS) return cls(name, setup_build, teardown_build, command, atomizer, max_executors, max_executors_per_slave)
def _create_job_config(self) -> JobConfig: max_executors = max_executors_per_slave = maxsize atomizer = Atomizer([{'FAKE': 'fake atomizer command'}]) return JobConfig('', '', '', '', atomizer, max_executors, max_executors_per_slave)