def main(): logger = logging.getLogger('argo-poem-packages') logger.setLevel(logging.INFO) # setting up logging to file logfile = logging.FileHandler('/var/log/messages') logfile.setLevel(logging.INFO) logfile.setFormatter( logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s')) # add the handler to the root logger logger.addHandler(logfile) try: subprocess.call(['yum', 'clean', 'all']) config = Config() token = config.get_token() hostname = config.get_hostname() profiles = config.get_profiles() logger.info('Sending request for profile(s): ' + ', '.join(profiles)) data = get_repo_data(build_api_url(hostname), token, profiles) if not data: logger.warning('No data for given metric profile(s): ' + ', '.join(profiles)) sys.exit(2) else: logger.info('Creating YUM repo files...') create_yum_repo_file(data) pkg = Packages(data) installed, not_installed, downgraded, not_downgraded = \ pkg.install_packages() warn_msg = [] info_msg = [] if pkg.get_packages_not_found(): warn_msg.append('Packages not found: ' + ', '.join(pkg.get_packages_not_found())) if installed: new_installed = \ pkg.get_packages_installed_with_versions_as_requested( installed ) if new_installed: info_msg.append('Packages installed: ' + ', '.join(new_installed)) installed_diff = \ pkg.get_packages_installed_with_different_version() if installed_diff: info_msg.append( 'Packages installed with different version: ' + ', '.join(installed_diff)) if not_installed: warn_msg.append('Packages not installed: ' + ', '.join(not_installed)) if downgraded: info_msg.append('Packages downgraded: ' + ', '.join(downgraded)) if not_downgraded: warn_msg.append('Packages not downgraded: ' + ', '.join(not_downgraded)) if info_msg: logger.info('; '.join(info_msg)) if warn_msg: logger.warning('; '.join(warn_msg)) sys.exit(1) else: logger.info('ok!') sys.exit(0) except requests.exceptions.ConnectionError as err: logger.error(err) sys.exit(2) except requests.exceptions.RequestException as err: logger.error(err) sys.exit(2) except ConfigParser.ParsingError as err: logger.error(err) sys.exit(2) except ConfigParser.NoSectionError as err: logger.error(err) sys.exit(2) except ConfigParser.NoOptionError as err: logger.error(err) sys.exit(2)
class PackageTests(unittest.TestCase): def setUp(self): self.pkgs = Packages(data) def test_get_package_list(self): self.assertEqual(self.pkgs.list_of_packages(), [('nordugrid-arc-nagios-plugins', ), ('nagios-plugins-fedcloud', '0.5.0'), ('nagios-plugins-igtf', '1.4.0'), ('nagios-plugins-globus', '0.1.5')]) @mock.patch('yum.YumBase.pkgSack') @mock.patch('yum.YumBase.rpmdb') def test_get_packages(self, mock_yumbase1, mock_yumbase2): mock1 = mock.Mock(version='0.5.0') mock2 = mock.Mock(version='0.4.0') mock3 = mock.Mock(version='1.5.0') mock4 = mock.Mock(version='1.4.0') mock5 = mock.Mock(version='0.1.5') mock6 = mock.Mock(version='2.0.0') mock1.name = 'nagios-plugins-fedcloud' mock2.name = 'nagios-plugins-fedcloud' mock3.name = 'nagios-plugins-igtf' mock4.name = 'nagios-plugins-igtf' mock5.name = 'nagios-plugins-globus' mock6.name = 'nordugrid-arc-nagios-plugins' mock_yumbase1.returnPackages.return_value = [mock2, mock3] mock_yumbase2.returnPackages.return_value = [ mock1, mock2, mock3, mock4, mock5, mock6 ] install, downgrade = self.pkgs.get_packages() self.assertEqual(install, [ 'nordugrid-arc-nagios-plugins', 'nagios-plugins-fedcloud-0.5.0', 'nagios-plugins-globus-0.1.5' ]) self.assertEqual(downgrade, ['nagios-plugins-igtf-1.4.0']) @mock.patch('yum.YumBase.pkgSack') @mock.patch('yum.YumBase.rpmdb') def test_get_packages_if_installed_and_wrong_version_available( self, mock_yumbase1, mock_yumbase2): mock1 = mock.Mock(version='0.5.0') mock2 = mock.Mock(version='0.4.0') mock3 = mock.Mock(version='1.5.0') mock4 = mock.Mock(version='1.4.0') mock5 = mock.Mock(version='0.1.5') mock6 = mock.Mock(version='2.0.1') mock7 = mock.Mock(version='1.9.0') mock1.name = 'nagios-plugins-fedcloud' mock2.name = 'nagios-plugins-fedcloud' mock3.name = 'nagios-plugins-igtf' mock4.name = 'nagios-plugins-igtf' mock5.name = 'nagios-plugins-globus' mock6.name = 'nordugrid-arc-nagios-plugins' mock7.name = 'nordugrid-arc-nagios-plugins' mock_yumbase1.returnPackages.return_value = [mock2, mock3, mock7] mock_yumbase2.returnPackages.return_value = [ mock1, mock2, mock3, mock4, mock5, mock6 ] install, downgrade = self.pkgs.get_packages() self.assertEqual( install, ['nagios-plugins-fedcloud-0.5.0', 'nagios-plugins-globus-0.1.5']) self.assertEqual(downgrade, ['nagios-plugins-igtf-1.4.0']) @mock.patch('yum.YumBase.pkgSack') def test_exact_packages_not_found(self, mock_yumbase): mock1 = mock.Mock(version='2.0.0') mock2 = mock.Mock(version='0.6.0') mock3 = mock.Mock(version='1.4.0') mock1.name = 'nordugrid-arc-nagios-plugins' mock2.name = 'nagios-plugins-fedcloud' mock3.name = 'nagios-plugins-igtf' mock_yumbase.returnPackages.return_value = [mock1, mock2, mock3] self.assertEqual(self.pkgs.exact_packages_not_found(), [('nagios-plugins-fedcloud', '0.5.0'), ('nagios-plugins-globus', '0.1.5')]) @mock.patch('yum.YumBase.pkgSack') def test_packages_not_found(self, mock_yumbase): mock1 = mock.Mock(version='2.0.0') mock2 = mock.Mock(version='0.6.0') mock3 = mock.Mock(version='1.4.0') mock1.name = 'nordugrid-arc-nagios-plugins' mock2.name = 'nagios-plugins-fedcloud' mock3.name = 'nagios-plugins-igtf' mock_yumbase.returnPackages.return_value = [mock1, mock2, mock3] self.assertEqual(self.pkgs.packages_not_found(), [('nagios-plugins-globus', '0.1.5')]) @mock.patch('yum.YumBase.pkgSack') def test_get_packages_not_found(self, mock_yumbase): mock1 = mock.Mock(version='0.6.0') mock2 = mock.Mock(version='1.4.0') mock1.name = 'nagios-plugins-fedcloud' mock2.name = 'nagios-plugins-igtf' mock_yumbase.returnPackages.return_value = [mock1, mock2] self.assertEqual( self.pkgs.get_packages_not_found(), ['nordugrid-arc-nagios-plugins', 'nagios-plugins-globus-0.1.5']) @mock.patch('yum.YumBase.pkgSack') def test_packages_found_with_different_version(self, mock_yumbase): mock1 = mock.Mock(version='2.0.0') mock2 = mock.Mock(version='0.5.0') mock3 = mock.Mock(version='1.5.0') mock1.name = 'nordugrid-arc-nagios-plugins' mock2.name = 'nagios-plugins-fedcloud' mock3.name = 'nagios-plugins-igtf' mock_yumbase.returnPackages.return_value = [mock1, mock2, mock3] self.assertEqual(self.pkgs.packages_found_with_different_version(), [('nagios-plugins-igtf', '1.5.0')]) @mock.patch('yum.YumBase.pkgSack') def test_get_packages_installed_with_different_version(self, mock_yumbase): mock1 = mock.Mock(version='2.0.0') mock2 = mock.Mock(version='0.5.0') mock3 = mock.Mock(version='1.5.0') mock1.name = 'nordugrid-arc-nagios-plugins' mock2.name = 'nagios-plugins-fedcloud' mock3.name = 'nagios-plugins-igtf' mock_yumbase.returnPackages.return_value = [mock1, mock2, mock3] self.assertEqual( self.pkgs.get_packages_installed_with_different_version(), ['nagios-plugins-igtf-1.4.0 -> nagios-plugins-igtf-1.5.0']) @mock.patch('yum.YumBase.pkgSack') def test_get_packages_installed_with_version_as_requested( self, mock_yumbase): mock1 = mock.Mock(version='2.0.0') mock2 = mock.Mock(version='0.5.0') mock3 = mock.Mock(version='1.5.0') mock1.name = 'nordugrid-arc-nagios-plugins' mock2.name = 'nagios-plugins-fedcloud' mock3.name = 'nagios-plugins-igtf' mock_yumbase.returnPackages.return_value = [mock1, mock2, mock3] self.assertEqual( self.pkgs.get_packages_installed_with_versions_as_requested([ 'nordugrid-arc-nagios-plugins', 'nagios-plugins-fedcloud-0.5.0', 'nagios-plugins-igtf' ]), ['nordugrid-arc-nagios-plugins', 'nagios-plugins-fedcloud-0.5.0'])