def testAdvisoryPackageMeantForCurrentOsCentOs65(self):
        # arrange
        os_fetcher = Mock()
        os_fetcher.get_mid_level_version = Mock(return_value='6.5')
        errata = Mock()
        pkg = Mock()
        checker = package_checker.PackageChecker(errata, pkg, os_fetcher)
        advisory_packages = [{
            'name': 'xen-libs',
            'version': '3.0.3',
            'release': '135.el6',
            'arch': 'x86_64'
        }, {
            'name': 'xen-libs',
            'version': '3.0.3',
            'release': '135.el6_4',
            'arch': 'x86_64'
        }, {
            'name': 'xen-libs',
            'version': '3.0.3',
            'release': '135.el6_5.2',
            'arch': 'x86_64'
        }]

        # act
        result = map(lambda a: checker._advisoryPackageMeantForCurrentOs(a),
                     advisory_packages)

        # assert
        assert result == [False, False, True]
    def testFindAdvisoriesOnInstalledPackagesInstalledAndNeedsUpdating(self):
        # arrange
        errata = Mock()
        advisory = errata_fetcher.ErrataItem('adv id',
                                             ErrataType.SecurityAdvisory,
                                             ErrataSeverity.Important,
                                             ['x86_64'], ['7'],
                                             [{
                                                 'name': 'xen-libs',
                                                 'version': '3.0.3',
                                                 'release': '135.el7.2',
                                                 'arch': 'x86_64'
                                             }], [])
        errata.get_errata = Mock(return_value=[advisory])
        pkg = Mock()
        xen_package = Package('xen-libs', '3.0.3', '135.el7.1', 'x86_64',
                              'updates')
        pkg.fetch_installed_packages = Mock(return_value=[
            xen_package,
            Package('openssl', '2.0', '4.el7', 'x86_64', 'updates')
        ])
        os_fetcher = Mock()
        os_fetcher.get_top_level_version = Mock(return_value='7')
        os_fetcher.get_mid_level_version = Mock(return_value='7.0')
        checker = package_checker.PackageChecker(errata, pkg, os_fetcher)

        # act
        result = checker.findAdvisoriesOnInstalledPackages()

        # assert
        assert len(result) == 1
        first = result[0]
        assert first['advisory'] == advisory
        assert first['installed_packages'] == [xen_package]
    def testFindAdvisoriesOnInstalledPackagesInstalledAndNeedsUpdatingButWrongCentOsVersion(
            self):
        # arrange
        errata = Mock()
        errata.get_errata = Mock(return_value=[
            errata_fetcher.ErrataItem('adv id', ErrataType.SecurityAdvisory,
                                      ErrataSeverity.Important, ['x86_64'],
                                      ['7'], [{
                                          'name': 'xen-libs',
                                          'version': '3.0.3',
                                          'release': '135.el7.2',
                                          'arch': 'x86_64'
                                      }], [])
        ])
        pkg = Mock()
        pkg.fetch_installed_packages = Mock(return_value=[
            Package('xen-libs', '3.0.3', '135.el7.1', 'x86_64', 'updates'),
            Package('openssl', '2.0', '4.el6', 'x86_64', 'updates')
        ])
        os_fetcher = Mock()
        os_fetcher.get_top_level_version = Mock(return_value='6')
        os_fetcher.get_mid_level_version = Mock(return_value='6.0')
        checker = package_checker.PackageChecker(errata, pkg, os_fetcher)

        # act
        result = checker.findAdvisoriesOnInstalledPackages()

        # assert
        self.assertEquals(result, [])
    def testFindAdvisoriesOnInstalledPackagesVersionComparisonWith2Digits(
            self):
        # arrange
        errata = Mock()
        errata_packages = [{
            'arch': 'x86_64',
            'name': 'glibc',
            'release': '55.el7.1',
            'version': '2.17'
        }, {
            'arch': 'x86_64',
            'name': 'glibc',
            'release': '118.el7.3',
            'version': '2.5'
        }]
        errata.get_errata = Mock(return_value=[
            errata_fetcher.ErrataItem('adv id', ErrataType.SecurityAdvisory,
                                      ErrataSeverity.Important, ['x86_64'],
                                      ['7'], errata_packages, [])
        ])
        pkg = Mock()
        pkg.fetch_installed_packages = Mock(return_value=[
            Package('glibc', '2.17', '55.el7.1', 'x86_64', 'updates'),
        ])
        os_fetcher = Mock()
        os_fetcher.get_top_level_version = Mock(return_value='7')
        os_fetcher.get_mid_level_version = Mock(return_value='7.0')
        checker = package_checker.PackageChecker(errata, pkg, os_fetcher)

        # act
        result = checker.findAdvisoriesOnInstalledPackages()

        # assert
        assert result == []
    def testSameVersionOfAnotherPackageInstalled(self):
        # arrange
        errata = Mock()
        errata.get_errata = Mock(return_value=[
            errata_fetcher.ErrataItem(
                'adv id', ErrataType.SecurityAdvisory, ErrataSeverity.
                Important, ['i686', 'x86_64'], ['7'], [{
                    'name': 'libcacard-tools',
                    'version': '1.5.3',
                    'release': '60.el7_0.5',
                    'arch': 'x86_64'
                }], [])
        ])
        pkg = Mock()
        pkg.fetch_installed_packages = Mock(return_value=[
            Package('libgcrypt', '1.5.3', '4.el7', 'x86_64', 'updates')
        ])
        os_fetcher = Mock()
        os_fetcher.get_top_level_version = Mock(return_value='7')
        os_fetcher.get_mid_level_version = Mock(return_value='7.0')
        checker = package_checker.PackageChecker(errata, pkg, os_fetcher)

        # act
        result = checker.findAdvisoriesOnInstalledPackages()

        # assert
        assert result == []
    def testFindAdvisoriesOnInstalledPackagesInstalledAndNeedsUpdatingButWrongCentOsVersionOnPackage(
            self):
        # https://github.com/wied03/centos-package-cron/issues/5
        # arrange
        errata = Mock()
        adv_packages = [{
            'name': 'bash',
            'version': '3.2',
            'release': '33.el5.1',
            'arch': 'i386'
        }, {
            'name': 'bash',
            'version': '3.2',
            'release': '33.el5.1',
            'arch': 'src'
        }, {
            'name': 'bash',
            'version': '3.2',
            'release': '33.el5.1',
            'arch': 'x86_64'
        }, {
            'name': 'bash',
            'version': '4.1.2',
            'release': '15.el6_5.1',
            'arch': 'i686'
        }, {
            'name': 'bash',
            'version': '4.1.2',
            'release': '15.el6_5.1',
            'arch': 'src'
        }, {
            'name': 'bash',
            'version': '4.1.2',
            'release': '15.el6_5.1',
            'arch': 'x86_64'
        }, {
            'name': 'bash',
            'version': '4.2.45',
            'release': '5.el7_0.2',
            'arch': 'src'
        }, {
            'name': 'bash',
            'version': '4.2.45',
            'release': '5.el7_0.2',
            'arch': 'x86_64'
        }]
        errata.get_errata = Mock(return_value=[
            errata_fetcher.ErrataItem('adv id', ErrataType.SecurityAdvisory,
                                      ErrataSeverity.Important, ['x86_64'],
                                      ['5', '6', '7'], adv_packages, [])
        ])
        pkg = Mock()
        pkg.fetch_installed_packages = Mock(return_value=[
            Package('bash', '4.1.2', '29.el6', 'x86_64', 'updates')
        ])
        os_fetcher = Mock()
        os_fetcher.get_top_level_version = Mock(return_value='6')
        os_fetcher.get_mid_level_version = Mock(return_value='6.6')
        checker = package_checker.PackageChecker(errata, pkg, os_fetcher)

        # act
        result = checker.findAdvisoriesOnInstalledPackages()

        # assert
        self.assertEquals(result, [])