Mercurial > hg > orthanc-tests
annotate NewTests/helpers.py @ 608:ba06331ac8dd
new test for issue #219
author | Alain Mazy <am@osimis.io> |
---|---|
date | Wed, 24 Jan 2024 13:23:29 +0100 |
parents | 3e15e950c462 |
children | 4b3d13e498a5 |
rev | line source |
---|---|
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
1 import unittest |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
2 from orthanc_api_client import OrthancApiClient |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
3 import subprocess |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
4 import json |
490 | 5 import os |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
6 import typing |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
7 import shutil |
592 | 8 import glob |
601
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
9 import time |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
10 from threading import Thread |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
11 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
12 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
13 import pathlib |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
14 here = pathlib.Path(__file__).parent.resolve() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
15 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
16 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
17 default_base_config = { |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
18 "AuthenticationEnabled": False, |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
19 "RemoteAccessAllowed": True |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
20 } |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
21 |
490 | 22 |
601
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
23 def get_container_health(container_name): |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
24 try: |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
25 # Run the docker inspect command |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
26 result = subprocess.run( |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
27 ["docker", "inspect", "--format", "{{.State.Health.Status}}", container_name], |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
28 capture_output=True, |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
29 text=True, |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
30 check=True, |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
31 ) |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
32 |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
33 # Extract the health status from the command output |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
34 return result.stdout.strip() |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
35 |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
36 except subprocess.CalledProcessError as e: |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
37 print(f"Error checking container health: {e}") |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
38 return None |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
39 |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
40 def wait_container_healthy(container_name): |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
41 retry = 0 |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
42 |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
43 while (get_container_health(container_name) != "healthy" and retry < 200): |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
44 print(f"Waiting for {container_name} to be healty") |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
45 time.sleep(1) |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
46 |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
47 |
3e15e950c462
new transfer tests in the concurrency section
Alain Mazy <am@osimis.io>
parents:
593
diff
changeset
|
48 |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
49 class Helpers: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
50 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
51 orthanc_under_tests_hostname: str = 'localhost' |
474 | 52 orthanc_under_tests_http_port: int = 8052 |
53 orthanc_under_tests_dicom_port: int = 4252 | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
54 orthanc_under_tests_exe: str = None |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
55 orthanc_previous_version_exe: str = None |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
56 orthanc_under_tests_docker_image: str = None |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
57 skip_preparation: bool = False |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
58 break_after_preparation: bool = False |
483 | 59 break_before_preparation: bool = False |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
60 plugins: typing.List[str] = [] |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
61 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
62 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
63 def get_orthanc_url(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
64 return f"http://{cls.orthanc_under_tests_hostname}:{cls.orthanc_under_tests_http_port}" |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
65 |
474 | 66 @classmethod |
490 | 67 def get_orthanc_ip(cls): |
68 return cls.orthanc_under_tests_hostname | |
69 | |
70 @classmethod | |
71 def get_orthanc_dicom_port(cls): | |
72 return cls.orthanc_under_tests_dicom_port | |
73 | |
74 @classmethod | |
474 | 75 def is_docker(cls): |
76 return cls.orthanc_under_tests_exe is None and cls.orthanc_under_tests_docker_image is not None | |
77 | |
78 @classmethod | |
79 def is_exe(cls): | |
80 return cls.orthanc_under_tests_exe is not None and cls.orthanc_under_tests_docker_image is None | |
81 | |
490 | 82 @classmethod |
83 def find_executable(cls, name): | |
84 p = os.path.join('/usr/local/bin', name) | |
85 if os.path.isfile(p): | |
86 return p | |
87 | |
88 p = os.path.join('/usr/local/sbin', name) | |
89 if os.path.isfile(p): | |
90 return p | |
91 | |
92 return name | |
93 | |
94 | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
95 class OrthancTestCase(unittest.TestCase): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
96 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
97 o: OrthancApiClient = None # the orthanc under tests api client |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
98 _orthanc_process = None |
474 | 99 _orthanc_container_name = None |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
100 _orthanc_is_running = False |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
101 _orthanc_logger_thread = None |
592 | 102 _show_orthanc_output = False |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
103 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
104 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
105 def setUpClass(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
106 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
107 cls.o = OrthancApiClient(Helpers.get_orthanc_url()) |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
108 cls._prepare() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
109 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
110 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
111 def tearDownClass(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
112 if not Helpers.break_after_preparation: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
113 cls.kill_orthanc() |
577 | 114 cls.terminate() |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
115 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
116 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
117 def prepare(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
118 pass # to override |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
119 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
120 @classmethod |
576
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
121 def terminate(cls): |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
122 pass # to override |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
123 |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
124 @classmethod |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
125 def _prepare(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
126 if not Helpers.skip_preparation: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
127 cls.prepare() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
128 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
129 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
130 def get_storage_path(cls, storage_name: str): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
131 return str(here / "storages" / f"{storage_name}") |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
132 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
133 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
134 def generate_configuration(cls, config_name: str, config: object, storage_name: str, plugins = []): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
135 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
136 # add plugins and default storge directory |
474 | 137 if plugins and len(plugins) > 0: |
138 config["Plugins"] = plugins | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
139 |
474 | 140 if Helpers.is_exe() and not "StorageDirectory" in config: |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
141 config["StorageDirectory"] = cls.get_storage_path(storage_name=storage_name) |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
142 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
143 if not "Name" in config: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
144 config["Name"] = config_name |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
145 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
146 if not "HttpPort" in config: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
147 config["HttpPort"] = Helpers.orthanc_under_tests_http_port |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
148 |
474 | 149 if not "DicomPort" in config: |
150 config["DicomPort"] = Helpers.orthanc_under_tests_dicom_port | |
151 | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
152 # copy the values from the base config |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
153 for k, v in default_base_config.items(): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
154 if not k in config: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
155 config[k] = v |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
156 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
157 # save to disk |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
158 path = str(here / "configurations" / f"{config_name}.json") |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
159 with open(path, "w") as f: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
160 json.dump(config, f, indent=4) |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
161 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
162 return path |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
163 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
164 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
165 def clear_storage(cls, storage_name: str): |
592 | 166 storage_path = cls.get_storage_path(storage_name=storage_name) |
593 | 167 |
168 # clear the directory but keep it ! | |
169 for root, dirs, files in os.walk(storage_path): | |
170 for f in files: | |
171 os.unlink(os.path.join(root, f)) | |
172 for d in dirs: | |
173 shutil.rmtree(os.path.join(root, d)) | |
174 shutil.rmtree(storage_path, ignore_errors=True) | |
592 | 175 |
176 @classmethod | |
177 def is_storage_empty(cls, storage_name: str): | |
178 storage_path = cls.get_storage_path(storage_name=storage_name) | |
179 return len(glob.glob(os.path.join(storage_path, '*'))) == 0 | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
180 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
181 @classmethod |
577 | 182 def create_docker_network(cls, network: str): |
183 if Helpers.is_docker(): | |
184 subprocess.run(["docker", "network", "rm", network]) # ignore error | |
185 subprocess.run(["docker", "network", "create", network]) | |
186 | |
187 @classmethod | |
474 | 188 def launch_orthanc_to_prepare_db(cls, config_name: str = None, config: object = None, config_path: str = None, storage_name: str = None, plugins = []): |
189 if config_name and storage_name and config: | |
190 # generate the configuration file | |
191 config_path = cls.generate_configuration( | |
192 config_name=config_name, | |
193 storage_name=storage_name, | |
194 config=config, | |
195 plugins=plugins | |
196 ) | |
197 elif not config_path or not storage_name or not config_name: | |
198 raise RuntimeError("Invalid configuration") | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
199 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
200 # run orthanc |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
201 if Helpers.orthanc_previous_version_exe: |
474 | 202 cls.launch_orthanc_exe( |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
203 exe_path=Helpers.orthanc_previous_version_exe, |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
204 config_path=config_path |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
205 ) |
474 | 206 elif Helpers.orthanc_previous_version_docker_image: |
207 cls.launch_orthanc_docker( | |
208 docker_image=Helpers.orthanc_previous_version_docker_image, | |
209 storage_name=storage_name, | |
210 config_name=config_name, | |
211 config_path=config_path | |
212 ) | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
213 else: |
474 | 214 raise RuntimeError("Invalid configuration, can not launch Orthanc") |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
215 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
216 @classmethod |
592 | 217 def launch_orthanc_under_tests(cls, config_name: str = None, config: object = None, config_path: str = None, storage_name: str = None, plugins = [], docker_network: str = None, enable_verbose: bool = False, show_orthanc_output: bool = False): |
218 cls._show_orthanc_output = show_orthanc_output | |
219 | |
474 | 220 if config_name and storage_name and config: |
221 # generate the configuration file | |
222 config_path = cls.generate_configuration( | |
223 config_name=config_name, | |
224 storage_name=storage_name, | |
225 config=config, | |
226 plugins=plugins | |
227 ) | |
228 elif not config_path or not storage_name or not config_name: | |
229 raise RuntimeError("Invalid configuration") | |
230 | |
231 # run orthanc | |
232 if Helpers.orthanc_under_tests_exe: | |
233 cls.launch_orthanc_exe( | |
234 exe_path=Helpers.orthanc_under_tests_exe, | |
592 | 235 config_path=config_path, |
236 enable_verbose=enable_verbose | |
474 | 237 ) |
238 elif Helpers.orthanc_under_tests_docker_image: | |
239 cls.launch_orthanc_docker( | |
240 docker_image=Helpers.orthanc_under_tests_docker_image, | |
241 storage_name=storage_name, | |
242 config_name=config_name, | |
577 | 243 config_path=config_path, |
592 | 244 network=docker_network, |
245 enable_verbose=enable_verbose | |
474 | 246 ) |
247 else: | |
248 raise RuntimeError("Invalid configuration, can not launch Orthanc") | |
249 | |
250 @classmethod | |
592 | 251 def launch_orthanc_exe(cls, exe_path: str, config_path: str, enable_verbose: bool = False, show_orthanc_output: bool = False): |
252 if enable_verbose: | |
253 cmd = [exe_path, "--verbose", config_path] | |
254 else: | |
255 cmd = [exe_path, config_path] | |
256 | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
257 cls._orthanc_process = subprocess.Popen( |
592 | 258 cmd, |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
259 stdout=subprocess.PIPE, |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
260 stderr=subprocess.PIPE |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
261 ) |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
262 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
263 cls.o.wait_started(10) |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
264 if not cls.o.is_alive(): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
265 output = cls.get_orthanc_process_output() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
266 print("Orthanc output\n" + output) |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
267 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
268 raise RuntimeError(f"Orthanc failed to start '{exe_path}', conf = '{config_path}'. Check output above") |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
269 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
270 @classmethod |
592 | 271 def launch_orthanc_docker(cls, docker_image: str, storage_name: str, config_path: str, config_name: str, network: str = None, enable_verbose: bool = False): |
484
ddfabe1fbee1
new tests for DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
483
diff
changeset
|
272 storage_path = cls.get_storage_path(storage_name=storage_name) |
474 | 273 |
274 cmd = [ | |
275 "docker", "run", "--rm", | |
592 | 276 "-e", "VERBOSE_ENABLED=true" if enable_verbose else "VERBOSE_ENABLED=false", |
277 "-e", "VERBOSE_STARTUP=true" if enable_verbose else "VERBOSE_STARTUP=false", | |
474 | 278 "-v", f"{config_path}:/etc/orthanc/orthanc.json", |
484
ddfabe1fbee1
new tests for DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
483
diff
changeset
|
279 "-v", f"{storage_path}:/var/lib/orthanc/db/", |
474 | 280 "--name", config_name, |
281 "-p", f"{Helpers.orthanc_under_tests_http_port}:{Helpers.orthanc_under_tests_http_port}", | |
577 | 282 "-p", f"{Helpers.orthanc_under_tests_dicom_port}:{Helpers.orthanc_under_tests_dicom_port}" |
474 | 283 ] |
577 | 284 if network: |
285 cmd.extend(["--network", network]) | |
286 cmd.append(docker_image) | |
287 | |
474 | 288 cls._orthanc_container_name = config_name |
289 print("docker cmd line: " + " ".join(cmd)) | |
290 | |
291 cls._orthanc_process = subprocess.Popen( | |
292 cmd, | |
293 stdout=subprocess.PIPE, | |
294 stderr=subprocess.PIPE | |
295 ) | |
296 | |
297 cls.o.wait_started(10) | |
298 if not cls.o.is_alive(): | |
299 output = cls.get_orthanc_process_output() | |
300 print("Orthanc output\n" + output) | |
301 | |
302 raise RuntimeError(f"Orthanc failed to start Orthanc through Docker '{docker_image}', conf = '{config_path}'. Check output above") | |
303 | |
304 | |
305 @classmethod | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
306 def kill_orthanc(cls): |
474 | 307 if Helpers.is_exe(): |
576
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
308 if cls._orthanc_process: |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
309 cls._orthanc_process.kill() |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
310 else: |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
311 return |
474 | 312 else: |
313 subprocess.run(["docker", "stop", cls._orthanc_container_name]) | |
592 | 314 |
315 if cls._show_orthanc_output: | |
316 output = cls.get_orthanc_process_output() | |
317 print("Orthanc output\n" + output) | |
318 | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
319 cls._orthanc_process = None |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
320 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
321 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
322 def get_orthanc_process_output(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
323 outputs = cls._orthanc_process.communicate() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
324 output = "" |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
325 for o in outputs: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
326 output += o.decode('utf-8') |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
327 return output |