Esempio n. 1
0
def populate():
    """Populate the database with some packages"""
    from spkrepo.tests.common import BuildFactory, PackageFactory, VersionFactory
    with db.session.no_autoflush:
        # nzbget
        nzbget_package = PackageFactory(name='nzbget')
        nzbget_versions = [VersionFactory(package=nzbget_package, upstream_version='12.0', version=10,
                                          dependencies=None, report_url=None,
                                          install_wizard=True, upgrade_wizard=False),
                           VersionFactory(package=nzbget_package, upstream_version='13.0', version=11,
                                          dependencies=None, report_url=None,
                                          install_wizard=True, upgrade_wizard=False)]
        nzbget_builds = []
        for version in nzbget_versions:
            builds = BuildFactory.create_batch(2, version=version, active=True)
            nzbget_builds.extend(builds)

        # sickbeard
        sickbeard_package = PackageFactory(name='sickbeard')
        sickbeard_versions = [VersionFactory(package=sickbeard_package, upstream_version='20140528', version=3,
                                             dependencies='git', service_dependencies=[], report_url=None,
                                             install_wizard=False, upgrade_wizard=False, startable=True),
                              VersionFactory(package=sickbeard_package, upstream_version='20140702', version=4,
                                             dependencies='git', service_dependencies=[], report_url=None,
                                             install_wizard=False, upgrade_wizard=False, startable=True)]
        sickbeard_builds = []
        for version in sickbeard_versions:
            sickbeard_builds.append(BuildFactory(version=version, architectures=[Architecture.find('noarch')],
                                                 active=True))

        # git
        git_package = PackageFactory(name='git')
        git_versions = [VersionFactory(package=git_package, upstream_version='1.8.4', version=3,
                                       dependencies=None, service_dependencies=[], report_url=None,
                                       install_wizard=False, upgrade_wizard=False, startable=False),
                        VersionFactory(package=git_package, upstream_version='2.1.2', version=4,
                                       dependencies=None, service_dependencies=[], report_url=None,
                                       install_wizard=False, upgrade_wizard=False, startable=False)]
        git_builds = []
        for version in git_versions:
            builds = BuildFactory.create_batch(3, version=version, active=True)
            git_builds.extend(builds)

        # bitlbee
        bitlbee_package = PackageFactory(name='bitlbee')
        bitlbee_versions = [VersionFactory(package=bitlbee_package, upstream_version='3.2.2', version=9,
                                           dependencies=None, service_dependencies=[], report_url=None,
                                           install_wizard=False, upgrade_wizard=False, startable=True),
                            VersionFactory(package=bitlbee_package, upstream_version='3.2.3', version=10,
                                           dependencies=None, service_dependencies=[], report_url=None,
                                           install_wizard=False, upgrade_wizard=False, startable=True),
                            VersionFactory(package=bitlbee_package, upstream_version='3.3.0', version=11,
                                           dependencies=None, service_dependencies=[],
                                           install_wizard=False, upgrade_wizard=False, startable=True)]
        bitlbee_builds = []
        for version in bitlbee_versions:
            builds = BuildFactory.create_batch(3, version=version, active=True)
            bitlbee_builds.extend(builds)
    db.session.commit()
Esempio n. 2
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))
Esempio n. 3
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))
Esempio n. 4
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))
Esempio n. 5
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))
Esempio n. 6
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))
Esempio n. 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))
Esempio n. 8
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))
Esempio n. 9
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))
Esempio n. 10
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))
Esempio n. 11
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))
Esempio n. 12
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()
Esempio n. 13
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)
Esempio n. 14
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))
Esempio n. 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))
Esempio n. 16
0
 def test_get_active_stable(self):
     build = BuildFactory(version__report_url=None, active=True)
     db.session.commit()
     response = self.client.get(url_for("frontend.packages"))
     self.assert200(response)
     self.assertIn(
         build.version.displaynames["enu"].displayname,
         response.data.decode(response.charset),
     )
     self.assertNotIn("beta", response.data.decode(response.charset))
