def test_dupe_abs_req(self): """Test negotiation with duplicate requestor, no acceptor contexts.""" context_a = PresentationContext(1, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2']) context_b = PresentationContext(3, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2.1']) context_c = PresentationContext(5, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2.2']) t_syntax = [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ] context_d = PresentationContext(None, '1.2.840.10008.5.1.4.1.1.2', t_syntax) rq_contexts = [context_a, context_b, context_c] acc_contexts = self.test_acc(rq_contexts, [context_d]) for context in acc_contexts: context.AbstractSyntax = None result = self.test_func(rq_contexts, acc_contexts) assert len(result) == 3 for ii, context in enumerate(result): assert context.ID in [1, 3, 5] assert context.AbstractSyntax == '1.2.840.10008.5.1.4.1.1.2' assert context.Result == 0x00 assert context.TransferSyntax == [t_syntax[ii]]
def test_typical(self): """Test a typical set of presentation context negotiations.""" req_contexts = [] for ii, sop in enumerate(StorageSOPClassList): req_contexts.append( PresentationContext(ii * 2 + 1, sop.UID, [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ])) acc_contexts = [] for uid in UID_dictionary: acc_contexts.append( PresentationContext(1, uid, [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ])) results = self.test_func(req_contexts, acc_contexts) assert len(results) == len(req_contexts) for ii, context in enumerate(req_contexts): assert results[ii].ID == context.ID assert results[ii].AbstractSyntax == context.AbstractSyntax if results[ii].AbstractSyntax == '1.2.840.10008.5.1.4.1.1.1.1.1.1': assert results[ii].Result == 0x03 elif results[ii].AbstractSyntax == '1.2.840.10008.5.1.1.4.1.1.3.1': assert results[ii].Result == 0x03 else: assert results[ii].Result == 0x00 assert results[ii].TransferSyntax == ['1.2.840.10008.1.2']
def test_add_transfer_syntax_duplicate(self): """Test add_transfer_syntax with a duplicate UID""" pc = PresentationContext() pc.add_transfer_syntax('1.3') pc.add_transfer_syntax('1.3') assert pc.transfer_syntax == ['1.3']
def test_no_req_one_acc_raise(self): """Test negotiation with no requestor, one acceptor contexts.""" context = PresentationContext() context.context_id = 1 context.abstract_syntax = '1.2.840.10008.5.1.4.1.1.2' context.transfer_syntax = ['1.2.840.10008.1.2'] with pytest.raises(ValueError): result = self.test_func([], [context])
def test_add_private_transfer_syntax(self): """Test adding private transfer syntaxes""" pc = PresentationContext(1) pc.add_transfer_syntax('2.16.840.1.113709.1.2.2') assert '2.16.840.1.113709.1.2.2' in pc._transfer_syntax pc.TransferSyntax = ['2.16.840.1.113709.1.2.1'] assert '2.16.840.1.113709.1.2.1' in pc._transfer_syntax
def test_no_req_one_acc(self): """Test negotiation with no requestor, one acceptor contexts.""" context = PresentationContext() context.context_id = 1 context.abstract_syntax = '1.2.840.10008.5.1.4.1.1.2' context.transfer_syntax = ['1.2.840.10008.1.2'] result = self.test_func([], [context]) assert result == []
def test_transfer_syntax_nonconformant(self, caplog): """Test setting non-conformant transfer syntaxes""" caplog.set_level(logging.DEBUG, logger='pynetdicom3.presentation') pc = PresentationContext() pc.context_id = 1 pc.transfer_syntax = ['1.4.1.', '1.2.840.10008.1.2'] assert pc.transfer_syntax == ['1.4.1.', '1.2.840.10008.1.2'] assert ("A non-conformant UID has been added to 'transfer_syntax'" in caplog.text)
def test_abstract_syntax_nonconformant(self, caplog): """Test adding non-conformant abstract syntaxes""" caplog.set_level(logging.DEBUG, logger='pynetdicom3.presentation') pc = PresentationContext() pc.context_id = 1 pc.abstract_syntax = UID('1.4.1.') assert pc.abstract_syntax == UID('1.4.1.') assert isinstance(pc.abstract_syntax, UID) assert ("'abstract_syntax' set to a non-conformant UID" in caplog.text)
def test_one_req_one_acc_accept_trans_diff(self): """Test negotiation one req/acc, matching accepted, multi trans.""" context_a = PresentationContext() context_a.context_id = 1 context_a.abstract_syntax = '1.2.840.10008.5.1.4.1.1.2' context_a.transfer_syntax = [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ] context_b = PresentationContext() context_b.abstract_syntax = '1.2.840.10008.5.1.4.1.1.2' context_b.transfer_syntax = ['1.2.840.10008.1.2.2'] rq_contexts = [context_a] acc_contexts = self.test_acc(rq_contexts, [context_b]) for context in acc_contexts: context._abstract_syntax = None result = self.test_func(rq_contexts, acc_contexts) assert len(result) == 1 context = result[0] assert context.context_id == 1 assert context.abstract_syntax == '1.2.840.10008.5.1.4.1.1.2' assert context.result == 0x00 assert context.transfer_syntax == ['1.2.840.10008.1.2.2']
def setup(self): # Requestor presentation contexts - max 126 self.requestor_contexts = [] self.requestor_transfer_syntaxes = [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ] for ii, sop in enumerate(StorageSOPClassList): context = PresentationContext(ii * 2 + 1, sop.UID, [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ]) context.SCP = True context.SCU = True self.requestor_contexts.append(context) # Acceptor presentation contexts - no max self.acceptor_contexts = [] self.acceptor_transfer_syntaxes = [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ] for uid in UID_dictionary: context = PresentationContext(1, uid, ['1.2.840.10008.1.2']) context.Result = 0x00 context.SCP = True context.SCU = True self.acceptor_contexts.append(context)
def test_tuple(self): """Test the .as_tuple""" context = PresentationContext() context.context_id = 3 context.abstract_syntax = '1.2.840.10008.1.1' context.transfer_syntax = ['1.2.840.10008.1.2'] out = context.as_tuple assert out.context_id == 3 assert out.abstract_syntax == '1.2.840.10008.1.1' assert out.transfer_syntax == '1.2.840.10008.1.2'
def test_private_abstract_syntax(self): """Test negotiation with private abstract syntax""" context_a = PresentationContext(1, '1.2.3.4', ['1.2.840.10008.1.2.1']) context_b = PresentationContext(None, '1.2.3.4', ['1.2.840.10008.1.2.1']) result = self.test_func([context_a], [context_b]) assert len(result) == 1 context = result[0] assert context.ID == 1 assert context.AbstractSyntax == '1.2.3.4' assert context.Result == 0x00 assert context.TransferSyntax == ['1.2.840.10008.1.2.1']
def test_one_req_one_acc_match(self): """Test negotiation one req/acc, matching accepted.""" context = PresentationContext() context.context_id = 1 context.abstract_syntax = '1.2.840.10008.5.1.4.1.1.2' context.transfer_syntax = ['1.2.840.10008.1.2'] result = self.test_func([context], [context]) assert len(result) == 1 context = result[0] assert context.context_id == 1 assert context.abstract_syntax == '1.2.840.10008.5.1.4.1.1.2' assert context.result == 0x00 assert context.transfer_syntax == ['1.2.840.10008.1.2']
def test_status(self): """Test presentation context status""" pc = PresentationContext(1) statuses = [None, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05] results = [ 'Pending', 'Accepted', 'User Rejected', 'Provider Rejected', 'Abstract Syntax Not Supported', 'Transfer Syntax(es) Not Supported', 'Unknown' ] for status, result in zip(statuses, results): pc.Result = status assert pc.status == result
def test_one_req_one_acc_mismatch(self): """Test negotiation one req/acc, mismatched rejected""" context_a = PresentationContext( 1, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2', '1.2.840.10008.1.2.1']) context_b = PresentationContext(None, '1.2.840.10008.5.1.4.1.1.4', ['1.2.840.10008.1.2.1']) result = self.test_func([context_a], [context_b]) assert len(result) == 1 context = result[0] assert context.ID == 1 assert context.AbstractSyntax == '1.2.840.10008.5.1.4.1.1.2' assert context.Result == 0x03
def test_setter(self, good_init): """Test the presentation context class init""" (context_id, abs_syn, tran_syn) = good_init pc = PresentationContext() pc.context_id = context_id pc.abstract_syntax = abs_syn pc.transfer_syntax = tran_syn assert pc.context_id == context_id assert pc.abstract_syntax == abs_syn assert pc.transfer_syntax == tran_syn assert pc._scu_role is None assert pc._scp_role is None assert pc.result is None
def test_one_req_one_acc_accept_trans_diff(self): """Test negotiation one req/acc, matching accepted, multi trans.""" context_a = PresentationContext(1, '1.2.840.10008.5.1.4.1.1.2', [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ]) context_b = PresentationContext(None, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2.2']) result = self.test_func([context_a], [context_b]) assert len(result) == 1 context = result[0] assert context.ID == 1 assert context.AbstractSyntax == '1.2.840.10008.5.1.4.1.1.2' assert context.Result == 0x00 assert context.TransferSyntax == ['1.2.840.10008.1.2.2']
def test_dupe_abs_req_no_acc(self): """Test negotiation with duplicate requestor, no acceptor contexts.""" context_a = PresentationContext(1, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2']) context_b = PresentationContext(3, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2.1']) context_c = PresentationContext(5, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2.2']) context_list = [context_a, context_b, context_c] result = self.test_func(context_list, []) assert len(result) == 3 for context in result: assert context.ID in [1, 3, 5] assert context.AbstractSyntax == '1.2.840.10008.5.1.4.1.1.2' assert context.Result == 0x03
def test_one_req_no_acc(self): """Test negotiation with one requestor, no acceptor contexts.""" context = PresentationContext() context.context_id = 1 context.abstract_syntax = '1.2.840.10008.5.1.4.1.1.2' context.transfer_syntax = ['1.2.840.10008.1.2'] result = self.test_func([context], []) assert len(result) == 1 context = result[0] assert context.context_id == 1 assert context.abstract_syntax == '1.2.840.10008.5.1.4.1.1.2' assert context.transfer_syntax[0] == '1.2.840.10008.1.2' assert len(context.transfer_syntax) == 1 assert context.result == 0x02
def test_string_output(self): """Test string output""" pc = PresentationContext(1, '1.1.1', ['1.2.840.10008.1.2']) pc.SCP = True pc.SCU = False pc.Result = 0x0002 assert '1.1.1' in pc.__str__() assert 'Implicit' in pc.__str__() assert 'Provider Rejected' in pc.__str__()
def setup(self): self.contexts = [] for x in range(500): self.contexts.append( PresentationContext(1, '1.2.840.10008.5.1.4.1.1.2', [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ]))
def time_create_from_sop_list(self): """Test the time taken to create Presentation Contexts using the predefined SOP Classes from the pyndx.sop_class module. """ for ii, sop_class in enumerate(StorageSOPClassList): PresentationContext(ii * 2 + 1, sop_class.UID, [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ])
def time_create_from_sop(self): """Test the time taken to create a PresentationContext from every available standard DICOM UID. """ for uid in UID_dictionary: PresentationContext(1, uid, [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ])
def test_one_req_one_acc_accept_trans(self): """Test negotiation one req/acc, matching accepted, multi trans.""" context = PresentationContext(1, '1.2.840.10008.5.1.4.1.1.2', [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1', '1.2.840.10008.1.2.2' ]) rq_contexts = [context] acc_contexts = self.test_acc([context], [context]) for context in acc_contexts: context.AbstractSyntax = None result = self.test_func(rq_contexts, acc_contexts) assert len(result) == 1 context = result[0] assert context.ID == 1 assert context.AbstractSyntax == '1.2.840.10008.5.1.4.1.1.2' assert context.Result == 0x00 assert context.TransferSyntax == ['1.2.840.10008.1.2']
def test_good_init(self, good_init): """Test the presentation context class init""" (ID, abs_syn, tran_syn) = good_init pc = PresentationContext(ID, abs_syn, tran_syn) assert pc.ID == ID assert pc.AbstractSyntax == abs_syn assert pc.TransferSyntax == tran_syn assert pc.SCU is None assert pc.SCP is None assert pc.Result is None
def test_private_transfer_syntax(self): """Test negotiation with private transfer syntax""" context_a = PresentationContext() context_a.context_id = 1 context_a.abstract_syntax = '1.2.840.10008.5.1.4.1.1.2' context_a.transfer_syntax = ['1.2.3.4'] context_b = PresentationContext() context_b.abstract_syntax = '1.2.840.10008.5.1.4.1.1.2' context_b.transfer_syntax = ['1.2.840.10008.1.2.1', '1.2.3.4'] result = self.test_func([context_a], [context_b]) assert len(result) == 1 context = result[0] assert context.context_id == 1 assert context.abstract_syntax == '1.2.840.10008.5.1.4.1.1.2' assert context.result == 0x00 assert context.transfer_syntax == ['1.2.3.4']
def test_mixed_init(self, mixed_init): """Test the presentation context class init with some bad transfer""" (ID, abs_syn, bad_tran, good_tran) = mixed_init bad_tran.extend(good_tran) pc = PresentationContext(ID, abs_syn, bad_tran) assert pc.ID == ID assert pc.AbstractSyntax == abs_syn assert pc.TransferSyntax == good_tran assert pc.SCU is None assert pc.SCP is None assert pc.Result is None
def test_one_req_one_acc_reject_trans(self): """Test negotiation one req/acc, matching rejected trans""" context_a = PresentationContext( 1, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2', '1.2.840.10008.1.2.1']) context_b = PresentationContext(None, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2.2']) rq_contexts = [context_a] acc_contexts = self.test_acc(rq_contexts, [context_b]) for context in acc_contexts: context.AbstractSyntax = None result = self.test_func(rq_contexts, acc_contexts) assert len(result) == 1 context = result[0] assert context.ID == 1 assert context.AbstractSyntax == '1.2.840.10008.5.1.4.1.1.2' assert context.Result == 0x04
def test_private_transfer_syntax(self): """Test negotiation with private transfer syntax""" context_a = PresentationContext(1, '1.2.840.10008.5.1.4.1.1.2', ['1.2.3.4']) context_b = PresentationContext(None, '1.2.840.10008.5.1.4.1.1.2', ['1.2.840.10008.1.2.1', '1.2.3.4']) rq_contexts = [context_a] acc_contexts = self.test_acc(rq_contexts, [context_b]) for context in acc_contexts: context.AbstractSyntax = None result = self.test_func(rq_contexts, acc_contexts) assert len(result) == 1 context = result[0] assert context.ID == 1 assert context.AbstractSyntax == '1.2.840.10008.5.1.4.1.1.2' assert context.Result == 0x00 assert context.TransferSyntax == ['1.2.3.4']
def test_one_req_one_acc_mismatch(self): """Test negotiation one req/acc, mismatched rejected""" context_a = PresentationContext() context_a.context_id = 1 context_a.abstract_syntax = '1.2.840.10008.5.1.4.1.1.2' context_a.transfer_syntax = [ '1.2.840.10008.1.2', '1.2.840.10008.1.2.1' ] context_b = PresentationContext() context_b.abstract_syntax = '1.2.840.10008.5.1.4.1.1.4' context_b.transfer_syntax = ['1.2.840.10008.1.2.2'] result = self.test_func([context_a], [context_b]) assert len(result) == 1 context = result[0] assert context.context_id == 1 assert context.abstract_syntax == '1.2.840.10008.5.1.4.1.1.2' assert context.result == 0x03