def test_policy_attributes(self): # Some attributes are expected to exist but vary between policies. insecure_policy = findPolicyByName("insecure") buildd_policy = findPolicyByName("buildd") self.assertFalse(insecure_policy.unsigned_changes_ok) self.assertTrue(buildd_policy.unsigned_changes_ok) self.assertFalse(insecure_policy.unsigned_dsc_ok) self.assertTrue(buildd_policy.unsigned_dsc_ok)
def test_insecure_does_not_approve_proposed_post_release(self): # Uploads to the PROPOSED pocket are not auto-approved after # release. self.setHoaryStatus(SeriesStatus.CURRENT) insecure_policy = findPolicyByName("insecure") insecure_policy.setOptions(FakeOptions(distroseries="hoary-proposed")) self.assertFalse(insecure_policy.autoApprove(make_fake_upload()))
def test_insecure_approves_proposed(self): # Uploads to the PROPOSED pocket of non-FROZEN distroseries are # approved by the insecure policy. insecure_policy = findPolicyByName("insecure") insecure_policy.setOptions(FakeOptions(distroseries="hoary-proposed")) self.assertEqual( SeriesStatus.DEVELOPMENT, insecure_policy.distroseries.status) self.assertTrue(insecure_policy.autoApprove(make_fake_upload()))
def test_insecure_approves_proposed(self): # Uploads to the PROPOSED pocket of non-FROZEN distroseries are # approved by the insecure policy. insecure_policy = findPolicyByName("insecure") insecure_policy.setOptions(FakeOptions(distroseries="hoary-proposed")) self.assertEqual(SeriesStatus.DEVELOPMENT, insecure_policy.distroseries.status) self.assertTrue(insecure_policy.autoApprove(make_fake_upload()))
def test_buildd_approves_uefi_ppa(self): # Uploads to PPAs containing UEFI custom files are auto-approved. buildd_policy = findPolicyByName("buildd") uploadfile = CustomUploadFile("uefi.tar.gz", None, 0, "main/raw-uefi", "extra", buildd_policy, None) upload = make_fake_upload(binaryful=True, is_ppa=True) upload.changes = FakeChangesFile(custom_files=[uploadfile]) self.assertTrue(buildd_policy.autoApprove(upload))
def test_buildd_approves_uefi_ppa(self): # Uploads to PPAs containing UEFI custom files are auto-approved. buildd_policy = findPolicyByName("buildd") uploadfile = CustomUploadFile( "uefi.tar.gz", None, 0, "main/raw-uefi", "extra", buildd_policy, None) upload = make_fake_upload(binaryful=True, is_ppa=True) upload.changes = FakeChangesFile(custom_files=[uploadfile]) self.assertTrue(buildd_policy.autoApprove(upload))
def test_insecure_does_not_approve_frozen(self): # When the distroseries is FROZEN, uploads to the primary archive # wait in the UNAPPROVED queue, but PPA uploads are still approved. self.setHoaryStatus(SeriesStatus.FROZEN) insecure_policy = findPolicyByName("insecure") insecure_policy.setOptions(FakeOptions(distroseries="hoary-proposed")) self.assertFalse(insecure_policy.autoApprove(make_fake_upload())) self.assertTrue( insecure_policy.autoApprove(make_fake_upload(is_ppa=True)))
def test_insecure_does_not_approve_frozen(self): # When the distroseries is FROZEN, uploads to the primary archive # wait in the UNAPPROVED queue, but PPA uploads are still approved. self.setHoaryStatus(SeriesStatus.FROZEN) insecure_policy = findPolicyByName("insecure") insecure_policy.setOptions(FakeOptions(distroseries="hoary-proposed")) self.assertFalse(insecure_policy.autoApprove(make_fake_upload())) self.assertTrue(insecure_policy.autoApprove( make_fake_upload(is_ppa=True)))
def test_buildd_does_not_approve_uefi(self): # Uploads to the primary archive containing UEFI custom files are # not approved. buildd_policy = findPolicyByName("buildd") uploadfile = CustomUploadFile("uefi.tar.gz", None, 0, "main/raw-uefi", "extra", buildd_policy, None) upload = make_fake_upload(binaryful=True) upload.changes = FakeChangesFile(custom_files=[uploadfile]) self.assertFalse(buildd_policy.autoApprove(upload))
def getPolicy(distro, build): self.options.distro = distro.name policy = findPolicyByName(self.options.context) policy.setOptions(self.options) if self.options.builds: assert build, "--builds specified but no build" policy.distroseries = build.distro_series policy.pocket = build.pocket policy.archive = build.archive return policy
def test_buildd_does_not_approve_uefi(self): # Uploads to the primary archive containing UEFI custom files are # not approved. buildd_policy = findPolicyByName("buildd") uploadfile = CustomUploadFile( "uefi.tar.gz", None, 0, "main/raw-uefi", "extra", buildd_policy, None) upload = make_fake_upload(binaryful=True) upload.changes = FakeChangesFile(custom_files=[uploadfile]) self.assertFalse(buildd_policy.autoApprove(upload))
def test_insecure_does_not_approve_updates(self): # Uploads to the UPDATES pocket are not auto-approved by the # insecure policy. Despite not being allowed yet (see # UploadPolicy.checkUpload), PPA uploads to post-release pockets # would still be auto-approved. self.setHoaryStatus(SeriesStatus.CURRENT) insecure_policy = findPolicyByName("insecure") insecure_policy.setOptions(FakeOptions(distroseries="hoary-updates")) self.assertFalse(insecure_policy.autoApprove(make_fake_upload())) self.assertTrue( insecure_policy.autoApprove(make_fake_upload(is_ppa=True)))
def test_insecure_does_not_approve_updates(self): # Uploads to the UPDATES pocket are not auto-approved by the # insecure policy. Despite not being allowed yet (see # UploadPolicy.checkUpload), PPA uploads to post-release pockets # would still be auto-approved. self.setHoaryStatus(SeriesStatus.CURRENT) insecure_policy = findPolicyByName("insecure") insecure_policy.setOptions(FakeOptions(distroseries="hoary-updates")) self.assertFalse(insecure_policy.autoApprove(make_fake_upload())) self.assertTrue(insecure_policy.autoApprove( make_fake_upload(is_ppa=True)))
def test_redirect_release_uploads_ppa(self): # The Distribution.redirect_release_uploads flag does not affect PPA # uploads. ubuntu = getUtility(IDistributionSet)["ubuntu"] with celebrity_logged_in("admin"): ubuntu.redirect_release_uploads = True flush_database_updates() insecure_policy = findPolicyByName("insecure") insecure_policy.archive = self.factory.makeArchive() insecure_policy.setOptions(FakeOptions(distroseries="hoary")) self.assertEqual("hoary", insecure_policy.distroseries.name) self.assertEqual(PackagePublishingPocket.RELEASE, insecure_policy.pocket)
def test_redirect_release_uploads_ppa(self): # The Distribution.redirect_release_uploads flag does not affect PPA # uploads. ubuntu = getUtility(IDistributionSet)["ubuntu"] with celebrity_logged_in("admin"): ubuntu.redirect_release_uploads = True flush_database_updates() insecure_policy = findPolicyByName("insecure") insecure_policy.archive = self.factory.makeArchive() insecure_policy.setOptions(FakeOptions(distroseries="hoary")) self.assertEqual("hoary", insecure_policy.distroseries.name) self.assertEqual( PackagePublishingPocket.RELEASE, insecure_policy.pocket)
def test_redirect_release_uploads_primary(self): # With the insecure policy, the # Distribution.redirect_release_uploads flag causes uploads to the # RELEASE pocket to be automatically redirected to PROPOSED. ubuntu = getUtility(IDistributionSet)["ubuntu"] with celebrity_logged_in("admin"): ubuntu.redirect_release_uploads = True flush_database_updates() insecure_policy = findPolicyByName("insecure") insecure_policy.setOptions(FakeOptions(distroseries="hoary")) self.assertEqual("hoary", insecure_policy.distroseries.name) self.assertEqual( PackagePublishingPocket.PROPOSED, insecure_policy.pocket)
def test_redirect_release_uploads_primary(self): # With the insecure policy, the # Distribution.redirect_release_uploads flag causes uploads to the # RELEASE pocket to be automatically redirected to PROPOSED. ubuntu = getUtility(IDistributionSet)["ubuntu"] with celebrity_logged_in("admin"): ubuntu.redirect_release_uploads = True flush_database_updates() insecure_policy = findPolicyByName("insecure") insecure_policy.setOptions(FakeOptions(distroseries="hoary")) self.assertEqual("hoary", insecure_policy.distroseries.name) self.assertEqual(PackagePublishingPocket.PROPOSED, insecure_policy.pocket)
def uploadSourceVersion(self, version, policy='insecure', archive=None, distribution_name='ubuntu', suite=None, logger=None, notify=False, auto_accept=True): """Upload and publish a source package from the sandbox directory. See `_doUpload`. If 'auto_accept' is true, accept the upload if necessary and return the corresponding `ISourcePackagePublishingHistory` record. Otherwise return the corresponding `NascentUpload` object. """ policy = findPolicyByName(policy) if logger is None: logger = BufferLogger() upload = self._doUpload('source', version, policy, archive, distribution_name, suite, logger, notify) if not auto_accept: return upload if not upload.is_rejected: upload.do_accept(notify=notify) assert not upload.is_rejected, ("Upload was rejected: %s" % upload.rejection_message) queue_record = upload.queue_root needs_acceptance_statuses = ( PackageUploadStatus.NEW, PackageUploadStatus.UNAPPROVED, ) changesfile_path = self._getChangefilePathForVersion(version, 'source') if queue_record.status in needs_acceptance_statuses: queue_record.acceptFromUploader(changesfile_path, logger) return queue_record.archive.getPublishedSources( name=self.name, version=version, exact_match=True).first()
def uploadSourceVersion(self, version, policy='insecure', archive=None, distribution_name='ubuntu', suite=None, logger=None, notify=False, auto_accept=True): """Upload and publish a source package from the sandbox directory. See `_doUpload`. If 'auto_accept' is true, accept the upload if necessary and return the corresponding `ISourcePackagePublishingHistory` record. Otherwise return the corresponding `NascentUpload` object. """ policy = findPolicyByName(policy) if logger is None: logger = BufferLogger() upload = self._doUpload( 'source', version, policy, archive, distribution_name, suite, logger, notify) if not auto_accept: return upload if not upload.is_rejected: upload.do_accept(notify=notify) assert not upload.is_rejected, ( "Upload was rejected: %s" % upload.rejection_message) queue_record = upload.queue_root needs_acceptance_statuses = ( PackageUploadStatus.NEW, PackageUploadStatus.UNAPPROVED, ) changesfile_path = self._getChangefilePathForVersion( version, 'source') if queue_record.status in needs_acceptance_statuses: queue_record.acceptFromUploader(changesfile_path, logger) return queue_record.archive.getPublishedSources( name=self.name, version=version, exact_match=True).first()
def test_findPolicyByName_returns_instance(self): # There is a helper function that returns an instance of the policy # with the given name. It is preferred over using getUtility() # directly. insecure_policy = findPolicyByName("insecure") self.assertIsInstance(insecure_policy, InsecureUploadPolicy)
def test_setOptions_distroseries_name(self): # If a distroseries name is set, the policy picks it up from option. buildd_policy = findPolicyByName("buildd") buildd_policy.setOptions(FakeOptions(distroseries="hoary")) self.assertEqual("hoary", buildd_policy.distroseries.name)
def test_setOptions_distro_name(self): # Policies pick up the distribution name from options. for policy_name in "insecure", "buildd": policy = findPolicyByName(policy_name) policy.setOptions(FakeOptions()) self.assertEqual("ubuntu", policy.distro.name)
def test_policy_names(self): self.assertEqual("insecure", findPolicyByName("insecure").name) self.assertEqual("buildd", findPolicyByName("buildd").name)
def getPolicy(name='anything', distro='ubuntu', distroseries=None): """Build and return an Upload Policy for the given context.""" policy = findPolicyByName(name) options = MockUploadOptions(distro, distroseries) policy.setOptions(options) return policy