Mercurial > hg > orthanc-tests
annotate NewTests/PostgresUpgrades/test_pg_upgrades.py @ 600:58384ae69f41
added docker pull to avoid timeout
author | Alain Mazy <am@osimis.io> |
---|---|
date | Fri, 19 Jan 2024 09:15:57 +0100 |
parents | f3475c3e42e5 |
children | 3e15e950c462 |
rev | line source |
---|---|
596 | 1 import subprocess |
2 import time | |
3 import unittest | |
4 from orthanc_api_client import OrthancApiClient | |
5 from helpers import Helpers | |
6 | |
7 import pathlib | |
8 import os | |
9 here = pathlib.Path(__file__).parent.resolve() | |
10 | |
11 | |
12 def get_container_health(container_name): | |
13 try: | |
14 # Run the docker inspect command | |
15 result = subprocess.run( | |
16 ["docker", "inspect", "--format", "{{.State.Health.Status}}", container_name], | |
17 capture_output=True, | |
18 text=True, | |
19 check=True, | |
20 ) | |
21 | |
22 # Extract the health status from the command output | |
23 return result.stdout.strip() | |
24 | |
25 except subprocess.CalledProcessError as e: | |
26 print(f"Error checking container health: {e}") | |
27 return None | |
28 | |
29 def wait_container_healthy(container_name): | |
30 retry = 0 | |
31 | |
32 while (get_container_health(container_name) != "healthy" and retry < 200): | |
33 print(f"Waiting for {container_name} to be healty") | |
34 time.sleep(1) | |
35 | |
36 class TestPgUpgrades(unittest.TestCase): | |
37 | |
38 @classmethod | |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
39 def cleanup(cls): |
596 | 40 os.chdir(here) |
41 print("Cleaning old compose") | |
42 subprocess.run(["docker", "compose", "down", "-v", "--remove-orphans"], check=True) | |
43 | |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
44 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
45 @classmethod |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
46 def setUpClass(cls): |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
47 cls.cleanup() |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
48 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
49 @classmethod |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
50 def tearDownClass(cls): |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
51 pass |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
52 # cls.cleanup() |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
53 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
54 |
596 | 55 def test_upgrades_downgrades_with_pg_15(self): |
56 | |
600
58384ae69f41
added docker pull to avoid timeout
Alain Mazy <am@osimis.io>
parents:
599
diff
changeset
|
57 print("Pullling container") |
58384ae69f41
added docker pull to avoid timeout
Alain Mazy <am@osimis.io>
parents:
599
diff
changeset
|
58 subprocess.run(["docker", "compose", "pull"], check=True) |
58384ae69f41
added docker pull to avoid timeout
Alain Mazy <am@osimis.io>
parents:
599
diff
changeset
|
59 |
596 | 60 print("Launching PG-15 server") |
61 subprocess.run(["docker", "compose", "up", "pg-15", "-d"], check=True) | |
62 wait_container_healthy("pg-15") | |
63 | |
64 print("Launching old Orthanc (PG v2.0)") | |
65 subprocess.run(["docker", "compose", "up", "orthanc-pg-15-2", "-d"], check=True) | |
66 | |
67 o = OrthancApiClient("http://localhost:8049") | |
68 o.wait_started() | |
69 | |
70 instances = o.upload_folder(here / "../../Database/Knee") | |
71 | |
72 print("Stopping old Orthanc ") | |
73 subprocess.run(["docker", "compose", "stop", "orthanc-pg-15-2"], check=True) | |
74 time.sleep(2) | |
75 | |
76 print("Launching newest Orthanc") | |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
77 subprocess.run(["docker", "compose", "up", "orthanc-pg-15-under-tests", "-d"], |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
78 env= { |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
79 "ORTHANC_IMAGE_UNDER_TESTS": Helpers.orthanc_under_tests_docker_image |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
80 }, |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
81 check=True) |
596 | 82 |
83 o = OrthancApiClient("http://localhost:8050") | |
84 o.wait_started() | |
85 | |
86 # make sure we can 'play' with Orthanc | |
87 o.instances.get_tags(orthanc_id=instances[0]) | |
88 o.instances.delete_all() | |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
89 self.assertEqual(0, int(o.get_json('/statistics')['TotalDiskSize'])) |
596 | 90 instances = o.upload_folder(here / "../../Database/Knee") |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
91 size_before_downgrade = int(o.get_json('/statistics')['TotalDiskSize']) |
596 | 92 |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
93 print("Stopping newest Orthanc ") |
596 | 94 subprocess.run(["docker", "compose", "stop", "orthanc-pg-15-under-tests"], check=True) |
95 time.sleep(2) | |
96 | |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
97 print("Downgrading Orthanc DB to v6.1") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
98 subprocess.run(["docker", "exec", "pg-15", "./scripts/downgrade.sh"], check=True) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
99 time.sleep(2) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
100 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
101 print("Downgrading Orthanc DB to v6.1") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
102 print("Launching previous Orthanc (DB v6.1)") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
103 subprocess.run(["docker", "compose", "up", "orthanc-pg-15-61", "-d"], check=True) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
104 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
105 o = OrthancApiClient("http://localhost:8052") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
106 o.wait_started() |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
107 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
108 # make sure we can 'play' with Orthanc |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
109 o.instances.get_tags(orthanc_id=instances[0]) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
110 self.assertEqual(size_before_downgrade, int(o.get_json('/statistics')['TotalDiskSize'])) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
111 o.instances.delete_all() |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
112 self.assertEqual(0, int(o.get_json('/statistics')['TotalDiskSize'])) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
113 instances = o.upload_folder(here / "../../Database/Knee") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
114 o.instances.delete_all() |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
115 self.assertEqual(0, int(o.get_json('/statistics')['TotalDiskSize'])) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
116 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
117 print("run the integration tests after a downgrade") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
118 # first create the containers (orthanc-tests + orthanc-pg-15-61-for-integ-tests) so they know each other |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
119 # subprocess.run(["docker", "compose", "create", "orthanc-tests"], check=True) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
120 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
121 # subprocess.run(["docker", "compose", "up", "orthanc-pg-15-61-for-integ-tests", "-d"], check=True) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
122 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
123 # o = OrthancApiClient("http://localhost:8053", user="alice", pwd="orthanctest") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
124 # o.wait_started() |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
125 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
126 # time.sleep(10000) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
127 subprocess.run(["docker", "compose", "up", "orthanc-tests"], check=True) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
128 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
129 |
596 | 130 |
131 def test_latest_orthanc_with_pg_9(self): | |
132 print("Launching PG-9 server") | |
133 subprocess.run(["docker", "compose", "up", "pg-9", "-d"], check=True) | |
134 wait_container_healthy("pg-9") | |
135 | |
136 print("Launching newest Orthanc") | |
137 subprocess.run( | |
138 ["docker", "compose", "up", "orthanc-pg-9-under-tests", "-d"], | |
139 env= { | |
140 "ORTHANC_IMAGE_UNDER_TESTS": Helpers.orthanc_under_tests_docker_image | |
141 }, | |
142 check=True) | |
143 | |
144 o = OrthancApiClient("http://localhost:8051") | |
145 o.wait_started() | |
146 instances = o.upload_folder(here / "../../Database/Knee") | |
147 o.instances.delete(orthanc_ids=instances) | |
148 | |
149 subprocess.run(["docker", "compose", "down", "-v", "--remove-orphans"], check=True) |