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)
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'])