예제 #1
0
 def test_persist_garbo_state(self):
     # Test that loading and saving garbo job state works.
     save_garbo_job_state('job', {'data': 1})
     data = load_garbo_job_state('job')
     self.assertEqual({'data': 1}, data)
     save_garbo_job_state('job', {'data': 2})
     data = load_garbo_job_state('job')
     self.assertEqual({'data': 2}, data)
예제 #2
0
    def test_PopulateLatestPersonSourcePackageReleaseCache(self):
        switch_dbuser('testadmin')
        # Make some same test data - we create published source package
        # releases for 2 different creators and maintainers.
        creators = []
        for _ in range(2):
            creators.append(self.factory.makePerson())
        maintainers = []
        for _ in range(2):
            maintainers.append(self.factory.makePerson())

        spn = self.factory.makeSourcePackageName()
        distroseries = self.factory.makeDistroSeries()
        spr1 = self.factory.makeSourcePackageRelease(
            creator=creators[0], maintainer=maintainers[0],
            distroseries=distroseries, sourcepackagename=spn,
            date_uploaded=datetime(2010, 12, 1, tzinfo=UTC))
        self.factory.makeSourcePackagePublishingHistory(
            status=PackagePublishingStatus.PUBLISHED,
            sourcepackagerelease=spr1)
        spr2 = self.factory.makeSourcePackageRelease(
            creator=creators[0], maintainer=maintainers[1],
            distroseries=distroseries, sourcepackagename=spn,
            date_uploaded=datetime(2010, 12, 2, tzinfo=UTC))
        self.factory.makeSourcePackagePublishingHistory(
            status=PackagePublishingStatus.PUBLISHED,
            sourcepackagerelease=spr2)
        spr3 = self.factory.makeSourcePackageRelease(
            creator=creators[1], maintainer=maintainers[0],
            distroseries=distroseries, sourcepackagename=spn,
            date_uploaded=datetime(2010, 12, 3, tzinfo=UTC))
        self.factory.makeSourcePackagePublishingHistory(
            status=PackagePublishingStatus.PUBLISHED,
            sourcepackagerelease=spr3)
        spr4 = self.factory.makeSourcePackageRelease(
            creator=creators[1], maintainer=maintainers[1],
            distroseries=distroseries, sourcepackagename=spn,
            date_uploaded=datetime(2010, 12, 4, tzinfo=UTC))
        spph_1 = self.factory.makeSourcePackagePublishingHistory(
            status=PackagePublishingStatus.PUBLISHED,
            sourcepackagerelease=spr4)

        transaction.commit()
        self.runFrequently()

        store = IMasterStore(LatestPersonSourcePackageReleaseCache)
        # Check that the garbo state table has data.
        self.assertIsNotNone(
            store.execute(
                'SELECT * FROM GarboJobState WHERE name=?',
                params=[u'PopulateLatestPersonSourcePackageReleaseCache']
            ).get_one())

        def _assert_release_by_creator(creator, spr):
            release_records = store.find(
                LatestPersonSourcePackageReleaseCache,
                LatestPersonSourcePackageReleaseCache.creator_id == creator.id)
            [record] = list(release_records)
            self.assertEqual(spr.creator, record.creator)
            self.assertIsNone(record.maintainer_id)
            self.assertEqual(
                spr.dateuploaded, UTC.localize(record.dateuploaded))

        def _assert_release_by_maintainer(maintainer, spr):
            release_records = store.find(
                LatestPersonSourcePackageReleaseCache,
                LatestPersonSourcePackageReleaseCache.maintainer_id ==
                maintainer.id)
            [record] = list(release_records)
            self.assertEqual(spr.maintainer, record.maintainer)
            self.assertIsNone(record.creator_id)
            self.assertEqual(
                spr.dateuploaded, UTC.localize(record.dateuploaded))

        _assert_release_by_creator(creators[0], spr2)
        _assert_release_by_creator(creators[1], spr4)
        _assert_release_by_maintainer(maintainers[0], spr3)
        _assert_release_by_maintainer(maintainers[1], spr4)

        job_data = load_garbo_job_state(
            'PopulateLatestPersonSourcePackageReleaseCache')
        self.assertEqual(spph_1.id, job_data['last_spph_id'])

        # Create a newer published source package release and ensure the
        # release cache table is correctly updated.
        switch_dbuser('testadmin')
        spr5 = self.factory.makeSourcePackageRelease(
            creator=creators[1], maintainer=maintainers[1],
            distroseries=distroseries, sourcepackagename=spn,
            date_uploaded=datetime(2010, 12, 5, tzinfo=UTC))
        spph_2 = self.factory.makeSourcePackagePublishingHistory(
            status=PackagePublishingStatus.PUBLISHED,
            sourcepackagerelease=spr5)

        transaction.commit()
        self.runFrequently()

        _assert_release_by_creator(creators[0], spr2)
        _assert_release_by_creator(creators[1], spr5)
        _assert_release_by_maintainer(maintainers[0], spr3)
        _assert_release_by_maintainer(maintainers[1], spr5)

        job_data = load_garbo_job_state(
            'PopulateLatestPersonSourcePackageReleaseCache')
        self.assertEqual(spph_2.id, job_data['last_spph_id'])