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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
596
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
1 import subprocess
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
2 import time
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
3 import unittest
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
4 from orthanc_api_client import OrthancApiClient
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
5 from helpers import Helpers
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
6
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
7 import pathlib
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
8 import os
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
9 here = pathlib.Path(__file__).parent.resolve()
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
10
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
11
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
12 def get_container_health(container_name):
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
13 try:
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
14 # Run the docker inspect command
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
15 result = subprocess.run(
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
16 ["docker", "inspect", "--format", "{{.State.Health.Status}}", container_name],
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
17 capture_output=True,
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
18 text=True,
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
19 check=True,
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
20 )
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
21
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
22 # Extract the health status from the command output
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
23 return result.stdout.strip()
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
24
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
25 except subprocess.CalledProcessError as e:
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
26 print(f"Error checking container health: {e}")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
27 return None
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
28
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
29 def wait_container_healthy(container_name):
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
30 retry = 0
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
31
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
32 while (get_container_health(container_name) != "healthy" and retry < 200):
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
33 print(f"Waiting for {container_name} to be healty")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
34 time.sleep(1)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
35
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
36 class TestPgUpgrades(unittest.TestCase):
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
37
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
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
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
40 os.chdir(here)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
41 print("Cleaning old compose")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
42 subprocess.run(["docker", "compose", "down", "-v", "--remove-orphans"], check=True)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
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
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
55 def test_upgrades_downgrades_with_pg_15(self):
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
56
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
57 print("Launching PG-15 server")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
58 subprocess.run(["docker", "compose", "up", "pg-15", "-d"], check=True)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
59 wait_container_healthy("pg-15")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
60
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
61 print("Launching old Orthanc (PG v2.0)")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
62 subprocess.run(["docker", "compose", "up", "orthanc-pg-15-2", "-d"], check=True)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
63
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
64 o = OrthancApiClient("http://localhost:8049")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
65 o.wait_started()
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
66
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
67 instances = o.upload_folder(here / "../../Database/Knee")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
68
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
69 print("Stopping old Orthanc ")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
70 subprocess.run(["docker", "compose", "stop", "orthanc-pg-15-2"], check=True)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
71 time.sleep(2)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
72
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
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
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
79
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
80 o = OrthancApiClient("http://localhost:8050")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
81 o.wait_started()
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
82
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
83 # make sure we can 'play' with Orthanc
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
84 o.instances.get_tags(orthanc_id=instances[0])
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
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
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
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
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
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
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
91 subprocess.run(["docker", "compose", "stop", "orthanc-pg-15-under-tests"], check=True)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
92 time.sleep(2)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
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
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
127
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
128 def test_latest_orthanc_with_pg_9(self):
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
129 print("Launching PG-9 server")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
130 subprocess.run(["docker", "compose", "up", "pg-9", "-d"], check=True)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
131 wait_container_healthy("pg-9")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
132
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
133 print("Launching newest Orthanc")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
134 subprocess.run(
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
135 ["docker", "compose", "up", "orthanc-pg-9-under-tests", "-d"],
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
136 env= {
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
137 "ORTHANC_IMAGE_UNDER_TESTS": Helpers.orthanc_under_tests_docker_image
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
138 },
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
139 check=True)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
140
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
141 o = OrthancApiClient("http://localhost:8051")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
142 o.wait_started()
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
143 instances = o.upload_folder(here / "../../Database/Knee")
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
144 o.instances.delete(orthanc_ids=instances)
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
145
b1e1c7149a37 new PG upgrades tests
Alain Mazy <am@osimis.io>
parents:
diff changeset
146 subprocess.run(["docker", "compose", "down", "-v", "--remove-orphans"], check=True)