Exemple #1
0
 def test_not_signed(self):
     build = BuildFactory.build(version__upgrade_wizard=True)
     with create_spk(build) as f:
         spk = SPK(f)
     with self.assertRaises(ValueError) as cm:
         spk.unsign()
     self.assertEqual('Not signed', str(cm.exception))
Exemple #2
0
 def test_invalid_info(self):
     build = BuildFactory.build()
     info = io.BytesIO('\n'.join(['%s=%s' % (k, v) for k, v in create_info(build).items()]).encode('utf-8'))
     with create_spk(build, info=info) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Invalid INFO', str(cm.exception))
Exemple #3
0
 def test_already_signed(self):
     build = BuildFactory.build(version__upgrade_wizard=True)
     with create_spk(build, signature='signature') as f:
         spk = SPK(f)
     spk._generate_signature = Mock(return_value='timestamped signature')
     with self.assertRaises(ValueError) as cm:
         spk.sign('timestamp_url', 'gnupghome')
     self.assertEqual('Already signed', str(cm.exception))
Exemple #4
0
 def test_invalid_spk(self):
     build = BuildFactory.build()
     with create_spk(build) as f:
         f.seek(50)
         invalid_spk = io.BytesIO(f.read())
     with self.assertRaises(SPKParseError) as cm:
         SPK(invalid_spk)
     self.assertEqual('Invalid SPK', str(cm.exception))
Exemple #5
0
 def test_generic(self):
     build = BuildFactory.build(version__upgrade_wizard=True)
     f = create_spk(build, signature='signature')
     spk = SPK(f)
     spk.unsign()
     with tarfile.open(fileobj=f, mode='r:') as tar:
         self.assertNotIn('syno_signature.asc', tar.getnames())
     f.close()
Exemple #6
0
 def test_checksum_mismatch(self):
     build = BuildFactory.build()
     info = create_info(build)
     info['checksum'] = 'checksum'
     with create_spk(build, info=info) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Checksum mismatch', str(cm.exception))
Exemple #7
0
 def test_missing_info_package(self):
     build = BuildFactory.build()
     info = create_info(build)
     del info['package']
     with create_spk(build, info=info) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Missing INFO: package', str(cm.exception))
Exemple #8
0
 def test_invalid_info_boolean_startable(self):
     build = BuildFactory.build()
     info = create_info(build)
     info['startable'] = 'Something'
     with create_spk(build, info=info) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Invalid INFO boolean: startable', str(cm.exception))
Exemple #9
0
 def test_invalid_info_icon(self):
     build = BuildFactory.build()
     info = create_info(build)
     info['package_icon_120'] = 'package_icon_120'
     with create_spk(build, info=info) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Invalid INFO icon: package_icon_120', str(cm.exception))
Exemple #10
0
 def test_wrong_info_encoding(self):
     build = BuildFactory.build()
     info = create_info(build)
     info['description'] = 'Description en français'
     with create_spk(build, info=info, info_encoding='latin-1') as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Wrong INFO encoding', str(cm.exception))
Exemple #11
0
 def test_empty_conf_folder(self):
     build = BuildFactory.build(version__conf_dependencies=None, version__conf_conflicts=None)
     info = create_info(build)
     info['support_conf_folder'] = 'yes'
     with create_spk(build, info=info, with_conf=True) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Empty conf folder', str(cm.exception))
Exemple #12
0
    def test_post_minimum(self):
        user = UserFactory(roles=[Role.find('developer'), Role.find('package_admin')])
        db.session.commit()

        build = BuildFactory.build()
        with create_spk(build) as spk:
            self.assert201(self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                            data=spk.read()))
        self.assertBuildInserted(Build.query.one(), build, user)
Exemple #13
0
    def test_post_new_package_not_author_not_maintainer_user(self):
        user = UserFactory(roles=[Role.find('developer')])
        db.session.commit()

        with create_spk(BuildFactory.build()) as spk:
            response = self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                        data=spk.read())
        self.assert403(response)
        self.assertIn('Insufficient permissions to create new packages', response.data.decode(response.charset))
Exemple #14
0
    def test_post_existing_package_maintainer_user(self):
        user = UserFactory(roles=[Role.find('developer')])
        package = PackageFactory(maintainers=[user])
        db.session.commit()

        build = BuildFactory.build(version__package=package)
        db.session.expire(package)
        with create_spk(build) as spk:
            self.assert201(self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                            data=spk.read()))
