From 6676b4ed90e19e2fd6ee5f4242cf85f64db145d8 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Tue, 8 Feb 2022 15:29:49 +0100 Subject: rework Hydrilla to use a separate tool for building its source packages * Hydrilla now depends on "Hydrilla builder" developed at: https://git.koszko.org/hydrilla-builder/ * Hydrilla repository is now REUSE-compliant * The debian packaging is temporarily not tested and likely to be broken * JSON schemas are now in use (through 'jsonschema' Python library) * This is not yet a release and some minor changes to the API on-fisk format are going to occur before that --- src/test/test_pydrilla.py | 153 ---------------------------------------------- 1 file changed, 153 deletions(-) delete mode 100644 src/test/test_pydrilla.py (limited to 'src/test/test_pydrilla.py') diff --git a/src/test/test_pydrilla.py b/src/test/test_pydrilla.py deleted file mode 100644 index 50757a7..0000000 --- a/src/test/test_pydrilla.py +++ /dev/null @@ -1,153 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later - -# Repository tests -# -# This file is part of Hydrilla -# -# Copyright (C) 2021 Wojtek Kosior -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -# -# I, Wojtek Kosior, thereby promise not to sue for violation of this -# file's license. Although I request that you do not make use this code -# in a proprietary program, I am not going to enforce this in court. - -import pytest -import sys -import shutil -from pathlib import Path -from hashlib import sha256 -from os import mkdir, unlink, environ -import json -from markupsafe import escape - -from pydrilla import pydrilla, create_app - -test_dir = Path(__file__).resolve().parent -packages_dir = test_dir.parent -development_config_path = test_dir / 'development_config.json' -example_content_dir = test_dir / 'example_content' - -@pytest.fixture -def client(): - app = create_app(development_config_path, flask_config={'TESTING': True}) - - with app.test_client() as client: - yield client - -@pytest.fixture -def development_config(): - with open(development_config_path) as config_file: - yield json.loads(pydrilla.strip_json_comments(config_file.read())) - -def test_api_basic(client, development_config): - def verify_sha256sum(source_name, file_object): - with open(example_content_dir / source_name / file_object['file'], - mode='rb') as file: - assert sha256(file.read()).digest().hex() == file_object['sha256'] - - response = client.get('/') - assert b'html' in response.data - sources_uri = development_config['hydrilla_sources_uri'] - assert escape(sources_uri).encode() in response.data - - for item_type in ['mapping', 'resource']: - response = client.get(f'/{item_type}s/helloapple') - assert response.status_code == 200 - definition = json.loads(response.data.decode()) - assert definition['type'] == item_type - assert definition['source_name'] == 'hello' - assert definition['version'] == [2021, 11, 10] - if item_type == 'resource': - assert type(definition['scripts']) is list - assert len(definition['scripts']) > 0 - for script_file in definition['scripts']: - verify_sha256sum(definition['source_name'], script_file) - - response = client.get(f'/{item_type}s/helloapple?ver=2021.11.10.0') - assert response.status_code == 200 - assert definition == json.loads(response.data.decode()) - - response = client.get(f'/{item_type}s/helloapple?ver=2021.11.10.999') - assert response.status_code == 404 - - response = client.get(f'/{item_type}s/helloapple?ver=random_bad_input') - assert response.status_code == 400 - - response = client.get(f'/{item_type}s/random-bad-identifier') - assert response.status_code == 404 - - response = client.get(f'/{item_type}s/helloapple?ver=all') - assert response.status_code == 200 - definitions = json.loads(response.data.decode()) - assert type(definitions) is list - assert all([d['type'] == item_type for d in definitions]) - assert any([d['version'] == [2021, 11, 10] for d in definitions]) - - response = client.get('/licenses/CC0-1.0') - assert response.status_code == 200 - definition = json.loads(response.data.decode()) - assert definition['type'] == 'license' - assert definition['long_name'] == 'Creative Commons Zero v1.0 Universal' - assert definition['source_name'] == 'hello' - - assert type(definition['legal_text']) is list - assert len(definition['legal_text']) > 0 - for license_file in definition['legal_text']: - verify_sha256sum(definition['source_name'], license_file) - - response = client.get('/licenses/random-bad-identifier') - assert response.status_code == 404 - - response = client.get('/sources/hello') - assert response.status_code == 200 - definition = json.loads(response.data.decode()) - - assert definition['source_name'] == 'hello' - assert type(definition['schema_version']) is list - - response = client.get('/sources/random-bad-identifier') - assert response.status_code == 404 - - response = client.get('/query?url=https://hachettebugs.koszko.org') - assert response.status_code == 200 - definitions = json.loads(response.data.decode()) - assert type(definitions) is list - assert all([d['type'] == 'mapping' for d in definitions]) - assert any([p['pattern'] == 'https://hachettebugs.koszko.org/***' - for d in definitions for p in d['payloads']]) - - response = client.get('/query?url=https://random_bad_domain.org/something') - assert response.status_code == 200 - definitions = json.loads(response.data.decode()) - assert definitions == [] - - resource_uri = development_config['static_resource_uri'] - response = client.get('/sources/hello/hello.js') - assert response.status_code == 301 - assert response.location == resource_uri + 'hello/hello.js' - response = client.get('/sources/random-bad-identifier/hello.js') - assert response.status_code == 404 - response = client.get('/sources/hello/random/bad/path') - assert response.status_code == 301 - assert response.location == resource_uri + 'hello/random/bad/path' - -def test_normalize_version(): - assert pydrilla.normalize_version([4, 5, 3, 0, 0]) == [4, 5, 3] - assert pydrilla.normalize_version([1, 0, 5, 0]) == [1, 0, 5] - assert pydrilla.normalize_version([3, 3]) == [3, 3] - -def test_strip_json_comments(development_config): - assert development_config['static_resource_uri'] == 'http://localhost:8000/' -- cgit v1.2.3