annotate NewTests/MaxStorage/test_max_storage_reject.py @ 624:543e372d2265

added a PG max storage test
author Alain Mazy <am@osimis.io>
date Wed, 14 Feb 2024 11:25:40 +0100
parents NewTests/MaxStorageReject/test_max_storage_reject.py@47c43fdaf91d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
1 import unittest
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
2 import time
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
3 import subprocess
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
4 import pprint
534
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
5 import os
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
6 from helpers import OrthancTestCase, Helpers
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
7
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
8 from orthanc_api_client import OrthancApiClient, generate_test_dicom_file
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
9 from orthanc_api_client import exceptions as orthanc_exceptions
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
10
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
11 import pathlib
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
12 here = pathlib.Path(__file__).parent.resolve()
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
13
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
14
534
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
15 def count_files_in_storage(path):
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
16 all_files = []
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
17 for root, dirs, files in os.walk(path):
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
18 for file in files:
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
19 if len(file) == 36:
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
20 all_files.append(file)
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
21
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
22 return len(all_files)
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
23
d9d059c6082d Fix orphan files remaining in storage when working with MaximumStorageSize
Alain Mazy <am@osimis.io>
parents: 490
diff changeset
24
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
25 class TestMaxStorageReject(OrthancTestCase):
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
26
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
27 @classmethod
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
28 def prepare(cls):
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
29 test_name = "MaxStorageReject"
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
30 storage_name = "max_storage_reject"
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
31
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
32 cls.clear_storage(storage_name=storage_name)
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
33
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
34 config_path = cls.generate_configuration(
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
35 config_name=f"{test_name}_under_test",
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
36 storage_name=storage_name,
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
37 config={
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
38 "MaximumPatientCount": 2,
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
39 "MaximumStorageMode": "Reject"
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
40 },
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
41 plugins=Helpers.plugins
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
42 )
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
43
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
44 print(f'-------------- prepared {test_name} tests')
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
45 if Helpers.break_after_preparation:
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
46 print(f"++++ It is now time to start your Orthanc under tests with configuration file '{config_path}' +++++")
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
47 input("Press Enter to continue")
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
48 else:
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
49 print(f'-------------- launching {test_name} tests')
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
50 cls.launch_orthanc_under_tests(
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
51 config_path=config_path,
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
52 config_name=f"{test_name}_under_test",
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
53 storage_name=storage_name,
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
54 plugins=Helpers.plugins
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
55 )
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
56
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
57 print('-------------- waiting for orthanc-under-tests to be available')
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
58 cls.o.wait_started()
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
59
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
60
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
61 def test_upload_3_patients_rest_api(self):
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
62
544
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
63 if self.o.get_system()["ApiVersion"] > 20: # from Orthanc 1.12.1
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
64 self.o.delete_all_content()
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
65
544
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
66 # make sure the 3rd patient does not make it into the storage (through the Rest API)
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
67 self.o.upload_file(here / "../../Database/Brainix/Flair/IM-0001-0001.dcm")
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
68 self.o.upload_file(here / "../../Database/Knix/Loc/IM-0001-0001.dcm")
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
69 with self.assertRaises(orthanc_exceptions.HttpError) as ctx:
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
70 self.o.upload_file(here / "../../Database/Phenix/IM-0001-0001.dcm")
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
71 self.assertEqual(507, ctx.exception.http_status_code)
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
72 self.assertEqual(2, len(self.o.studies.get_all_ids()))
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
73 self.assertEqual(2, count_files_in_storage(self.get_storage_path("max_storage_reject")))
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
74
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
75 def upload_with_store_scu(self, path):
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
76 subprocess.check_call([Helpers.find_executable('storescu'),
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
77 "-xs",
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
78 Helpers.get_orthanc_ip(),
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
79 str(Helpers.get_orthanc_dicom_port()),
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
80 path])
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
81
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
82 def test_upload_3_patients_c_store(self):
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
83
544
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
84 if self.o.get_system()["ApiVersion"] > 20: # from Orthanc 1.12.1
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
85 self.o.delete_all_content()
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
86
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
87 # make sure the 3rd patient does not make it into the storage (through StoreSCU)
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
88 self.upload_with_store_scu(here / "../../Database/Brainix/Flair/IM-0001-0001.dcm")
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
89 self.upload_with_store_scu(here / "../../Database/Knix/Loc/IM-0001-0001.dcm")
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
90 with self.assertRaises(subprocess.CalledProcessError) as ctx:
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
91 self.upload_with_store_scu(here / "../../Database/Phenix/IM-0001-0001.dcm")
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
92 self.assertEqual(2, len(self.o.studies.get_all_ids()))
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
93 self.assertEqual(2, count_files_in_storage(self.get_storage_path("max_storage_reject")))
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
94
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
95 def test_upload_3_patients_dicomweb(self):
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
96
544
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
97 if self.o.get_system()["ApiVersion"] > 20: # from Orthanc 1.12.1
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
98 self.o.delete_all_content()
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
99
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
100 # make sure the 3rd patient does not make it into the storage (through DicomWeb)
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
101 self.o.upload_files_dicom_web([here / "../../Database/Brainix/Flair/IM-0001-0001.dcm"])
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
102 self.o.upload_files_dicom_web([here / "../../Database/Knix/Loc/IM-0001-0001.dcm"])
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
103
544
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
104 with self.assertRaises(orthanc_exceptions.HttpError) as ctx:
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
105 self.o.upload_files_dicom_web([here / "../../Database/Phenix/IM-0001-0001.dcm"])
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
106 self.assertEqual(400, ctx.exception.http_status_code)
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
107
544
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
108 self.assertEqual(2, len(self.o.studies.get_all_ids()))
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
109 self.assertEqual(2, count_files_in_storage(self.get_storage_path("max_storage_reject")))
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
110
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
111 def test_upload_3_patients_dicomweb_in_one_query(self):
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
112
544
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
113 if self.o.get_system()["ApiVersion"] > 20: # from Orthanc 1.12.1
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
114 self.o.delete_all_content()
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
115
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
116 # make sure the 3rd patient does not make it into the storage (through DicomWeb)
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
117 r = self.o.upload_files_dicom_web([
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
118 here / "../../Database/Brainix/Flair/IM-0001-0001.dcm",
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
119 here / "../../Database/Knix/Loc/IM-0001-0001.dcm",
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
120 here / "../../Database/Phenix/IM-0001-0001.dcm"
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
121 ])
490
10a47656e34f new tests for MaximumStorageMode
Alain Mazy <am@osimis.io>
parents:
diff changeset
122
544
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
123 # pprint.pprint(r)
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
124 self.assertEqual(2, len(self.o.studies.get_all_ids()))
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
125 self.assertIn('00081198', r)
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
126 self.assertEqual(0xA700, r['00081198']['Value'][0]['00081197']['Value'][0]) # one failed instance with out-of-resource status
Alain Mazy <am@osimis.io>
parents: 534
diff changeset
127 self.assertEqual(2, count_files_in_storage(self.get_storage_path("max_storage_reject")))