示例#1
0
    def test_remove_destruction_listener_wrong_object(self):
        def on_trace_class_destruction(trace_class):
            pass

        trace_class_1 = get_default_trace_class()
        trace_class_2 = get_default_trace_class()

        handle1 = trace_class_1.add_destruction_listener(
            on_trace_class_destruction)

        with self.assertRaisesRegex(
                ValueError,
                r'This trace class destruction listener does not match the trace class object\.',
        ):
            trace_class_2.remove_destruction_listener(handle1)
示例#2
0
    def test_raise_in_destruction_listener(self):
        def on_trace_class_destruction(trace_class):
            raise ValueError('it hurts')

        trace_class = get_default_trace_class()
        trace_class.add_destruction_listener(on_trace_class_destruction)

        del trace_class
示例#3
0
    def test_remove_destruction_listener_wrong_type(self):
        trace_class = get_default_trace_class()

        with self.assertRaisesRegex(
                TypeError,
                r"'int' is not a '<class 'bt2.utils._ListenerHandle'>' object"
        ):
            trace_class.remove_destruction_listener(123)
def get_const_unsigned_integer_range(int_ranges):
    def range_setter(field):
        field.value = 12

    tc = get_default_trace_class()
    fc = tc.create_unsigned_enumeration_field_class(32)
    fc.add_mapping('something', bt2.UnsignedIntegerRangeSet(int_ranges))

    return create_const_field(tc, fc, range_setter).cls['something'].ranges
示例#5
0
    def test_remove_destruction_listener_twice(self):
        def on_trace_destruction(trace_class):
            pass

        trace_class = get_default_trace_class()
        trace = trace_class()
        handle = trace.add_destruction_listener(on_trace_destruction)

        trace.remove_destruction_listener(handle)

        with self.assertRaisesRegex(
                ValueError,
                r'This trace destruction listener was already removed\.'):
            trace.remove_destruction_listener(handle)
示例#6
0
    def setUp(self):
        self._tc = get_default_trace_class()

        self._context_fc = self._tc.create_structure_field_class()
        self._context_fc.append_member('allo',
                                       self._tc.create_string_field_class())
        self._context_fc.append_member(
            'zola', self._tc.create_signed_integer_field_class(18))

        self._payload_fc = self._tc.create_structure_field_class()
        self._payload_fc.append_member('zoom',
                                       self._tc.create_string_field_class())

        self._stream_class = self._tc.create_stream_class(
            assigns_automatic_event_class_id=True)
示例#7
0
    def test_destruction_listener(self):
        def on_trace_class_destruction(trace_class):
            nonlocal num_trace_class_destroyed_calls
            num_trace_class_destroyed_calls += 1

        def on_trace_destruction(trace):
            nonlocal num_trace_destroyed_calls
            num_trace_destroyed_calls += 1

        num_trace_class_destroyed_calls = 0
        num_trace_destroyed_calls = 0

        trace_class = get_default_trace_class()
        stream_class = trace_class.create_stream_class()
        trace = trace_class()
        stream = trace.create_stream(stream_class)

        trace_class.add_destruction_listener(on_trace_class_destruction)
        td_handle1 = trace.add_destruction_listener(on_trace_destruction)
        td_handle2 = trace.add_destruction_listener(on_trace_destruction)

        self.assertIs(type(td_handle1), bt2_utils._ListenerHandle)

        trace.remove_destruction_listener(td_handle2)

        self.assertEqual(num_trace_class_destroyed_calls, 0)
        self.assertEqual(num_trace_destroyed_calls, 0)

        del trace

        self.assertEqual(num_trace_class_destroyed_calls, 0)
        self.assertEqual(num_trace_destroyed_calls, 0)

        del stream

        self.assertEqual(num_trace_class_destroyed_calls, 0)
        self.assertEqual(num_trace_destroyed_calls, 1)

        del trace_class

        self.assertEqual(num_trace_class_destroyed_calls, 0)
        self.assertEqual(num_trace_destroyed_calls, 1)

        del stream_class

        self.assertEqual(num_trace_class_destroyed_calls, 1)
        self.assertEqual(num_trace_destroyed_calls, 1)
示例#8
0
    def test_destruction_listener(self):
        def on_trace_class_destruction(trace_class):
            nonlocal num_destruct_calls
            num_destruct_calls += 1

        num_destruct_calls = 0

        trace_class = get_default_trace_class()

        handle1 = trace_class.add_destruction_listener(
            on_trace_class_destruction)
        self.assertIs(type(handle1), bt2_utils._ListenerHandle)

        handle2 = trace_class.add_destruction_listener(
            on_trace_class_destruction)

        trace_class.remove_destruction_listener(handle2)

        self.assertEqual(num_destruct_calls, 0)

        del trace_class

        self.assertEqual(num_destruct_calls, 1)
示例#9
0
 def test_len(self):
     tc = get_default_trace_class()
     self.assertEqual(len(tc), 0)
     tc.create_stream_class()
     self.assertEqual(len(tc), 1)
示例#10
0
 def setUp(self):
     self._tc = get_default_trace_class()