diff --git a/plenum/common/messages/client_request.py b/plenum/common/messages/client_request.py index 1b8e98047a..0e08667c36 100644 --- a/plenum/common/messages/client_request.py +++ b/plenum/common/messages/client_request.py @@ -7,7 +7,7 @@ ChooseField, ConstantField, DestNodeField, VerkeyField, DestNymField, \ RoleField, TxnSeqNoField, IdentifierField, \ NonNegativeNumberField, SignatureField, MapField, LimitedLengthStringField, \ - ProtocolVersionField, LedgerIdField + ProtocolVersionField, LedgerIdField, Base58Field from plenum.common.messages.message_base import MessageValidator from plenum.common.types import OPERATION, f from plenum.config import ALIAS_FIELD_LIMIT, DIGEST_FIELD_LIMIT, \ @@ -22,7 +22,7 @@ class ClientNodeOperationData(MessageValidator): (CLIENT_PORT, NetworkPortField(optional=True)), (ALIAS, LimitedLengthStringField(max_length=ALIAS_FIELD_LIMIT)), (SERVICES, IterableField(ChooseField(values=(VALIDATOR,)), optional=True)), - (BLS_KEY, LimitedLengthStringField(max_length=BLS_KEY_LIMIT, optional=True)), + (BLS_KEY, Base58Field(byte_lengths=(128,), optional=True)), ) def _validate_message(self, dct): diff --git a/plenum/test/bls/conftest.py b/plenum/test/bls/conftest.py index c95eb40a93..a5d496e4d7 100644 --- a/plenum/test/bls/conftest.py +++ b/plenum/test/bls/conftest.py @@ -4,7 +4,7 @@ from plenum.common.constants import DOMAIN_LEDGER_ID from plenum.common.util import get_utc_epoch from plenum.test.bls.helper import generate_state_root - +from plenum.test.pool_transactions.conftest import looper participants = ["Node1", "Node2", "Node3"] signature = "somefakesignaturesomefakesignaturesomefakesignature" diff --git a/plenum/test/bls/helper.py b/plenum/test/bls/helper.py index 96298fa419..a50a13a3d5 100644 --- a/plenum/test/bls/helper.py +++ b/plenum/test/bls/helper.py @@ -1,23 +1,34 @@ import base58 import os -from common.serializers.serialization import state_roots_serializer -from plenum.common.constants import DOMAIN_LEDGER_ID, ALIAS, BLS_KEY +from crypto.bls.bls_crypto import BlsCryptoVerifier +from plenum.bls.bls_crypto_factory import create_default_bls_crypto_factory +from plenum.server.quorums import Quorums +from crypto.bls.bls_multi_signature import MultiSignatureValue +from state.pruning_state import PruningState +from common.serializers.serialization import state_roots_serializer, proof_nodes_serializer +from plenum.common.constants import DOMAIN_LEDGER_ID, ALIAS, BLS_KEY, STATE_PROOF, TXN_TYPE, MULTI_SIGNATURE, \ + MULTI_SIGNATURE_PARTICIPANTS, MULTI_SIGNATURE_SIGNATURE, MULTI_SIGNATURE_VALUE from plenum.common.keygen_utils import init_bls_keys from plenum.common.messages.node_messages import Commit, Prepare, PrePrepare -from plenum.common.util import get_utc_epoch, randomString, random_from_alphabet -from plenum.test.helper import sendRandomRequests, waitForSufficientRepliesForRequests +from plenum.common.util import get_utc_epoch, randomString, random_from_alphabet, hexToFriendly +from plenum.test.helper import sendRandomRequests, waitForSufficientRepliesForRequests, sdk_send_random_and_check from plenum.test.node_catchup.helper import waitNodeDataEquality, ensureClientConnectedToNodesAndPoolLedgerSame -from plenum.test.pool_transactions.helper import updateNodeData, new_client +from plenum.test.node_request.helper import sdk_ensure_pool_functional +from plenum.test.pool_transactions.helper import updateNodeData, sdk_send_update_node, \ + sdk_pool_refresh +from stp_core.common.log import getlogger + +logger = getlogger() def generate_state_root(): return base58.b58encode(os.urandom(32)) -def check_bls_multi_sig_after_send(looper, txnPoolNodeSet, - client, wallet, - saved_multi_sigs_count): +def sdk_check_bls_multi_sig_after_send(looper, txnPoolNodeSet, + sdk_pool_handle, sdk_wallet_handle, + saved_multi_sigs_count): # at least two because first request could have no # signature since state can be clear number_of_requests = 3 @@ -26,8 +37,8 @@ def check_bls_multi_sig_after_send(looper, txnPoolNodeSet, # Using loop to avoid 3pc batching state_roots = [] for i in range(number_of_requests): - reqs = sendRandomRequests(wallet, client, 1) - waitForSufficientRepliesForRequests(looper, client, requests=reqs) + sdk_send_random_and_check(looper, txnPoolNodeSet, sdk_pool_handle, + sdk_wallet_handle, 1) waitNodeDataEquality(looper, txnPoolNodeSet[0], *txnPoolNodeSet[:-1]) state_roots.append( state_roots_serializer.serialize( @@ -45,7 +56,7 @@ def check_bls_multi_sig_after_send(looper, txnPoolNodeSet, # 3. check how many multi-sigs are saved for multi_sigs in multi_sigs_for_batch: - assert len(multi_sigs) == saved_multi_sigs_count,\ + assert len(multi_sigs) == saved_multi_sigs_count, \ "{} != {}".format(len(multi_sigs), saved_multi_sigs_count) # 3. check that bls multi-sig is the same for all nodes we get PrePrepare for (that is for all expect the last one) @@ -89,20 +100,20 @@ def calculate_multi_sig(creator, bls_bft_with_commits, quorums, pre_prepare): def create_pre_prepare_params(state_root, - ledger_id = DOMAIN_LEDGER_ID, + ledger_id=DOMAIN_LEDGER_ID, txn_root=None, timestamp=None, bls_multi_sig=None): - params= [0, - 0, - 0, - timestamp or get_utc_epoch(), - [('1' * 16, 1)], - 0, - "random digest", - ledger_id, - state_root, - txn_root or '1' * 32] + params = [0, + 0, + 0, + timestamp or get_utc_epoch(), + [('1' * 16, 1)], + 0, + "random digest", + ledger_id, + state_root, + txn_root or '1' * 32] if bls_multi_sig: params.append(bls_multi_sig.as_list()) return params @@ -122,12 +133,14 @@ def create_commit_no_bls_sig(req_key): params = create_commit_params(view_no, pp_seq_no) return Commit(*params) + def create_commit_with_bls_sig(req_key, bls_sig): view_no, pp_seq_no = req_key params = create_commit_params(view_no, pp_seq_no) params.append(bls_sig) return Commit(*params) + def create_commit_bls_sig(bls_bft, req_key, pre_prepare): view_no, pp_seq_no = req_key params = create_commit_params(view_no, pp_seq_no) @@ -159,8 +172,8 @@ def change_bls_key(looper, txnPoolNodeSet, key_in_txn = \ new_blspk \ - if not add_wrong \ - else ''.join(random_from_alphabet(32, base58.alphabet)) + if not add_wrong \ + else ''.join(random_from_alphabet(32, base58.alphabet)) node_data = { ALIAS: node.name, @@ -174,6 +187,32 @@ def change_bls_key(looper, txnPoolNodeSet, return new_blspk +def sdk_change_bls_key(looper, txnPoolNodeSet, + node, + sdk_pool_handle, + sdk_wallet_steward, + add_wrong=False, + new_bls=None): + new_blspk = init_bls_keys(node.keys_dir, node.name) + key_in_txn = new_bls or new_blspk \ + if not add_wrong \ + else base58.b58encode(randomString(128).encode()) + node_dest = hexToFriendly(node.nodestack.verhex) + sdk_send_update_node(looper, sdk_wallet_steward, + sdk_pool_handle, + node_dest, node.name, + None, None, + None, None, + bls_key=key_in_txn, + services=None) + poolSetExceptOne = list(txnPoolNodeSet) + poolSetExceptOne.remove(node) + waitNodeDataEquality(looper, node, *poolSetExceptOne) + sdk_pool_refresh(looper, sdk_pool_handle) + sdk_ensure_pool_functional(looper, txnPoolNodeSet, sdk_wallet_steward, sdk_pool_handle) + return new_blspk + + def check_bls_key(blskey, node, nodes, add_wrong=False): ''' Check that each node has the same and correct blskey for this node @@ -195,24 +234,89 @@ def check_bls_key(blskey, node, nodes, add_wrong=False): def check_update_bls_key(node_num, saved_multi_sigs_count, looper, txnPoolNodeSet, - client_tdir, - poolTxnClientData, - stewards_and_wallets, + sdk_wallet_stewards, + sdk_wallet_client, + sdk_pool_handle, add_wrong=False): # 1. Change BLS key for a specified NODE node = txnPoolNodeSet[node_num] - steward_client, steward_wallet = stewards_and_wallets[node_num] - new_blspk = change_bls_key(looper, txnPoolNodeSet, node, - steward_client, steward_wallet, - add_wrong) + sdk_wallet_steward = sdk_wallet_stewards[node_num] + new_blspk = sdk_change_bls_key(looper, txnPoolNodeSet, + node, + sdk_pool_handle, + sdk_wallet_steward, + add_wrong) # 2. Check that all Nodes see the new BLS key value check_bls_key(new_blspk, node, txnPoolNodeSet, add_wrong) # 3. Check that we can send new requests and have correct multisigs - client, wallet = new_client(looper, - poolTxnClientData, - txnPoolNodeSet, client_tdir) - check_bls_multi_sig_after_send(looper, txnPoolNodeSet, - client, wallet, - saved_multi_sigs_count=saved_multi_sigs_count) + sdk_check_bls_multi_sig_after_send(looper, txnPoolNodeSet, + sdk_pool_handle, sdk_wallet_client, + saved_multi_sigs_count) + + +def validate_proof(result): + """ + Validates state proof + """ + state_root_hash = result[STATE_PROOF]['root_hash'] + state_root_hash = state_roots_serializer.deserialize(state_root_hash) + proof_nodes = result[STATE_PROOF]['proof_nodes'] + if isinstance(proof_nodes, str): + proof_nodes = proof_nodes.encode() + proof_nodes = proof_nodes_serializer.deserialize(proof_nodes) + key, value = prepare_for_state(result) + valid = PruningState.verify_state_proof(state_root_hash, + key, + value, + proof_nodes, + serialized=True) + return valid + + +def prepare_for_state(result): + if result[TXN_TYPE] == "buy": + from plenum.test.test_node import TestDomainRequestHandler + key, value = TestDomainRequestHandler.prepare_buy_for_state(result) + return key, value + + +def validate_multi_signature(state_proof, txnPoolNodeSet): + """ + Validates multi signature + """ + multi_signature = state_proof[MULTI_SIGNATURE] + if not multi_signature: + logger.debug("There is a state proof, but no multi signature") + return False + + participants = multi_signature[MULTI_SIGNATURE_PARTICIPANTS] + signature = multi_signature[MULTI_SIGNATURE_SIGNATURE] + value = MultiSignatureValue( + **(multi_signature[MULTI_SIGNATURE_VALUE]) + ).as_single_value() + quorums = Quorums(len(txnPoolNodeSet)) + if not quorums.bls_signatures.is_reached(len(participants)): + logger.debug("There is not enough participants of " + "multi-signature") + return False + public_keys = [] + for node_name in participants: + key = next(node.bls_bft.bls_crypto_signer.pk for node + in txnPoolNodeSet if node.name == node_name) + if key is None: + logger.debug("There is no bls key for node {}" + .format(node_name)) + return False + public_keys.append(key) + _multi_sig_verifier = _create_multi_sig_verifier() + return _multi_sig_verifier.verify_multi_sig(signature, + value, + public_keys) + + +def _create_multi_sig_verifier() -> BlsCryptoVerifier: + verifier = create_default_bls_crypto_factory() \ + .create_bls_crypto_verifier() + return verifier diff --git a/plenum/test/bls/test_add_bls_key.py b/plenum/test/bls/test_add_bls_key.py index 8d2ec7bca4..019da1a34a 100644 --- a/plenum/test/bls/test_add_bls_key.py +++ b/plenum/test/bls/test_add_bls_key.py @@ -1,7 +1,5 @@ from plenum.server.quorums import Quorum from plenum.test.bls.helper import check_update_bls_key -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected nodeCount = 4 nodes_wth_bls = 0 @@ -10,8 +8,10 @@ # As we use tests with Module scope, results from previous tests are accumulated, so # rotating BLS keys one by one, eventually we will have all keys changed -def test_add_bls_one_node(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_add_bls_one_node(looper, + txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_stewards, sdk_wallet_client): ''' Added BLS key for 1st Node; do not expect that BLS multi-sigs are applied since no consensus (n-f) @@ -19,14 +19,16 @@ def test_add_bls_one_node(looper, txnPoolNodeSet, client_tdir, check_update_bls_key(node_num=0, saved_multi_sigs_count=0, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets) + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle) - -def test_add_bls_two_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_add_bls_two_nodes(looper, + txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_stewards, + sdk_wallet_client): ''' Added BLS key for 1st and 2d Nodes; do not expect that BLS multi-sigs are applied since no consensus (n-f) @@ -34,13 +36,16 @@ def test_add_bls_two_nodes(looper, txnPoolNodeSet, client_tdir, check_update_bls_key(node_num=1, saved_multi_sigs_count=0, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets) + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle) -def test_add_bls_three_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_add_bls_three_nodes(looper, + txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_stewards, + sdk_wallet_client): ''' Added BLS key for 1st, 2d and 3d Nodes; expect that BLS multi-sigs are applied since we have consensus now (3=n-f) @@ -52,13 +57,16 @@ def test_add_bls_three_nodes(looper, txnPoolNodeSet, client_tdir, check_update_bls_key(node_num=2, saved_multi_sigs_count=4, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets) + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle) -def test_add_bls_all_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_add_bls_all_nodes(looper, + txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_stewards, + sdk_wallet_client): ''' Eventually added BLS key for all Nodes; expect that BLS multi-sigs are applied since we have consensus now (4 > n-f) @@ -66,6 +74,6 @@ def test_add_bls_all_nodes(looper, txnPoolNodeSet, client_tdir, check_update_bls_key(node_num=3, saved_multi_sigs_count=4, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets) + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle) diff --git a/plenum/test/bls/test_add_incorrect_bls_key.py b/plenum/test/bls/test_add_incorrect_bls_key.py index 1e520746e2..74b56f7752 100644 --- a/plenum/test/bls/test_add_incorrect_bls_key.py +++ b/plenum/test/bls/test_add_incorrect_bls_key.py @@ -1,7 +1,5 @@ from plenum.server.quorums import Quorum from plenum.test.bls.helper import check_update_bls_key -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected nodeCount = 4 nodes_wth_bls = 0 @@ -10,8 +8,11 @@ # As we use tests with Module scope, results from previous tests are accumulated, so # rotating BLS keys one by one, eventually we will have all keys changed -def test_add_incorrect_bls_one_node(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_add_incorrect_bls_one_node(looper, + txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_stewards, + sdk_wallet_client): ''' Added wrong BLS key for 1st Node; do not expect that BLS multi-sigs are applied @@ -19,14 +20,17 @@ def test_add_incorrect_bls_one_node(looper, txnPoolNodeSet, client_tdir, check_update_bls_key(node_num=0, saved_multi_sigs_count=0, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets, + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle, add_wrong=True) -def test_add_incorrect_bls_two_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_add_incorrect_bls_two_nodes(looper, + txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_stewards, + sdk_wallet_client): ''' Added wrong BLS key for 1st and 2d Nodes; do not expect that BLS multi-sigs are applied @@ -34,14 +38,17 @@ def test_add_incorrect_bls_two_nodes(looper, txnPoolNodeSet, client_tdir, check_update_bls_key(node_num=1, saved_multi_sigs_count=0, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets, + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle, add_wrong=True) -def test_add_incorrect_bls_three_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_add_incorrect_bls_three_nodes(looper, + txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_stewards, + sdk_wallet_client): ''' Added wrong BLS key for 1-3 Nodes; do not expect that BLS multi-sigs are applied @@ -53,14 +60,17 @@ def test_add_incorrect_bls_three_nodes(looper, txnPoolNodeSet, client_tdir, check_update_bls_key(node_num=2, saved_multi_sigs_count=0, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets, + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle, add_wrong=True) -def test_add_incorrect_bls_all_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_add_incorrect_bls_all_nodes(looper, + txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_stewards, + sdk_wallet_client): ''' Added wrong BLS key for all Nodes; Still do not expect that BLS multi-sigs are applied @@ -68,7 +78,7 @@ def test_add_incorrect_bls_all_nodes(looper, txnPoolNodeSet, client_tdir, check_update_bls_key(node_num=3, saved_multi_sigs_count=0, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets, + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle, add_wrong=True) diff --git a/plenum/test/bls/test_bls_bft_replica.py b/plenum/test/bls/test_bls_bft_replica.py index 8709401b28..b133dfa2c2 100644 --- a/plenum/test/bls/test_bls_bft_replica.py +++ b/plenum/test/bls/test_bls_bft_replica.py @@ -18,6 +18,7 @@ whitelist = ['Indy Crypto error'] + @pytest.fixture() def bls_bft_replicas(txnPoolNodeSet): bls_bft_replicas = [] diff --git a/plenum/test/bls/test_bls_key_registry_pool_manager.py b/plenum/test/bls/test_bls_key_registry_pool_manager.py index 4bfcd01539..d305ccfc81 100644 --- a/plenum/test/bls/test_bls_key_registry_pool_manager.py +++ b/plenum/test/bls/test_bls_key_registry_pool_manager.py @@ -1,10 +1,10 @@ +import base58 import pytest from plenum.bls.bls_key_register_pool_manager import BlsKeyRegisterPoolManager from plenum.common.constants import NODE, TXN_TYPE, BLS_KEY, DATA, ALIAS +from plenum.common.util import randomString +from plenum.test.bls.helper import sdk_change_bls_key from plenum.test.pool_transactions.helper import updateNodeData -from plenum.test.primary_selection.conftest import stewardAndWalletForMasterNode, txnPoolMasterNodes -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected nodeCount = 4 @@ -52,17 +52,23 @@ def test_get_key_for_current_root_explicitly(bls_key_register_ledger, txnPoolNod def test_get_key_for_old_root_keys_changed(bls_key_register_ledger, pool_node_txns, + txnPoolNodeSet, node, looper, - stewardAndWalletForMasterNode): + sdk_wallet_steward, + sdk_pool_handle): old_bls_key = pool_node_txns[0][DATA][BLS_KEY] - new_bls_key = pool_node_txns[0][DATA][BLS_KEY] + "Changed" + new_bls_key = base58.b58encode(randomString(128).encode()) old_pool_root_hash = node.poolManager.state.committedHeadHash # change BLS keys - client, wallet = stewardAndWalletForMasterNode - change_bls_keys(new_bls_key, node, - looper, client, wallet) + + sdk_change_bls_key(looper, txnPoolNodeSet, + node, + sdk_pool_handle, + sdk_wallet_steward, + add_wrong=False, + new_bls=new_bls_key) new_pool_root_hash = node.poolManager.state.committedHeadHash assert old_pool_root_hash != new_pool_root_hash diff --git a/plenum/test/bls/test_multi_signature_verifier.py b/plenum/test/bls/test_multi_signature_verifier.py index 464e06c225..9191350ae9 100644 --- a/plenum/test/bls/test_multi_signature_verifier.py +++ b/plenum/test/bls/test_multi_signature_verifier.py @@ -18,7 +18,7 @@ def create_crypto_signer(bls_crypto_factory): def test_bls_crypto_verifier(bls_crypto_factory): - bls_crypto_factory = bls_crypto_factory # type: BlsFactoryIndyCrypto + bls_crypto_factory = bls_crypto_factory # type: BlsFactoryIndyCrypto bls_crypto_verifier = bls_crypto_factory.create_bls_crypto_verifier() assert bls_crypto_verifier @@ -32,4 +32,3 @@ def test_bls_crypto_verifier(bls_crypto_factory): multi_signature = bls_crypto_verifier.create_multi_sig(sigs) assert bls_crypto_verifier.verify_multi_sig(multi_signature, message, keys) - diff --git a/plenum/test/bls/test_no_state_proof.py b/plenum/test/bls/test_no_state_proof.py index e35cbe1732..a8130c79d5 100644 --- a/plenum/test/bls/test_no_state_proof.py +++ b/plenum/test/bls/test_no_state_proof.py @@ -1,37 +1,40 @@ from plenum.common.constants import TXN_TYPE, STATE_PROOF, DOMAIN_LEDGER_ID from plenum.common.util import get_utc_epoch -from plenum.test.helper import sendRandomRequests, waitForSufficientRepliesForRequests -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected +from plenum.test.helper import sdk_send_random_and_check, \ + sdk_json_to_request_object nodeCount = 4 nodes_wth_bls = 0 def test_make_proof_bls_disabled(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): - reqs = sendRandomRequests(wallet1, client1, 1) - waitForSufficientRepliesForRequests(looper, client1, requests=reqs) + sdk_pool_handle, sdk_wallet_client): + reqs = sdk_send_random_and_check(looper, txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_client, + 1) - req = reqs[0] + req = reqs[0][1]['result'] for node in txnPoolNodeSet: req_handler = node.get_req_handler(DOMAIN_LEDGER_ID) - key = req_handler.prepare_buy_key(req.identifier, req.reqId) + key = req_handler.prepare_buy_key(req['identifier'], req['reqId']) proof = req_handler.make_proof(key) assert not proof def test_make_result_bls_disabled(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): - reqs = sendRandomRequests(wallet1, client1, 1) - waitForSufficientRepliesForRequests(looper, client1, requests=reqs) + sdk_pool_handle, sdk_wallet_client): + reqs = sdk_send_random_and_check(looper, txnPoolNodeSet, + sdk_pool_handle, + sdk_wallet_client, + 1) - req = reqs[0] + req = reqs[0][1]['result'] for node in txnPoolNodeSet: req_handler = node.get_req_handler(DOMAIN_LEDGER_ID) - key = req_handler.prepare_buy_key(req.identifier, req.reqId) + key = req_handler.prepare_buy_key(req['identifier'], req['reqId']) proof = req_handler.make_proof(key) - result = req_handler.make_result(req, + result = req_handler.make_result(sdk_json_to_request_object(reqs[0][0]), {TXN_TYPE: "buy"}, 2, get_utc_epoch(), diff --git a/plenum/test/bls/test_send_txns_bls_consensus.py b/plenum/test/bls/test_send_txns_bls_consensus.py index 3eb7f4cd45..0f0a29df61 100644 --- a/plenum/test/bls/test_send_txns_bls_consensus.py +++ b/plenum/test/bls/test_send_txns_bls_consensus.py @@ -1,7 +1,5 @@ from plenum.server.quorums import Quorum -from plenum.test.bls.helper import check_bls_multi_sig_after_send -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected +from plenum.test.bls.helper import sdk_check_bls_multi_sig_after_send nodeCount = 7 nodes_wth_bls = 5 @@ -14,13 +12,13 @@ def test_each_node_has_bls(txnPoolNodeSet): def test_send_txns_bls_consensus(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): + sdk_pool_handle, sdk_wallet_client): # make sure that we have commits from all nodes, and have 5 of 7 (n-f) BLS sigs there is enough # otherwise we may have 3 commits, but 1 of them may be without BLS, so we will Order this txn, but without multi-sig for node in txnPoolNodeSet: node.quorums.commit = Quorum(nodeCount) # we expect that although not all nodes can sign with BLS (because not all nodes have BLS keys), # we get multi-sig on all nodes (since all nodes can verify signatures) - check_bls_multi_sig_after_send(looper, txnPoolNodeSet, - client1, wallet1, - saved_multi_sigs_count=nodeCount) + sdk_check_bls_multi_sig_after_send(looper, txnPoolNodeSet, + sdk_pool_handle, sdk_wallet_client, + saved_multi_sigs_count=nodeCount) diff --git a/plenum/test/bls/test_send_txns_bls_less_than_consensus.py b/plenum/test/bls/test_send_txns_bls_less_than_consensus.py index 96630ab5a4..f4a7654cda 100644 --- a/plenum/test/bls/test_send_txns_bls_less_than_consensus.py +++ b/plenum/test/bls/test_send_txns_bls_less_than_consensus.py @@ -1,7 +1,5 @@ from plenum.server.quorums import Quorum -from plenum.test.bls.helper import check_bls_multi_sig_after_send -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected +from plenum.test.bls.helper import sdk_check_bls_multi_sig_after_send nodeCount = 7 nodes_wth_bls = 4 @@ -14,10 +12,10 @@ def test_each_node_has_bls(txnPoolNodeSet): def test_send_txns_bls_less_than_consensus(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): + sdk_pool_handle, sdk_wallet_client): # make sure that we have commits from all nodes, and have 4 of 7 ( < n-f) BLS sigs there is not enough for node in txnPoolNodeSet: node.quorums.commit = Quorum(nodeCount) - check_bls_multi_sig_after_send(looper, txnPoolNodeSet, - client1, wallet1, - saved_multi_sigs_count=0) + sdk_check_bls_multi_sig_after_send(looper, txnPoolNodeSet, + sdk_pool_handle, sdk_wallet_client, + saved_multi_sigs_count=0) diff --git a/plenum/test/bls/test_send_txns_full_bls.py b/plenum/test/bls/test_send_txns_full_bls.py index 74d32b2da3..82134e6533 100644 --- a/plenum/test/bls/test_send_txns_full_bls.py +++ b/plenum/test/bls/test_send_txns_full_bls.py @@ -1,10 +1,9 @@ -from plenum.test.bls.helper import check_bls_multi_sig_after_send -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected +from plenum.test.bls.helper import sdk_check_bls_multi_sig_after_send nodeCount = 7 nodes_wth_bls = 7 + def test_each_node_has_bls(txnPoolNodeSet): for node in txnPoolNodeSet: assert node.bls_bft @@ -12,7 +11,7 @@ def test_each_node_has_bls(txnPoolNodeSet): def test_send_txns_full_bls(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): - check_bls_multi_sig_after_send(looper, txnPoolNodeSet, - client1, wallet1, - saved_multi_sigs_count=nodeCount) \ No newline at end of file + sdk_pool_handle, sdk_wallet_client): + sdk_check_bls_multi_sig_after_send(looper, txnPoolNodeSet, + sdk_pool_handle, sdk_wallet_client, + saved_multi_sigs_count=nodeCount) diff --git a/plenum/test/bls/test_send_txns_no_bls.py b/plenum/test/bls/test_send_txns_no_bls.py index aced99ea25..8d48d3b2a3 100644 --- a/plenum/test/bls/test_send_txns_no_bls.py +++ b/plenum/test/bls/test_send_txns_no_bls.py @@ -1,6 +1,4 @@ -from plenum.test.bls.helper import check_bls_multi_sig_after_send -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected +from plenum.test.bls.helper import sdk_check_bls_multi_sig_after_send nodeCount = 4 nodes_wth_bls = 0 @@ -13,7 +11,7 @@ def test_each_node_has_bls(txnPoolNodeSet): def test_send_txns_no_bls(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): - check_bls_multi_sig_after_send(looper, txnPoolNodeSet, - client1, wallet1, - saved_multi_sigs_count=0) + sdk_pool_handle, sdk_wallet_client): + sdk_check_bls_multi_sig_after_send(looper, txnPoolNodeSet, + sdk_pool_handle, sdk_wallet_client, + saved_multi_sigs_count=0) diff --git a/plenum/test/bls/test_state_proof.py b/plenum/test/bls/test_state_proof.py index d003482a9d..2b780a7dc4 100644 --- a/plenum/test/bls/test_state_proof.py +++ b/plenum/test/bls/test_state_proof.py @@ -1,21 +1,21 @@ from plenum.common.constants import ROOT_HASH, MULTI_SIGNATURE, PROOF_NODES, TXN_TYPE, DATA, TXN_TIME, STATE_PROOF, \ - DOMAIN_LEDGER_ID, MULTI_SIGNATURE_VALUE, MULTI_SIGNATURE_PARTICIPANTS, MULTI_SIGNATURE_SIGNATURE, MULTI_SIGNATURE_VALUE_LEDGER_ID, \ + MULTI_SIGNATURE_VALUE, MULTI_SIGNATURE_PARTICIPANTS, MULTI_SIGNATURE_SIGNATURE, \ + MULTI_SIGNATURE_VALUE_LEDGER_ID, \ MULTI_SIGNATURE_VALUE_STATE_ROOT, MULTI_SIGNATURE_VALUE_TXN_ROOT, MULTI_SIGNATURE_VALUE_POOL_STATE_ROOT, \ MULTI_SIGNATURE_VALUE_TIMESTAMP, DOMAIN_LEDGER_ID from plenum.common.plenum_protocol_version import PlenumProtocolVersion from plenum.common.request import SafeRequest from plenum.common.types import f from plenum.common.util import get_utc_epoch -from plenum.test.helper import sendRandomRequests, waitForSufficientRepliesForRequests, wait_for_requests_ordered, \ - randomOperation -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected +from plenum.test.bls.helper import validate_proof, validate_multi_signature +from plenum.test.helper import wait_for_requests_ordered, \ + randomOperation, sdk_send_random_requests, sdk_json_couples_to_request_list, sdk_send_random_and_check nodeCount = 4 nodes_wth_bls = 4 -def check_result(txnPoolNodeSet, req, client, should_have_proof): +def check_result(txnPoolNodeSet, req, should_have_proof): for node in txnPoolNodeSet: req_handler = node.get_req_handler(DOMAIN_LEDGER_ID) key = req_handler.prepare_buy_key(req.identifier, req.reqId) @@ -36,14 +36,16 @@ def check_result(txnPoolNodeSet, req, client, should_have_proof): if should_have_proof: assert result[STATE_PROOF] == proof - assert client.validate_proof(result) + assert validate_proof(result) else: assert STATE_PROOF not in result def test_make_proof_bls_enabled(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): - reqs = sendRandomRequests(wallet1, client1, 1) + sdk_pool_handle, sdk_wallet_client): + reqs = sdk_json_couples_to_request_list( + sdk_send_random_requests( + looper, sdk_pool_handle, sdk_wallet_client, 1)) wait_for_requests_ordered(looper, txnPoolNodeSet, reqs) req = reqs[0] @@ -75,67 +77,62 @@ def test_make_proof_bls_enabled(looper, txnPoolNodeSet, MULTI_SIGNATURE_VALUE_TIMESTAMP, MULTI_SIGNATURE_VALUE_TXN_ROOT] == value_keys - assert client1.validate_multi_signature(proof) + assert validate_multi_signature(proof, txnPoolNodeSet) def test_make_result_bls_enabled(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): - reqs = sendRandomRequests(wallet1, client1, 1) + sdk_pool_handle, sdk_wallet_client): + reqs = sdk_json_couples_to_request_list( + sdk_send_random_requests( + looper, sdk_pool_handle, sdk_wallet_client, 1)) wait_for_requests_ordered(looper, txnPoolNodeSet, reqs) req = reqs[0] assert req.protocolVersion assert req.protocolVersion >= PlenumProtocolVersion.STATE_PROOF_SUPPORT.value - check_result(txnPoolNodeSet, req, client1, True) + check_result(txnPoolNodeSet, req, True) -def test_make_result_no_protocol_version(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): +def test_make_result_no_protocol_version(looper, txnPoolNodeSet): request = SafeRequest(identifier="1" * 16, reqId=1, operation=randomOperation(), signature="signature") request.protocolVersion = False - check_result(txnPoolNodeSet, request, client1, False) + check_result(txnPoolNodeSet, request, False) def test_make_result_protocol_version_less_than_state_proof(looper, - txnPoolNodeSet, - client1, - client1Connected, - wallet1): + txnPoolNodeSet): request = SafeRequest(identifier="1" * 16, reqId=1, operation=randomOperation(), signature="signature") request.protocolVersion = 0 - check_result(txnPoolNodeSet, request, client1, False) + check_result(txnPoolNodeSet, request, False) def test_make_result_no_protocol_version_in_request_by_default(looper, - txnPoolNodeSet, - client1, - client1Connected, - wallet1): + txnPoolNodeSet): request = SafeRequest(identifier="1" * 16, reqId=1, operation=randomOperation(), signature="signature") - check_result(txnPoolNodeSet, request, client1, False) + check_result(txnPoolNodeSet, request, False) def test_proof_in_reply(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): - reqs = sendRandomRequests(wallet1, client1, 1) - waitForSufficientRepliesForRequests(looper, client1, requests=reqs) + sdk_pool_handle, sdk_wallet_client): + resp = sdk_send_random_and_check(looper, txnPoolNodeSet, + sdk_pool_handle, sdk_wallet_client, 1) - req = reqs[0] - result = client1.getReply(req.identifier, req.reqId)[0] + req = resp[0][0] + result = resp[0][1]['result'] assert result assert result[TXN_TYPE] == "buy" - assert result[f.IDENTIFIER.nm] == req.identifier - assert result[f.REQ_ID.nm] == req.reqId + assert result[f.IDENTIFIER.nm] == req[f.IDENTIFIER.nm] + assert result[f.REQ_ID.nm] == req[f.REQ_ID.nm] assert result[f.SEQ_NO.nm] assert result[TXN_TIME] assert STATE_PROOF in result @@ -157,13 +154,15 @@ def test_proof_in_reply(looper, txnPoolNodeSet, assert MULTI_SIGNATURE_VALUE_POOL_STATE_ROOT in multi_sig_value assert MULTI_SIGNATURE_VALUE_TIMESTAMP in multi_sig_value - assert client1.validate_multi_signature(state_proof) - assert client1.validate_proof(result) + assert validate_multi_signature(state_proof, txnPoolNodeSet) + assert validate_proof(result) def test_make_proof_committed_head_used(looper, txnPoolNodeSet, - client1, client1Connected, wallet1): - reqs = sendRandomRequests(wallet1, client1, 1) + sdk_pool_handle, sdk_wallet_client): + reqs = sdk_json_couples_to_request_list( + sdk_send_random_requests( + looper, sdk_pool_handle, sdk_wallet_client, 1)) wait_for_requests_ordered(looper, txnPoolNodeSet, reqs) req = reqs[0] req_handler = txnPoolNodeSet[0].get_req_handler(DOMAIN_LEDGER_ID) @@ -172,4 +171,4 @@ def test_make_proof_committed_head_used(looper, txnPoolNodeSet, for node in txnPoolNodeSet: node.states[DOMAIN_LEDGER_ID].set(key, b'somevalue') - check_result(txnPoolNodeSet, req, client1, True) + check_result(txnPoolNodeSet, req, True) diff --git a/plenum/test/bls/test_update_bls_key.py b/plenum/test/bls/test_update_bls_key.py index 8173beba2a..910b764b42 100644 --- a/plenum/test/bls/test_update_bls_key.py +++ b/plenum/test/bls/test_update_bls_key.py @@ -1,6 +1,4 @@ from plenum.test.bls.helper import check_update_bls_key -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected nodeCount = 4 nodes_wth_bls = 4 @@ -9,57 +7,61 @@ # As we use tests with Module scope, results from previous tests are accumulated, so # rotating BLS keys one by one, eventually we will have all keys changed -def test_update_bls_one_node(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_update_bls_one_node(looper, txnPoolNodeSet, + sdk_wallet_stewards, + sdk_wallet_client, + sdk_pool_handle): ''' Rotated BLS key for 1st node; BLS multi-signatures must be calculated for all Nodes. ''' - check_update_bls_key(node_num=0, - saved_multi_sigs_count=4, + check_update_bls_key(node_num=0, saved_multi_sigs_count=4, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets) + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle) -def test_update_bls_two_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_update_bls_two_nodes(looper, txnPoolNodeSet, + sdk_wallet_stewards, + sdk_wallet_client, + sdk_pool_handle): ''' Rotated BLS key for 1st and 2d nodes; BLS multi-signatures must be calculated for all Nodes. ''' - check_update_bls_key(node_num=1, - saved_multi_sigs_count=4, + check_update_bls_key(node_num=1, saved_multi_sigs_count=4, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets) + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle) -def test_update_bls_three_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_update_bls_three_nodes(looper, txnPoolNodeSet, + sdk_wallet_stewards, + sdk_wallet_client, + sdk_pool_handle): ''' Rotated BLS key for 1-3 Nodes; BLS multi-signatures must be calculated for all Nodes. ''' - check_update_bls_key(node_num=2, - saved_multi_sigs_count=4, + check_update_bls_key(node_num=2, saved_multi_sigs_count=4, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets) + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle) -def test_update_bls_all_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_update_bls_all_nodes(looper, txnPoolNodeSet, + sdk_wallet_stewards, + sdk_wallet_client, + sdk_pool_handle): ''' Rotated BLS key for all Nodes; BLS multi-signatures must be calculated for all Nodes. ''' - check_update_bls_key(node_num=3, - saved_multi_sigs_count=4, + check_update_bls_key(node_num=3, saved_multi_sigs_count=4, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets) + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle) diff --git a/plenum/test/bls/test_update_incorrect_bls_key.py b/plenum/test/bls/test_update_incorrect_bls_key.py index 29694fe732..9a020f5ea3 100644 --- a/plenum/test/bls/test_update_incorrect_bls_key.py +++ b/plenum/test/bls/test_update_incorrect_bls_key.py @@ -1,7 +1,5 @@ from plenum.server.quorums import Quorum from plenum.test.bls.helper import check_update_bls_key -from plenum.test.pool_transactions.conftest import looper, clientAndWallet1, \ - client1, wallet1, client1Connected nodeCount = 4 nodes_wth_bls = 4 @@ -10,8 +8,10 @@ # As we use tests with Module scope, results from previous tests are accumulated, so # rotating BLS keys one by one, eventually we will have all keys changed -def test_update_incorrect_bls_one_node(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_update_incorrect_bls_one_node(looper, txnPoolNodeSet, + sdk_wallet_stewards, + sdk_wallet_client, + sdk_pool_handle): ''' Updated with wrong BLS key for 1st Node; Expect that BLS multi-sigs are applied since we have 3 correct signatures @@ -20,55 +20,57 @@ def test_update_incorrect_bls_one_node(looper, txnPoolNodeSet, client_tdir, # otherwise we may have 3 commits, but 1 of them may be without BLS, so we will Order this txn, but without multi-sig for node in txnPoolNodeSet: node.quorums.commit = Quorum(nodeCount) - check_update_bls_key(node_num=0, - saved_multi_sigs_count=4, + check_update_bls_key(node_num=0, saved_multi_sigs_count=4, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets, + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle, add_wrong=True) -def test_update_incorrect_bls_two_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_update_incorrect_bls_two_nodes(looper, txnPoolNodeSet, + sdk_wallet_stewards, + sdk_wallet_client, + sdk_pool_handle): ''' Updated with wrong BLS key for 1st and 2d Nodes; do not expect that BLS multi-sigs are applied (we have less than n-f correct BLS sigs) ''' - check_update_bls_key(node_num=1, - saved_multi_sigs_count=0, + check_update_bls_key(node_num=1, saved_multi_sigs_count=0, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets, + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle, add_wrong=True) -def test_update_incorrect_bls_three_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_update_incorrect_bls_three_nodes(looper, txnPoolNodeSet, + sdk_wallet_stewards, + sdk_wallet_client, + sdk_pool_handle): ''' Updated with wrong BLS keys 1-3 Nodes; do not expect that BLS multi-sigs are applied (we have less than n-f correct BLS sigs) ''' - check_update_bls_key(node_num=2, - saved_multi_sigs_count=0, + check_update_bls_key(node_num=2, saved_multi_sigs_count=0, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets, + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle, add_wrong=True) -def test_update_incorrect_bls_all_nodes(looper, txnPoolNodeSet, client_tdir, - poolTxnClientData, stewards_and_wallets): +def test_update_incorrect_bls_all_nodes(looper, txnPoolNodeSet, + sdk_wallet_stewards, + sdk_wallet_client, + sdk_pool_handle): ''' Updated with wrong BLS keys all Nodes; do not expect that BLS multi-sigs are applied (we have less than n-f correct BLS sigs) ''' - check_update_bls_key(node_num=3, - saved_multi_sigs_count=0, + check_update_bls_key(node_num=3, saved_multi_sigs_count=0, looper=looper, txnPoolNodeSet=txnPoolNodeSet, - client_tdir=client_tdir, - poolTxnClientData=poolTxnClientData, - stewards_and_wallets=stewards_and_wallets, + sdk_wallet_stewards=sdk_wallet_stewards, + sdk_wallet_client=sdk_wallet_client, + sdk_pool_handle=sdk_pool_handle, add_wrong=True) diff --git a/plenum/test/conftest.py b/plenum/test/conftest.py index 0f6b871e16..6deb24a707 100644 --- a/plenum/test/conftest.py +++ b/plenum/test/conftest.py @@ -1080,6 +1080,28 @@ def sdk_wallet_steward(looper, sdk_wallet_handle, sdk_steward_seed): return sdk_wallet_handle, steward_did +@pytest.fixture(scope='module') +def sdk_wallet_new_steward(looper, sdk_pool_handle, sdk_wallet_steward): + wh, client_did = sdk_add_new_nym(looper, sdk_pool_handle, + sdk_wallet_steward, + alias='new_steward_qwerty', + role='STEWARD') + return wh, client_did + + +@pytest.fixture(scope='module') +def sdk_wallet_stewards(looper, sdk_wallet_handle, poolTxnStewardNames, poolTxnData): + stewards = [] + for name in poolTxnStewardNames: + seed = poolTxnData["seeds"][name] + (steward_did, steward_verkey) = looper.loop.run_until_complete( + create_and_store_my_did(sdk_wallet_handle, + json.dumps({'seed': seed}))) + stewards.append((sdk_wallet_handle, steward_did)) + + yield stewards + + @pytest.fixture(scope='module') def sdk_wallet_client(looper, sdk_wallet_handle, sdk_client_seed): (client_did, _) = looper.loop.run_until_complete( @@ -1103,12 +1125,3 @@ def sdk_wallet_new_client(looper, sdk_pool_handle, sdk_wallet_steward, sdk_wallet_steward, seed=sdk_new_client_seed) return wh, client_did - - -@pytest.fixture(scope='module') -def sdk_wallet_new_steward(looper, sdk_pool_handle, sdk_wallet_steward): - wh, client_did = sdk_add_new_nym(looper, sdk_pool_handle, - sdk_wallet_steward, - alias='new_steward_qwerty', - role='STEWARD') - return wh, client_did diff --git a/plenum/test/input_validation/test_client_node_op.py b/plenum/test/input_validation/test_client_node_op.py index 1fbed6c7da..1b2a363aa2 100644 --- a/plenum/test/input_validation/test_client_node_op.py +++ b/plenum/test/input_validation/test_client_node_op.py @@ -1,8 +1,10 @@ +import base58 import pytest from plenum.common.constants import BLS_KEY from plenum.common.messages.client_request import ClientNodeOperationData, ALIAS, SERVICES, NODE_IP, CLIENT_IP, \ NODE_PORT, CLIENT_PORT +from plenum.common.util import randomString op = ClientNodeOperationData() @@ -54,7 +56,7 @@ def test_update_ha_passes(): def test_update_bls_sign(): op.validate({ ALIAS: 'aNode', - BLS_KEY: 'some_key', + BLS_KEY: base58.b58encode(randomString(128).encode()), }) @@ -64,5 +66,5 @@ def test_empty_bls_fails(): BLS_KEY: '', ALIAS: 'aNode' }) - ex_info.match( - 'validation error \[ClientNodeOperationData\]: empty string \(blskey=\)') + assert 'validation error [ClientNodeOperationData]: b58 decoded ' \ + 'value length 0 should be one of [128] (blskey=)' in ex_info.value.args[0] diff --git a/plenum/test/pool_transactions/helper.py b/plenum/test/pool_transactions/helper.py index 5a6bd8a159..bd2646f2a2 100644 --- a/plenum/test/pool_transactions/helper.py +++ b/plenum/test/pool_transactions/helper.py @@ -421,11 +421,13 @@ def sendUpdateNode(stewardClient, stewardWallet, node, node_data): return req -def sdk_send_update_node(looper, sdk_submitter_wallet, sdk_pool_handle, +def sdk_send_update_node(looper, sdk_submitter_wallet, + sdk_pool_handle, destination, alias, node_ip, node_port, client_ip, client_port, - services=[VALIDATOR]): + services=[VALIDATOR], + bls_key=None): _, submitter_did = sdk_submitter_wallet # filling node request node_request = looper.loop.run_until_complete( @@ -435,6 +437,7 @@ def sdk_send_update_node(looper, sdk_submitter_wallet, sdk_pool_handle, clientPort=client_port, nodeIp=node_ip, nodePort=node_port, + bls_key=bls_key, destination=destination, services=services)) diff --git a/plenum/test/sdk/test_sdk_bindings.py b/plenum/test/sdk/test_sdk_bindings.py index a0af950371..faec4593d7 100644 --- a/plenum/test/sdk/test_sdk_bindings.py +++ b/plenum/test/sdk/test_sdk_bindings.py @@ -63,6 +63,12 @@ def test_sdk_client_send(looper, sdk_pool_handle, sdk_wallet_client): assert j_resp['result'] +def test_sdk_client2_send(looper, sdk_pool_handle, sdk_wallet_client2): + resp_task = sdk_send_random_request(looper, sdk_pool_handle, sdk_wallet_client2) + _, j_resp = sdk_get_and_check_replies(looper, [resp_task])[0] + assert j_resp['result'] + + def test_sdk_new_client_send(looper, sdk_pool_handle, sdk_wallet_new_client): resp_task = sdk_send_random_request(looper, sdk_pool_handle, sdk_wallet_new_client) _, j_resp = sdk_get_and_check_replies(looper, [resp_task])[0] @@ -82,6 +88,14 @@ def test_sdk_steward_send_many(looper, sdk_pool_handle, sdk_wallet_steward): assert resp['result'] +def test_sdk_many_stewards_send_many(looper, sdk_pool_handle, sdk_wallet_stewards): + for sdk_wallet_steward in sdk_wallet_stewards: + resp_task = sdk_send_random_requests(looper, sdk_pool_handle, sdk_wallet_steward, 30) + repl = sdk_get_and_check_replies(looper, resp_task) + for _, resp in repl: + assert resp['result'] + + def test_sdk_pool_refresh(looper, txnPoolNodeSet, sdk_pool_handle, sdk_wallet_client): sdk_pool_refresh(looper, sdk_pool_handle) sdk_send_random_and_check(looper, txnPoolNodeSet, sdk_pool_handle, diff --git a/scripts/generate_txns.py b/scripts/generate_txns.py index b0900b10c6..068186db99 100644 --- a/scripts/generate_txns.py +++ b/scripts/generate_txns.py @@ -13,7 +13,7 @@ from plenum.common.config_util import getConfig from plenum.common.txn_util import sdk_reqToTxn from indy.ledger import sign_request -from indy import signus, wallet +from indy import did, wallet from stp_core.loop.looper import Looper config = getConfig() @@ -31,12 +31,12 @@ async def get_wallet_and_pool(): await wallet.create_wallet(pool_name, their_wallet_name, None, None, None) their_wallet_handle = await wallet.open_wallet(their_wallet_name, None, None) - await signus.create_and_store_my_did(my_wallet_handle, "{}") + await did.create_and_store_my_did(my_wallet_handle, "{}") - (their_did, their_verkey) = await signus.create_and_store_my_did(their_wallet_handle, - json.dumps({"seed": seed_trustee1})) + (their_did, their_verkey) = await did.create_and_store_my_did(their_wallet_handle, + json.dumps({"seed": seed_trustee1})) - await signus.store_their_did(my_wallet_handle, json.dumps({'did': their_did, 'verkey': their_verkey})) + await did.store_their_did(my_wallet_handle, json.dumps({'did': their_did, 'verkey': their_verkey})) return their_wallet_handle, their_did @@ -84,10 +84,10 @@ def sdk_signed_random_requests(looper, sdk_wallet, count): with ExitStack() as exit_stack: with Looper() as looper: - sdk_wallet, did = looper.loop.run_until_complete(get_wallet_and_pool()) + sdk_wallet, DID = looper.loop.run_until_complete(get_wallet_and_pool()) with open(path_to_save, 'w') as outpath: for _ in range(args.count): - req = sdk_signed_random_requests(looper, (sdk_wallet, did), 1)[0] + req = sdk_signed_random_requests(looper, (sdk_wallet, DID), 1)[0] txn = sdk_reqToTxn(req, int(time.time())) outpath.write(json.dumps(txn)) outpath.write(os.linesep)