changeset 849:43320c6a8044

merged sql-opti -> default
author Alain Mazy <am@orthanc.team>
date Tue, 12 Aug 2025 17:54:50 +0200
parents a9b387928f40 (current diff) f190fe4f1c39 (diff)
children 895215bfb8aa
files Tests/Tests.py
diffstat 4 files changed, 78 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/NewTests/PostgresUpgrades/docker-compose.yml	Mon Aug 11 19:11:12 2025 +0200
+++ b/NewTests/PostgresUpgrades/docker-compose.yml	Tue Aug 12 17:54:50 2025 +0200
@@ -17,7 +17,7 @@
 
   # Orthanc previous version
   orthanc-pg-15-previous-revision:
-    image: orthancteam/orthanc:25.2.0
+    image: orthancteam/orthanc:25.5.1
     container_name: orthanc-pg-15-previous-revision
     depends_on: [pg-15]
     restart: unless-stopped
@@ -30,7 +30,7 @@
 
   # Orthanc previous version to run the integration tests
   orthanc-pg-15-previous-revision-for-integ-tests:
-    image: orthancteam/orthanc:25.2.0
+    image: orthancteam/orthanc:25.5.1
     container_name: orthanc-pg-15-previous-revision-for-integ-tests
     depends_on: [pg-15]
     restart: unless-stopped
--- a/NewTests/PostgresUpgrades/downgrade.sh	Mon Aug 11 19:11:12 2025 +0200
+++ b/NewTests/PostgresUpgrades/downgrade.sh	Tue Aug 12 17:54:50 2025 +0200
@@ -4,11 +4,10 @@
 
 apt-get update && apt-get install -y wget mercurial
 hg clone https://orthanc.uclouvain.be/hg/orthanc-databases
-pushd orthanc-databases
+pushd /scripts/orthanc-databases/
+hg update -r sql-opti
 
-hg update -r default
-
-psql -U postgres -f /scripts/orthanc-databases/PostgreSQL/Plugins/SQL/Downgrades/Rev5ToRev4.sql
+psql -U postgres -f /scripts/orthanc-databases/PostgreSQL/Plugins/SQL/Downgrades/Rev6ToRev5.sql
 
 # if you want to test a downgrade procedure, you may use this code ...
 # psql -U postgres -f downgrade.sql
--- a/Tests/Tests.py	Mon Aug 11 19:11:12 2025 +0200
+++ b/Tests/Tests.py	Tue Aug 12 17:54:50 2025 +0200
@@ -1351,11 +1351,12 @@
         series = DoGet(_REMOTE, '/series')[0]
 
         m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
-        if IsOrthancVersionAbove(_REMOTE, 1, 11, 0):
-            if 'PatientRecyclingOrder' in m:  # New in Orthanc 1.12.9 (used only by DB plugins)
-                self.assertEqual(3, len(m))
-            else:
-                self.assertEqual(2, len(m))
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 9) and HasPostgresIndexPlugin(_REMOTE):
+            self.assertEqual(3, len(m))
+            self.assertTrue('MainDicomTagsSignature' in m)
+            self.assertTrue('PatientRecyclingOrder' in m)
+        elif IsOrthancVersionAbove(_REMOTE, 1, 11, 0):
+            self.assertEqual(2, len(m))
             self.assertTrue('MainDicomTagsSignature' in m)
         else:
             self.assertEqual(1, len(m))
@@ -1431,11 +1432,12 @@
             self.assertFalse('etag' in headers)
             
         m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
-        if IsOrthancVersionAbove(_REMOTE, 1, 11, 0):
-            if 'PatientRecyclingOrder' in m:  # New in Orthanc 1.12.9 (used only by DB plugins)
-                self.assertEqual(4, len(m))
-            else:
-                self.assertEqual(3, len(m))
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 9) and HasPostgresIndexPlugin(_REMOTE):
+            self.assertEqual(4, len(m))
+            self.assertTrue('MainDicomTagsSignature' in m)
+            self.assertTrue('PatientRecyclingOrder' in m)
+        elif IsOrthancVersionAbove(_REMOTE, 1, 11, 0):
+            self.assertEqual(3, len(m))
             self.assertTrue('MainDicomTagsSignature' in m)
         else:
             self.assertEqual(2, len(m))
@@ -1462,11 +1464,12 @@
             DoDelete(_REMOTE, '/patients/%s/metadata/5555' % p)
             
         m = DoGet(_REMOTE, '/patients/%s/metadata' % p)
