Mercurial > hg > orthanc-tests
diff NewTests/MaxStorage/test_max_storage_pg.py @ 624:543e372d2265
added a PG max storage test
author | Alain Mazy <am@osimis.io> |
---|---|
date | Wed, 14 Feb 2024 11:25:40 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NewTests/MaxStorage/test_max_storage_pg.py Wed Feb 14 11:25:40 2024 +0100 @@ -0,0 +1,134 @@ +import unittest +import time +import os +import threading +from helpers import OrthancTestCase, Helpers + +from orthanc_api_client import OrthancApiClient, ChangeType +from orthanc_api_client.exceptions import HttpError +from orthanc_api_client import helpers as OrthancHelpers + +from orthanc_tools import OrthancTestDbPopulator + +import pathlib +import subprocess +import glob +here = pathlib.Path(__file__).parent.resolve() + + +class TestMaxStoragePG(OrthancTestCase): + + @classmethod + def terminate(cls): + + if Helpers.is_docker(): + subprocess.run(["docker", "rm", "-f", "pg-server"]) + else: + cls.pg_service_process.terminate() + + + @classmethod + def prepare(cls): + test_name = "MaxStoragePG" + cls._storage_name = "max-storage-pg" + network_name = "max-storage-pg" + + print(f'-------------- preparing {test_name} tests') + + cls.clear_storage(storage_name=cls._storage_name) + + pg_hostname = "localhost" + if Helpers.is_docker(): + pg_hostname = "pg-server" + cls.create_docker_network(network_name) + + config = { + "PostgreSQL" : { + "EnableStorage": False, + "EnableIndex": True, + "Host": pg_hostname, + "Port": 5432, + "Database": "postgres", + "Username": "postgres", + "Password": "postgres", + "IndexConnectionsCount": 10, + "MaximumConnectionRetries" : 2000, + "ConnectionRetryInterval" : 5, + "TransactionMode": "ReadCommitted", + #"TransactionMode": "Serializable", + "EnableVerboseLogs": True + }, + "AuthenticationEnabled": False, + "OverwriteInstances": True, + "MaximumStorageSize": 1, + "MaximumStorageMode": "Recycle" + # "MaximumPatientCount": 1, + # "MaximumStorageMode": "Reject" + } + + config_path = cls.generate_configuration( + config_name=f"{test_name}", + storage_name=cls._storage_name, + config=config, + plugins=Helpers.plugins + ) + + # launch the docker PG server + print('--------------- launching PostgreSQL server ------------------') + + pg_cmd = [ + "docker", "run", "--rm", + "-p", "5432:5432", + "--name", "pg-server", + "--env", "POSTGRES_HOST_AUTH_METHOD=trust" + ] + + if Helpers.is_docker(): + pg_cmd.extend(["--network", network_name]) + pg_cmd.append("postgres:15") + + cls.pg_service_process = subprocess.Popen(pg_cmd) + time.sleep(5) + + if Helpers.break_after_preparation: + print(f"++++ It is now time to start your Orthanc under tests with configuration file '{config_path}' +++++") + input("Press Enter to continue") + else: + cls.launch_orthanc_under_tests( + config_name=f"{test_name}", + storage_name=cls._storage_name, + config=config, + plugins=Helpers.plugins, + docker_network=network_name + ) + + cls.o = OrthancApiClient(cls.o._root_url) + cls.o.wait_started() + cls.o.delete_all_content() + + + def test_upload(self): + self.o.delete_all_content() + self.clear_storage(storage_name=self._storage_name) + + uploaded_instances_ids = [] + counter = 0 + # upload 10 images of 500x500, since the MaximumStorageSize is 1MB, only 2 of them should remain in the storage + for i in range(0, 10): + counter += 1 + dicom_file = OrthancHelpers.generate_test_dicom_file(width=500, height=500, + tags = { + "PatientID" : f"{i}", + "StudyInstanceUID" : f"{i}", + "SeriesInstanceUID" : f"{i}.{counter%10}" + }) + try: + uploaded_instances_ids.extend(self.o.upload(dicom_file)) + except HttpError as er: + if er.http_status_code == 507: + pass # ignore + + # some instances have been discarded + self.assertLess(len(self.o.instances.get_all_ids()), 10) + self.assertLess(len(self.o.patients.get_all_ids()), 10) + self.assertLess(self.o.get_statistics().total_disk_size, 1*1024*1024)