Пример #1
0
class QueryFactory(factory.DictFactory):
    timezone = fake.timezone().split("/")[1]
    language = factory.LazyAttribute(
        lambda x: random.choice([language.code for language in Language.query.all()])
    )
    arch = factory.LazyAttribute(
        lambda x: random.choice(
            [
                Architecture.to_syno.get(a.code, a.code)
                for a in Architecture.query.filter(Architecture.code != "noarch").all()
            ]
        )
    )
    build = factory.LazyAttribute(
        lambda x: random.choice([f.build for f in Firmware.query.all()])
    )
    major = factory.LazyAttribute(
        lambda x: int(Firmware.find(x.build).version.split(".")[0])
    )
    minor = factory.LazyAttribute(
        lambda x: int(Firmware.find(x.build).version.split(".")[1])
    )
    unique = factory.LazyAttribute(
        lambda x: "synology_%s_%s"
        % (
            x.arch,
            str(random.choice([1, 2, 4, 15, 18, 24]))
            + str(random.choice([12, 13, 14, 15]))
            + random.choice(["", "j", "+"]),
        )
    )
    package_update_channel = factory.fuzzy.FuzzyChoice(["stable", "beta"])
Пример #2
0
 def test_stable_build_active_stable_null_data(self):
     build = BuildFactory(
         active=True,
         version__report_url=None,
         version__changelog=None,
         version__distributor=None,
         version__distributor_url=None,
         version__maintainer=None,
         version__maintainer_url=None,
         version__service_dependencies=[],
         version__dependencies=None,
         version__conflicts=None,
         version__package__add_screenshot=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"))
Пример #3
0
 def test_stable_build_active_stable_download_count(self):
     package = PackageFactory()
     build = BuildFactory(
         active=True,
         version__report_url=None,
         version__package=package,
         architectures=[Architecture.find("cedarview")],
         firmware=Firmware.find(1594),
     )
     DownloadFactory.create_batch(1, build=build, date=datetime.now())
     DownloadFactory.create_batch(2,
                                  build=build,
                                  date=datetime.now() - timedelta(days=30))
     DownloadFactory.create_batch(4,
                                  build=build,
                                  date=datetime.now() - timedelta(days=100))
     db.session.commit()
     data = dict(arch="cedarview", 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.assertEqual(catalog[0]["download_count"], 7)
     self.assertEqual(catalog[0]["recent_download_count"], 3)
Пример #4
0
 def test_generic(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=4458,
             build_id=build.id,
         ),
         environ_base={"REMOTE_ADDR": "127.0.0.1"},
         headers={"User-Agent": "My User Agent"},
     )
     self.assert302(response)
     self.assertEqual(Download.query.count(), 1)
     download = Download.query.first()
     self.assertEqual(download.ip_address, "127.0.0.1")
     self.assertEqual(download.user_agent, "My User Agent")
     self.assertEqual(download.firmware_build, 4458)
     self.assertAlmostEqual(
         download.date,
         datetime.utcnow().replace(microsecond=0),
         delta=timedelta(seconds=10),
     )
Пример #5
0
class QueryFactory(factory.DictFactory):
    timezone = fake.timezone().split('/')[1]
    language = factory.LazyAttribute(
        lambda x: random.choice([l.code for l in Language.query.all()]))
    arch = factory.LazyAttribute(lambda x: random.choice([
        Architecture.to_syno.get(a.code, a.code) for a in Architecture.query.
        filter(Architecture.code != 'noarch').all()
    ]))
    build = factory.LazyAttribute(
        lambda x: random.choice([f.build for f in Firmware.query.all()]))
    major = factory.LazyAttribute(
        lambda x: int(Firmware.find(x.build).version.split('.')[0]))
    minor = factory.LazyAttribute(
        lambda x: int(Firmware.find(x.build).version.split('.')[1]))
    unique = factory.LazyAttribute(lambda x: 'synology_%s_%s' % (
        x.arch, str(random.choice([1, 2, 4, 15, 18, 24])) + str(
            random.choice([12, 13, 14, 15])) + random.choice(['', 'j', '+'])))
    package_update_channel = factory.fuzzy.FuzzyChoice(['stable', 'beta'])
Пример #6
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)
Пример #7
0
 def test_not_stable_build_not_active_stable(self):
     BuildFactory(active=False, version__report_url=None, architectures=[Architecture.find('88f6281', syno=True)],
                  firmware=Firmware.find(1594))
     db.session.commit()
     data = dict(arch='88f6281', build='1594', language='enu', package_update_channel='beta')
     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)
Пример #8
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)
Пример #9
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))
Пример #10
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'))
Пример #11
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)
Пример #12
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))
Пример #13
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)
Пример #14
0
 def test_generic(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=4458, build_id=build.id),
                                environ_base={'REMOTE_ADDR': '127.0.0.1'}, headers={'User-Agent': 'My User Agent'})
     self.assert302(response)
     self.assertEqual(Download.query.count(), 1)
     download = Download.query.first()
     self.assertEqual(download.ip_address, '127.0.0.1')
     self.assertEqual(download.user_agent, 'My User Agent')
     self.assertEqual(download.firmware_build, 4458)
     self.assertAlmostEqual(download.date, datetime.utcnow().replace(microsecond=0), delta=timedelta(seconds=10))
Пример #15
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'))
Пример #16
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"))
Пример #17
0
 def test_incorrect_architecture(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.find("cedarview").id,
             firmware_build=4458,
             build_id=build.id,
         ))
     self.assert400(response)
     self.assertEqual(Download.query.count(), 0)
Пример #18
0
 def test_stable_build_active_stable_download_count(self):
     package = PackageFactory()
     build = BuildFactory(active=True, version__report_url=None, version__package=package,
                          architectures=[Architecture.find('cedarview')], firmware=Firmware.find(1594))
     DownloadFactory.create_batch(1, build=build, date=datetime.now())
     DownloadFactory.create_batch(2, build=build, date=datetime.now() - timedelta(days=30))
     DownloadFactory.create_batch(4, build=build, date=datetime.now() - timedelta(days=100))
     db.session.commit()
     data = dict(arch='cedarview', 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.assertEqual(catalog[0]['download_count'], 7)
     self.assertEqual(catalog[0]['recent_download_count'], 3)
Пример #19
0
 def test_stable_build_active_stable_null_data(self):
     build = BuildFactory(active=True, version__report_url=None, version__changelog=None, version__distributor=None,
                          version__distributor_url=None, version__maintainer=None, version__maintainer_url=None,
                          version__service_dependencies=[], version__dependencies=None, version__conflicts=None,
                          version__package__add_screenshot=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'))