def test_forwarding(self, mock_post): # making test app and setting up test envi app = create_app() app.config['TESTING'] = True app.config['DEBUG'] = False app.config[QUORUMS]["a"] = [{API_IP: "192.168.1.200", PORT: "5000", QUORUM_ID: "c"}, {API_IP: "192.168.1.300", PORT: "5000", QUORUM_ID: "d"}, {API_IP: "192.168.1.400", PORT: "5000", QUORUM_ID: "e"}] mock_post.return_value = '<Response [200]>' forward(app, 'submit/', 'c', TRANSACTION_C_JSON) self.assertEqual(2, len(mock_post.call_args)) self.assertEqual('http://192.168.1.200:5000/submit/', mock_post.call_args[0][0]) self.assertEqual(TRANSACTION_C_JSON, mock_post.call_args[1]['json'])
def blocks(): req = get_json(request, app) if app.config[PBFT_INSTANCES].in_committee(req[QUORUM_ID]): return json.dumps(app.config[PBFT_INSTANCES].blocks( req[QUORUM_ID])) else: return forward(app, "blocks/", req[QUORUM_ID], req)
def get(): req = get_json(request, app) if app.config[PBFT_INSTANCES].in_committee(req[QUORUM_ID]): tx = Transaction() tx.load_from_json(req) return app.config[PBFT_INSTANCES].get_tx(tx) else: return forward(app, "get/", req[QUORUM_ID], req)
def submit(): req = get_json(request, app) if app.config[PBFT_INSTANCES].in_committee(req[QUORUM_ID]): tx = Transaction() tx.load_from_json(req) app.config[PBFT_INSTANCES].submit(tx) return ROUTE_EXECUTED_CORRECTLY else: return forward(app, "submit/", req[QUORUM_ID], req)
def test_forwarding_randomness(self, mock_post): # making test app and setting up test envi app = create_app() app.config['TESTING'] = True app.config['DEBUG'] = False app.config[QUORUMS]["a"] = [{ API_IP: "192.168.1.100", PORT: "5000", QUORUM_ID: "c" }, { API_IP: "192.168.1.200", PORT: "5000", QUORUM_ID: "c" }, { API_IP: "192.168.1.300", PORT: "5000", QUORUM_ID: "d" }, { API_IP: "192.168.1.400", PORT: "5000", QUORUM_ID: "e" }] mock_post.return_value = '<Response [200]>' selected_neighbours = [] for _ in range(10): forward(app, 'submit/', 'c', TRANSACTION_C_JSON) self.assertEqual(2, len(mock_post.call_args)) self.assertIn(mock_post.call_args[0][0], [ 'http://192.168.1.200:5000/submit/', 'http://192.168.1.100:5000/submit/' ]) self.assertEqual(TRANSACTION_C_JSON, mock_post.call_args[1]['json']) if mock_post.call_args[0][0] not in selected_neighbours: selected_neighbours.append(mock_post.call_args[0][0])\ self.assertEqual(len(selected_neighbours), 2)
def make_genesis(quorum_id=None): req = get_json(request, app) val_keys = req[VALIDATOR_KEY] usr_keys = req[USER_KEY] if quorum_id == app.config[PBFT_INSTANCES].committee_id_a: app.config[PBFT_INSTANCES].make_genesis(quorum_id, val_keys, usr_keys) elif quorum_id == app.config[PBFT_INSTANCES].committee_id_b: app.config[PBFT_INSTANCES].make_genesis(quorum_id, val_keys, usr_keys) else: return forward(app, "make+genesis/{id}".format(id=quorum_id), quorum_id, req) return ROUTE_EXECUTED_CORRECTLY