Exemple #15
0
    def test_post_unknown_firmware(self):
        user = UserFactory(roles=[Role.find('developer')])
        db.session.commit()

        build = BuildFactory.build(firmware=Firmware(version='1.0', build=421))
        with create_spk(build) as spk:
            response = self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                        data=spk.read())
        self.assert422(response)
        self.assertIn('Unknown firmware', response.data.decode(response.charset))
Exemple #16
0
    def test_post_unknown_architecture(self):
        user = UserFactory(roles=[Role.find('developer')])
        db.session.commit()

        build = BuildFactory.build(architectures=[Architecture(code='newarch')])
        with create_spk(build) as spk:
            response = self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                        data=spk.read())
        self.assert422(response)
        self.assertIn('Unknown architecture: newarch', response.data.decode(response.charset))
Exemple #17
0
    def test_post_signed(self):
        user = UserFactory(roles=[Role.find('developer'), Role.find('package_admin')])
        db.session.commit()

        build = BuildFactory.build()
        with create_spk(build, signature='signature') as spk:
            response = self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                        data=spk.read())
        self.assert422(response)
        self.assertIn('Package contains a signature', response.data.decode(response.charset))
Exemple #18
0
    def test_post_invalid_spk(self):
        user = UserFactory(roles=[Role.find('developer'), Role.find('package_admin')])
        db.session.commit()

        build = BuildFactory.build()
        with create_spk(build) as spk:
            spk.seek(100)
            response = self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                        data=spk.read())
        self.assert422(response)
        self.assertIn('Invalid SPK', response.data.decode(response.charset))
Exemple #19
0
    def test_post_wrong_description_language(self):
        user = UserFactory(roles=[Role.find('developer'), Role.find('package_admin')])
        db.session.commit()

        build = BuildFactory.build()
        info = create_info(build)
        info['description_zzz'] = 'description_zzz'
        with create_spk(build, info=info) as spk:
            response = self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                        data=spk.read())
        self.assert422(response)
        self.assertIn('Unknown INFO description language', response.data.decode(response.charset))
Exemple #20
0
    def test_post_wrong_version(self):
        user = UserFactory(roles=[Role.find('developer'), Role.find('package_admin')])
        db.session.commit()

        build = BuildFactory.build()
        info = create_info(build)
        info['version'] = '1.2.3~4'
        with create_spk(build, info=info) as spk:
            response = self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                        data=spk.read())
        self.assert422(response)
        self.assertIn('Invalid version', response.data.decode(response.charset))
Exemple #21
0
    def test_generic(self):
        build = BuildFactory.build(version__upgrade_wizard=True,
                                   architectures=[Architecture.query.all()[0], Architecture.query.all()[1]])
        with create_spk(build, signature='signature') as f:
            spk = SPK(f)

        # info
        info_keys = ['arch', 'changelog', 'description', 'description_enu', 'displayname', 'displayname_enu',
                     'distributor', 'distributor_url', 'firmware', 'install_conflict_packages', 'install_dep_packages',
                     'install_dep_services', 'maintainer', 'maintainer_url', 'package', 'report_url',
                     'support_conf_folder', 'version']
        self.assertEqual(set(info_keys), set(spk.info.keys()))
        self.assertEqual({Architecture.from_syno.get(a, a) for a in spk.info['arch'].split()},
                         {a.code for a in build.architectures})
        self.assertEqual(build.version.changelog, spk.info['changelog'])
        self.assertEqual(build.version.descriptions['enu'].description, spk.info['description'])
        self.assertEqual(build.version.descriptions['enu'].description, spk.info['description_enu'])
        self.assertEqual(build.version.displaynames['enu'].displayname, spk.info['displayname'])
        self.assertEqual(build.version.displaynames['enu'].displayname, spk.info['displayname_enu'])
        self.assertEqual(build.version.distributor, spk.info['distributor'])
        self.assertEqual(build.version.distributor_url, spk.info['distributor_url'])
        self.assertEqual(build.firmware.firmware_string, spk.info['firmware'])
        self.assertEqual(build.version.conflicts, spk.info['install_conflict_packages'])
        self.assertEqual(build.version.dependencies, spk.info['install_dep_packages'])
        self.assertEqual(' '.join(s.code for s in build.version.service_dependencies), spk.info['install_dep_services'])
        self.assertEqual(build.version.maintainer, spk.info['maintainer'])
        self.assertEqual(build.version.maintainer_url, spk.info['maintainer_url'])
        self.assertEqual(build.version.package.name, spk.info['package'])
        self.assertEqual(build.version.report_url, spk.info['report_url'])
        self.assertEqual(build.version.conf_dependencies is not None or build.version.conf_conflicts is not None,
                         spk.info['support_conf_folder'])
        self.assertEqual(build.version.version_string, spk.info['version'])

        # icons
        self.assertEqual(set(build.version.icons.keys()), set(spk.icons.keys()))

        # wizards
        if not build.version.install_wizard:
            self.assertNotIn('install', spk.wizards)
        else:
            self.assertIn('install', spk.wizards)
        if not build.version.upgrade_wizard:
            self.assertNotIn('upgrade', spk.wizards)
        else:
            self.assertIn('upgrade', spk.wizards)

        # license
        self.assertEqual(build.version.license, spk.license)

        # signature
        self.assertEqual('signature', spk.signature)
