def test_clients_send_block_broadcast(): """ test case for broadcasting between two clients""" # creates a P2P_API object p2p_api = P2P_API() # creates a peer named core peer = p2p_api.create_a_peer(role='core', name='core', host=('0.0.0.0', 8000)) dummy_peer = p2p_api.create_a_peer(role="sw", name="switch_1", host=("127.0.0.1", 8011)) # creates an instance of Client with the specified peer above client_1 = Client(create_blockchain(2), peer, dummy_peer) # creates a peer named switch_2 with the role sw peer2 = p2p_api.create_a_peer(role='sw', name='switch_2', host=('0.0.0.0', 8012)) # creates a Client with the specified peer above and connect it to the peer of client 1 client_2 = Client(create_blockchain(3), peer2, client_1.peer) peer3 = p2p_api.create_a_peer(role='sw', name='switch_3', host=('0.0.0.0', 8013)) # creates a Client with the specified peer above and connect it to the peer of client 1 client_3 = Client(create_blockchain(3), peer3, client_1.peer) def json_string_block(): """creates a main block for testing purposes""" prev_hash = "1" miner = "2" difficulty = "3" mb = MainBlock(prev_hash, miner, difficulty, [], [], []) # time is automatically set, so we need to change it for the test mb.time = 1562228422767 return mb.string() json_string_message = json_string_block() time.sleep(10) # sends a broadcast message from client 1 to client 2 p2p_api.send_broadcast(client_1.peer, json_string_message) time.sleep(10) # sets block_received event client_2.event_manager.block_received.set() client_3.event_manager.block_received.set() assert client_2.p2p_api.get_recv_block( peer2.server_info.host) == json_string_message assert client_3.p2p_api.get_recv_block( peer3.server_info.host) == json_string_message time.sleep(3) remove_database() client_1.p2p_api.event_mg.error.set() client_2.p2p_api.event_mg.error.set() client_3.p2p_api.event_mg.error.set()
def test_clients_send_tx_broadcast(): """ test case for broadcasting between two clients""" # creates a P2P_API object p2p_api = P2P_API() # creates a peer named core peer = p2p_api.create_a_peer(role='core', name='core', host=('0.0.0.0', 8000)) # creates a dummy peer for testing purposes dummy_peer = p2p_api.create_a_peer(role="sw", name="switch_1", host=("127.0.0.1", 8011)) # creates an instance of Client with the specified peer above client_1 = Client(create_blockchain(2), peer, dummy_peer) # creates a peer named switch_2 with the role sw peer2 = p2p_api.create_a_peer(role='sw', name='switch_2', host=('0.0.0.0', 8012)) # creates a Client with the specified peer above and connect it to the peer of client 1 client_2 = Client(create_blockchain(2), peer2, client_1.peer) # creates a peer named switch_3 with the role sw peer3 = p2p_api.create_a_peer(role='sw', name='switch_3', host=('0.0.0.0', 8013)) # creates a Client with the specified peer above and connect it to the peer of client 1 client_3 = Client(create_blockchain(2), peer3, client_1.peer) def json_string_tx(): """creates a main block for testing purposes""" sender = "iWVjc8hWuRuePAv1X8nDZdcjKcqivDUH62YKhBXBHqp2yGfgeXyHJDj5XwCHwjWB6GevCjMYT59XSBiQvMYHQ4P" receivers = ["01", "02", "0a"] amounts = [1, 2, 3] fee = 100 tx = Transaction(sender, receivers, amounts, fee) return tx.string() json_string_message = json_string_tx() time.sleep(15) # sends a broadcast message from client 1 to client 2 p2p_api.send_broadcast(client_1.peer, json_string_message) time.sleep(10) # sets block_received event client_2.event_manager.tx_received.set() client_3.event_manager.tx_received.set() assert client_2.p2p_api.get_recv_tx( peer2.server_info.host) == json_string_message time.sleep(3) remove_database() client_1.p2p_api.event_mg.error.set() client_2.p2p_api.event_mg.error.set()
def test_send_main_block(): client1 = Client() peer1 = Peer(('0.0.0.0', 8001)) peer1.start() peer2 = Peer(('0.0.0.0', 8002)) peer2.start() def block(): """creates a main block for testing purposes""" prev_hash = "1" miner = "2" difficulty = "3" mb = MainBlock(prev_hash, miner, difficulty, [], [], []) # time is automatically set, so we need to change it for the test mb.time = 1562228422767 mb.height = 1 return mb # client1.main_block_pool.add_block(block()) client2 = Client() # connects peer 1 to peer 2 through client's API client1.p2p_api.connect(peer1, peer2) # ToDo: use this instead # assert client2.main_block_pool.contains(someblock) json_string_message = block().string() time.sleep(10) # sends a broadcast message from client 1 to client 2 client1.p2p_api.send_broadcast(peer1, json_string_message) time.sleep(10) # sets block_received event client2.event_manager.block_received.set() assert client2.p2p_api.get_recv_block( peer2.server_info.host) == json_string_message time.sleep(3) # remove the data remove_database() # stop the event client2.p2p_api.event_mg.error.set()
def test_peer_integration_broadcast(): # creates an object of p2p api peer1_api = P2P_API() # creates a peer through API # peer1 = peer1_api.create_a_peer(('0.0.0.0', 8001)) # creates a peer directly from Peer class peer1 = Peer(('0.0.0.0', 8001)) peer1.start() # creates an object of p2p api peer2_api = P2P_API() # creates a peer peer2 = Peer(('0.0.0.0', 8002)) peer2.start() # connects peer 1 to peer 2 through API # peer1_api.connect(peer1, peer2) # connects peer 1 to peer 2 directly peer1.onProcess([ 'join', '{}:{}'.format(peer2.server_info.host[0], peer2.server_info.host[1]) ]) time.sleep(1) # checks if the peer 1 has created a net assert ('0.0.0.0', 8001) == list(peer2.peer_pool.keys())[0] # peer 2 sends a "123" broadcast to connected peers in the net peer2_api.send_broadcast(peer2, "123") rcv_message = str(get_messages(peer1.server_info.host)) assert "123" == rcv_message time.sleep(5) remove_database() peer1.stop() peer2.stop()
def test_multiple_peer_chain_integration(): peer_api = P2P_API() p1 = Peer(('0.0.0.0', 50501)) p1.start() p2 = Peer(('0.0.0.0', 50502)) p2.start() p3 = Peer(('0.0.0.0', 50503)) p3.start() p4 = Peer(('0.0.0.0', 50504)) p4.start() p5 = Peer(('0.0.0.0', 50505)) p5.start() p6 = Peer(('0.0.0.0', 50506)) p6.start() time.sleep(5) p1.onProcess([ 'join', '{}:{}'.format(p2.server_info.host[0], p2.server_info.host[1]) ]) time.sleep(2) p2.onProcess([ 'join', '{}:{}'.format(p3.server_info.host[0], p3.server_info.host[1]) ]) time.sleep(2) p3.onProcess([ 'join', '{}:{}'.format(p4.server_info.host[0], p4.server_info.host[1]) ]) time.sleep(2) p4.onProcess([ 'join', '{}:{}'.format(p5.server_info.host[0], p5.server_info.host[1]) ]) time.sleep(2) p5.onProcess([ 'join', '{}:{}'.format(p6.server_info.host[0], p6.server_info.host[1]) ]) time.sleep(2) p6.onProcess([ 'join', '{}:{}'.format(p5.server_info.host[0], p5.server_info.host[1]) ]) time.sleep(2) peer_api.send_broadcast(p2, "123") time.sleep(300 / 1000) peer_api.send_broadcast(p3, "123") time.sleep(300 / 1000) peer_api.send_broadcast(p4, "123") time.sleep(300 / 1000) peer_api.send_broadcast(p5, "123") time.sleep(300 / 1000) peer_api.send_broadcast(p6, "123") time.sleep(3) # checks whether the specific peer is connected with peer/peers assert ('0.0.0.0', 50502) == list(p1.peer_pool.keys())[0] assert ('0.0.0.0', 50501) == list( p2.peer_pool.keys())[0] and ('0.0.0.0', 50503) == list( p2.peer_pool.keys())[1] assert ('0.0.0.0', 50502) == list( p3.peer_pool.keys())[0] and ('0.0.0.0', 50504) == list( p3.peer_pool.keys())[1] assert ('0.0.0.0', 50503) == list( p4.peer_pool.keys())[0] and ('0.0.0.0', 50505) == list( p4.peer_pool.keys())[1] assert ('0.0.0.0', 50504) == list( p5.peer_pool.keys())[0] and ('0.0.0.0', 50506) == list( p5.peer_pool.keys())[1] assert ('0.0.0.0', 50505) == list(p6.peer_pool.keys())[0] rcv_message_1 = str(get_messages(p1.server_info.host)) rcv_message_2 = str(get_messages(p2.server_info.host)) rcv_message_3 = str(get_messages(p3.server_info.host)) rcv_message_4 = str(get_messages(p4.server_info.host)) rcv_message_5 = str(get_messages(p5.server_info.host)) rcv_message_6 = str(get_messages(p6.server_info.host)) assert "123" == rcv_message_1 and "123" == rcv_message_2 and "123" == rcv_message_3 assert "123" == rcv_message_4 and "123" == rcv_message_5 # assert "123" == rcv_message_6 remove_database() time.sleep(2) p1.stop() and p2.stop() and p3.stop() and p4.stop() and p5.stop( ) and p6.stop()