def test_bump_version_in_model(self, mock_sign_file): # We want to make sure each file has been signed. self.file2 = amo.tests.file_factory(version=self.version) self.file2.update(filename='jetpack-b.xpi') backup_file2_path = u'{0}.backup_signature'.format( self.file2.file_path) try: with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): with amo.tests.copy_file( 'apps/files/fixtures/files/jetpack.xpi', self.file2.file_path): file_hash = self.file_.generate_hash() file2_hash = self.file2.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') tasks.sign_addons([self.addon.pk]) assert mock_sign_file.call_count == 2 self.version.reload() assert self.version.version == '1.3.1-signed' assert self.version.version_int == version_int( '1.3.1-signed') assert file_hash != self.file_.generate_hash() assert file2_hash != self.file2.generate_hash() self.assert_backup() assert os.path.exists(backup_file2_path) finally: if os.path.exists(backup_file2_path): os.unlink(backup_file2_path)
def test_sign_full(self, mock_sign_file): """Use the full signing server if files are fully reviewed.""" self.file_.update(status=amo.STATUS_PUBLIC) with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): tasks.sign_addons([self.addon.pk]) mock_sign_file.assert_called_with(self.file_, settings.SIGNING_SERVER)
def test_bump_version_in_model(self, mock_sign_file): with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file1.file_path): assert self.version.version == '1.3' tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == '1.3.1'
def test_sign_prelim(self, mock_sign_file): """Use the prelim signing server if files aren't fully reviewed.""" self.file_.update(status=amo.STATUS_LITE) with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): tasks.sign_addons([self.addon.pk]) mock_sign_file.assert_called_with( self.file_, settings.PRELIMINARY_SIGNING_SERVER)
def test_resign_bump_version_in_model_if_force(self, mock_sign_file): with amo.tests.copy_file( 'apps/files/fixtures/files/new-addon-signature.xpi', self.file1.file_path): assert self.version.version == '1.3' tasks.sign_addons([self.addon.pk], force=True) assert mock_sign_file.called self.version.reload() assert self.version.version == '1.3.1'
def test_sign_full(self, mock_sign_file): """Use the full signing server if files are fully reviewed.""" self.file_.update(status=amo.STATUS_PUBLIC) with amo.tests.copy_file( 'apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): tasks.sign_addons([self.addon.pk]) mock_sign_file.assert_called_with( self.file_, settings.SIGNING_SERVER)
def test_sign_prelim(self, mock_sign_file): """Use the prelim signing server if files aren't fully reviewed.""" self.file_.update(status=amo.STATUS_LITE) with amo.tests.copy_file( 'apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): tasks.sign_addons([self.addon.pk]) mock_sign_file.assert_called_with( self.file_, settings.PRELIMINARY_SIGNING_SERVER)
def test_sign_supported_applications(self, mock_sign_file): """Make sure we sign for all supported applications.""" with amo.tests.copy_file( 'apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): for app in packaged.SIGN_FOR_APPS: self.max_appversion.update(application=app) tasks.sign_addons([self.addon.pk]) mock_sign_file.assert_called_with( self.file_, settings.SIGNING_SERVER) mock_sign_file.reset_mock()
def test_dont_sign_dont_bump_version_bad_zipfile(self, mock_sign_file): with amo.tests.copy_file(__file__, self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') tasks.sign_addons([self.addon.pk]) assert not mock_sign_file.called self.version.reload() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') assert file_hash == self.file_.generate_hash() self.assert_no_backup()
def test_dont_sign_dont_bump_sign_error(self, mock_sign_file): mock_sign_file.side_effect = IOError() with amo.tests.copy_file("apps/files/fixtures/files/jetpack.xpi", self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == "1.3" assert self.version.version_int == version_int("1.3") tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == "1.3" assert self.version.version_int == version_int("1.3") assert file_hash == self.file_.generate_hash() self.assert_no_backup()
def test_dont_bump_not_signed(self, mock_sign_file): mock_sign_file.return_value = None # Pretend we didn't sign. with amo.tests.copy_file("apps/files/fixtures/files/jetpack.xpi", self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == "1.3" assert self.version.version_int == version_int("1.3") tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == "1.3" assert self.version.version_int == version_int("1.3") assert file_hash == self.file_.generate_hash() self.assert_no_backup()
def test_resign_bump_version_in_model_if_force(self, mock_sign_file): with amo.tests.copy_file("apps/files/fixtures/files/new-addon-signature.xpi", self.file_.file_path): self.file_.update(is_signed=True) file_hash = self.file_.generate_hash() assert self.version.version == "1.3" assert self.version.version_int == version_int("1.3") tasks.sign_addons([self.addon.pk], force=True) assert mock_sign_file.called self.version.reload() assert self.version.version == "1.3.1-signed" assert self.version.version_int == version_int("1.3.1-signed") assert file_hash != self.file_.generate_hash() self.assert_backup()
def test_dont_bump_not_signed(self, mock_sign_file): mock_sign_file.return_value = None # Pretend we didn't sign. with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') assert file_hash == self.file_.generate_hash() self.assert_no_backup()
def test_dont_sign_dont_bump_sign_error(self, mock_sign_file): mock_sign_file.side_effect = IOError() with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') assert file_hash == self.file_.generate_hash() self.assert_no_backup()
def test_sign_bump_new_versions_not_default_compat(self, mock_sign_file): """Sign files which are recent, event if not default to compatible.""" with amo.tests.copy_file("apps/files/fixtures/files/jetpack.xpi", self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == "1.3" assert self.version.version_int == version_int("1.3") self.file_.update(binary_components=True, strict_compatibility=True) tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == "1.3.1-signed" assert self.version.version_int == version_int("1.3.1-signed") assert file_hash != self.file_.generate_hash() self.assert_backup()
def test_sign_bump_non_ascii_version(self, mock_sign_file): """Sign versions which have non-ascii version numbers.""" self.version.update(version=u"é1.3") with amo.tests.copy_file("apps/files/fixtures/files/jetpack.xpi", self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == u"é1.3" assert self.version.version_int == version_int("1.3") tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == u"é1.3.1-signed" assert self.version.version_int == version_int(u"é1.3.1-signed") assert file_hash != self.file_.generate_hash() self.assert_backup()
def test_sign_bump_old_versions_default_compat(self, mock_sign_file): """Sign files which are old, but default to compatible.""" with amo.tests.copy_file("apps/files/fixtures/files/jetpack.xpi", self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == "1.3" assert self.version.version_int == version_int("1.3") self.set_max_appversion(settings.MIN_D2C_VERSION) tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == "1.3.1-signed" assert self.version.version_int == version_int("1.3.1-signed") assert file_hash != self.file_.generate_hash() self.assert_backup()
def handle(self, *args, **options): if len(args) == 0: # Sign all the addons? raise CommandError( 'Please provide at least one addon id to sign. If you want to ' 'sign them all, use the "process_addons --task sign_addons" ' 'management command.') full_server = options.get('signing_server') or settings.SIGNING_SERVER prelim_server = (options.get('preliminary_signing_server') or settings.PRELIMINARY_SIGNING_SERVER) addon_ids = [int(addon_id) for addon_id in args] with override_settings( SIGNING_SERVER=full_server, PRELIMINARY_SIGNING_SERVER=prelim_server): sign_addons(addon_ids, force=options['force'])
def test_sign_bump_old_versions_default_compat(self, mock_sign_file): """Sign files which are old, but default to compatible.""" with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') self.set_max_appversion(settings.MIN_D2C_VERSION) tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == '1.3.1-signed' assert self.version.version_int == version_int('1.3.1-signed') assert file_hash != self.file_.generate_hash() self.assert_backup()
def test_sign_bump_non_ascii_version(self, mock_sign_file): """Sign versions which have non-ascii version numbers.""" self.version.update(version=u'é1.3') with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == u'é1.3' assert self.version.version_int == version_int('1.3') tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == u'é1.3.1-signed' assert self.version.version_int == version_int(u'é1.3.1-signed') assert file_hash != self.file_.generate_hash() self.assert_backup()
def test_resign_bump_version_in_model_if_force(self, mock_sign_file): with amo.tests.copy_file( 'apps/files/fixtures/files/new-addon-signature.xpi', self.file_.file_path): self.file_.update(is_signed=True) file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') tasks.sign_addons([self.addon.pk], force=True) assert mock_sign_file.called self.version.reload() assert self.version.version == '1.3.1-signed' assert self.version.version_int == version_int('1.3.1-signed') assert file_hash != self.file_.generate_hash() self.assert_backup()
def test_no_bump_unreviewed(self, mock_sign_file): """Don't bump nor sign unreviewed files.""" for status in amo.UNREVIEWED_STATUSES + (amo.STATUS_BETA,): self.file_.update(status=amo.STATUS_UNREVIEWED) with amo.tests.copy_file("apps/files/fixtures/files/jetpack.xpi", self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == "1.3" assert self.version.version_int == version_int("1.3") tasks.sign_addons([self.addon.pk]) assert not mock_sign_file.called self.version.reload() assert self.version.version == "1.3" assert self.version.version_int == version_int("1.3") assert file_hash == self.file_.generate_hash() self.assert_no_backup()
def test_dont_resign_dont_bump_version_in_model(self, mock_sign_file): with amo.tests.copy_file( 'apps/files/fixtures/files/new-addon-signature.xpi', self.file_.file_path): self.file_.update(is_signed=True) file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') tasks.sign_addons([self.addon.pk]) assert not mock_sign_file.called self.version.reload() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') assert file_hash == self.file_.generate_hash() self.assert_no_backup()
def test_dont_sign_dont_bump_other_applications(self, mock_sign_file): """Don't sign files which are for applications we don't sign for.""" with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') apps_without_signing = [app for app in amo.APPS_ALL.keys() if app not in packaged.SIGN_FOR_APPS] for app in apps_without_signing: self.max_appversion.update(application=app) tasks.sign_addons([self.addon.pk]) self.assert_not_signed(mock_sign_file, file_hash)
def test_sign_bump_non_ascii_filename(self, mock_sign_file): """Sign files which have non-ascii filenames.""" self.file_.update(filename=u'jétpack.xpi') with amo.tests.copy_file( 'apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == '1.3.1-signed' assert self.version.version_int == version_int('1.3.1-signed') assert file_hash != self.file_.generate_hash() self.assert_backup()
def test_no_bump_unreviewed(self, mock_sign_file): """Don't bump nor sign unreviewed files.""" for status in (amo.UNREVIEWED_STATUSES + (amo.STATUS_BETA, )): self.file_.update(status=amo.STATUS_UNREVIEWED) with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') tasks.sign_addons([self.addon.pk]) assert not mock_sign_file.called self.version.reload() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') assert file_hash == self.file_.generate_hash() self.assert_no_backup()
def test_sign_bump_new_versions_not_default_compat(self, mock_sign_file): """Sign files which are recent, event if not default to compatible.""" with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') self.file_.update(binary_components=True, strict_compatibility=True) tasks.sign_addons([self.addon.pk]) assert mock_sign_file.called self.version.reload() assert self.version.version == '1.3.1-signed' assert self.version.version_int == version_int('1.3.1-signed') assert file_hash != self.file_.generate_hash() self.assert_backup()
def test_dont_sign_dont_bump_old_versions(self, mock_sign_file): """Don't sign files which are too old, or not default to compatible.""" def not_signed(): assert not mock_sign_file.called self.version.reload() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') assert file_hash == self.file_.generate_hash() self.assert_no_backup() with amo.tests.copy_file('apps/files/fixtures/files/jetpack.xpi', self.file_.file_path): file_hash = self.file_.generate_hash() assert self.version.version == '1.3' assert self.version.version_int == version_int('1.3') # Too old, don't sign. self.set_max_appversion('1') # Very very old. tasks.sign_addons([self.addon.pk]) not_signed() # MIN_D2C_VERSION, but strict compat: don't sign. self.set_max_appversion(settings.MIN_D2C_VERSION) self.file_.update(strict_compatibility=True) tasks.sign_addons([self.addon.pk]) not_signed() # MIN_D2C_VERSION, but binary component: don't sign. self.file_.update(strict_compatibility=False, binary_components=True) tasks.sign_addons([self.addon.pk]) not_signed()