def test_should_write_revision_file_for_config_viewer(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._write_revision_file_for_config_viewer.assert_called_with()
def test_should_remove_logger_handlers(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._remove_logger_handlers.assert_called_with()
def test_should_export_spec_file(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._export_spec_file.assert_called_with()
def test_should_filter_tokens_in_config_viewer(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._filter_tokens_in_config_viewer.assert_called_with()
def test_should_move_variables_out_of_rpm_dir(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._move_variables_out_of_rpm_dir.assert_called_with()
def test_should_build_rpm_using_rpmbuild(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._build_rpm_using_rpmbuild.assert_called_with()
def test_should_save_file_list(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._save_file_list.assert_called_with()
def test_should_save_network_variables(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._save_network_variables.assert_called_with()
def test_should_create_variables_directory_if_it_does_not_exist(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) mock_mkdir.assert_any_call('/path/to/variables-directory')
def test_should_clean_up_after_successful_build(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._clean_up.assert_called_with()
def test_should_write_revision_file_using_host_name(self): HostRpmBuilder._write_revision_file_for_config_viewer( self.mock_host_rpm_builder) self.mock_host_rpm_builder._write_file.assert_called_with( 'config-viewer-host-dir/hostname.rev', '1234')
def test_should_remove_host_configuration_directory(self, mock_remove, mock_rmtree, mock_config): mock_config.return_value = False HostRpmBuilder._clean_up(self.mock_host_rpm_builder) mock_rmtree.assert_any_call('host configuration directory')
def test_should_tar_sources_before_building_rpm(self, mock_environ, mock_abspath, mock_popen, mock_config): mock_popen.return_value = self.mock_process HostRpmBuilder._build_rpm_using_rpmbuild(self.mock_host_rpm_builder) self.mock_host_rpm_builder._tar_sources.assert_called_with()
def test_should_remove_host_error_file(self, mock_remove, mock_rmtree, mock_config): mock_config.return_value = False HostRpmBuilder._clean_up(self.mock_host_rpm_builder) mock_remove.assert_any_call('/path/to/error/file')
def test_should_remove_anything_if_configuration_asks_for_no_clean_up(self, mock_remove, mock_rmtree, mock_config): mock_config.return_value = True HostRpmBuilder._clean_up(self.mock_host_rpm_builder) self.assert_mock_never_called(mock_rmtree) mock_config.assert_called_with()
def call_constructor(self): HostRpmBuilder.__init__(self.mock_host_rpm_builder, thread_name='thread-name', hostname='hostname', revision='3485', work_dir='/tmp', svn_service_queue=self.mock_svn_service_queue)
def test_should_save_segment_variables(self, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._save_segment_variables.assert_called_with( do_not_write_host_segment_variable=False)
def test_should_not_build_rpm_using_rpmbuild(self, mock_exists, mock_mkdir, mock_get): mock_get.return_value = True mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) mock_get.assert_any_call() self.assertEqual(0, len(self.mock_host_rpm_builder._build_rpm_using_rpmbuild.call_args_list))
def test_should_write_rpm_provides_file(self, mock_exists, mock_mkdir, mock_overlay_order): config_rpm_maker.hostrpmbuilder.OVERLAY_ORDER = ['segment1', 'segment2', 'segment3'] mock_exists.return_value = False self.mock_host_rpm_builder._write_dependency_file = Mock() HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._write_dependency_file.assert_any_called(['segment1-provides', 'segment2-provides', 'segment3-provides'], 'rpm-provides-path', False)
def test_should_write_patch_info_into_variables_and_configviewer(self, mock_exists, mock_mkdir): mock_exists.return_value = False self.mock_host_rpm_builder._generate_patch_info.return_value = "patchinfo1\npatchinfo2\npatchinfo3\n" HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._write_file.assert_any_call('/path/to/variables-directory/VARIABLES', 'patchinfo1\npatchinfo2\npatchinfo3\n') self.mock_host_rpm_builder._write_file.assert_any_call('config_viewer_host_dir/devweb01.variables', 'patchinfo1\npatchinfo2\npatchinfo3\n')
def test_should_write_rpm_requires_non_repos_file_if_repo_packages_regex_configured(self, mock_exists, mock_mkdir, mock_overlay_order): config_rpm_maker.hostrpmbuilder.OVERLAY_ORDER = ['segment1', 'segment2', 'segment3'] mock_exists.return_value = False self.mock_host_rpm_builder._write_dependency_file = Mock() HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._write_dependency_file.assert_any_called(['segment1-requires', 'segment2-requires', 'segment3-requires'], 'variables-directory/RPM_REQUIRES_NON_REPOS', positive_filter=False, filter_regex='^yadt-.*-repos?$')
def test_should_write_rpm_name_and_protection_variable_for_host_rpm(self, _, mock_exists, mock_mkdir): mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._write_file.assert_any_call('/path/to/variables-directory/RPM_NAME', 'devweb01') self.mock_host_rpm_builder._write_file.assert_any_call('/path/to/variables-directory/INSTALL_PROTECTION_DEPENDENCY', 'hostname-@@@HOST@@@')
def test_should_save_log_entries_to_variable(self, mock_exists, mock_mkdir, mock_overlay_order): config_rpm_maker.hostrpmbuilder.OVERLAY_ORDER = ['segment1', 'segment2', 'segment3'] mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._save_log_entries_to_variable.assert_called_with(['segment1-svn-paths', 'segment2-svn-paths', 'segment3-svn-paths'])
def test_should_write_overlaying_for_config_viewer(self, mock_exists, mock_mkdir, mock_overlay_order): config_rpm_maker.hostrpmbuilder.OVERLAY_ORDER = ['segment1', 'segment2', 'segment3'] mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._write_overlaying_for_config_viewer.assert_called_with({'segment1': ['segment1-exported-paths'], 'segment3': ['segment3-exported-paths'], 'segment2': ['segment2-exported-paths']})
def test_should_not_write_stderr_to_logger_when_not_given(self, mock_environ, mock_abspath, mock_popen, mock_config): mock_logger = Mock() self.mock_host_rpm_builder.logger = mock_logger self.mock_process.communicate.return_value = ('stdout', "") mock_popen.return_value = self.mock_process HostRpmBuilder._build_rpm_using_rpmbuild(self.mock_host_rpm_builder) self.assert_mock_never_called(mock_logger.error)
def test_should_get_overlay_segments_for_each_segment_in_overlay_order(self, mock_exists, mock_mkdir, mock_overlay_order): config_rpm_maker.hostrpmbuilder.OVERLAY_ORDER = ['segment1', 'segment2', 'segment3'] mock_exists.return_value = False HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._overlay_segment.assert_any_call('segment1') self.mock_host_rpm_builder._overlay_segment.assert_any_call('segment2') self.mock_host_rpm_builder._overlay_segment.assert_any_call('segment3')
def test_should_save_segment_variables_without_host_when_building_group_rpm(self, _, token_replacer, mock_exists, mock_mkdir): def only_rpm_name_variable_file_exists(path): if path.endswith("RPM_NAME"): return True return False mock_exists.side_effect = only_rpm_name_variable_file_exists HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._save_segment_variables.assert_called_with(True)
def test_should_remove_variables_directory_after_build_finished(self): svn_service_queue = self.create_svn_service_queue() host_rpm_builder = HostRpmBuilder(thread_name="Thread-0", hostname="berweb01", revision='1', work_dir=self.temporary_directory, svn_service_queue=svn_service_queue) host_rpm_builder.build() self.assert_path_does_not_exist(join(self.temporary_directory, 'VARIABLES.berweb01'))
def test_should_write_not_write_rpm_requires_with_repo_stuff_if_no_repo_packages_regex_configured(self, mock_exists, mock_mkdir, mock_overlay_order, mock_get): config_rpm_maker.hostrpmbuilder.OVERLAY_ORDER = ['segment1', 'segment2', 'segment3'] mock_get.return_value = False mock_exists.return_value = False self.mock_host_rpm_builder._write_dependency_file = Mock() HostRpmBuilder.build(self.mock_host_rpm_builder) self.assertEqual(2, self.mock_host_rpm_builder._write_dependency_file.call_count) self.mock_host_rpm_builder._write_dependency_file.assert_any_called(['segment1-requires', 'segment2-requires', 'segment3-requires'], 'rpm-requires-path', collapse_duplicates=True) self.mock_host_rpm_builder._write_dependency_file.assert_any_called(['segment1-requires', 'segment2-requires', 'segment3-requires'], 'variables-directory/RPM_REQUIRES_REPOS', filter_regex='^yadt-.*-repos?$')
def test_should_remove_variables_directory_after_build_finished(self): svn_service_queue = self.create_svn_service_queue() host_rpm_builder = HostRpmBuilder(thread_name="Thread-0", hostname="berweb01", revision='1', work_dir=self.temporary_directory, svn_service_queue=svn_service_queue) host_rpm_builder.build() self.assert_path_does_not_exist( join(self.temporary_directory, 'VARIABLES.berweb01'))
def test_should_save_segment_variables_without_host_when_building_group_rpm(self, token_replacer, mock_exists, mock_mkdir): def only_rpm_name_variable_file_exists(path): if path.endswith("RPM_NAME"): return True return False mock_exists.side_effect = only_rpm_name_variable_file_exists self.mock_host_rpm_builder._get_content.return_value = "any-group-rpm-name" HostRpmBuilder.build(self.mock_host_rpm_builder) self.mock_host_rpm_builder._save_segment_variables.assert_called_with( do_not_write_host_segment_variable=True)
def test_should_call_rpmbuild(self, mock_environ, mock_abspath, mock_popen, mock_config): mock_popen.return_value = self.mock_process mock_environment_copy = {} mock_environ.copy.return_value = mock_environment_copy def fake_abspath(directory): return '/absolute' + directory mock_abspath.side_effect = fake_abspath HostRpmBuilder._build_rpm_using_rpmbuild(self.mock_host_rpm_builder) mock_popen.assert_called_withPopen("rpmbuild --define --clean '_topdir /absolute/path/to/rpm/build/directory' -ta /path/to/tarred_sources.tar.gz", shell=True, env=mock_environment_copy, stderr=PIPE, stdout=PIPE)
def test_should_write_revision_file(self): svn_service_queue = self.create_svn_service_queue() host_rpm_builder = HostRpmBuilder(thread_name="Thread-0", hostname="berweb01", revision='1', work_dir=self.temporary_directory, svn_service_queue=svn_service_queue) host_rpm_builder.build() host_directory = build_config_viewer_host_directory("berweb01", revision='1') revision_file_path = join(host_directory, 'berweb01.rev') self.assert_path_exists(revision_file_path) self.assert_file_content(revision_file_path, '1')
def run(self): rpms = [] while not self.host_queue.empty(): host = self.host_queue.get() self.host_queue.task_done() try: rpms = HostRpmBuilder( thread_name=self.name, hostname=host, revision=self.revision, work_dir=self.work_dir, svn_service_queue=self.svn_service_queue, error_logging_handler=self.error_logging_handler).build() for rpm in rpms: self.rpm_queue.put(rpm) except BaseConfigRpmMakerException as e: self.notify_that_host_failed(host, str(e)) except Exception: self.notify_that_host_failed(host, traceback.format_exc()) count_of_rpms = len(rpms) if count_of_rpms > 0: LOGGER.debug('%s: finished and built %s rpm(s).', self.name, count_of_rpms) else: LOGGER.debug('%s: finished without building any rpm!', self.name)
def test_should_write_revision_file(self): svn_service_queue = self.create_svn_service_queue() host_rpm_builder = HostRpmBuilder(thread_name="Thread-0", revision='1', hostname="berweb01", work_dir=self.temporary_directory, svn_service_queue=svn_service_queue) host_rpm_builder.build() host_directory = build_config_viewer_host_directory("berweb01", revision='1') revision_file_path = join(host_directory, 'berweb01.rev') self.assert_path_exists(revision_file_path) self.assert_file_content(revision_file_path, '1')