Mercurial > hg > orthanc-tests
annotate NewTests/PostgresUpgrades/test_pg_upgrades.py @ 599:f3475c3e42e5
run integ tests after a PG downgrade
author | Alain Mazy <am@osimis.io> |
---|---|
date | Thu, 18 Jan 2024 17:46:54 +0100 |
parents | b1e1c7149a37 |
children | 58384ae69f41 |
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 | |
57 print("Launching PG-15 server") | |
58 subprocess.run(["docker", "compose", "up", "pg-15", "-d"], check=True) | |
59 wait_container_healthy("pg-15") | |
60 | |
61 print("Launching old Orthanc (PG v2.0)") | |
62 subprocess.run(["docker", "compose", "up", "orthanc-pg-15-2", "-d"], check=True) | |
63 | |
64 o = OrthancApiClient("http://localhost:8049") | |
65 o.wait_started() | |
66 | |
67 instances = o.upload_folder(here / "../../Database/Knee") | |
68 | |
69 print("Stopping old Orthanc ") | |
70 subprocess.run(["docker", "compose", "stop", "orthanc-pg-15-2"], check=True) | |
71 time.sleep(2) | |
72 | |
73 print("Launching newest Orthanc") | |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
74 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
|
75 env= { |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
76 "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
|
77 }, |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
78 check=True) |
596 | 79 |
80 o = OrthancApiClient("http://localhost:8050") | |
81 o.wait_started() | |
82 | |
83 # make sure we can 'play' with Orthanc | |
84 o.instances.get_tags(orthanc_id=instances[0]) | |
85 o.instances.delete_all() | |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
86 self.assertEqual(0, int(o.get_json('/statistics')['TotalDiskSize'])) |
596 | 87 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
|
88 size_before_downgrade = int(o.get_json('/statistics')['TotalDiskSize']) |
596 | 89 |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
90 print("Stopping newest Orthanc ") |
596 | 91 subprocess.run(["docker", "compose", "stop", "orthanc-pg-15-under-tests"], check=True) |
92 time.sleep(2) | |
93 | |
599
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
94 print("Downgrading Orthanc DB to v6.1") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
95 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
|
96 time.sleep(2) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
97 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
98 print("Downgrading Orthanc DB to v6.1") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
99 print("Launching previous Orthanc (DB v6.1)") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
100 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
|
101 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
102 o = OrthancApiClient("http://localhost:8052") |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
103 o.wait_started() |
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 # make sure we can 'play' with Orthanc |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
106 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
|
107 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
|
108 o.instances.delete_all() |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
109 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
|
110 instances = o.upload_folder(here / "../../Database/Knee") |
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 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
114 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
|
115 # 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
|
116 # 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
|
117 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
118 # 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
|
119 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
120 # 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
|
121 # o.wait_started() |
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 # time.sleep(10000) |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
124 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
|
125 |
f3475c3e42e5
run integ tests after a PG downgrade
Alain Mazy <am@osimis.io>
parents:
596
diff
changeset
|
126 |
596 | 127 |
128 def test_latest_orthanc_with_pg_9(self): | |
129 print("Launching PG-9 server") | |
130 subprocess.run(["docker", "compose", "up", "pg-9", "-d"], check=True) | |
131 wait_container_healthy("pg-9") | |
132 | |
133 print("Launching newest Orthanc") | |
134 subprocess.run( | |
135 ["docker", "compose", "up", "orthanc-pg-9-under-tests", "-d"], | |
136 env= { | |
137 "ORTHANC_IMAGE_UNDER_TESTS": Helpers.orthanc_under_tests_docker_image | |
138 }, | |
139 check=True) | |
140 | |
141 o = OrthancApiClient("http://localhost:8051") | |
142 o.wait_started() | |
143 instances = o.upload_folder(here / "../../Database/Knee") | |
144 o.instances.delete(orthanc_ids=instances) | |
145 | |
146 subprocess.run(["docker", "compose", "down", "-v", "--remove-orphans"], check=True) |