Mercurial > hg > orthanc-tests
annotate NewTests/helpers.py @ 579:5d157c486568
fix auth test startup sequence
author | Alain Mazy <am@osimis.io> |
---|---|
date | Mon, 11 Sep 2023 09:04:17 +0200 |
parents | 0649a19df194 |
children | 6753d96dd71f |
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 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
8 from threading import Thread |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
9 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
10 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
11 import pathlib |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
12 here = pathlib.Path(__file__).parent.resolve() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
13 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
14 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
15 default_base_config = { |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
16 "AuthenticationEnabled": False, |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
17 "RemoteAccessAllowed": True |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
18 } |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
19 |
490 | 20 |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
21 class Helpers: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
22 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
23 orthanc_under_tests_hostname: str = 'localhost' |
474 | 24 orthanc_under_tests_http_port: int = 8052 |
25 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
|
26 orthanc_under_tests_exe: str = None |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
27 orthanc_previous_version_exe: str = None |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
28 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
|
29 skip_preparation: bool = False |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
30 break_after_preparation: bool = False |
483 | 31 break_before_preparation: bool = False |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
32 plugins: typing.List[str] = [] |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
33 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
34 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
35 def get_orthanc_url(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
36 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
|
37 |
474 | 38 @classmethod |
490 | 39 def get_orthanc_ip(cls): |
40 return cls.orthanc_under_tests_hostname | |
41 | |
42 @classmethod | |
43 def get_orthanc_dicom_port(cls): | |
44 return cls.orthanc_under_tests_dicom_port | |
45 | |
46 @classmethod | |
474 | 47 def is_docker(cls): |
48 return cls.orthanc_under_tests_exe is None and cls.orthanc_under_tests_docker_image is not None | |
49 | |
50 @classmethod | |
51 def is_exe(cls): | |
52 return cls.orthanc_under_tests_exe is not None and cls.orthanc_under_tests_docker_image is None | |
53 | |
490 | 54 @classmethod |
55 def find_executable(cls, name): | |
56 p = os.path.join('/usr/local/bin', name) | |
57 if os.path.isfile(p): | |
58 return p | |
59 | |
60 p = os.path.join('/usr/local/sbin', name) | |
61 if os.path.isfile(p): | |
62 return p | |
63 | |
64 return name | |
65 | |
66 | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
67 class OrthancTestCase(unittest.TestCase): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
68 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
69 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
|
70 _orthanc_process = None |
474 | 71 _orthanc_container_name = None |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
72 _orthanc_is_running = False |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
73 _orthanc_logger_thread = None |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
74 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
75 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
76 def setUpClass(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
77 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
78 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
|
79 cls._prepare() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
80 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
81 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
82 def tearDownClass(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
83 if not Helpers.break_after_preparation: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
84 cls.kill_orthanc() |
577 | 85 cls.terminate() |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
86 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
87 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
88 def prepare(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
89 pass # to override |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
90 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
91 @classmethod |
576
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
92 def terminate(cls): |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
93 pass # to override |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
94 |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
95 @classmethod |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
96 def _prepare(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
97 if not Helpers.skip_preparation: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
98 cls.prepare() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
99 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
100 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
101 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
|
102 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
|
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 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
|
106 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
107 # add plugins and default storge directory |
474 | 108 if plugins and len(plugins) > 0: |
109 config["Plugins"] = plugins | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
110 |
474 | 111 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
|
112 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
|
113 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
114 if not "Name" in config: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
115 config["Name"] = config_name |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
116 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
117 if not "HttpPort" in config: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
118 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
|
119 |
474 | 120 if not "DicomPort" in config: |
121 config["DicomPort"] = Helpers.orthanc_under_tests_dicom_port | |
122 | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
123 # 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
|
124 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
|
125 if not k in config: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
126 config[k] = v |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
127 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
128 # save to disk |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
129 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
|
130 with open(path, "w") as f: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
131 json.dump(config, f, indent=4) |
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 return path |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
134 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
135 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
136 def clear_storage(cls, storage_name: str): |
474 | 137 if Helpers.is_exe(): |
138 storage_path = cls.get_storage_path(storage_name=storage_name) | |
139 shutil.rmtree(storage_path, ignore_errors=True) | |
140 elif Helpers.is_docker(): | |
475 | 141 subprocess.run(["docker", "volume", "rm", "-f", storage_name]) |
473
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 @classmethod |
577 | 144 def create_docker_network(cls, network: str): |
145 if Helpers.is_docker(): | |
146 subprocess.run(["docker", "network", "rm", network]) # ignore error | |
147 subprocess.run(["docker", "network", "create", network]) | |
148 | |
149 @classmethod | |
474 | 150 def launch_orthanc_to_prepare_db(cls, config_name: str = None, config: object = None, config_path: str = None, storage_name: str = None, plugins = []): |
151 if config_name and storage_name and config: | |
152 # generate the configuration file | |
153 config_path = cls.generate_configuration( | |
154 config_name=config_name, | |
155 storage_name=storage_name, | |
156 config=config, | |
157 plugins=plugins | |
158 ) | |
159 elif not config_path or not storage_name or not config_name: | |
160 raise RuntimeError("Invalid configuration") | |
473
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 # run orthanc |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
163 if Helpers.orthanc_previous_version_exe: |
474 | 164 cls.launch_orthanc_exe( |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
165 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
|
166 config_path=config_path |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
167 ) |
474 | 168 elif Helpers.orthanc_previous_version_docker_image: |
169 cls.launch_orthanc_docker( | |
170 docker_image=Helpers.orthanc_previous_version_docker_image, | |
171 storage_name=storage_name, | |
172 config_name=config_name, | |
173 config_path=config_path | |
174 ) | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
175 else: |
474 | 176 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
|
177 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
178 @classmethod |
577 | 179 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): |
474 | 180 if config_name and storage_name and config: |
181 # generate the configuration file | |
182 config_path = cls.generate_configuration( | |
183 config_name=config_name, | |
184 storage_name=storage_name, | |
185 config=config, | |
186 plugins=plugins | |
187 ) | |
188 elif not config_path or not storage_name or not config_name: | |
189 raise RuntimeError("Invalid configuration") | |
190 | |
191 # run orthanc | |
192 if Helpers.orthanc_under_tests_exe: | |
193 cls.launch_orthanc_exe( | |
194 exe_path=Helpers.orthanc_under_tests_exe, | |
195 config_path=config_path | |
196 ) | |
197 elif Helpers.orthanc_under_tests_docker_image: | |
198 cls.launch_orthanc_docker( | |
199 docker_image=Helpers.orthanc_under_tests_docker_image, | |
200 storage_name=storage_name, | |
201 config_name=config_name, | |
577 | 202 config_path=config_path, |
203 network=docker_network | |
474 | 204 ) |
205 else: | |
206 raise RuntimeError("Invalid configuration, can not launch Orthanc") | |
207 | |
208 @classmethod | |
209 def launch_orthanc_exe(cls, exe_path: str, config_path: str): | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
210 cls._orthanc_process = subprocess.Popen( |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
211 [exe_path, "--verbose", config_path], |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
212 stdout=subprocess.PIPE, |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
213 stderr=subprocess.PIPE |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
214 ) |
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 cls.o.wait_started(10) |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
217 if not cls.o.is_alive(): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
218 output = cls.get_orthanc_process_output() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
219 print("Orthanc output\n" + output) |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
220 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
221 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
|
222 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
223 @classmethod |
577 | 224 def launch_orthanc_docker(cls, docker_image: str, storage_name: str, config_path: str, config_name: str, network: str = None): |
484
ddfabe1fbee1
new tests for DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
483
diff
changeset
|
225 storage_path = cls.get_storage_path(storage_name=storage_name) |
474 | 226 |
227 cmd = [ | |
228 "docker", "run", "--rm", | |
229 "-e", "VERBOSE_ENABLED=true", | |
230 "-e", "VERBOSE_STARTUP=true", | |
231 "-v", f"{config_path}:/etc/orthanc/orthanc.json", | |
484
ddfabe1fbee1
new tests for DelayedDeletion plugin
Alain Mazy <am@osimis.io>
parents:
483
diff
changeset
|
232 "-v", f"{storage_path}:/var/lib/orthanc/db/", |
474 | 233 "--name", config_name, |
234 "-p", f"{Helpers.orthanc_under_tests_http_port}:{Helpers.orthanc_under_tests_http_port}", | |
577 | 235 "-p", f"{Helpers.orthanc_under_tests_dicom_port}:{Helpers.orthanc_under_tests_dicom_port}" |
474 | 236 ] |
577 | 237 if network: |
238 cmd.extend(["--network", network]) | |
239 cmd.append(docker_image) | |
240 | |
474 | 241 cls._orthanc_container_name = config_name |
242 print("docker cmd line: " + " ".join(cmd)) | |
243 | |
244 cls._orthanc_process = subprocess.Popen( | |
245 cmd, | |
246 stdout=subprocess.PIPE, | |
247 stderr=subprocess.PIPE | |
248 ) | |
249 | |
250 cls.o.wait_started(10) | |
251 if not cls.o.is_alive(): | |
252 output = cls.get_orthanc_process_output() | |
253 print("Orthanc output\n" + output) | |
254 | |
255 raise RuntimeError(f"Orthanc failed to start Orthanc through Docker '{docker_image}', conf = '{config_path}'. Check output above") | |
256 | |
257 | |
258 @classmethod | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
259 def kill_orthanc(cls): |
474 | 260 if Helpers.is_exe(): |
576
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
261 if cls._orthanc_process: |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
262 cls._orthanc_process.kill() |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
263 else: |
80ba6f1d521c
new tests for authorization plugin (native only)
Alain Mazy <am@osimis.io>
parents:
490
diff
changeset
|
264 return |
474 | 265 else: |
266 subprocess.run(["docker", "stop", cls._orthanc_container_name]) | |
473
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
267 output = cls.get_orthanc_process_output() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
268 print("Orthanc output\n" + output) |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
269 cls._orthanc_process = None |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
270 |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
271 @classmethod |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
272 def get_orthanc_process_output(cls): |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
273 outputs = cls._orthanc_process.communicate() |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
274 output = "" |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
275 for o in outputs: |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
276 output += o.decode('utf-8') |
4ee85b016a40
added NewTests framework - only the Housekeeper tests right now
Alain Mazy <am@osimis.io>
parents:
diff
changeset
|
277 return output |