first commit
This commit is contained in:
commit
0efaae1715
27 files changed
+1455
No files matched your search
@@ -0,0 +1,34 @@
|
||||
import importlib.util
|
||||
import os
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
os.environ.setdefault("REPOSITORY_URL", "https://repo.example.test")
|
||||
spec = importlib.util.spec_from_file_location("dashboard_app", ROOT / "dashboard/app.py")
|
||||
app = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(app)
|
||||
|
||||
|
||||
def test_package_filename_parsing():
|
||||
assert app.parse_package(Path("rustbox_0.0.5-1_amd64.deb"), "deb") == ("rustbox", "0.0.5-1", "amd64")
|
||||
assert app.parse_package(Path("rustbox-0.0.5-1.x86_64.rpm"), "rpm") == ("rustbox", "0.0.5-1", "x86_64")
|
||||
|
||||
|
||||
def test_catalog_reads_linux_snapshot():
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
rel = root / "releases/one"
|
||||
(rel / "apt/pool/main/r/rustbox").mkdir(parents=True)
|
||||
(rel / "rpm/x86_64").mkdir(parents=True)
|
||||
(rel / "suse/x86_64").mkdir(parents=True)
|
||||
(rel / "LINUX-BUILD-INFO.txt").write_text("app_version=0.0.5\npackage_release=1\nbuilt_at=2026-10-30T12:00:00Z\nsource_commit=abc\npackaging_revision=1\n")
|
||||
(rel / "SUSE-BUILD-INFO.txt").write_text("app_version=0.0.5\npackage_release=1\nbuilt_at=2026-10-30T12:00:00Z\nsource_commit=abc\npackaging_revision=1\n")
|
||||
(rel / "apt/pool/main/r/rustbox/rustbox_0.0.5-1_amd64.deb").write_bytes(b"deb")
|
||||
(rel / "rpm/x86_64/rustbox-0.0.5-1.x86_64.rpm").write_bytes(b"rpm")
|
||||
(rel / "suse/x86_64/rustbox-0.0.5-1.x86_64.rpm").write_bytes(b"rpm")
|
||||
(root / "current").symlink_to("releases/one")
|
||||
catalog = app.generate_catalog(root)
|
||||
assert catalog["ready"] is True
|
||||
assert catalog["builds"]["linux"]["app_version"] == "0.0.5"
|
||||
assert len(catalog["packages"]) == 3
|
||||
@@ -0,0 +1,59 @@
|
||||
from pathlib import Path
|
||||
import tomllib
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
def test_packaged_config_matches_linux_layout():
|
||||
config = tomllib.loads((ROOT / "packaging/rustbox.toml").read_text())
|
||||
assert config["host"] == "0.0.0.0"
|
||||
assert config["data_dir"] == "/var/lib/rustbox"
|
||||
assert config["log_dir"] == "/var/log/rustbox"
|
||||
assert config["default_interface_skin"] == "apple-mail"
|
||||
assert config["max_attachment_size_mb"] == 50
|
||||
assert config["max_message_size_mb"] == 100
|
||||
|
||||
|
||||
def test_systemd_hardening_and_paths():
|
||||
unit = (ROOT / "packaging/rustbox.service").read_text()
|
||||
for needle in (
|
||||
"User=rustbox",
|
||||
"Group=rustbox",
|
||||
"WorkingDirectory=/var/lib/rustbox",
|
||||
"ExecStart=/usr/local/bin/rustbox",
|
||||
"StateDirectory=rustbox",
|
||||
"LogsDirectory=rustbox",
|
||||
"ProtectSystem=strict",
|
||||
"ProtectHome=true",
|
||||
"NoNewPrivileges=true",
|
||||
"StandardOutput=null",
|
||||
):
|
||||
assert needle in unit
|
||||
|
||||
|
||||
def test_logrotate_keeps_seven_daily_rotations():
|
||||
data = (ROOT / "packaging/rustbox.logrotate").read_text()
|
||||
assert "/var/log/rustbox/rustbox.log" in data
|
||||
assert "daily" in data
|
||||
assert "rotate 7" in data
|
||||
assert "create 0600 rustbox rustbox" in data
|
||||
|
||||
|
||||
def test_package_runtime_dependencies_are_explicit():
|
||||
script = (ROOT / "scripts/prepare-package.sh").read_text()
|
||||
for needle in (
|
||||
"- gnupg",
|
||||
"- libssl3 | libssl3t64",
|
||||
"- gnupg2",
|
||||
"- openssl-libs",
|
||||
"- gpg2",
|
||||
"- libopenssl3",
|
||||
):
|
||||
assert needle in script
|
||||
|
||||
|
||||
def test_docker_context_excludes_secrets_and_state():
|
||||
data = (ROOT / ".dockerignore").read_text().splitlines()
|
||||
assert ".env" in data
|
||||
assert "gpg/" in data
|
||||
assert "data/" in data
|
||||
Reference in new issue
Block a user