def replay(self, speed=None): """Schedule broadcasts.""" # Listen for message broadcasts. listener_A = MessageListener(UnitTestMessageA) listener_B = MessageListener(UnitTestMessageB) buffer_A = list() buffer_B = list() # Subscribe callbacks. def callback_A(data): buffer_A.append(data) def callback_B(data): buffer_B.append(data) listener_A.subscribe(callback_A) listener_B.subscribe(callback_B) # Create objects for replaying data. reader = ReadDirectory(LOG_PATH, message=True) if not speed: speed = 1.0 replay = Replay(reader) else: replay = Replay(reader, speed=speed) # Start replay and Wait for broadcasts to end. replay.start() run_time = 1.0 / float(speed) start_wait = time.time() while True: duration = time.time() - start_wait if replay.is_alive() and duration < 2.0 * run_time: time.sleep(0.05) else: break # Ensure all messages were received. self.assertEqual(len(buffer_A) + len(buffer_B), 20) # Ensure timing is approximately correct. self.assertGreaterEqual(duration, 0.5 * run_time) self.assertLessEqual(duration, 2.0 * run_time) # Ensure replay can be restarted successfully after finishing a replay. self.assertTrue(replay.start()) time.sleep(0.05) self.assertTrue(replay.is_alive()) self.assertTrue(replay.stop())
def test_init(self): """Test Replay() instantiation.""" # Create objects for reading data. reader = ReadDirectory(LOG_PATH, message=True) # Create object for replay. Replay(reader) # Create object for replay with a non-default speed. self.assertEqual(Replay(reader, speed=5).speed, 5) # Ensure the reader object is validated. with self.assertRaises(Exception): Replay(dict) # Ensure the speed argument is validated. with self.assertRaises(Exception): Replay(reader, speed=-1.0)
def test_start_pause_stop(self): """Test Replay() start/pause/stop.""" # Create objects for reading data. reader = ReadDirectory(LOG_PATH, message=True) # Create object for replay. replay = Replay(reader) # Start replaying data. self.assertTrue(replay.start()) self.assertTrue(replay.is_alive()) self.assertFalse(replay.start()) # Pause replaying data. self.assertTrue(replay.pause()) self.assertFalse(replay.is_alive()) self.assertFalse(replay.pause()) self.assertTrue(replay.start()) # Stop replaying data. self.assertTrue(replay.stop()) self.assertFalse(replay.is_alive()) self.assertFalse(replay.stop()) # Allow threads to fully shut down. time.sleep(0.1)