From 9955dabf773c3820de1fd4ffe78a2bd011682481 Mon Sep 17 00:00:00 2001 From: NotTHT Date: Wed, 16 Sep 2026 07:35:32 +0000 Subject: [PATCH 1/4] Add tests and ignore generated archives - Add local and GitHub Actions test coverage - Remove generated test archives - Ignore regenerated archives --- .github/workflows/tests.yml | 21 ++++++++ .gitignore | 4 ++ README.md | 15 +++++- tests/test.tar.gz | Bin 500 -> 0 bytes tests/test.zip | Bin 78389 -> 0 bytes tests/test_safe_extractor.py | 91 +++++++++++++++++++++++++++++++ tests/test_tmpweb.py | 102 +++++++++++++++++++++++++++++++++++ 7 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/tests.yml delete mode 100644 tests/test.tar.gz delete mode 100644 tests/test.zip create mode 100644 tests/test_safe_extractor.py create mode 100644 tests/test_tmpweb.py diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..d1b1853 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,21 @@ +name: Tests + +on: + push: + pull_request: + +permissions: + contents: read + +jobs: + unit-tests: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + - name: Run tests + run: python -m unittest discover -s tests -p 'test_*.py' -v diff --git a/.gitignore b/.gitignore index 06109db..2302c30 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,10 @@ coverage.xml .pytest_cache/ cover/ +# Test archives are generated locally by tests when needed. +tests/*.tar.gz +tests/*.zip + # Translations *.mo *.pot diff --git a/README.md b/README.md index 1d9c32f..dffba5c 100644 --- a/README.md +++ b/README.md @@ -56,9 +56,22 @@ I'd recommend adding this to the crontab: 0 */6 * * * curl -X DELETE http://127.0.0.1:8000 ``` +## Testing + +Run the test suite from the repository root with Python's standard-library test +runner: + +```bash +python3 -m unittest discover -s tests -p 'test_*.py' -v +``` + +The test suite runs without NGINX, Gunicorn, or access to the production +database. It uses temporary configuration, database, and extraction directories +so test runs remain isolated from the deployed service. + ## Roadmap/To Do -- [ ] Add tests. +- [x] Add tests. - [x] Improve front page, including adding terms of use. - [x] Migrate to shared infrastructure. - [x] Add better installation instructions. diff --git a/tests/test.tar.gz b/tests/test.tar.gz deleted file mode 100644 index 3e053d6bef6467b4e83597b4e594950deecab29b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500 zcmVgiwFqKO7UX=19W9`bS`vZascg=O^=%}5QcN+S4=qTH6@FcQir$8&TiRVx6<$l+ zZTi86(DvG*cA+~dY*z`qmMup6$!m~WTFF&pTCT8SadJpyrBzrjoio8Zvz(6$P--GHlUC2oyznacUtcThIHxSbAntX_7~fcrSuLxI@EvMFK%t>VUv zxuogB@qon}3p=S4Gzg8_BJ|p&7*IgN+pEi=-)aGJ1-3&tHs%Ydo(mMN#>O`_HsibV z*ZtD!-~ayauJKGY9((^uk(|7L|NqYyETi}T9K@5);m6+pM>9ululnJgxA?_=YnprW qUj#p2x^IFY2!bF8f*=TjAP9mW2!bF8f*=UucYXm;SA1sxC;$KvTK=m5 diff --git a/tests/test.zip b/tests/test.zip deleted file mode 100644 index a79d739ccd65f2bb80c64073ea36ec8087216dbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78389 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

_I^2$3vH@bsP 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