Exemple #22
0
 def test_generic(self):
     build = BuildFactory.build(version__upgrade_wizard=True)
     f = create_spk(build)
     spk = SPK(f)
     with tarfile.open(fileobj=f, mode='r:') as tar:
         self.assertNotIn('syno_signature.asc', tar.getnames())
     self.assertIsNone(spk.signature)
     spk._generate_signature = Mock(return_value='timestamped signature')
     spk.sign('timestamp_url', 'gnupghome')
     with tarfile.open(fileobj=f, mode='r:') as tar:
         self.assertIn('syno_signature.asc', tar.getnames())
         self.assertEqual(tar.extractfile('syno_signature.asc').read(), b'timestamped signature')
     self.assertEqual(spk.signature, 'timestamped signature')
     f.close()
Exemple #23
0
    def test_post_conflict(self):
        user = UserFactory(roles=[Role.find('developer'), Role.find('package_admin')])
        db.session.commit()

        architectures = [Architecture.find('88f628x'), Architecture.find('cedarview')]
        build = BuildFactory.build(architectures=architectures)
        with create_spk(build) as spk:
            self.assert201(self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                            data=spk.read()))
            spk.seek(0)
            response = self.client.post(url_for('api.packages'), headers=authorization_header(user),
                                        data=spk.read())
        self.assert409(response)
        self.assertIn('Conflicting architectures: 88f628x, cedarview', response.data.decode(response.charset))
Exemple #24
0
 def test_no_info(self):
     build = BuildFactory.build()
     with create_spk(build, with_info=False) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Missing INFO file', str(cm.exception))
Exemple #25
0
 def test_info_boolean_no(self):
     build = BuildFactory.build(version__startable=False)
     with create_spk(build) as f:
         self.assertFalse(SPK(f).info['startable'])
Exemple #26
0
 def test_wrong_license_encoding(self):
     build = BuildFactory.build(version__license='License française')
     with create_spk(build, license_encoding='latin-1') as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Wrong LICENSE encoding', str(cm.exception))
Exemple #27
0
 def test_no_package_tgz(self):
     build = BuildFactory.build()
     with create_spk(build, with_package=False) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Missing package.tgz file', str(cm.exception))
Exemple #28
0
 def test_wrong_conf_privilege_encoding(self):
     build = BuildFactory.build(version__conf_privilege=json.dumps({'déçu': {'run-as': '<run-as>'}}))
     with create_spk(build, conf_privilege_encoding='latin-1') as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Wrong conf/privilege encoding', str(cm.exception))
Exemple #29
0
 def test_no_info(self):
     build = BuildFactory.build()
     with create_spk(build, with_info=False) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Missing INFO file', str(cm.exception))
