@@ -31,13 +31,26 @@ assert C_ECHO_RSP is not None
3131assert C_STORE_RQ is not None
3232assert C_STORE_RSP is not None
3333assert C_FIND_RQ is not None
34+ assert C_FIND_RSP is not None
35+ assert C_MOVE_RQ is not None
36+ assert C_MOVE_RSP is not None
37+ assert C_GET_RQ is not None
38+ assert C_GET_RSP is not None
3439
3540= Verify constants are exported
3641assert DICOM_PORT == 104
3742assert APP_CONTEXT_UID == "1.2.840.10008.3.1.1.1"
3843assert DEFAULT_TRANSFER_SYNTAX_UID == "1.2.840.10008.1.2"
3944assert VERIFICATION_SOP_CLASS_UID == "1.2.840.10008.1.1"
4045
46+ = Verify Query/Retrieve SOP Class UIDs are exported
47+ assert PATIENT_ROOT_QR_FIND_SOP_CLASS_UID == "1.2.840.10008.5.1.4.1.2.1.1"
48+ assert PATIENT_ROOT_QR_MOVE_SOP_CLASS_UID == "1.2.840.10008.5.1.4.1.2.1.2"
49+ assert PATIENT_ROOT_QR_GET_SOP_CLASS_UID == "1.2.840.10008.5.1.4.1.2.1.3"
50+ assert STUDY_ROOT_QR_FIND_SOP_CLASS_UID == "1.2.840.10008.5.1.4.1.2.2.1"
51+ assert STUDY_ROOT_QR_MOVE_SOP_CLASS_UID == "1.2.840.10008.5.1.4.1.2.2.2"
52+ assert STUDY_ROOT_QR_GET_SOP_CLASS_UID == "1.2.840.10008.5.1.4.1.2.2.3"
53+
4154############
4255############
4356+ PDU header tests
@@ -158,7 +171,6 @@ raw = struct.pack("!BBH", 0xFF, 0, 4) + b"test"
158171parsed = DICOMVariableItem(raw)
159172assert parsed.item_type == 0xFF
160173assert parsed.length == 4
161- # Fallback handled by guess_payload_class returning DICOMGenericItem
162174assert parsed.payload is not None
163175
164176############
@@ -267,7 +279,6 @@ pdv1 = PresentationDataValueItem(context_id=1, data=b'\xDE\xAD', is_command=1, i
267279pdv2 = PresentationDataValueItem(context_id=1, data=b'\xBE\xEF', is_command=0, is_last=1)
268280pkt = DICOM() / P_DATA_TF(pdv_items=[pdv1, pdv2])
269281raw = bytes(pkt)
270- # Verify PDU type and structure
271282assert raw[0] == 0x04
272283assert len(raw) > 6
273284
@@ -276,8 +287,7 @@ test_data = b"\x01\x02\x03\x04\x05"
276287pdv = PresentationDataValueItem(context_id=3, data=test_data, is_command=1, is_last=1)
277288original = DICOM() / P_DATA_TF(pdv_items=[pdv])
278289serialized = bytes(original)
279- # Verify structure
280- assert serialized[0] == 0x04 # P-DATA-TF type
290+ assert serialized[0] == 0x04
281291length = struct.unpack("!I", serialized[2:6])[0]
282292assert length > 0
283293assert test_data in serialized
@@ -349,14 +359,55 @@ pkt = C_FIND_RQ(message_id=55)
349359raw = bytes(pkt)
350360assert struct.pack("<H", 0x0020) in raw
351361
362+ = C_FIND_RSP creation
363+ pkt = C_FIND_RSP(message_id_responded=55, status=0x0000)
364+ raw = bytes(pkt)
365+ assert struct.pack("<H", 0x8020) in raw
366+ assert struct.pack("<H", 0x0000) in raw
367+
368+ = C_MOVE_RQ creation with move_destination
369+ pkt = C_MOVE_RQ(message_id=100, move_destination=b"DEST_AE")
370+ raw = bytes(pkt)
371+ assert struct.pack("<H", 0x0021) in raw
372+ assert b'DEST_AE' in raw
373+
374+ = C_MOVE_RSP creation with sub-operation counters
375+ pkt = C_MOVE_RSP(
376+ message_id_responded=100,
377+ status=0xFF00,
378+ num_remaining=5,
379+ num_completed=3,
380+ num_failed=1,
381+ num_warning=0
382+ )
383+ raw = bytes(pkt)
384+ assert struct.pack("<H", 0x8021) in raw
385+ assert struct.pack("<H", 0xFF00) in raw
386+
387+ = C_GET_RQ creation
388+ pkt = C_GET_RQ(message_id=200)
389+ raw = bytes(pkt)
390+ assert struct.pack("<H", 0x0010) in raw
391+
392+ = C_GET_RSP creation with sub-operation counters
393+ pkt = C_GET_RSP(
394+ message_id_responded=200,
395+ status=0x0000,
396+ num_remaining=0,
397+ num_completed=10,
398+ num_failed=0,
399+ num_warning=0
400+ )
401+ raw = bytes(pkt)
402+ assert struct.pack("<H", 0x8010) in raw
403+
352404= DIMSE command in P-DATA-TF - build verification
353405dimse = C_ECHO_RQ(message_id=42)
354406pdv = PresentationDataValueItem(context_id=1, data=bytes(dimse), is_command=1, is_last=1)
355407pdata = DICOM() / P_DATA_TF(pdv_items=[pdv])
356408raw = bytes(pdata)
357- # Verify structure
358- assert raw[0] == 0x04 # P-DATA-TF type
359- assert b'1.2.840.10008.1.1' in raw # Verification SOP Class UID in the payload
409+ assert raw[0] == 0x04
410+ assert b'1.2.840.10008.1.1' in raw
360411
361412############
362413############
0 commit comments