blackified

Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com>
This commit is contained in:
Jürgen Eckel 2023-04-21 09:11:24 +02:00
parent 24637a8b9e
commit 47dd35937c
No known key found for this signature in database
10 changed files with 166 additions and 192 deletions

View File

@ -32,7 +32,8 @@ from planetmint.utils.singleton import Singleton
logger = logging.getLogger(__name__)
class Validator():
class Validator:
def __init__(self):
self.models = DataAccessor()
self.validation = Validator._get_validation_method()

View File

@ -30,13 +30,12 @@ class DataAccessor(metaclass=Singleton):
config_utils.autoconfigure()
self.connection = database_connection if database_connection is not None else Connection()
def close_connection(self):
self.connection.close()
def connect(self):
self.connection.connect()
def store_bulk_transactions(self, transactions):
txns = []
gov_txns = []
@ -152,7 +151,7 @@ class DataAccessor(metaclass=Singleton):
value as the `voting_power`
"""
validators = {}
for validator in self.get_validators(height = height):
for validator in self.get_validators(height=height):
# NOTE: we assume that Tendermint encodes public key in base64
public_key = public_key_from_ed25519_key(key_from_base64(validator["public_key"]["value"]))
validators[public_key] = validator["voting_power"]

View File

@ -50,9 +50,10 @@ def test_main_entrypoint(mock_start):
assert mock_start.called
#@pytest.mark.bdb
def test_chain_migration_election_show_shows_inconclusive(b_flushed, test_abci_rpc ):
# @pytest.mark.bdb
def test_chain_migration_election_show_shows_inconclusive(b_flushed, test_abci_rpc):
from tests.utils import flush_db
b = b_flushed
validators = generate_validators([1] * 4)
@ -62,9 +63,7 @@ def test_chain_migration_election_show_shows_inconclusive(b_flushed, test_abci_r
private_key = validators[0]["private_key"]
voter_keys = [v["private_key"] for v in validators]
election, votes = generate_election(
b, ChainMigrationElection, public_key, private_key, [{"data": {}}], voter_keys
)
election, votes = generate_election(b, ChainMigrationElection, public_key, private_key, [{"data": {}}], voter_keys)
assert not run_election_show(Namespace(election_id=election.id), b)
@ -81,15 +80,12 @@ def test_chain_migration_election_show_shows_inconclusive(b_flushed, test_abci_r
b.models.store_block(Block(height=2, transactions=[], app_hash="")._asdict())
# TODO insert yet another block here when upgrading to Tendermint 0.22.4.
assert (
run_election_show(Namespace(election_id=election.id), b)
== "status=inconclusive"
)
assert run_election_show(Namespace(election_id=election.id), b) == "status=inconclusive"
@pytest.mark.bdb
def test_chain_migration_election_show_shows_concluded(b_flushed):
b=b_flushed
b = b_flushed
validators = generate_validators([1] * 4)
b.models.store_validator_set(1, [v["storage"] for v in validators])
@ -97,9 +93,7 @@ def test_chain_migration_election_show_shows_concluded(b_flushed):
private_key = validators[0]["private_key"]
voter_keys = [v["private_key"] for v in validators]
election, votes = generate_election(
b, ChainMigrationElection, public_key, private_key, [{"data": {}}], voter_keys
)
election, votes = generate_election(b, ChainMigrationElection, public_key, private_key, [{"data": {}}], voter_keys)
assert not run_election_show(Namespace(election_id=election.id), b)
@ -109,11 +103,7 @@ def test_chain_migration_election_show_shows_concluded(b_flushed):
assert run_election_show(Namespace(election_id=election.id), b) == "status=ongoing"
b.models.store_abci_chain(1, "chain-X")
b.models.store_block(
Block(
height=1, transactions=[v.id for v in votes], app_hash="last_app_hash"
)._asdict()
)
b.models.store_block(Block(height=1, transactions=[v.id for v in votes], app_hash="last_app_hash")._asdict())
b.process_block(2, votes)
assert (
@ -184,14 +174,10 @@ def test_election_approve_called_with_bad_key(
):
from argparse import Namespace
b, election_id = call_election(
monkeypatch, b, new_validator, node_key, test_abci_rpc
)
b, election_id = call_election(monkeypatch, b, new_validator, node_key, test_abci_rpc)
# call run_upsert_validator_approve with args that point to the election, but a bad signing key
args = Namespace(
action="approve", election_id=election_id, sk=bad_validator_path, config={}
)
args = Namespace(action="approve", election_id=election_id, sk=bad_validator_path, config={})
with caplog.at_level(logging.ERROR):
assert not run_election_approve(args, b, test_abci_rpc)
@ -204,9 +190,7 @@ def test_election_approve_called_with_bad_key(
@patch("planetmint.config_utils.setup_logging")
@patch("planetmint.commands.planetmint._run_init")
@patch("planetmint.config_utils.autoconfigure")
def test_bigchain_run_start(
mock_setup_logging, mock_run_init, mock_autoconfigure, mock_processes_start
):
def test_bigchain_run_start(mock_setup_logging, mock_run_init, mock_autoconfigure, mock_processes_start):
from planetmint.commands.planetmint import run_start
args = Namespace(config=None, yes=True, skip_initialize_database=False)
@ -244,9 +228,7 @@ def test_bigchain_show_config(capsys):
def test__run_init(mocker):
init_db_mock = mocker.patch(
"planetmint.backend.tarantool.sync_io.connection.TarantoolDBConnection.init_database"
)
init_db_mock = mocker.patch("planetmint.backend.tarantool.sync_io.connection.TarantoolDBConnection.init_database")
conn = Connection()
conn.init_database()
@ -362,9 +344,7 @@ def test_run_configure_with_backend(backend, monkeypatch, mock_write_config):
# update the expected config with the correct backend and keypair
backend_conf = getattr(planetmint, "_database_" + backend)
expected_config.update(
{"database": backend_conf, "keypair": value["return"]["keypair"]}
)
expected_config.update({"database": backend_conf, "keypair": value["return"]["keypair"]})
assert value["return"] == expected_config
@ -386,16 +366,12 @@ def test_calling_main(start_mock, monkeypatch):
assert argparser_mock.called is True
parser.add_subparsers.assert_called_with(title="Commands", dest="command")
subparsers.add_parser.assert_any_call("configure", help="Prepare the config file.")
subparsers.add_parser.assert_any_call(
"show-config", help="Show the current " "configuration"
)
subparsers.add_parser.assert_any_call("show-config", help="Show the current " "configuration")
subparsers.add_parser.assert_any_call("init", help="Init the database")
subparsers.add_parser.assert_any_call("drop", help="Drop the database")
subparsers.add_parser.assert_any_call("start", help="Start Planetmint")
subparsers.add_parser.assert_any_call(
"tendermint-version", help="Show the Tendermint supported " "versions"
)
subparsers.add_parser.assert_any_call("tendermint-version", help="Show the Tendermint supported " "versions")
assert start_mock.called is True
@ -435,15 +411,11 @@ def test_run_recover(b, alice, bob, test_models):
b.models.store_bulk_transactions([tx1, tx2])
# create a random block
block8 = Block(
app_hash="random_app_hash1", height=8, transactions=["txid_doesnt_matter"]
)._asdict()
block8 = Block(app_hash="random_app_hash1", height=8, transactions=["txid_doesnt_matter"])._asdict()
b.models.store_block(block8)
# create the next block
block9 = Block(
app_hash="random_app_hash1", height=9, transactions=[tx1.id]
)._asdict()
block9 = Block(app_hash="random_app_hash1", height=9, transactions=[tx1.id])._asdict()
b.models.store_block(block9)
# create a pre_commit state which is ahead of the commit state
@ -465,9 +437,7 @@ class MockResponse:
@pytest.mark.abci
def test_election_new_upsert_validator_with_tendermint(
b, priv_validator_path, user_sk, validators, test_abci_rpc
):
def test_election_new_upsert_validator_with_tendermint(b, priv_validator_path, user_sk, validators, test_abci_rpc):
new_args = Namespace(
action="new",
election_type="upsert-validator",
@ -509,21 +479,14 @@ def test_election_new_upsert_validator_without_tendermint(
with caplog.at_level(logging.INFO):
election_id = run_election_new_upsert_validator(args, b, test_abci_rpc)
assert (
caplog.records[0].msg
== "[SUCCESS] Submitted proposal with id: " + election_id
)
assert caplog.records[0].msg == "[SUCCESS] Submitted proposal with id: " + election_id
assert b.models.get_transaction(election_id)
m.undo()
@pytest.mark.abci
def test_election_new_chain_migration_with_tendermint(
b, priv_validator_path, user_sk, validators, test_abci_rpc
):
new_args = Namespace(
action="new", election_type="migration", sk=priv_validator_path, config={}
)
def test_election_new_chain_migration_with_tendermint(b, priv_validator_path, user_sk, validators, test_abci_rpc):
new_args = Namespace(action="new", election_type="migration", sk=priv_validator_path, config={})
election_id = run_election_new_chain_migration(new_args, b, test_abci_rpc)
@ -544,23 +507,16 @@ def test_election_new_chain_migration_without_tendermint(
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr("planetmint.abci.rpc.ABCI_RPC.write_transaction", mock_write)
args = Namespace(
action="new", election_type="migration", sk=priv_validator_path, config={}
)
args = Namespace(action="new", election_type="migration", sk=priv_validator_path, config={})
with caplog.at_level(logging.INFO):
election_id = run_election_new_chain_migration(args, b, test_abci_rpc)
assert (
caplog.records[0].msg
== "[SUCCESS] Submitted proposal with id: " + election_id
)
assert caplog.records[0].msg == "[SUCCESS] Submitted proposal with id: " + election_id
assert b.models.get_transaction(election_id)
@pytest.mark.bdb
def test_election_new_upsert_validator_invalid_election(
caplog, b, priv_validator_path, user_sk, test_abci_rpc
):
def test_election_new_upsert_validator_invalid_election(caplog, b, priv_validator_path, user_sk, test_abci_rpc):
args = Namespace(
action="new",
election_type="upsert-validator",
@ -608,9 +564,7 @@ def test_election_new_upsert_validator_invalid_power(
@pytest.mark.abci
def test_election_approve_with_tendermint(
b, priv_validator_path, user_sk, validators, test_abci_rpc
):
def test_election_approve_with_tendermint(b, priv_validator_path, user_sk, validators, test_abci_rpc):
public_key = "CJxdItf4lz2PwEf4SmYNAu/c/VpmX39JEgC5YpH7fxg="
new_args = Namespace(
action="new",
@ -625,9 +579,7 @@ def test_election_approve_with_tendermint(
election_id = run_election_new_upsert_validator(new_args, b, test_abci_rpc)
assert election_id
args = Namespace(
action="approve", election_id=election_id, sk=priv_validator_path, config={}
)
args = Namespace(action="approve", election_id=election_id, sk=priv_validator_path, config={})
approve = run_election_approve(args, b, test_abci_rpc)
assert b.models.get_transaction(approve)
@ -643,21 +595,17 @@ def test_election_approve_without_tendermint(
from planetmint.commands.planetmint import run_election_approve
from argparse import Namespace
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr("planetmint.abci.rpc.ABCI_RPC.write_transaction", mock_write)
b, election_id = call_election_internal(
b, new_validator, node_key
)
b, election_id = call_election_internal(b, new_validator, node_key)
# call run_election_approve with args that point to the election
args = Namespace(
action="approve", election_id=election_id, sk=priv_validator_path, config={}
)
args = Namespace(action="approve", election_id=election_id, sk=priv_validator_path, config={})
# assert returned id is in the db
with caplog.at_level(logging.INFO):
@ -667,19 +615,14 @@ def test_election_approve_without_tendermint(
m.undo()
from unittest import mock
@pytest.mark.bdb
def test_election_approve_failure(
monkeypatch, caplog, b, priv_validator_path, new_validator, node_key, test_abci_rpc
):
def test_election_approve_failure(monkeypatch, caplog, b, priv_validator_path, new_validator, node_key, test_abci_rpc):
from argparse import Namespace
b, election_id = call_election(
monkeypatch, b, new_validator, node_key, test_abci_rpc
)
b, election_id = call_election(monkeypatch, b, new_validator, node_key, test_abci_rpc)
def mock_write(modelist, endpoint, mode_commit, transaction, mode):
b.models.store_bulk_transactions([transaction])
@ -688,9 +631,7 @@ def test_election_approve_failure(
test_abci_rpc.write_transaction = mock_write
# call run_upsert_validator_approve with args that point to the election
args = Namespace(
action="approve", election_id=election_id, sk=priv_validator_path, config={}
)
args = Namespace(action="approve", election_id=election_id, sk=priv_validator_path, config={})
with caplog.at_level(logging.ERROR):
assert not run_election_approve(args, b, test_abci_rpc)
@ -715,9 +656,7 @@ def call_election_internal(b, new_validator, node_key):
voters = b.get_recipients_list()
# and our voter is the public key from the voter list
voter = node_key.public_key
valid_election = ValidatorElection.generate(
[voter], voters, new_validator, None
).sign([node_key.private_key])
valid_election = ValidatorElection.generate([voter], voters, new_validator, None).sign([node_key.private_key])
# patch in an election with a vote issued to the user
election_id = valid_election.id
@ -736,6 +675,6 @@ def call_election(monkeypatch, b, new_validator, node_key, abci_rpc):
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr("planetmint.abci.rpc.ABCI_RPC.write_transaction", mock_write)
b, election_id = call_election_internal( b, new_validator, node_key )
b, election_id = call_election_internal(b, new_validator, node_key)
m.undo()
return b, election_id

View File

@ -145,16 +145,16 @@ def da_reset(_setup_database):
from transactions.common.transaction import Transaction
from .utils import flush_db
from planetmint.model.dataaccessor import DataAccessor
da = DataAccessor()
del da
del da
da = DataAccessor()
da.close_connection()
da.connect()
yield
dbname = Config().get()["database"]["name"]
flush_db(da.connection, dbname)
to_dict.cache_clear()
from_dict.cache_clear()
@ -168,7 +168,6 @@ def _bdb(_setup_database):
from .utils import flush_db
from planetmint.config import Config
conn = Connection()
conn.close()
conn.connect()
@ -309,7 +308,8 @@ def b():
validator.models.connection.close()
validator.models.connection.connect()
return validator
@pytest.fixture
def b_flushed(_setup_database):
from planetmint.application import Validator
@ -321,8 +321,6 @@ def b_flushed(_setup_database):
old_validator_instance = Validator()
del old_validator_instance.models
del old_validator_instance
conn = Connection()
conn.close()
@ -333,7 +331,7 @@ def b_flushed(_setup_database):
to_dict.cache_clear()
from_dict.cache_clear()
Transaction._input_valid.cache_clear()
Transaction._input_valid.cache_clear()
validator = Validator()
validator.models.connection.close()
@ -388,9 +386,7 @@ def double_spend_tx(signed_create_tx, carol_pubkey, user_sk):
from transactions.types.assets.transfer import Transfer
inputs = signed_create_tx.to_inputs()
tx = Transfer.generate(
inputs, [([carol_pubkey], 1)], asset_ids=[signed_create_tx.id]
)
tx = Transfer.generate(inputs, [([carol_pubkey], 1)], asset_ids=[signed_create_tx.id])
return tx.sign([user_sk])
@ -704,9 +700,7 @@ def new_validator():
@pytest.fixture
def valid_upsert_validator_election(b, node_key, new_validator):
voters = b.get_recipients_list()
return ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
return ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
@pytest.fixture
@ -715,15 +709,12 @@ def ongoing_validator_election(b, valid_upsert_validator_election, ed25519_node_
genesis_validators = {"validators": validators, "height": 0}
query.store_validator_set(b.models.connection, genesis_validators)
b.models.store_bulk_transactions([valid_upsert_validator_election])
query.store_election(
b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False
)
block_1 = Block(
app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id]
)
query.store_election(b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False)
block_1 = Block(app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id])
b.models.store_block(block_1._asdict())
return valid_upsert_validator_election
@pytest.fixture
def signed_2_0_create_tx():
return {
@ -825,9 +816,7 @@ def signed_2_0_transfer_tx():
],
"operation": "TRANSFER",
"metadata": "QmTjWHzypFxE8uuXJXMJQJxgAEKjoWmQimGiutmPyJ6CAB",
"asset": {
"id": "334014a29d99a488789c711b7dc5fceb534d1a9290b14d0270dbe6b60e2f036e"
},
"asset": {"id": "334014a29d99a488789c711b7dc5fceb534d1a9290b14d0270dbe6b60e2f036e"},
"version": "2.0",
"id": "e577641b0e2eb619e282f802516ce043e9d4af51dd4b6c959e18246e85cae2a6",
}

View File

@ -7,6 +7,7 @@ from transactions.types.elections.chain_migration_election import ChainMigration
from transactions.types.elections.validator_election import ValidatorElection
from planetmint.model.dataaccessor import DataAccessor
@pytest.mark.bdb
def test_process_block_concludes_all_elections(b):
del b.models

View File

@ -1,6 +1,7 @@
import pytest
from transactions.types.elections.chain_migration_election import ChainMigrationElection
@pytest.mark.bdb
def test_valid_migration_election(monkeypatch, b, node_key, network_validators):
def mock_get_validators(self, height):
@ -13,10 +14,12 @@ def test_valid_migration_election(monkeypatch, b, node_key, network_validators):
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
election = ChainMigrationElection.generate([node_key.public_key], voters, [{"data": {}}], None).sign(
[node_key.private_key]

View File

@ -45,6 +45,7 @@ def generate_init_chain_request(chain_id, vals=None):
vals = vals if vals is not None else [generate_validator()]
return types.RequestInitChain(validators=vals, chain_id=chain_id)
@pytest.mark.bdb
def test_init_chain_successfully_registers_chain(b):
request = generate_init_chain_request("chain-XYZ")

View File

@ -23,7 +23,9 @@ pytestmark = [pytest.mark.execute]
@pytest.mark.bdb
def test_upsert_validator_valid_election_vote(monkeypatch, b, network_validators,new_validator,node_key,ed25519_node_keys):
def test_upsert_validator_valid_election_vote(
monkeypatch, b, network_validators, new_validator, node_key, ed25519_node_keys
):
def mock_get_validators(self, height):
validators = []
for public_key, power in network_validators.items():
@ -34,11 +36,15 @@ def test_upsert_validator_valid_election_vote(monkeypatch, b, network_validators
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
b.models.store_bulk_transactions([valid_upsert_validator_election])
@ -57,7 +63,9 @@ def test_upsert_validator_valid_election_vote(monkeypatch, b, network_validators
@pytest.mark.bdb
def test_upsert_validator_valid_non_election_vote(monkeypatch, b, network_validators,node_key,new_validator, ed25519_node_keys):
def test_upsert_validator_valid_non_election_vote(
monkeypatch, b, network_validators, node_key, new_validator, ed25519_node_keys
):
def mock_get_validators(self, height):
validators = []
for public_key, power in network_validators.items():
@ -68,11 +76,15 @@ def test_upsert_validator_valid_non_election_vote(monkeypatch, b, network_valida
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
b.models.store_bulk_transactions([valid_upsert_validator_election])
@ -86,13 +98,17 @@ def test_upsert_validator_valid_non_election_vote(monkeypatch, b, network_valida
# Ensure that threshold conditions are now allowed
with pytest.raises(ValidationError):
Vote.generate(
[input0], [([election_pub_key, key0.public_key], votes)], election_ids=[valid_upsert_validator_election.id]
[input0],
[([election_pub_key, key0.public_key], votes)],
election_ids=[valid_upsert_validator_election.id],
).sign([key0.private_key])
m.undo()
@pytest.mark.bdb
def test_upsert_validator_delegate_election_vote(monkeypatch, b, network_validators, node_key, new_validator, ed25519_node_keys):
def test_upsert_validator_delegate_election_vote(
monkeypatch, b, network_validators, node_key, new_validator, ed25519_node_keys
):
def mock_get_validators(self, height):
validators = []
for public_key, power in network_validators.items():
@ -103,13 +119,17 @@ def test_upsert_validator_delegate_election_vote(monkeypatch, b, network_validat
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr(DataAccessor, "get_validators", mock_get_validators)
alice = generate_key_pair()
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
b.models.store_bulk_transactions([valid_upsert_validator_election])
@ -144,7 +164,9 @@ def test_upsert_validator_delegate_election_vote(monkeypatch, b, network_validat
@pytest.mark.bdb
def test_upsert_validator_invalid_election_vote(monkeypatch, b, network_validators, node_key, new_validator, ed25519_node_keys):
def test_upsert_validator_invalid_election_vote(
monkeypatch, b, network_validators, node_key, new_validator, ed25519_node_keys
):
def mock_get_validators(self, height):
validators = []
for public_key, power in network_validators.items():
@ -155,11 +177,15 @@ def test_upsert_validator_invalid_election_vote(monkeypatch, b, network_validato
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
b.models.store_bulk_transactions([valid_upsert_validator_election])
@ -190,12 +216,16 @@ def test_valid_election_votes_received(monkeypatch, b, network_validators, node_
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr(DataAccessor, "get_validators", mock_get_validators)
alice = generate_key_pair()
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
b.models.store_bulk_transactions([valid_upsert_validator_election])
assert b.get_commited_votes(valid_upsert_validator_election) == 0
@ -251,11 +281,15 @@ def test_valid_election_conclude(monkeypatch, b, network_validators, node_key, n
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
# Node 0: cast vote
tx_vote0 = gen_vote(valid_upsert_validator_election, 0, ed25519_node_keys)

View File

@ -32,8 +32,10 @@ def test_upsert_validator_valid_election(monkeypatch, b, network_validators, new
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
@ -54,8 +56,10 @@ def test_upsert_validator_invalid_election_public_key(monkeypatch, b, network_va
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
from transactions.common.exceptions import InvalidPublicKey
@ -64,7 +68,9 @@ def test_upsert_validator_invalid_election_public_key(monkeypatch, b, network_va
voters = b.get_recipients_list()
with pytest.raises(InvalidPublicKey):
ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
[node_key.private_key]
)
m.undo()
@ -79,8 +85,10 @@ def test_upsert_validator_invalid_power_election(monkeypatch, b, network_validat
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
new_validator[0]["data"]["power"] = 30
@ -95,6 +103,7 @@ def test_upsert_validator_invalid_power_election(monkeypatch, b, network_validat
def test_upsert_validator_invalid_proposed_election(monkeypatch, b, network_validators, new_validator, node_key):
from transactions.common.crypto import generate_key_pair
def mock_get_validators(self, height):
validators = []
for public_key, power in network_validators.items():
@ -105,19 +114,24 @@ def test_upsert_validator_invalid_proposed_election(monkeypatch, b, network_vali
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
alice = generate_key_pair()
voters = b.get_recipients_list()
election = ValidatorElection.generate([alice.public_key], voters, new_validator, None).sign([alice.private_key])
election = ValidatorElection.generate([alice.public_key], voters, new_validator, None).sign(
[alice.private_key]
)
with pytest.raises(InvalidProposer):
b.validate_election(election)
def test_upsert_validator_invalid_inputs_election(monkeypatch, b, network_validators, new_validator, node_key):
from transactions.common.crypto import generate_key_pair
def mock_get_validators(self, height):
validators = []
for public_key, power in network_validators.items():
@ -128,14 +142,16 @@ def test_upsert_validator_invalid_inputs_election(monkeypatch, b, network_valida
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
alice = generate_key_pair()
voters = b.get_recipients_list()
election = ValidatorElection.generate([node_key.public_key, alice.public_key], voters, new_validator, None).sign(
[node_key.private_key, alice.private_key]
)
election = ValidatorElection.generate(
[node_key.public_key, alice.public_key], voters, new_validator, None
).sign([node_key.private_key, alice.private_key])
with pytest.raises(MultipleInputsError):
b.validate_election(election)
m.undo()
@ -153,17 +169,20 @@ def test_upsert_validator_invalid_election(monkeypatch, b, network_validators, n
}
)
return validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
duplicate_election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
[node_key.private_key]
)
voters = b.get_recipients_list()
fixed_seed_election= ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
fixed_seed_election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
[node_key.private_key]
)
with pytest.raises(DuplicateTransaction):
b.validate_election(fixed_seed_election, [duplicate_election])
@ -208,14 +227,16 @@ def test_get_status_ongoing(monkeypatch, b, network_validators, node_key, new_va
}
)
return _validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
from planetmint.backend import schema, query
from planetmint.abci.block import Block
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate(
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
@ -223,15 +244,10 @@ def test_get_status_ongoing(monkeypatch, b, network_validators, node_key, new_va
genesis_validators = {"validators": validators, "height": 0}
query.store_validator_set(b.models.connection, genesis_validators)
b.models.store_bulk_transactions([valid_upsert_validator_election])
query.store_election(
b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False
)
block_1 = Block(
app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id]
)
query.store_election(b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False)
block_1 = Block(app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id])
b.models.store_block(block_1._asdict())
status = ValidatorElection.ONGOING
resp = b.get_election_status(valid_upsert_validator_election)
assert resp == status
@ -249,14 +265,16 @@ def test_get_status_concluded(monkeypatch, b, network_validators, node_key, new_
}
)
return _validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
from planetmint.backend import schema, query
from planetmint.abci.block import Block
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate(
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
@ -264,15 +282,11 @@ def test_get_status_concluded(monkeypatch, b, network_validators, node_key, new_
genesis_validators = {"validators": validators, "height": 0}
query.store_validator_set(b.models.connection, genesis_validators)
b.models.store_bulk_transactions([valid_upsert_validator_election])
query.store_election(
b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False
)
block_1 = Block(
app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id]
)
query.store_election(b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False)
block_1 = Block(app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id])
b.models.store_block(block_1._asdict())
query.store_election(b.models.connection, valid_upsert_validator_election.id, 2, is_concluded=True)
status = ValidatorElection.CONCLUDED
resp = b.get_election_status(valid_upsert_validator_election)
assert resp == status
@ -280,8 +294,6 @@ def test_get_status_concluded(monkeypatch, b, network_validators, node_key, new_
def test_get_status_inconclusive(monkeypatch, b, network_validators, node_key, new_validator):
def set_block_height_to_3(self):
return {"height": 3}
@ -324,6 +336,7 @@ def test_get_status_inconclusive(monkeypatch, b, network_validators, node_key, n
"voting_power": 8,
},
]
def mock_get_validators(self, height):
_validators = []
for public_key, power in network_validators.items():
@ -334,14 +347,16 @@ def test_get_status_inconclusive(monkeypatch, b, network_validators, node_key, n
}
)
return _validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
from planetmint.backend import schema, query
from planetmint.abci.block import Block
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate(
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
@ -349,16 +364,10 @@ def test_get_status_inconclusive(monkeypatch, b, network_validators, node_key, n
genesis_validators = {"validators": validators, "height": 0}
query.store_validator_set(b.models.connection, genesis_validators)
b.models.store_bulk_transactions([valid_upsert_validator_election])
query.store_election(
b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False
)
block_1 = Block(
app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id]
)
query.store_election(b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False)
block_1 = Block(app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id])
b.models.store_block(block_1._asdict())
validators = b.models.get_validators(height=1)
validators[0]["voting_power"] = 15
validator_update = {"validators": validators, "height": 2, "election_id": "some_other_election"}
@ -367,7 +376,7 @@ def test_get_status_inconclusive(monkeypatch, b, network_validators, node_key, n
m.undo()
with monkeypatch.context() as m2:
m2.setattr(DataAccessor, "get_validators", custom_mock_get_validators)
m2.setattr(DataAccessor, "get_latest_block", set_block_height_to_3)
m2.setattr(DataAccessor, "get_latest_block", set_block_height_to_3)
status = ValidatorElection.INCONCLUSIVE
resp = b.get_election_status(valid_upsert_validator_election)
assert resp == status
@ -376,6 +385,7 @@ def test_get_status_inconclusive(monkeypatch, b, network_validators, node_key, n
def test_upsert_validator_show(monkeypatch, caplog, b, node_key, new_validator, network_validators):
from planetmint.commands.planetmint import run_election_show
def mock_get_validators(self, height):
_validators = []
for public_key, power in network_validators.items():
@ -386,14 +396,16 @@ def test_upsert_validator_show(monkeypatch, caplog, b, node_key, new_validator,
}
)
return _validators
with monkeypatch.context() as m:
from planetmint.model.dataaccessor import DataAccessor
from planetmint.backend import schema, query
from planetmint.abci.block import Block
m.setattr(DataAccessor, "get_validators", mock_get_validators)
m.setattr(DataAccessor, "get_validators", mock_get_validators)
voters = b.get_recipients_list()
valid_upsert_validator_election= ValidatorElection.generate(
valid_upsert_validator_election = ValidatorElection.generate(
[node_key.public_key], voters, new_validator, None
).sign([node_key.private_key])
@ -401,12 +413,8 @@ def test_upsert_validator_show(monkeypatch, caplog, b, node_key, new_validator,
genesis_validators = {"validators": validators, "height": 0}
query.store_validator_set(b.models.connection, genesis_validators)
b.models.store_bulk_transactions([valid_upsert_validator_election])
query.store_election(
b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False
)
block_1 = Block(
app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id]
)
query.store_election(b.models.connection, valid_upsert_validator_election.id, 1, is_concluded=False)
block_1 = Block(app_hash="hash_1", height=1, transactions=[valid_upsert_validator_election.id])
b.models.store_block(block_1._asdict())
election_id = valid_upsert_validator_election.id
public_key = public_key_to_base64(valid_upsert_validator_election.assets[0]["data"]["public_key"]["value"])

View File

@ -7,6 +7,7 @@ import pytest
BLOCKS_ENDPOINT = "/api/v1/blocks/"
@pytest.mark.bdb
@pytest.mark.usefixtures("inputs")
def test_get_latest_block(client):
@ -64,8 +65,6 @@ def test_get_blocks_by_txid_endpoint_returns_400_bad_query_params(client):
assert res.json == {"message": "Unknown arguments: status"}
@pytest.mark.bdb
@pytest.mark.usefixtures("inputs")
def test_get_block_by_height(client):