Files
ProxMenux/oci/tests/test_pocketbase_persistence.py
T

49 lines
2.0 KiB
Python

"""Regression coverage for PocketBase's native OCI data mount."""
from pathlib import Path
import sys
import unittest
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "src"))
INSTALLER = ROOT / "remote" / "install_oci.sh"
from proxmenux_oci.catalog import Catalog
class PocketBasePersistenceTests(unittest.TestCase):
def test_data_volume_uses_the_image_working_directory(self):
template = Catalog(ROOT).compose("pocketbase")
volumes = template["container_contract"]["volumes"]
self.assertEqual(len(volumes), 1)
self.assertEqual(volumes[0]["container_path"], "/pocketbase/pb_data")
self.assertTrue(volumes[0]["required"])
self.assertTrue(volumes[0]["managed_volume"]["backup"])
def test_first_install_seeds_only_the_new_managed_data_volume(self):
template = Catalog(ROOT).compose("pocketbase")
seeds = template["proxmox"]["installer_profile"]["volume_seeds"]
self.assertEqual(seeds, [{
"container_path": "/pocketbase/pb_data",
"source_path": "/pocketbase/pb_data",
"mount_types": ["managed-volume", "host-bind"],
}])
def test_seed_mechanism_is_opt_in_and_never_overwrites_existing_data(self):
installer = INSTALLER.read_text(encoding="utf-8")
self.assertIn('and all(.[]; . == "managed-volume" or . == "host-bind")', installer)
self.assertIn('[[ $selected_mount_type == managed-volume ]] && is_reused_managed_mount "$target";', installer)
self.assertIn('Refusing to seed a persistent volume that already contains data:', installer)
self.assertIn('Keeping existing host data without seeding it:', installer)
self.assertIn('mktemp -d "/var/tmp/proxmenux-oci-seed-${VMID}.XXXXXX"', installer)
self.assertIn('cleanup_volume_seed_staging || true', installer)
self.assertLess(installer.index('capture_volume_seeds\nMOUNT_INDEX=0'),
installer.index('while IFS=$\'\\t\' read -r TYPE TARGET'))
if __name__ == "__main__":
unittest.main()