Mercurial > hg > orthanc-tests
comparison Tests/Tests.py @ 391:227d9a932467
testing revisions in metadata
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 16 Apr 2021 17:13:53 +0200 |
parents | 5c2472f008eb |
children | 5cbcb4a83b41 |
comparison
equal
deleted
inserted
replaced
390:5c2472f008eb | 391:227d9a932467 |
---|---|
1124 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i), '') # None, received by REST API | 1124 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/RemoteAET' % i), '') # None, received by REST API |
1125 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i), '1.2.840.10008.1.2.4.91') # JPEG2k | 1125 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i), '1.2.840.10008.1.2.4.91') # JPEG2k |
1126 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % i), '1.2.840.10008.5.1.4.1.1.4') | 1126 self.assertEqual(DoGet(_REMOTE, '/instances/%s/metadata/SopClassUid' % i), '1.2.840.10008.5.1.4.1.1.4') |
1127 | 1127 |
1128 # Play with custom metadata | 1128 # Play with custom metadata |
1129 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'coucou') | 1129 (headers, body) = DoPutRaw(_REMOTE, '/patients/%s/metadata/5555' % p, 'coucou') |
1130 self.assertEqual('200', headers['status']) | |
1131 self.assertEqual('', body) | |
1132 self.assertEqual('"0"', headers['etag']) | |
1133 | |
1130 m = DoGet(_REMOTE, '/patients/%s/metadata' % p) | 1134 m = DoGet(_REMOTE, '/patients/%s/metadata' % p) |
1131 self.assertEqual(2, len(m)) | 1135 self.assertEqual(2, len(m)) |
1132 self.assertTrue('LastUpdate' in m) | 1136 self.assertTrue('LastUpdate' in m) |
1133 self.assertTrue('5555' in m) | 1137 self.assertTrue('5555' in m) |
1134 self.assertEqual('coucou', DoGet(_REMOTE, '/patients/%s/metadata/5555' % p)) | 1138 self.assertEqual('coucou', DoGet(_REMOTE, '/patients/%s/metadata/5555' % p)) |
1135 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'hello') | 1139 DoPut(_REMOTE, '/patients/%s/metadata/5555' % p, 'hello', headers = { |
1136 self.assertEqual('hello', DoGet(_REMOTE, '/patients/%s/metadata/5555' % p)) | 1140 'If-Match' : headers['etag'] |
1137 DoDelete(_REMOTE, '/patients/%s/metadata/5555' % p) | 1141 }) |
1142 | |
1143 (headers, body) = DoGetRaw(_REMOTE, '/patients/%s/metadata/5555' % p) | |
1144 self.assertEqual('200', headers['status']) | |
1145 self.assertEqual('hello', body) | |
1146 DoDelete(_REMOTE, '/patients/%s/metadata/5555' % p, headers = { | |
1147 'If-Match' : headers['etag'] | |
1148 }) | |
1138 m = DoGet(_REMOTE, '/patients/%s/metadata' % p) | 1149 m = DoGet(_REMOTE, '/patients/%s/metadata' % p) |
1139 self.assertEqual(1, len(m)) | 1150 self.assertEqual(1, len(m)) |
1140 self.assertTrue('LastUpdate' in m) | 1151 self.assertTrue('LastUpdate' in m) |
1141 | 1152 |
1142 | 1153 |
4639 | 4650 |
4640 # Add, then delete, one user-defined metadata: This triggers 2 | 4651 # Add, then delete, one user-defined metadata: This triggers 2 |
4641 # changes of type "UpdatedMetadata" | 4652 # changes of type "UpdatedMetadata" |
4642 i = DoGet(_REMOTE, '/instances') [0] | 4653 i = DoGet(_REMOTE, '/instances') [0] |
4643 DoPut(_REMOTE, '/instances/%s/metadata/4000' % i, 'hello', 'text/plain') | 4654 DoPut(_REMOTE, '/instances/%s/metadata/4000' % i, 'hello', 'text/plain') |
4644 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/metadata/4000' % i)) | 4655 |
4656 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/4000' % i) | |
4657 self.assertEqual('200', headers['status']) | |
4658 self.assertEqual('hello', body) | |
4645 | 4659 |
4646 c = DoGet(_REMOTE, '/changes?last') | 4660 c = DoGet(_REMOTE, '/changes?last') |
4647 self.assertEqual(1, len(c['Changes'])) | 4661 self.assertEqual(1, len(c['Changes'])) |
4648 self.assertTrue(c['Done']) | 4662 self.assertTrue(c['Done']) |
4649 self.assertEqual(seq + 5, c['Last']) | 4663 self.assertEqual(seq + 5, c['Last']) |
4650 self.assertEqual('UpdatedMetadata', c['Changes'][0]['ChangeType']) | 4664 self.assertEqual('UpdatedMetadata', c['Changes'][0]['ChangeType']) |
4651 | 4665 |
4652 DoDelete(_REMOTE, '/instances/%s/metadata/4000' % i) | 4666 DoDelete(_REMOTE, '/instances/%s/metadata/4000' % i, headers = { |
4667 'If-Match' : headers['etag'] | |
4668 }) | |
4653 c = DoGet(_REMOTE, '/changes?last') | 4669 c = DoGet(_REMOTE, '/changes?last') |
4654 self.assertEqual(1, len(c['Changes'])) | 4670 self.assertEqual(1, len(c['Changes'])) |
4655 self.assertTrue(c['Done']) | 4671 self.assertTrue(c['Done']) |
4656 self.assertEqual(seq + 6, c['Last']) | 4672 self.assertEqual(seq + 6, c['Last']) |
4657 self.assertEqual('UpdatedMetadata', c['Changes'][0]['ChangeType']) | 4673 self.assertEqual('UpdatedMetadata', c['Changes'][0]['ChangeType']) |
6554 self.assertEqual(tags['0020,000e'], series['MainDicomTags']['SeriesInstanceUID']) | 6570 self.assertEqual(tags['0020,000e'], series['MainDicomTags']['SeriesInstanceUID']) |
6555 | 6571 |
6556 instance = DoGet(_REMOTE, '/instances/%s' % a) | 6572 instance = DoGet(_REMOTE, '/instances/%s' % a) |
6557 self.assertEqual(tags['0008,0018'], instance['MainDicomTags']['SOPInstanceUID']) | 6573 self.assertEqual(tags['0008,0018'], instance['MainDicomTags']['SOPInstanceUID']) |
6558 | 6574 |
6575 | |
6576 def test_revisions(self): | |
6577 # This test fails on Orthanc <= 1.9.1 (support for revisions | |
6578 # was introduced in 1.9.2), or if configuration option | |
6579 # "CheckRevisions" is "False". Conventions for HTTP headers | |
6580 # related to revisions mimic CouchDB: | |
6581 # https://docs.couchdb.org/en/stable/api/document/common.html | |
6582 i = UploadInstance(_REMOTE, 'DummyCT.dcm') ['ID'] | |
6583 | |
6584 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i) | |
6585 self.assertEqual('200', headers['status']) | |
6586 self.assertEqual('"0"', headers['etag']) | |
6587 self.assertEqual('1.2.840.10008.1.2.4.70', body) | |
6588 | |
6589 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, headers = { | |
6590 'If-None-Match' : '"0"' | |
6591 }) | |
6592 self.assertEqual('304', headers['status']) # Not modified | |
6593 self.assertEqual('"0"', headers['etag']) | |
6594 self.assertEqual('', body) # Body must be empty on 304 status | |
6595 | |
6596 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, headers = { | |
6597 'If-None-Match' : '"1"' | |
6598 }) | |
6599 self.assertEqual('200', headers['status']) | |
6600 self.assertEqual('"0"', headers['etag']) | |
6601 self.assertEqual('1.2.840.10008.1.2.4.70', body) | |
6602 | |
6603 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i) | |
6604 self.assertEqual('403', headers['status']) # Forbidden (system metadata) | |
6605 | |
6606 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, 'hello') | |
6607 self.assertEqual('403', headers['status']) # Forbidden (system metadata) | |
6608 | |
6609 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello') | |
6610 self.assertEqual('200', headers['status']) | |
6611 self.assertEqual('"0"', headers['etag']) | |
6612 | |
6613 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i) | |
6614 self.assertEqual('200', headers['status']) | |
6615 self.assertEqual('"0"', headers['etag']) | |
6616 self.assertEqual('hello', body) | |
6617 | |
6618 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = { | |
6619 'If-None-Match' : '"0"' | |
6620 }) | |
6621 self.assertEqual('304', headers['status']) | |
6622 self.assertEqual('"0"', headers['etag']) | |
6623 self.assertEqual('', body) | |
6624 | |
6625 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = { | |
6626 'If-None-Match' : '"1"' | |
6627 }) | |
6628 self.assertEqual('200', headers['status']) | |
6629 self.assertEqual('"0"', headers['etag']) | |
6630 self.assertEqual('hello', body) | |
6631 self.assertEqual('hello', DoGet(_REMOTE, '/instances/%s/metadata/1024' % i)) | |
6632 | |
6633 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/1024' % i) | |
6634 self.assertEqual('409', headers['status']) # No revision given, but "CheckRevisions" is True | |
6635 | |
6636 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = { | |
6637 'If-Match' : '45' | |
6638 }) | |
6639 self.assertEqual('409', headers['status']) # Conflict, as bad revision | |
6640 | |
6641 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = { | |
6642 'If-Match' : '0' | |
6643 }) | |
6644 self.assertEqual('200', headers['status']) | |
6645 | |
6646 (headers, body) = DoDeleteRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = { | |
6647 'If-Match' : '0' | |
6648 }) | |
6649 self.assertEqual('404', headers['status']) | |
6650 | |
6651 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i) | |
6652 self.assertEqual('404', headers['status']) | |
6653 | |
6654 self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/instances/%s/metadata/1024' % i)) | |
6655 | |
6656 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello') | |
6657 self.assertEqual('200', headers['status']) | |
6658 self.assertEqual('"0"', headers['etag']) | |
6659 | |
6660 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello') | |
6661 self.assertEqual('409', headers['status']) | |
6662 | |
6663 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/TransferSyntax' % i, headers = { | |
6664 'If-None-Match' : '"0"' | |
6665 }) | |
6666 self.assertEqual('304', headers['status']) # Not modified | |
6667 self.assertEqual('"0"', headers['etag']) | |
6668 self.assertEqual('', body) # Body must be empty on 304 status | |
6669 | |
6670 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello', headers = { | |
6671 'If-Match' : '0' | |
6672 }) | |
6673 self.assertEqual('200', headers['status']) | |
6674 self.assertEqual('"1"', headers['etag']) | |
6675 self.assertEqual('', body) | |
6676 | |
6677 (headers, body) = DoGetRaw(_REMOTE, '/instances/%s/metadata/1024' % i, headers = { | |
6678 'If-None-Match' : headers['etag'] | |
6679 }) | |
6680 | |
6681 if headers['status'] == '200': | |
6682 print("Your database backend doesn't store revisions") | |
6683 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello2', headers = { | |
6684 'If-Match' : '1' | |
6685 }) | |
6686 self.assertEqual('409', headers['status']) | |
6687 | |
6688 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello2', headers = { | |
6689 'If-Match' : '0' | |
6690 }) | |
6691 self.assertEqual('200', headers['status']) | |
6692 self.assertEqual('"1"', headers['etag']) | |
6693 self.assertEqual('', body) | |
6694 | |
6695 elif headers['status'] == '304': # Revisions are supported | |
6696 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello2', headers = { | |
6697 'If-Match' : '0' | |
6698 }) | |
6699 self.assertEqual('409', headers['status']) | |
6700 | |
6701 (headers, body) = DoPutRaw(_REMOTE, '/instances/%s/metadata/1024' % i, 'hello2', headers = { | |
6702 'If-Match' : '1' | |
6703 }) | |
6704 self.assertEqual('200', headers['status']) | |
6705 self.assertEqual('"2"', headers['etag']) | |
6706 self.assertEqual('', body) | |
6707 | |
6708 else: | |
6709 raise Exception('Internal error') | |
6710 | |
6711 self.assertEqual('hello2', DoGet(_REMOTE, '/instances/%s/metadata/1024' % i)) | |
6712 |