Example #1
0
    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]]
Example #2
0
    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']
Example #3
0
    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']
Example #4
0
 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])
Example #5
0
    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
Example #6
0
 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 == []
Example #7
0
 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)
Example #8
0
    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)
Example #9
0
    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']
Example #10
0
    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)
Example #11
0
    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'
Example #12
0
 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']
Example #13
0
 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']
Example #14
0
    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
Example #15
0
 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
Example #16
0
 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
Example #17
0
 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']
Example #18
0
 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
Example #19
0
    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
Example #20
0
 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__()
Example #21
0
 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'
             ]))
Example #22
0
 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'
         ])
Example #23
0
 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'
         ])
Example #24
0
    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']
Example #25
0
 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
Example #26
0
 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']
Example #27
0
 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
Example #28
0
    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
Example #29
0
    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']
Example #30
0
 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