def __init__(self) -> None: self.max_info_size = 512 * 1024 # bytes self.download_root = settings.RELEASE_DOWNLOAD_ROOT # type: str self.download_max_timeout = 60 self.download_max_redirects = 10 self.download_max_size = 20 * (1024 ** 2) self.info_schema = read_relative_file(__file__, 'info.xsd') self.info_xslt = read_relative_file(__file__, 'info.xslt') self.pre_info_xslt = read_relative_file(__file__, 'pre-info.xslt')
def __init__(self) -> None: self.download_root = settings.RELEASE_DOWNLOAD_ROOT # type: str self.max_info_size = settings.MAX_DOWNLOAD_INFO_XML_SIZE self.download_max_timeout = settings.MAX_DOWNLOAD_TIMEOUT self.download_max_redirects = settings.MAX_DOWNLOAD_REDIRECTS self.download_max_size = settings.MAX_DOWNLOAD_SIZE self.info_schema = read_relative_file(__file__, 'info.xsd') self.info_xslt = read_relative_file(__file__, 'info.xslt') self.pre_info_xslt = read_relative_file(__file__, 'pre-info.xslt') self.languages = settings.LANGUAGES
def __init__(self) -> None: self.download_root = settings.RELEASE_DOWNLOAD_ROOT # type: str self.max_file_size = settings.MAX_DOWNLOAD_FILE_SIZE self.download_max_timeout = settings.MAX_DOWNLOAD_TIMEOUT self.download_max_redirects = settings.MAX_DOWNLOAD_REDIRECTS self.download_max_size = settings.MAX_DOWNLOAD_SIZE self.info_schema = read_relative_file(__file__, 'info.xsd') self.info_xslt = read_relative_file(__file__, 'info.xslt') self.pre_info_xslt = read_relative_file(__file__, 'pre-info.xslt') self.db_schema = read_relative_file(__file__, 'database.xsd') self.pre_db_xslt = read_relative_file(__file__, 'pre-database.xslt') self.languages = settings.LANGUAGES
def setUp(self): container = Container() self.importer = container.resolve(AppImporter) self.config = ReleaseConfig() self.min = read_relative_file(__file__, 'data/infoxmls/minimal.xml') self.full = read_relative_file(__file__, 'data/infoxmls/full.xml') self.user = get_user_model().objects.create_user(username='******', password='******', email='*****@*****.**') self.app = App.objects.create(pk='news', owner=self.user) Screenshot.objects.create(url='https://google.com', ordering=1, app=self.app)
def setUp(self): container = Container() self.importer = container.resolve(AppImporter) self.config = ReleaseConfig() self.min = read_relative_file(__file__, 'data/infoxmls/minimal.xml') self.full = read_relative_file(__file__, 'data/infoxmls/fullimport.xml') self.user = get_user_model().objects.create_user(username='******', password='******', email='*****@*****.**') self.app = App.objects.create(pk='news', owner=self.user) Screenshot.objects.create(url='https://google.com', ordering=1, app=self.app)
def test_build_files(self): with self.settings(APP_SCAFFOLDING_PROFILES={14: { 'owncloud_version': '9.2' }}): expected = read_relative_file(__file__, 'data/info.xml').strip() result = build_files(self.args) info = result['theapp/appinfo/info.xml'].strip() self.assertEqual(expected, info)
def test_build_archive(self): result = build_archive(self.args) expected = read_relative_file(__file__, 'data/info.xml').strip() with tarfile.open(fileobj=result, mode='r:gz') as f: member = f.getmember('theapp/appinfo/info.xml') with f.extractfile(member) as info: result = info.read().strip().decode('utf-8') self.assertEqual(expected, result)
def test_build_files(self): with self.settings( APP_SCAFFOLDING_PROFILES={14: { 'owncloud_version': '9.2' }}): expected = read_relative_file(__file__, 'data/info.xml').strip() result = build_files(self.args) info = result['theapp/appinfo/info.xml'].strip() self.assertEqual(expected, info)
def test_invalid_app_id(self): xml = read_relative_file(__file__, 'data/infoxmls/minimal.xml') downloader = self.container.resolve(AppReleaseDownloader) downloader.get_archive = MagicMock(return_value=FakeDownload()) extractor = self.container.resolve(GunZipAppMetadataExtractor) extractor.extract_app_metadata = MagicMock(return_value=(xml, 'new')) provider = self.container.resolve(AppReleaseProvider) with self.assertRaises(InvalidAppDirectoryException): provider.get_release_info('http://google.com')
def test_build_archive(self): with self.settings(APP_SCAFFOLDING_PROFILES={14: { 'owncloud_version': '9.2' }}): result = build_archive(self.args) expected = read_relative_file(__file__, 'data/info.xml').strip() with tarfile.open(fileobj=result, mode='r:gz') as f: member = f.getmember('theapp/appinfo/info.xml') with f.extractfile(member) as info: result = info.read().strip().decode('utf-8') self.assertEqual(expected, result)
def test_invalid_app_id(self): xml = read_relative_file(__file__, 'data/infoxmls/minimal.xml') downloader = self.container.resolve(AppReleaseDownloader) downloader.get_archive = MagicMock(return_value=FakeDownload()) extractor = self.container.resolve(GunZipAppMetadataExtractor) extractor.extract_app_metadata = MagicMock( return_value=(xml, '', 'new', 'change')) provider = self.container.resolve(AppReleaseProvider) with self.assertRaises(InvalidAppDirectoryException): provider.get_release_info('http://google.com')
def test_build_archive(self): with self.settings( APP_SCAFFOLDING_PROFILES={14: { 'owncloud_version': '9.2' }}): result = build_archive(self.args) expected = read_relative_file(__file__, 'data/info.xml').strip() with tarfile.open(fileobj=result, mode='r:gz') as f: member = f.getmember('theapp/appinfo/info.xml') with f.extractfile(member) as info: result = info.read().strip().decode('utf-8') self.assertEqual(expected, result)
def test_valid_checksum(self): xml = read_relative_file(__file__, 'data/infoxmls/minimal.xml') downloader = self.container.resolve(AppReleaseDownloader) downloader.get_archive = MagicMock(return_value=FakeDownload()) extractor = self.container.resolve(GunZipAppMetadataExtractor) extractor.extract_app_metadata = MagicMock(return_value=(xml, 'news')) provider = self.container.resolve(AppReleaseProvider) info = provider.get_release_info('http://google.com') self.assertEqual( 'f44ff51ce0cd12e37367af5cb02ccab0e5fc29625b1b013665b833435' '0bc8836', info['app']['release']['checksum'])
def test_valid_checksum(self): xml = read_relative_file(__file__, 'data/infoxmls/minimal.xml') downloader = self.container.resolve(AppReleaseDownloader) downloader.get_archive = MagicMock(return_value=FakeDownload()) extractor = self.container.resolve(GunZipAppMetadataExtractor) extractor.extract_app_metadata = MagicMock(return_value=(xml, 'news')) provider = self.container.resolve(AppReleaseProvider) info = provider.get_release_info('http://google.com') self.assertEqual( 'cc29634a832affe4000c561e64e746850ca984aa1a3b89' '6aca510375c53eb25d', info['app']['release']['checksum'])
def _read_cert(self, file: str) -> str: return read_relative_file(__file__, 'data/certificates/%s' % file)
class AppRegisterTest(ApiTest): create_url = reverse('api:v1:app-register') _cert = read_relative_file(__file__, '../../../certificate/tests/data/certificates/' 'news-old.crt').strip() def _create_app(self, owner, app_id): return App.objects.create(owner=owner, id=app_id) def test_register_unauthenticated(self): response = self.api_client.post(self.create_url, data={ 'signature': 'sign', 'certificate': 'cert' }, format='json') self.assertEqual(401, response.status_code) def test_register_unauthorized(self): owner = get_user_model().objects.create_user(username='******', password='******', email='*****@*****.**') self._create_app(owner, 'news') self._login_token() with self.settings(VALIDATE_CERTIFICATES=False): response = self.api_client.post(self.create_url, data={ 'signature': 'sign', 'certificate': self._cert }, format='json') self.assertEqual(403, response.status_code) def test_register_transfer(self): owner = get_user_model().objects.create_user(username='******', password='******', email='*****@*****.**') app = self._create_app(owner, 'news') app.ownership_transfer_enabled = True app.save() self._login_token() with self.settings(VALIDATE_CERTIFICATES=False): response = self.api_client.post(self.create_url, data={ 'signature': 'sign', 'certificate': self._cert }, format='json') self.assertEqual(204, response.status_code) app = App.objects.get(id='news') self.assertEqual(self.user, app.owner) self.assertFalse(app.ownership_transfer_enabled) def test_register(self): self._login() with self.settings(VALIDATE_CERTIFICATES=False): response = self.api_client.post(self.create_url, data={ 'signature': 'sign', 'certificate': self._cert }, format='json') self.assertEqual(201, response.status_code) app = App.objects.get(id='news') self.assertEqual(self.user, app.owner) self.assertEqual(self._cert, app.certificate) def test_register_update(self): app = self._create_app(self.user, 'news') app.certificate = 'blubb' app.save() AppRelease.objects.create(version='1.0.0', app=app) self.assertEqual(1, App.objects.get(id='news').releases.all().count()) self._login() with self.settings(VALIDATE_CERTIFICATES=False): response = self.api_client.post(self.create_url, data={ 'signature': 'sign', 'certificate': self._cert }, format='json') self.assertEqual(204, response.status_code) app = App.objects.get(id='news') self.assertEqual(self.user, app.owner) self.assertEqual(self._cert, app.certificate) self.assertEqual(0, app.releases.all().count())
def read_cert(self, name: str) -> str: path = 'data/%s' % name return read_relative_file(__file__, path)
def read_translations(self): return read_relative_file(__file__, self.trans_path).strip()
def _read(self, path: str) -> str: return read_relative_file(__file__, '../../../tests/data/%s' % path)
def test_build_files(self): expected = read_relative_file(__file__, 'data/info.xml').strip() result = build_files(self.args) info = result['theapp/appinfo/info.xml'].strip() self.assertEqual(expected, info)