def test_broadcast_data(self): server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setblocking(0) server_socket.bind(('localhost', 8001)) server_socket.listen(1) test_message = 'test_message' # Verify that broadcast data is sent via socket CommunicationsInterface.broadcast_data(test_message, [('localhost', 8001)]) readable, writable, exceptional = select.select( [server_socket], [], [], 1) self.assertEqual(len(readable), 1) (client_socket, address) = readable[0].accept() received_data = '' while True: data = client_socket.recv(1024) received_data += data if not data: break self.assertEqual(received_data, test_message)
def broadcast_event(self, event): """ Broadcast an Event to all peers. If this EventManager is listening, the Event will be broadcast to itself as well. Keyword arguments: event -- Event to broadcast """ data = self.serialize_event(event) CommunicationsInterface.broadcast_data(data, self.peers)
def __init__(self, peers, listen_port=None): self.peers = peers self.in_event_queue = Queue.Queue() self.subscriptions = {} # Start thread to listen for incoming events if listen_port: self.peers.append(('localhost', listen_port)) self.listener_thread = CommunicationsInterface.listen(self, listen_port) self.listener_thread.daemon = True self.listener_thread.start()
def __init__(self, peers, listen_port=None): """ EventManager constructor. Keyword arguments: peers -- list of peers to connect to when broadcasting events. Each peer is a tuple of the form (hostname, port). listen_port -- Port to listen for incoming events on. If this is not specified, no listener thread will be created and no events will be received. """ self.peers = peers self.in_event_queue = Queue.Queue() self.subscriptions = {} # Start thread to listen for incoming events if listen_port: self.peers.append(('localhost', listen_port)) self.listener_thread = CommunicationsInterface.listen(self, listen_port) self.listener_thread.daemon = True self.listener_thread.start()
def test_broadcast_data_error(self): # No exception should be raised here CommunicationsInterface.broadcast_data('test_message', [('localhost', 8001)])
def test_listen(self): # listen should return a ListenerThread instance thread = CommunicationsInterface.listen(None, None) self.assertIsInstance(thread, ListenerThread)
def broadcast_event(self, event): data = self.serialize_event(event) CommunicationsInterface.broadcast_data(data, self.peers)