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"])
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])