def test_multi_thread_record_container(self):
        container = MultiThreadRecordContainer()

        def record(container):
            thread = threading.current_thread().name
            collector = container.get_change_event_collector(thread)
            collector.record(SentinelRecord())

        thread_1 = threading.Thread(target=record, args=(container, ))
        thread_2 = threading.Thread(target=record, args=(container, ))
        thread_1.start()
        thread_2.start()
        record(container)
        thread_2.join()
        thread_1.join()

        self.assertEqual(len(container._record_containers), 3)
        for collector in container._record_containers.values():
            self.assertTrue(isinstance(collector._records[0], SentinelRecord))
            self.assertEqual(len(collector._records), 1)

        # save records
        container.save_to_directory(self.directory)
        for name in container._record_containers:
            filename = os.path.join(self.directory, '{0}.trace'.format(name))
            with open(filename, 'r') as handle:
                lines = handle.readlines()
            self.assertEqual(lines, ['\n'])
    def test_multi_thread_change_event_recorder(self):
        test_object = TestObject()
        container = MultiThreadRecordContainer()
        recorder = MultiThreadChangeEventRecorder(container=container)
        trait_notifiers.set_change_event_tracers(
            pre_tracer=recorder.pre_tracer, post_tracer=recorder.post_tracer)
        try:
            test_object.number = 5.0
            thread = threading.Thread(target=test_object.add_to_number,
                                      args=(5, ))
            thread.start()
            thread.join()
        finally:
            trait_notifiers.clear_change_event_tracers()
        self.assertEqual(len(container._record_containers), 2)

        # save records
        container.save_to_directory(self.directory)
        for name in container._record_containers:
            filename = os.path.join(self.directory, '{0}.trace'.format(name))
            with open(filename, 'r') as handle:
                lines = handle.readlines()
            self.assertEqual(len(lines), 4)
            # very basic checking
            if 'MainThread.trace' in filename:
                self.assertTrue(
                    "-> 'number' changed from 2.0 to 5.0 in 'TestObject'\n" in
                    lines[0])
            else:
                self.assertTrue(
                    "-> 'number' changed from 5.0 to 10.0 in 'TestObject'\n" in
                    lines[0])
            self.assertTrue('CALLING' in lines[1])
            self.assertTrue('EXIT' in lines[2])
    def test_multi_thread_record_container(self):
        container = MultiThreadRecordContainer()

        def record(container):
            thread = threading.current_thread().name
            collector = container.get_change_event_collector(thread)
            collector.record(SentinelRecord())

        thread_1 = threading.Thread(target=record, args=(container,))
        thread_2 = threading.Thread(target=record, args=(container,))
        thread_1.start()
        thread_2.start()
        record(container)
        thread_2.join()
        thread_1.join()

        self.assertEqual(len(container._record_containers), 3)
        for collector in container._record_containers.itervalues():
            self.assertTrue(isinstance(collector._records[0], SentinelRecord))
            self.assertEqual(len(collector._records), 1)

        # save records
        container.save_to_directory(self.directory)
        for name in container._record_containers:
            filename = os.path.join(self.directory, "{0}.trace".format(name))
            with open(filename, "r") as handle:
                lines = handle.readlines()
            self.assertEqual(lines, ["\n"])
Exemple #4
0
    def test_multi_thread_change_event_recorder(self):
        test_object = TestObject()
        container = MultiThreadRecordContainer()
        recorder = MultiThreadChangeEventRecorder(container=container)
        trait_notifiers.set_change_event_tracers(
            pre_tracer=recorder.pre_tracer,
            post_tracer=recorder.post_tracer)
        try:
            test_object.number = 5.0
            thread = threading.Thread(
                target=test_object.add_to_number, args=(5,))
            thread.start()
            thread.join()
        finally:
            trait_notifiers.clear_change_event_tracers()
        self.assertEqual(len(container._record_containers), 2)

        # save records
        container.save_to_directory(self.directory)
        for name in container._record_containers:
            filename = os.path.join(self.directory, '{0}.trace'.format(name))
            with open(filename, 'Ur') as handle:
                lines = handle.readlines()
            self.assertEqual(len(lines), 4)
            # very basic checking
            if 'MainThread.trace' in filename:
                self.assertTrue(
                    "-> 'number' changed from 2.0 to 5.0 in 'TestObject'\n"
                    in lines[0])
            else:
                self.assertTrue(
                    "-> 'number' changed from 5.0 to 10.0 in 'TestObject'\n"
                    in lines[0])
            self.assertTrue('CALLING' in lines[1])
            self.assertTrue('EXIT' in lines[2])