def _move_configviewer_dirs_to_final_destination(self, hosts): LOGGER.info("Updating configviewer data.") for host in hosts: temp_path = build_config_viewer_host_directory(host, revision=self.revision) dest_path = build_config_viewer_host_directory(host) if exists(dest_path): path_to_revision_file = join(dest_path, "%s.rev" % host) revision_from_file = self._read_integer_from_file(path_to_revision_file) if revision_from_file > int(self.revision): LOGGER.debug( 'Will not update configviewer data for host "%s" since the current revision file contains revision %d which is higher than %s', host, revision_from_file, self.revision, ) rmtree(temp_path) continue rmtree(dest_path) LOGGER.debug('Updating configviewer data for host "%s"', host) move(temp_path, dest_path)
def test_should_move_or_remove_temporary_directories(self): config_rpm_maker = self._given_config_rpm_maker() self.write_revision_file_for_hostname('tuvweb01', revision='3') self.write_revision_file_for_hostname('berweb01', revision='4') config_rpm_maker.build() self.assert_path_does_not_exist(build_config_viewer_host_directory('devweb01', revision='2')) self.assert_path_does_not_exist(build_config_viewer_host_directory('tuvweb01', revision='2')) self.assert_path_does_not_exist(build_config_viewer_host_directory('berweb01', revision='2'))
def test_should_not_delete_host_directory_when_a_file_has_been_deleted_in_repository_host_directory(self): svn_service = SvnService(base_url=self.repo_url, path_to_config=get_svn_path_to_config()) ConfigRpmMaker('1', svn_service).build() if call('svn delete -q -m "deleting hostspecific file devweb01" %s/config/host/devweb01/host_specific_file' % self.repo_url, shell=True): raise IntegrationTestException('Could not delete test data.') clean_up_deleted_hosts_data(svn_service, '3') self.assert_path_exists(build_config_viewer_host_directory('berweb01')) self.assert_path_exists(build_config_viewer_host_directory('tuvweb01')) self.assert_path_exists(build_config_viewer_host_directory('devweb01'))
def test_should_delete_config_viewer_host_directories_when_directories_have_been_deleted_in_repository(self): svn_service = SvnService(base_url=self.repo_url, path_to_config=get_svn_path_to_config()) ConfigRpmMaker('1', svn_service).build() if call('svn delete -q -m "deleting host tuvweb01 and devweb01" {0}/config/host/devweb01 {0}/config/host/tuvweb01'.format(self.repo_url), shell=True): raise IntegrationTestException('Could not delete test data.') clean_up_deleted_hosts_data(svn_service, '3') self.assert_path_exists(build_config_viewer_host_directory('berweb01')) self.assert_path_does_not_exist(build_config_viewer_host_directory('devweb01')) self.assert_path_does_not_exist(build_config_viewer_host_directory('tuvweb01'))
def __init__(self, thread_name, hostname, revision, work_dir, svn_service_queue, error_logging_handler=None): self.thread_name = thread_name self.hostname = hostname self.revision = revision self.work_dir = work_dir self.error_logging_handler = error_logging_handler self.output_file_path = os.path.join(self.work_dir, self.hostname + '.output') self.error_file_path = os.path.join(self.work_dir, self.hostname + '.error') self.logger = self._create_logger() self.svn_service_queue = svn_service_queue self.config_rpm_prefix = get_config_rpm_prefix() self.host_config_dir = os.path.join( self.work_dir, self.config_rpm_prefix + self.hostname) self.variables_dir = os.path.join(self.host_config_dir, 'VARIABLES') self.rpm_requires_path = os.path.join(self.variables_dir, 'RPM_REQUIRES') self.rpm_provides_path = os.path.join(self.variables_dir, 'RPM_PROVIDES') self.spec_file_path = os.path.join( self.host_config_dir, self.config_rpm_prefix + self.hostname + '.spec') self.config_viewer_host_dir = build_config_viewer_host_directory( hostname, revision=self.revision) self.rpm_build_dir = os.path.join(self.work_dir, 'rpmbuild')
def test_should_return_path_and_append_a_postfix(self, mock_get): mock_get.return_value = 'path-to-config-viewer-host-directory' actual_path = build_config_viewer_host_directory('devweb01', revision='123') mock_get.assert_called_with() self.assertEqual('path-to-config-viewer-host-directory/devweb01.new-revision-123', actual_path)
def assert_revision_file_contains_revision(self, hostname, revision): config_viewer_host_data = build_config_viewer_host_directory(hostname) error_message = 'Directory "%s" does not exist.' % config_viewer_host_data self.assertTrue(exists(config_viewer_host_data), error_message) revision_file_path = join(config_viewer_host_data, '%s.rev' % hostname) self.assert_file_content(revision_file_path, revision)
def test_should_not_delete_host_directory_when_a_file_has_been_deleted_in_repository_host_directory( self): svn_service = SvnService(base_url=self.repo_url, path_to_config=get_svn_path_to_config()) ConfigRpmMaker('1', svn_service).build() if call('svn delete -q -m "deleting hostspecific file devweb01" %s/config/host/devweb01/host_specific_file' % self.repo_url, shell=True): raise IntegrationTestException('Could not delete test data.') clean_up_deleted_hosts_data(svn_service, '3') self.assert_path_exists(build_config_viewer_host_directory('berweb01')) self.assert_path_exists(build_config_viewer_host_directory('tuvweb01')) self.assert_path_exists(build_config_viewer_host_directory('devweb01'))
def test_should_return_path_to_host_directory(self, mock_get): mock_get.return_value = 'path-to-config-viewer-host-directory' actual_path = build_config_viewer_host_directory('devweb01') mock_get.assert_called_with() self.assertEqual('path-to-config-viewer-host-directory/devweb01', actual_path)
def _delete_host_directory(host_name): """ deletes the config viewer data for the given host name """ host_directory = build_config_viewer_host_directory(host_name) if exists(host_directory): LOGGER.info('Deleting config viewer data for host "%s"', host_name) rmtree(host_directory) else: verbose(LOGGER).debug('Wanted to delete host directory "%s", but it did not exist.' % host_directory)
def write_revision_file_for_hostname(self, hostname, revision): config_viewer_host_directory = build_config_viewer_host_directory(hostname) if not exists(config_viewer_host_directory): makedirs(config_viewer_host_directory) revision_file_path = join(config_viewer_host_directory, '%s.rev' % hostname) with open(revision_file_path, "w") as revision_file: revision_file.write(revision)
def test_should_delete_config_viewer_host_directories_when_directories_have_been_deleted_in_repository( self): svn_service = SvnService(base_url=self.repo_url, path_to_config=get_svn_path_to_config()) ConfigRpmMaker('1', svn_service).build() if call('svn delete -q -m "deleting host tuvweb01 and devweb01" {0}/config/host/devweb01 {0}/config/host/tuvweb01' .format(self.repo_url), shell=True): raise IntegrationTestException('Could not delete test data.') clean_up_deleted_hosts_data(svn_service, '3') self.assert_path_exists(build_config_viewer_host_directory('berweb01')) self.assert_path_does_not_exist( build_config_viewer_host_directory('devweb01')) self.assert_path_does_not_exist( build_config_viewer_host_directory('tuvweb01'))
def test_should_return_path_and_append_a_postfix(self, mock_get): mock_get.return_value = 'path-to-config-viewer-host-directory' actual_path = build_config_viewer_host_directory('devweb01', revision='123') mock_get.assert_called_with() self.assertEqual( 'path-to-config-viewer-host-directory/devweb01.new-revision-123', actual_path)
def _delete_host_directory(host_name): """ deletes the config viewer data for the given host name """ host_directory = build_config_viewer_host_directory(host_name) if exists(host_directory): LOGGER.info('Deleting config viewer data for host "%s"', host_name) rmtree(host_directory) else: verbose(LOGGER).debug( 'Wanted to delete host directory "%s", but it did not exist.' % host_directory)
def write_revision_file_for_hostname(self, hostname, revision): config_viewer_host_directory = build_config_viewer_host_directory( hostname) if not exists(config_viewer_host_directory): makedirs(config_viewer_host_directory) revision_file_path = join(config_viewer_host_directory, '%s.rev' % hostname) with open(revision_file_path, "w") as revision_file: revision_file.write(revision)
def _move_configviewer_dirs_to_final_destination(self, hosts): LOGGER.info("Updating configviewer data.") for host in hosts: temp_path = build_config_viewer_host_directory( host, revision=self.revision) dest_path = build_config_viewer_host_directory(host) if exists(dest_path): path_to_revision_file = join(dest_path, "%s.rev" % host) revision_from_file = self._read_integer_from_file( path_to_revision_file) if revision_from_file > int(self.revision): LOGGER.debug( 'Will not update configviewer data for host "%s" since the current revision file contains revision %d which is higher than %s', host, revision_from_file, self.revision) rmtree(temp_path) continue rmtree(dest_path) LOGGER.debug('Updating configviewer data for host "%s"', host) move(temp_path, dest_path)
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')