Exemple #30
0
    def test_generic(self):
        build = BuildFactory.build(
            version__upgrade_wizard=True,
            architectures=[
                Architecture.query.all()[0],
                Architecture.query.all()[1]
            ],
        )
        with create_spk(build, signature="signature") as f:
            spk = SPK(f)

        # info
        info_keys = [
            "arch",
            "changelog",
            "description",
            "description_enu",
            "displayname",
            "displayname_enu",
            "distributor",
            "distributor_url",
            "firmware",
            "install_conflict_packages",
            "install_dep_packages",
            "install_dep_services",
            "maintainer",
            "maintainer_url",
            "package",
            "report_url",
            "support_conf_folder",
            "version",
        ]
        self.assertEqual(set(info_keys), set(spk.info.keys()))
        self.assertEqual(
            {
                Architecture.from_syno.get(a, a)
                for a in spk.info["arch"].split()
            },
            {a.code
             for a in build.architectures},
        )
        self.assertEqual(build.version.changelog, spk.info["changelog"])
        self.assertEqual(build.version.descriptions["enu"].description,
                         spk.info["description"])
        self.assertEqual(build.version.descriptions["enu"].description,
                         spk.info["description_enu"])
        self.assertEqual(build.version.displaynames["enu"].displayname,
                         spk.info["displayname"])
        self.assertEqual(build.version.displaynames["enu"].displayname,
                         spk.info["displayname_enu"])
        self.assertEqual(build.version.distributor, spk.info["distributor"])
        self.assertEqual(build.version.distributor_url,
                         spk.info["distributor_url"])
        self.assertEqual(build.firmware.firmware_string, spk.info["firmware"])
        self.assertEqual(build.version.conflicts,
                         spk.info["install_conflict_packages"])
        self.assertEqual(build.version.dependencies,
                         spk.info["install_dep_packages"])
        self.assertEqual(
            " ".join(s.code for s in build.version.service_dependencies),
            spk.info["install_dep_services"],
        )
        self.assertEqual(build.version.maintainer, spk.info["maintainer"])
        self.assertEqual(build.version.maintainer_url,
                         spk.info["maintainer_url"])
        self.assertEqual(build.version.package.name, spk.info["package"])
        self.assertEqual(build.version.report_url, spk.info["report_url"])
        self.assertEqual(
            build.version.conf_dependencies is not None
            or build.version.conf_conflicts is not None
            or build.version.conf_privilege is not None
            or build.version.conf_resource is not None,
            spk.info["support_conf_folder"],
        )
        self.assertEqual(build.version.version_string, spk.info["version"])

        # icons
        self.assertEqual(set(build.version.icons.keys()),
                         set(spk.icons.keys()))

        # wizards
        if not build.version.install_wizard:
            self.assertNotIn("install", spk.wizards)
        else:
            self.assertIn("install", spk.wizards)
        if not build.version.upgrade_wizard:
            self.assertNotIn("upgrade", spk.wizards)
        else:
            self.assertIn("upgrade", spk.wizards)

        # license
        self.assertEqual(build.version.license, spk.license)

        # signature
        self.assertEqual("signature", spk.signature)
Exemple #31
0
 def test_missing_72px_icon(self):
     build = BuildFactory.build(version__add_icon=False)
     with create_spk(build) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Missing 72px icon', str(cm.exception))
Exemple #32
0
 def test_no_package_tgz(self):
     build = BuildFactory.build()
     with create_spk(build, with_package=False) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual("Missing package.tgz file", str(cm.exception))
Exemple #33
0
 def test_wrong_license_encoding(self):
     build = BuildFactory.build(version__license="License française")
     with create_spk(build, license_encoding="latin-1") as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual("Wrong LICENSE encoding", str(cm.exception))
Exemple #34
0
 def test_info_boolean_yes(self):
     build = BuildFactory.build(version__startable=True)
     with create_spk(build) as f:
         self.assertTrue(SPK(f).info["startable"])
Exemple #35
0
 def test_info_blank_like(self):
     build = BuildFactory.build()
     info = io.BytesIO('\n'.join(['%s="%s"\n' % (k, v) for k, v in create_info(build).items()]).encode('utf-8'))
     with create_spk(build, info=info) as f:
         SPK(f)
Exemple #36
0
 def test_wrong_conf_resource_encoding(self):
     build = BuildFactory.build(version__conf_resource=json.dumps({'déçu': {'<resource-id>': '<specification>'}}))
     with create_spk(build, conf_resource_encoding='latin-1') as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Wrong conf/resource encoding', str(cm.exception))
Exemple #37
0
 def test_info_blank_like(self):
     build = BuildFactory.build()
     info = io.BytesIO('\n'.join(['%s="%s"\n' % (k, v) for k, v in create_info(build).items()]).encode('utf-8'))
     with create_spk(build, info=info) as f:
         SPK(f)
Exemple #38
0
 def test_missing_72px_icon(self):
     build = BuildFactory.build(version__add_icon=False)
     with create_spk(build) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual("Missing 72px icon", str(cm.exception))
