Mercurial > hg > orthanc-tests
diff NewTests/PostgresUpgrades/test_pg_upgrades.py @ 596:b1e1c7149a37
new PG upgrades tests
author | Alain Mazy <am@osimis.io> |
---|---|
date | Thu, 21 Dec 2023 18:02:49 +0100 |
parents | |
children | f3475c3e42e5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NewTests/PostgresUpgrades/test_pg_upgrades.py Thu Dec 21 18:02:49 2023 +0100 @@ -0,0 +1,98 @@ +import subprocess +import time +import unittest +from orthanc_api_client import OrthancApiClient +from helpers import Helpers + +import pathlib +import os +here = pathlib.Path(__file__).parent.resolve() + + +def get_container_health(container_name): + try: + # Run the docker inspect command + result = subprocess.run( + ["docker", "inspect", "--format", "{{.State.Health.Status}}", container_name], + capture_output=True, + text=True, + check=True, + ) + + # Extract the health status from the command output + return result.stdout.strip() + + except subprocess.CalledProcessError as e: + print(f"Error checking container health: {e}") + return None + +def wait_container_healthy(container_name): + retry = 0 + + while (get_container_health(container_name) != "healthy" and retry < 200): + print(f"Waiting for {container_name} to be healty") + time.sleep(1) + +class TestPgUpgrades(unittest.TestCase): + + @classmethod + def setUpClass(cls): + os.chdir(here) + print("Cleaning old compose") + subprocess.run(["docker", "compose", "down", "-v", "--remove-orphans"], check=True) + + def test_upgrades_downgrades_with_pg_15(self): + + print("Launching PG-15 server") + subprocess.run(["docker", "compose", "up", "pg-15", "-d"], check=True) + wait_container_healthy("pg-15") + + print("Launching old Orthanc (PG v2.0)") + subprocess.run(["docker", "compose", "up", "orthanc-pg-15-2", "-d"], check=True) + + o = OrthancApiClient("http://localhost:8049") + o.wait_started() + + instances = o.upload_folder(here / "../../Database/Knee") + + print("Stopping old Orthanc ") + subprocess.run(["docker", "compose", "stop", "orthanc-pg-15-2"], check=True) + time.sleep(2) + + print("Launching newest Orthanc") + subprocess.run(["docker", "compose", "up", "orthanc-pg-15-under-tests", "-d"], check=True) + + o = OrthancApiClient("http://localhost:8050") + o.wait_started() + + # make sure we can 'play' with Orthanc + o.instances.get_tags(orthanc_id=instances[0]) + o.instances.delete_all() + instances = o.upload_folder(here / "../../Database/Knee") + + print("Stopping new Orthanc ") + subprocess.run(["docker", "compose", "stop", "orthanc-pg-15-under-tests"], check=True) + time.sleep(2) + + print("TODO Downgrading Orthanc DB and restart an Orthanc 23.12.1") + # ... + + def test_latest_orthanc_with_pg_9(self): + print("Launching PG-9 server") + subprocess.run(["docker", "compose", "up", "pg-9", "-d"], check=True) + wait_container_healthy("pg-9") + + print("Launching newest Orthanc") + subprocess.run( + ["docker", "compose", "up", "orthanc-pg-9-under-tests", "-d"], + env= { + "ORTHANC_IMAGE_UNDER_TESTS": Helpers.orthanc_under_tests_docker_image + }, + check=True) + + o = OrthancApiClient("http://localhost:8051") + o.wait_started() + instances = o.upload_folder(here / "../../Database/Knee") + o.instances.delete(orthanc_ids=instances) + + subprocess.run(["docker", "compose", "down", "-v", "--remove-orphans"], check=True)