-        if IsOrthancVersionAbove(_REMOTE, 1, 11, 0):
-            if 'PatientRecyclingOrder' in m:  # New in Orthanc 1.12.9 (used only by DB plugins)
-                self.assertEqual(3, len(m))
-            else:
-                self.assertEqual(2, len(m))
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 9) and HasPostgresIndexPlugin(_REMOTE):
+            self.assertEqual(3, len(m))
+            self.assertTrue('MainDicomTagsSignature' in m)
+            self.assertTrue('PatientRecyclingOrder' in m)
+        elif IsOrthancVersionAbove(_REMOTE, 1, 11, 0):
+            self.assertEqual(2, len(m))
             self.assertTrue('MainDicomTagsSignature' in m)
         else:
             self.assertEqual(1, len(m))
@@ -9114,11 +9117,12 @@
         self.assertEqual('Patient', a[0]['Type'])
         self.assertEqual('KNEE', a[0]['MainDicomTags']['PatientName'])
         self.assertTrue('Metadata' in a[0])
-        if IsOrthancVersionAbove(_REMOTE, 1, 11, 0):
-            if 'PatientRecyclingOrder' in a[0]['Metadata']:  # New in Orthanc 1.12.9 (used only by DB plugins)
-                self.assertEqual(3, len(a[0]['Metadata']))
-            else:
-                self.assertEqual(2, len(a[0]['Metadata']))
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 9) and HasPostgresIndexPlugin(_REMOTE):
+            self.assertEqual(3, len(a[0]['Metadata']))
+            self.assertTrue('MainDicomTagsSignature' in a[0]['Metadata'])
+            self.assertTrue('PatientRecyclingOrder' in a[0]['Metadata'])
+        elif IsOrthancVersionAbove(_REMOTE, 1, 11, 0):
+            self.assertEqual(2, len(a[0]['Metadata']))
             self.assertTrue('MainDicomTagsSignature' in a[0]['Metadata'])
         else:
             self.assertEqual(1, len(a[0]['Metadata']))
@@ -12149,3 +12153,48 @@
             tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % instanceId)
             self.assertEqual('ORIGINAL\PRIMARY\M\NORM\DIS2D\FM\FIL', tags['ImageType'])
 
+
+    def test_jobs_user_data(self):
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 9):
+            u = UploadInstance(_REMOTE, 'DummyCT.dcm')
+
+            job = DoPost(_REMOTE, '/studies/%s/modify' % u['ParentStudy'],
+                                json.dumps({
+                                    "Replace": {"PatientName": "toto"},
+                                    "UserData": { "user-data": "titi"
+                                                },
+                                    "Asynchronous": True
+                                }))
+            jobDetails = DoGet(_REMOTE, '/jobs/%s' % job['ID'])
+            self.assertEqual('titi', jobDetails['UserData']['user-data'])
+
+            job = DoPost(_REMOTE, '/tools/create-archive',
+                                json.dumps({
+                                    "Resources": [u['ParentStudy']],
+                                    "UserData": "simple-string",
+                                    "Asynchronous": True
+                                }))
+            jobDetails = DoGet(_REMOTE, '/jobs/%s' % job['ID'])
+            self.assertEqual('simple-string', jobDetails['UserData'])
+
+            job = DoPost(_REMOTE, '/modalities/orthanctest/move', { 
+                'Level' : 'Study',
+                'Asynchronous': True,
+                "UserData": "simple-string",
+                'Resources' : [
+                    { 
+                        'StudyInstanceUID' : '1.2.840.113619.2.176.2025.1499492.7391.1171285944.390'
+                    }
+                ]})
+
+            jobDetails = DoGet(_REMOTE, '/jobs/%s' % job['ID'])
+            self.assertEqual('simple-string', jobDetails['UserData'])
+
+            job = DoPost(_REMOTE, '/modalities/orthanctest/store', { 
+                'Level' : 'Study',
+                'Asynchronous': True,
+                "UserData": "simple-string",
+                'Resources' : [u['ParentStudy']]})
+
+            jobDetails = DoGet(_REMOTE, '/jobs/%s' % job['ID'])
+            self.assertEqual('simple-string', jobDetails['UserData'])
--- a/Tests/Toolbox.py	Mon Aug 11 19:11:12 2025 +0200
+++ b/Tests/Toolbox.py	Tue Aug 12 17:54:50 2025 +0200
@@ -479,6 +479,10 @@
     plugins = DoGet(orthanc, '/plugins')
     return ('gdcm' in plugins)
 
+def HasPostgresIndexPlugin(orthanc):
+    plugins = DoGet(orthanc, '/plugins')
+    return ('postgresql-index' in plugins)
+
 
 def _GetMaxImageDifference(im1, im2):
     h = ImageChops.difference(im1, im2).histogram()