Esempio n. 17
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))
Esempio n. 18
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))
Esempio n. 19
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()))
Esempio n. 20
0
 def test_stable_build_active_not_stable(self):
     BuildFactory(active=True,
                  architectures=[Architecture.find('88f6281', syno=True)],
                  firmware=Firmware.find(1594))
     db.session.commit()
     data = dict(arch='88f6281', build='1594', language='enu')
     response = self.client.post(url_for('nas.catalog'), data=data)
     self.assert200(response)
     self.assertHeader(response, 'Content-Type', 'application/json')
     catalog = json.loads(response.data.decode(response.charset))
     self.assertEqual(len(catalog), 0)
Esempio n. 21
0
 def test_missing_conf_folder(self):
     build = BuildFactory.build(version__conf_dependencies=None,
                                version__conf_conflicts=None,
                                version__conf_privilege=None,
                                version__conf_resource=None)
     info = create_info(build)
     info['support_conf_folder'] = 'yes'
     with create_spk(build, info=info, with_conf=False) as f:
         with self.assertRaises(SPKParseError) as cm:
             SPK(f)
     self.assertEqual('Missing conf folder', str(cm.exception))
Esempio n. 22
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))
Esempio n. 23
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))
Esempio n. 24
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))
Esempio n. 25
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))
Esempio n. 26
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()))
Esempio n. 27
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))
Esempio n. 28
0
 def test_action_deactivate(self):
     with self.logged_user('package_admin'):
         build = BuildFactory(active=True)
         db.session.commit()
         response = self.client.post(url_for('buildview.action_view'),
                                     follow_redirects=True,
                                     data=dict(action='deactivate',
                                               rowid=[build.id]))
         self.assert200(response)
         self.assertIn('Build was successfully deactivated.',
                       response.data.decode(response.charset))
         self.assertFalse(build.active)
Esempio n. 29
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))
Esempio n. 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)
Esempio n. 31
0
    def test_post_not_startable(self):
        user = UserFactory(
            roles=[Role.find('developer'),
                   Role.find('package_admin')])
        db.session.commit()

        build = BuildFactory.build(version__startable=False)
        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)
Esempio n. 32
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))
Esempio n. 33
0
 def test_stable_build_active_not_stable(self):
     BuildFactory(
         active=True,
         architectures=[Architecture.find("88f6281", syno=True)],
         firmware=Firmware.find(1594),
     )
     db.session.commit()
     data = dict(arch="88f6281", build="1594", language="enu")
     response = self.client.post(url_for("nas.catalog"), data=data)
     self.assert200(response)
     self.assertHeader(response, "Content-Type", "application/json")
     catalog = json.loads(response.data.decode(response.charset))
     self.assertEqual(len(catalog), 0)
Esempio n. 34
0
 def test_empty_conf_folder(self):
     build = BuildFactory.build(
         version__conf_dependencies=None,
         version__conf_conflicts=None,
         version__conf_privilege=None,
         version__conf_resource=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))
Esempio n. 35
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)
Esempio n. 36
0
    def test_post_invalid_firmware(self):
        user = UserFactory(roles=[Role.find("developer")])
        db.session.commit()

        build = BuildFactory.build(firmware=Firmware(version="1.0", build=42))
        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("Invalid firmware",
                      response.data.decode(response.charset))
Esempio n. 37
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()
Esempio n. 38
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))
Esempio n. 39
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()
Esempio n. 40
0
    def test_post_icons_in_both(self):
        user = UserFactory(
            roles=[Role.find('developer'),
                   Role.find('package_admin')])
        db.session.commit()

        build = BuildFactory.build()
        with create_spk(build, with_package_icons=True,
                        with_info_icons=True) 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)
Esempio n. 41
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))
Esempio n. 42
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))
Esempio n. 43
0
 def test_incorrect_firmware_build(self):
     architecture = Architecture.find('88f6281', syno=True)
     build = BuildFactory(active=True,
                          version__report_url=None,
                          architectures=[architecture],
                          firmware=Firmware.find(1594))
     db.session.commit()
     self.assertEqual(Download.query.count(), 0)
     response = self.client.get(
         url_for('nas.download',
                 architecture_id=architecture.id,
                 firmware_build=1593,
                 build_id=build.id))
     self.assert400(response)
     self.assertEqual(Download.query.count(), 0)
