def test_should_perform_chunked_uploads(self): old_config = get_rpm_upload_command() target_file = os.path.abspath( os.path.join(get_temporary_directory(), 'upload.txt')) if os.path.exists(target_file): os.remove(target_file) cmd_file = os.path.abspath( os.path.join(get_temporary_directory(), 'upload.sh')) with open(cmd_file, 'w') as f: f.write( '#!/bin/bash\ndest=$1 ; shift ; echo "${#@} $@" >> "$dest"') os.chmod(cmd_file, 0755) cmd = '%s %s' % (cmd_file, target_file) configuration.set_property(get_rpm_upload_command, cmd) try: ConfigRpmMaker(None, None)._upload_rpms(['a' for x in range(25)]) finally: configuration.set_property(get_rpm_upload_command, old_config) self.assertTrue(os.path.exists(target_file)) with open(target_file) as f: self.assertEqual( f.read(), '10 a a a a a a a a a a\n10 a a a a a a a a a a\n5 a a a a a\n' )
def test_should_identify_affected_hosts(self): config_rpm_maker = ConfigRpmMaker(None, None) self.assertEqual(set(['berweb01', 'devweb01', 'tuvweb02']), config_rpm_maker._get_affected_hosts(['typ/web', 'foo/bar'], ['berweb01', 'devweb01', 'tuvweb02'])) self.assertEqual(set(['berweb01', 'devweb01', 'tuvweb02']), config_rpm_maker._get_affected_hosts(['foo/bar', 'all'], ['berweb01', 'devweb01', 'tuvweb02'])) self.assertEqual(set(['berweb01', 'tuvweb02']), config_rpm_maker._get_affected_hosts(['loc/pro', 'loc/tuv'], ['berweb01', 'devweb01', 'tuvweb02'])) self.assertEqual(set(['devweb01']), config_rpm_maker._get_affected_hosts(['foo/bar', 'loctyp/devweb'], ['berweb01', 'devweb01', 'tuvweb02'])) self.assertEqual(set(['devweb01']), config_rpm_maker._get_affected_hosts(['foo/bar', 'host/devweb01'], ['berweb01', 'devweb01', 'tuvweb02']))
def test_should_raise_CouldNotUploadRpmsException(self): rpm_upload_command_before_test = get_rpm_upload_command() configuration.set_property(get_rpm_upload_command, "foobar") self.assertRaises(CouldNotUploadRpmsException, ConfigRpmMaker(None, None)._upload_rpms, ['']) configuration.set_property(get_rpm_upload_command, rpm_upload_command_before_test)
def building_configuration_rpms_and_clean_host_directories( repository, revision): """ This function will start the process of building configuration rpms for the given configuration repository and the revision. """ path_to_config = get_svn_path_to_config() svn_service = SvnService(base_url=repository, path_to_config=path_to_config) svn_service.log_change_set_meta_information(revision) ConfigRpmMaker(revision=revision, svn_service=svn_service).build() clean_up_deleted_hosts_data(svn_service, revision)
def test_should_find_matching_hosts(self): config_rpm_maker = ConfigRpmMaker(None, None) self.assertEqual(['berweb01', 'devweb01'], config_rpm_maker._find_matching_hosts( All(), 'all/foo/bar', ['berweb01', 'devweb01'])) self.assertEqual([], config_rpm_maker._find_matching_hosts( All(), 'foo/bar', ['berweb01', 'devweb01'])) self.assertEqual(['berweb01', 'devweb01'], config_rpm_maker._find_matching_hosts( Typ(), 'typ/web', ['berweb01', 'devweb01']))
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 _given_config_rpm_maker(self): svn_service = SvnService(base_url=self.repo_url, path_to_config=get_svn_path_to_config()) return ConfigRpmMaker('2', svn_service)
def test_should_raise_CouldNotBuildSomeRpmsException(self): self.assertRaises(CouldNotBuildSomeRpmsException, ConfigRpmMaker(None, None)._build_hosts, ['devabc123'])
def test_should_create_files_for_hosts(self): configuration.set_property(is_no_clean_up_enabled, True) svn_service = SvnService(base_url=self.repo_url, path_to_config=get_svn_path_to_config()) ConfigRpmMaker('2', svn_service).build() self.assert_config_viewer_file( 'berweb01', 'berweb01.overlaying', """host/berweb01:/VARIABLES loctyp/berweb:/VARIABLES/OVERRIDE loc/pro:/VARIABLES/RPM_PROVIDES host/berweb01:/VARIABLES/RPM_REQUIRES loctyp/berweb:/VARIABLES/VAR_IN_VAR typ/web:/data typ/web:/data/file-with-special-character typ/web:/data/index.html typ/web:/data/other.html loctyp/berweb:/files all:/files/binary.zip all:/files/file_from_all loc/ber:/files/file_from_ber loc/pro:/files/file_from_pro loctyp/berweb:/files/override host/berweb01:/symlinks host/berweb01:/symlinks/link1.%symlink loctyp/berweb:/vars all:/vars/override loctyp/berweb:/vars/var_in_var """) self.assert_config_viewer_file( 'berweb01', 'berweb01.variables', """<!DOCTYPE html><html><head><title>berweb01.variables</title></head><body><pre> ALIASES : ALL : all FQDN : .+ HOST : berweb01 HOSTNR : 01 INSTALL_PROTECTION_DEPENDENCY : hostname-<strong title="HOST">berweb01</strong> IP : .+ LOC : ber LOCTYP : berweb OVERRIDE : berweb REVISION : 2 RPM_NAME : berweb01 RPM_PROVIDES : pro-prov2, all-prov2, all-prov, pro-prov, typ-web-provides, all-prov3 RPM_REQUIRES : ber-req2, pro-req, all-req, ber-req, ty-web-requirement, all-req2, host-spec-requirement RPM_REQUIRES_NON_REPOS : ber-req2, pro-req, all-req, ber-req, ty-web-requirement, all-req2, host-spec-requirement RPM_REQUIRES_REPOS : SHORT_HOSTNR : 1 TYP : web VAR_IN_VAR : <strong title="LOC">ber</strong><strong title="TYP">web</strong><strong title="OVERRIDE">berweb</strong> </pre></body></html>""") self.assert_host_files_are_there('berweb01') self.assert_config_viewer_file('berweb01', join('files', 'file_from_ber'), "") self.assert_config_viewer_file('berweb01', join('files', 'file_from_pro'), "") self.assert_config_viewer_file( 'berweb01', join('files', 'override'), "<!DOCTYPE html><html><head><title>override</title></head><body><pre>berweb</pre></body></html>" ) self.assert_config_viewer_file( 'berweb01', join('VARIABLES', 'LOC'), "<!DOCTYPE html><html><head><title>LOC</title></head><body><pre>ber</pre></body></html>" ) self.assert_config_viewer_file( 'berweb01', join('VARIABLES', 'LOCTYP'), "<!DOCTYPE html><html><head><title>LOCTYP</title></head><body><pre>berweb</pre></body></html>" ) self.assert_config_viewer_file( 'berweb01', join('VARIABLES', 'OVERRIDE'), "<!DOCTYPE html><html><head><title>OVERRIDE</title></head><body><pre>berweb</pre></body></html>" ) self.assert_config_viewer_file( 'berweb01', join('VARIABLES', 'RPM_PROVIDES'), "<!DOCTYPE html><html><head><title>RPM_PROVIDES</title></head><body><pre>pro-prov2, all-prov2, all-prov, pro-prov, typ-web-provides, all-prov3</pre></body></html>" ) self.assert_config_viewer_file( 'berweb01', join('VARIABLES', 'RPM_REQUIRES'), "<!DOCTYPE html><html><head><title>RPM_REQUIRES</title></head><body><pre>ber-req2, pro-req, all-req, ber-req, ty-web-requirement, all-req2, host-spec-requirement</pre></body></html>" ) self.assert_config_viewer_file( 'berweb01', join('VARIABLES', 'RPM_REQUIRES_NON_REPOS'), "<!DOCTYPE html><html><head><title>RPM_REQUIRES_NON_REPOS</title></head><body><pre>ber-req2, pro-req, all-req, ber-req, ty-web-requirement, all-req2, host-spec-requirement</pre></body></html>" ) self.assert_config_viewer_file('berweb01', join('VARIABLES', 'RPM_REQUIRES_REPOS'), "") self.assert_config_viewer_file( 'berweb01', join('VARIABLES', 'VAR_IN_VAR'), '''<!DOCTYPE html><html><head><title>VAR_IN_VAR</title></head><body><pre><strong title="LOC">ber</strong><strong title="TYP">web</strong><strong title="OVERRIDE">berweb</strong></pre></body></html>''' ) self.assert_config_viewer_file( 'berweb01', join('vars', 'override'), '''<!DOCTYPE html><html><head><title>override</title></head><body><pre><strong title="OVERRIDE">berweb</strong></pre></body></html>''' ) self.assert_config_viewer_file( 'berweb01', join('vars', 'var_in_var'), '''<!DOCTYPE html><html><head><title>var_in_var</title></head><body><pre><strong title="VAR_IN_VAR">berwebberweb</strong></pre></body></html>''' ) self.assert_host_files_are_there('devweb01') self.assert_config_viewer_file( 'devweb01', join('files', 'override'), "<!DOCTYPE html><html><head><title>override</title></head><body><pre>all</pre></body></html>" ) self.assert_config_viewer_file( 'devweb01', join('VARIABLES', 'LOC'), "<!DOCTYPE html><html><head><title>LOC</title></head><body><pre>dev</pre></body></html>" ) self.assert_config_viewer_file( 'devweb01', join('VARIABLES', 'LOCTYP'), "<!DOCTYPE html><html><head><title>LOCTYP</title></head><body><pre>devweb</pre></body></html>" ) self.assert_config_viewer_file( 'devweb01', join('VARIABLES', 'OVERRIDE'), "<!DOCTYPE html><html><head><title>OVERRIDE</title></head><body><pre>all</pre></body></html>" ) self.assert_config_viewer_file( 'devweb01', join('VARIABLES', 'RPM_PROVIDES'), "<!DOCTYPE html><html><head><title>RPM_PROVIDES</title></head><body><pre>typ-web-provides, all-prov, all-prov2, all-prov3</pre></body></html>" ) self.assert_config_viewer_file( 'devweb01', join('VARIABLES', 'RPM_REQUIRES'), "<!DOCTYPE html><html><head><title>RPM_REQUIRES</title></head><body><pre>all-req2, all-req, ty-web-requirement</pre></body></html>" ) self.assert_config_viewer_file( 'devweb01', join('VARIABLES', 'RPM_REQUIRES_NON_REPOS'), "<!DOCTYPE html><html><head><title>RPM_REQUIRES_NON_REPOS</title></head><body><pre>all-req2, all-req, ty-web-requirement</pre></body></html>" ) self.assert_config_viewer_file('devweb01', join('VARIABLES', 'RPM_REQUIRES_REPOS'), "") self.assert_config_viewer_file( 'devweb01', join('vars', 'override'), '''<!DOCTYPE html><html><head><title>override</title></head><body><pre><strong title="OVERRIDE">all</strong></pre></body></html>''' ) self.assert_config_viewer_file( 'devweb01', 'devweb01.overlaying', """host/devweb01:/VARIABLES host/devweb01:/VARIABLES/DUMMY_VAR1 all:/VARIABLES/OVERRIDE typ/web:/VARIABLES/RPM_PROVIDES typ/web:/VARIABLES/RPM_REQUIRES typ/web:/data typ/web:/data/file-with-special-character typ/web:/data/index.html typ/web:/data/other.html all:/files all:/files/binary.zip all:/files/file_from_all all:/files/override host/devweb01:/host_specific_file all:/vars all:/vars/override """) self.assert_config_viewer_file( 'devweb01', 'devweb01.variables', """<!DOCTYPE html><html><head><title>devweb01.variables</title></head><body><pre> ALIASES : ALL : all DUMMY_VAR1 : FQDN : .+ HOST : devweb01 HOSTNR : 01 INSTALL_PROTECTION_DEPENDENCY : hostname-<strong title="HOST">devweb01</strong> IP : .+ LOC : dev LOCTYP : devweb OVERRIDE : all REVISION : 2 RPM_NAME : devweb01 RPM_PROVIDES : typ-web-provides, all-prov, all-prov2, all-prov3 RPM_REQUIRES : all-req2, all-req, ty-web-requirement RPM_REQUIRES_NON_REPOS : all-req2, all-req, ty-web-requirement RPM_REQUIRES_REPOS : SHORT_HOSTNR : 1 TYP : web </pre></body></html>""") self.assert_host_files_are_there('tuvweb01') self.assert_config_viewer_file_exactly( 'tuvweb01', 'tuvweb01.overlaying', """host/tuvweb01:/VARIABLES host/tuvweb01:/VARIABLES/DUMMY_VAR2 all:/VARIABLES/OVERRIDE typ/web:/VARIABLES/RPM_PROVIDES typ/web:/VARIABLES/RPM_REQUIRES typ/web:/data typ/web:/data/file-with-special-character typ/web:/data/index.html typ/web:/data/other.html all:/files all:/files/binary.zip all:/files/file_from_all all:/files/override all:/vars all:/vars/override """) self.assert_config_viewer_file( 'tuvweb01', 'tuvweb01.variables', """<!DOCTYPE html><html><head><title>tuvweb01.variables</title></head><body><pre> ALIASES : ALL : all DUMMY_VAR2 : FQDN : .+ HOST : tuvweb01 HOSTNR : 01 INSTALL_PROTECTION_DEPENDENCY : hostname-<strong title="HOST">tuvweb01</strong> IP : .+ LOC : tuv LOCTYP : tuvweb OVERRIDE : all REVISION : 2 RPM_NAME : tuvweb01 RPM_PROVIDES : typ-web-provides, all-prov, all-prov2, all-prov3 RPM_REQUIRES : all-req2, all-req, ty-web-requirement RPM_REQUIRES_NON_REPOS : all-req2, all-req, ty-web-requirement RPM_REQUIRES_REPOS : SHORT_HOSTNR : 1 TYP : web </pre></body></html>""") self.assert_config_viewer_file( 'tuvweb01', join('files', 'override'), "<!DOCTYPE html><html><head><title>override</title></head><body><pre>all</pre></body></html>" ) self.assert_config_viewer_file( 'tuvweb01', join('VARIABLES', 'LOC'), "<!DOCTYPE html><html><head><title>LOC</title></head><body><pre>tuv</pre></body></html>" ) self.assert_config_viewer_file( 'tuvweb01', join('VARIABLES', 'LOCTYP'), "<!DOCTYPE html><html><head><title>LOCTYP</title></head><body><pre>tuvweb</pre></body></html>" ) self.assert_config_viewer_file( 'tuvweb01', join('VARIABLES', 'OVERRIDE'), "<!DOCTYPE html><html><head><title>OVERRIDE</title></head><body><pre>all</pre></body></html>" ) self.assert_config_viewer_file( 'tuvweb01', join('VARIABLES', 'RPM_PROVIDES'), "<!DOCTYPE html><html><head><title>RPM_PROVIDES</title></head><body><pre>typ-web-provides, all-prov, all-prov2, all-prov3</pre></body></html>" ) self.assert_config_viewer_file( 'tuvweb01', join('VARIABLES', 'RPM_REQUIRES'), "<!DOCTYPE html><html><head><title>RPM_REQUIRES</title></head><body><pre>all-req2, all-req, ty-web-requirement</pre></body></html>" ) self.assert_config_viewer_file( 'tuvweb01', join('VARIABLES', 'RPM_REQUIRES_NON_REPOS'), "<!DOCTYPE html><html><head><title>RPM_REQUIRES_NON_REPOS</title></head><body><pre>all-req2, all-req, ty-web-requirement</pre></body></html>" ) self.assert_config_viewer_file('tuvweb01', join('VARIABLES', 'RPM_REQUIRES_REPOS'), "") self.assert_config_viewer_file( 'tuvweb01', join('vars', 'override'), '''<!DOCTYPE html><html><head><title>override</title></head><body><pre><strong title="OVERRIDE">all</strong></pre></body></html>''' )
def setUp(self): self.mock_svn_service = Mock() self.config_rpm_maker = ConfigRpmMaker('123', self.mock_svn_service)