Exemple #39
0
 def test_wrong_conf_conflicts_encoding(self):
     build = BuildFactory.build(version__conf_conflicts=json.dumps({'déçu': {'dsm_min_ver': '5.0-4300'}}))
     with create_spk(build, conf_conflicts_encoding='latin-1') as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Wrong conf/PKG_CONX encoding', str(cm.exception))
Exemple #40
0
 def test_info_boolean_no(self):
     build = BuildFactory.build(version__startable=False)
     with create_spk(build) as f:
         self.assertFalse(SPK(f).info['startable'])
Exemple #41
0
 def test_wrong_syno_signature_encoding(self):
     build = BuildFactory.build()
     with create_spk(build, signature='Signature française', signature_encoding='latin-1') as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Wrong syno_signature.asc encoding', str(cm.exception))
Exemple #42
0
 def test_wrong_conf_conflicts_encoding(self):
     build = BuildFactory.build(version__conf_conflicts=json.dumps({'déçu': {'dsm_min_ver': '5.0-4300'}}))
     with create_spk(build, conf_conflicts_encoding='latin-1') as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Wrong conf/PKG_CONX encoding', str(cm.exception))
Exemple #43
0
 def test_invalid_info_package(self):
     build = BuildFactory.build(version__package__name='Invalid package name')
     with create_spk(build) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Invalid INFO package', str(cm.exception))
Exemple #44
0
    def test_generic(self):
        build = BuildFactory.build(version__upgrade_wizard=True,
                                   architectures=[
                                       Architecture.query.all()[0],
                                       Architecture.query.all()[1]
                                   ])
        with create_spk(build, signature='signature') as f:
            spk = SPK(f)

        # info
        info_keys = [
            'arch', 'changelog', 'description', 'description_enu',
            'displayname', 'displayname_enu', 'distributor', 'distributor_url',
            'firmware', 'install_conflict_packages', 'install_dep_packages',
            'install_dep_services', 'maintainer', 'maintainer_url', 'package',
            'report_url', 'support_conf_folder', 'version'
        ]
        self.assertEqual(set(info_keys), set(spk.info.keys()))
        self.assertEqual(
            {
                Architecture.from_syno.get(a, a)
                for a in spk.info['arch'].split()
            }, {a.code
                for a in build.architectures})
        self.assertEqual(build.version.changelog, spk.info['changelog'])
        self.assertEqual(build.version.descriptions['enu'].description,
                         spk.info['description'])
        self.assertEqual(build.version.descriptions['enu'].description,
                         spk.info['description_enu'])
        self.assertEqual(build.version.displaynames['enu'].displayname,
                         spk.info['displayname'])
        self.assertEqual(build.version.displaynames['enu'].displayname,
                         spk.info['displayname_enu'])
        self.assertEqual(build.version.distributor, spk.info['distributor'])
        self.assertEqual(build.version.distributor_url,
                         spk.info['distributor_url'])
        self.assertEqual(build.firmware.firmware_string, spk.info['firmware'])
        self.assertEqual(build.version.conflicts,
                         spk.info['install_conflict_packages'])
        self.assertEqual(build.version.dependencies,
                         spk.info['install_dep_packages'])
        self.assertEqual(
            ' '.join(s.code for s in build.version.service_dependencies),
            spk.info['install_dep_services'])
        self.assertEqual(build.version.maintainer, spk.info['maintainer'])
        self.assertEqual(build.version.maintainer_url,
                         spk.info['maintainer_url'])
        self.assertEqual(build.version.package.name, spk.info['package'])
        self.assertEqual(build.version.report_url, spk.info['report_url'])
        self.assertEqual(build.version.conf_dependencies is not None or build.version.conf_conflicts is not None or \
                         build.version.conf_privilege is not None or build.version.conf_resource is not None,
                             spk.info['support_conf_folder'])
        self.assertEqual(build.version.version_string, spk.info['version'])

        # icons
        self.assertEqual(set(build.version.icons.keys()),
                         set(spk.icons.keys()))

        # wizards
        if not build.version.install_wizard:
            self.assertNotIn('install', spk.wizards)
        else:
            self.assertIn('install', spk.wizards)
        if not build.version.upgrade_wizard:
            self.assertNotIn('upgrade', spk.wizards)
        else:
            self.assertIn('upgrade', spk.wizards)

        # license
        self.assertEqual(build.version.license, spk.license)

        # signature
        self.assertEqual('signature', spk.signature)