Esempio n. 44
0
    def test_post_upgrade_wizard(self):
        user = UserFactory(
            roles=[Role.find("developer"),
                   Role.find("package_admin")])
        db.session.commit()

        build = BuildFactory.build(version__upgrade_wizard=True)
        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)
Esempio n. 45
0
 def test_action_activate_one(self):
     with self.logged_user("package_admin"):
         build = BuildFactory(active=False)
         db.session.commit()
         response = self.client.post(
             url_for("build.action_view"),
             follow_redirects=True,
             data=dict(action="activate", rowid=[build.id]),
         )
         self.assert200(response)
         self.assertIn(
             "Build was successfully activated.",
             response.data.decode(response.charset),
         )
         self.assertTrue(build.active)
Esempio n. 46
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))
Esempio n. 47
0
    def test_post_existing_package_not_author_not_maintainer_user(self):
        user = UserFactory(roles=[Role.find("developer")])
        package = PackageFactory()
        db.session.commit()

        with create_spk(BuildFactory.build(version__package=package)) as spk:
            response = self.client.post(
                url_for("api.packages"),
                headers=authorization_header(user),
                data=spk.read(),
            )
        self.assert403(response)
        self.assertIn(
            "Insufficient permissions on this package",
            response.data.decode(response.charset),
        )
Esempio n. 48
0
 def test_get(self):
     build = BuildFactory(version__package__author=UserFactory(),
                          version__report_url=None,
                          active=True)
     db.session.commit()
     response = self.client.get(
         url_for('frontend.package', name=build.version.package.name))
     self.assert200(response)
     for a in build.architectures:
         self.assertIn(a.code, response.data.decode(response.charset))
     self.assertIn(build.version.package.author.username,
                   response.data.decode(response.charset))
     self.assertIn(build.version.displaynames['enu'].displayname,
                   response.data.decode(response.charset))
     self.assertIn(build.version.descriptions['enu'].description,
                   response.data.decode(response.charset))
Esempio n. 49
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))
Esempio n. 50
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()
Esempio n. 51
0
 def test_stable_build_active_stable_qinst(self):
     build = BuildFactory(
         active=True,
         version__report_url=None,
         version__license=None,
         version__install_wizard=False,
         architectures=[Architecture.find('88f6281', syno=True)],
         firmware=Firmware.find(1594))
     db.session.commit()
     data = dict(arch='88f6281', build='1594', language='enu')
     response = self.client.post(url_for('nas.catalog'), data=data)
     self.assert200(response)
     self.assertHeader(response, 'Content-Type', 'application/json')
     catalog = json.loads(response.data.decode(response.charset))
     self.assertEqual(len(catalog), 1)
     self.assertCatalogEntry(catalog[0], build, data,
                             dict(arch='88f628x', build='1594'))
Esempio n. 52
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))
Esempio n. 53
0
    def test_post_wrong_displayname_language(self):
        user = UserFactory(
            roles=[Role.find("developer"),
                   Role.find("package_admin")])
        db.session.commit()

        build = BuildFactory.build()
        info = create_info(build)
        info["displayname_zzz"] = "displayname_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 displayname language",
                      response.data.decode(response.charset))
Esempio n. 54
0
 def test_stable_build_active_stable_5004(self):
     build = BuildFactory(
         active=True,
         version__report_url=None,
         architectures=[Architecture.find("88f6281", syno=True)],
         firmware=Firmware.find(1594),
     )
     db.session.commit()
     data = dict(arch="88f6281", build="5004", language="enu")
     response = self.client.post(url_for("nas.catalog"), data=data)
     self.assert200(response)
     self.assertHeader(response, "Content-Type", "application/json")
     catalog = json.loads(response.data.decode(response.charset))
     self.assertIn("packages", catalog)
     self.assertIn("keyrings", catalog)
     self.assertEqual(len(catalog["packages"]), 1)
     self.assertCatalogEntry(catalog["packages"][0], build, data,
                             dict(arch="88f628x", build="5004"))
Esempio n. 55
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)
Esempio n. 56
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'])
Esempio n. 57
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))
Esempio n. 58
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))
Esempio n. 59
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))
Esempio n. 60
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))