UV8lO7Ya1%oW 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 E0GknsIRF3v diff --git a/tests/test_safe_extractor.py b/tests/test_safe_extractor.py new file mode 100644 index 0000000..d2d5893 --- /dev/null +++ b/tests/test_safe_extractor.py @@ -0,0 +1,91 @@ +import io +import os +import tarfile +import tempfile +import unittest +import zipfile +from pathlib import Path + +from src.safe_extractor import safe_extract + + +class SafeExtractTests(unittest.TestCase): + def test_extracts_zip_archive(self): + archive = io.BytesIO() + with zipfile.ZipFile(archive, "w") as zip_file: + zip_file.writestr("site/index.html", "

Hello

") + archive.seek(0) + + with tempfile.TemporaryDirectory() as directory: + extract_path = Path(directory) + safe_extract(archive, extract_path, archive_type="zip") + + self.assertEqual( + (extract_path / "site/index.html").read_text(), "

Hello

" + ) + + def test_extracts_tar_archive(self): + archive = io.BytesIO() + with tarfile.open(fileobj=archive, mode="w:gz") as tar_file: + content = b"body{}" + info = tarfile.TarInfo("site/style.css") + info.size = len(content) + tar_file.addfile(info, io.BytesIO(content)) + archive.seek(0) + + with tempfile.TemporaryDirectory() as directory: + extract_path = Path(directory) + safe_extract(archive, extract_path, archive_type="tar") + + self.assertEqual((extract_path / "site/style.css").read_bytes(), b"body{}") + + def test_blocks_zip_path_traversal(self): + archive = io.BytesIO() + with zipfile.ZipFile(archive, "w") as zip_file: + zip_file.writestr("../outside.txt", "should not be written") + zip_file.writestr("site/index.html", "safe") + archive.seek(0) + + with tempfile.TemporaryDirectory() as directory: + extract_path = Path(directory) + safe_extract(archive, extract_path, archive_type="zip") + + self.assertFalse((extract_path.parent / "outside.txt").exists()) + self.assertEqual((extract_path / "site/index.html").read_text(), "safe") + + def test_rejects_invalid_zip(self): + with tempfile.TemporaryDirectory() as directory: + with self.assertRaisesRegex(ValueError, "Bad zip file"): + safe_extract( + io.BytesIO(b"not a zip"), + Path(directory), + archive_type="zip", + ) + + def test_rejects_archive_over_size_limit(self): + archive = io.BytesIO() + with zipfile.ZipFile(archive, "w") as zip_file: + zip_file.writestr("site/index.html", "12345") + archive.seek(0) + + with tempfile.TemporaryDirectory() as directory: + with self.assertRaisesRegex(ValueError, "too big"): + safe_extract( + archive, + Path(directory), + max_size=4, + archive_type="zip", + ) + + def test_restores_working_directory_after_failure(self): + original_directory = Path.cwd() + + with tempfile.TemporaryDirectory() as directory: + with self.assertRaisesRegex(ValueError, "Unknown file type"): + safe_extract(io.BytesIO(), Path(directory), archive_type="rar") + + self.assertEqual(Path.cwd(), original_directory) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_tmpweb.py b/tests/test_tmpweb.py new file mode 100644 index 0000000..102ca7c --- /dev/null +++ b/tests/test_tmpweb.py @@ -0,0 +1,102 @@ +import base64 +import importlib +import os +import sys +import tempfile +import unittest +from io import BytesIO +from pathlib import Path + + +class TmpwebTests(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.temp_directory = tempfile.TemporaryDirectory() + cls.root = Path(cls.temp_directory.name) + (cls.root / "config.toml").write_text( + f'domain = "https://example.test"\n' + "default_retention = 7\n" + "max_site_size = 1024\n" + f'web_root = "{cls.root / "web"}"\n' + f'database_location = "{cls.root / "tmpweb.db"}"\n' + ) + (cls.root / "web").mkdir() + cls.original_directory = Path.cwd() + os.chdir(cls.root) + sys.path.insert(0, str(cls.original_directory / "src")) + cls.module = importlib.import_module("tmpweb") + + @classmethod + def tearDownClass(cls): + os.chdir(cls.original_directory) + sys.path.remove(str(cls.original_directory / "src")) + sys.modules.pop("tmpweb", None) + cls.temp_directory.cleanup() + + def test_is_valid_json(self): + self.assertTrue(self.module.is_valid_json(b'{"site": true}')) + self.assertTrue(self.module.is_valid_json(b" [1, 2] ")) + self.assertFalse(self.module.is_valid_json(b"")) + self.assertFalse(self.module.is_valid_json(b"{invalid}")) + + def test_unwrap_multipart_returns_first_file(self): + multipart = ( + b"--boundary\r\n" + b'Content-Disposition: form-data; name="file"; filename="site.zip"\r\n' + b"Content-Type: application/zip\r\n\r\n" + b"archive contents\r\n" + b"--boundary--\r\n" + ) + + self.assertEqual(self.module.unwrap_multipart(multipart), b"archive contents") + + def test_get_web_root_finds_directory_containing_files(self): + site_root = self.root / "nested" + (site_root / "site" / "public").mkdir(parents=True) + (site_root / "site" / "public" / "index.html").write_text("home") + + self.assertEqual( + self.module.get_web_root(site_root), site_root / "site" / "public" + ) + + def test_authorisation_accepts_matching_token(self): + token = "tmpweb_test_token" + self.module.db.execute( + "INSERT INTO api_tokens VALUES(?, ?);", (token, "test@example.test") + ) + self.module.db.commit() + credentials = base64.b64encode(f"token:{token}".encode()).decode() + + self.assertTrue( + self.module.is_authorised({"HTTP_AUTHORIZATION": f"Basic {credentials}"}) + ) + self.assertFalse( + self.module.is_authorised({"HTTP_AUTHORIZATION": "Bearer anything"}) + ) + + def test_app_routes_ping_and_rejects_remote_delete(self): + responses = [] + + def start_response(status, headers): + responses.append((status, headers)) + + ping_body = self.module.app( + {"REQUEST_METHOD": "GET", "PATH_INFO": "/ping"}, start_response + ) + self.assertEqual(responses[-1][0], "200 OK") + self.assertEqual(ping_body, []) + + delete_body = self.module.app( + { + "REQUEST_METHOD": "DELETE", + "PATH_INFO": "/", + "REMOTE_ADDR": "192.0.2.10", + }, + start_response, + ) + self.assertEqual(responses[-1][0], "403 Forbidden") + self.assertEqual(delete_body, []) + + +if __name__ == "__main__": + unittest.main() From 91b9495c89dbc0695394cfd598282ab1ad7371d6 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 16 Sep 2026 07:38:51 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_safe_extractor.py | 1 - tests/test_tmpweb.py | 1 - 2 files changed, 2 deletions(-) diff --git a/tests/test_safe_extractor.py b/tests/test_safe_extractor.py index d2d5893..c1e7c58 100644 --- a/tests/test_safe_extractor.py +++ b/tests/test_safe_extractor.py @@ -1,5 +1,4 @@ import io -import os import tarfile import tempfile import unittest diff --git a/tests/test_tmpweb.py b/tests/test_tmpweb.py index 102ca7c..7556412 100644 --- a/tests/test_tmpweb.py +++ b/tests/test_tmpweb.py @@ -4,7 +4,6 @@ import sys import tempfile import unittest -from io import BytesIO from pathlib import Path From 9d59363f8f0f912b964e3822d7f68f4778885dab Mon Sep 17 00:00:00 2001 From: NotTHT Date: Wed, 16 Sep 2026 07:59:27 +0000 Subject: [PATCH 3/4] fix: satisfy Ruff SIM117 in safe extractor tests --- tests/test_safe_extractor.py | 39 +++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/tests/test_safe_extractor.py b/tests/test_safe_extractor.py index c1e7c58..77f4856 100644 --- a/tests/test_safe_extractor.py +++ b/tests/test_safe_extractor.py @@ -53,13 +53,14 @@ def test_blocks_zip_path_traversal(self): self.assertEqual((extract_path / "site/index.html").read_text(), "safe") def test_rejects_invalid_zip(self): - with tempfile.TemporaryDirectory() as directory: - with self.assertRaisesRegex(ValueError, "Bad zip file"): - safe_extract( - io.BytesIO(b"not a zip"), - Path(directory), - archive_type="zip", - ) + with tempfile.TemporaryDirectory() as directory, self.assertRaisesRegex( + ValueError, "Bad zip file" + ): + safe_extract( + io.BytesIO(b"not a zip"), + Path(directory), + archive_type="zip", + ) def test_rejects_archive_over_size_limit(self): archive = io.BytesIO() @@ -67,21 +68,23 @@ def test_rejects_archive_over_size_limit(self): zip_file.writestr("site/index.html", "12345") archive.seek(0) - with tempfile.TemporaryDirectory() as directory: - with self.assertRaisesRegex(ValueError, "too big"): - safe_extract( - archive, - Path(directory), - max_size=4, - archive_type="zip", - ) + with tempfile.TemporaryDirectory() as directory, self.assertRaisesRegex( + ValueError, "too big" + ): + safe_extract( + archive, + Path(directory), + max_size=4, + archive_type="zip", + ) def test_restores_working_directory_after_failure(self): original_directory = Path.cwd() - with tempfile.TemporaryDirectory() as directory: - with self.assertRaisesRegex(ValueError, "Unknown file type"): - safe_extract(io.BytesIO(), Path(directory), archive_type="rar") + with tempfile.TemporaryDirectory() as directory, self.assertRaisesRegex( + ValueError, "Unknown file type" + ): + safe_extract(io.BytesIO(), Path(directory), archive_type="rar") self.assertEqual(Path.cwd(), original_directory) From 6bdd79d70ba704d21b53653b585cfcf34357d700 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 16 Sep 2026 08:03:59 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_safe_extractor.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/test_safe_extractor.py b/tests/test_safe_extractor.py index 77f4856..d5c1466 100644 --- a/tests/test_safe_extractor.py +++ b/tests/test_safe_extractor.py @@ -53,8 +53,9 @@ def test_blocks_zip_path_traversal(self): self.assertEqual((extract_path / "site/index.html").read_text(), "safe") def test_rejects_invalid_zip(self): - with tempfile.TemporaryDirectory() as directory, self.assertRaisesRegex( - ValueError, "Bad zip file" + with ( + tempfile.TemporaryDirectory() as directory, + self.assertRaisesRegex(ValueError, "Bad zip file"), ): safe_extract( io.BytesIO(b"not a zip"), @@ -68,8 +69,9 @@ def test_rejects_archive_over_size_limit(self): zip_file.writestr("site/index.html", "12345") archive.seek(0) - with tempfile.TemporaryDirectory() as directory, self.assertRaisesRegex( - ValueError, "too big" + with ( + tempfile.TemporaryDirectory() as directory, + self.assertRaisesRegex(ValueError, "too big"), ): safe_extract( archive, @@ -81,8 +83,9 @@ def test_rejects_archive_over_size_limit(self): def test_restores_working_directory_after_failure(self): original_directory = Path.cwd() - with tempfile.TemporaryDirectory() as directory, self.assertRaisesRegex( - ValueError, "Unknown file type" + with ( + tempfile.TemporaryDirectory() as directory, + self.assertRaisesRegex(ValueError, "Unknown file type"), ): safe_extract(io.BytesIO(), Path(directory), archive_type="rar")