mirror of
https://github.com/planetmint/planetmint.git
synced 2025-03-30 15:08:31 +00:00

* started replacing asset with assets Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * switched asset_id for asset_ids Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * __init__ transfer now uses multiple assets Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed some test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added VS Code debugging section to tests/README.md Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed typo Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * minor changes to get_transaction Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Added ignore for .vscode * convert cursor to list Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed get_assets Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Resolved the error of validation for assets * added additional check to get_transaction Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted backend queries for multiple assets Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted common tests for multiple assets Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed db test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed election test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed almost all tendermint tests Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed some command test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed validation test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added comment to get_transaction_filtered Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed some core test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Updated the unspent output function of Transaction according to new assets model * fixed txlist tests Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added comments to backend get_asset function, removed duplicate Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed further test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed some more tests Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added TODOs and changed test_client for aiohttp_client Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Solved assert comparision issue and handled key error with fallback. * Converted asset to assets in websocket * Resolved store transaction tests * added check to fix vote test cases, requires future change Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed some test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed test case Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed test case, added TODO on transaction.py for COMPOSE DECOMPOSE Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed last test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added planetmint-driver branch reference to dockerfiles for testing Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Updated asset to assets on the acceptance/integration test suite * changed get transaction list api point to use comma separated txids Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed acceptance test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * change cryptoconditions to asset-migration branch Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted doc strings Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed integration tests, removed unused code and adjusted some docstrings Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted some test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed some test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed some more test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed tendermint test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed web test cases Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * bumped up planetmint-transactions version number Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * resolved linting issues Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed abci test Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated changelog and version umber Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> Co-authored-by: ArpitShukla007 <arpitnshukla@gmail.com>
190 lines
7.1 KiB
Python
190 lines
7.1 KiB
Python
# Copyright © 2020 Interplanetary Database Association e.V.,
|
|
# Planetmint and IPDB software contributors.
|
|
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
|
|
# Code is Apache-2.0 and docs are CC-BY-4.0
|
|
|
|
import pytest
|
|
|
|
from argparse import Namespace
|
|
from unittest.mock import patch
|
|
from planetmint.tendermint_utils import public_key_to_base64
|
|
from transactions.types.elections.validator_election import ValidatorElection
|
|
from transactions.common.exceptions import (
|
|
DuplicateTransaction,
|
|
UnequalValidatorSet,
|
|
InvalidProposer,
|
|
MultipleInputsError,
|
|
InvalidPowerChange,
|
|
)
|
|
|
|
pytestmark = pytest.mark.bdb
|
|
|
|
|
|
def test_upsert_validator_valid_election(b_mock, new_validator, node_key):
|
|
voters = b_mock.get_recipients_list()
|
|
election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
|
|
[node_key.private_key]
|
|
)
|
|
assert b_mock.validate_election(election)
|
|
|
|
|
|
def test_upsert_validator_invalid_election_public_key(b_mock, new_validator, node_key):
|
|
from transactions.common.exceptions import InvalidPublicKey
|
|
|
|
for iv in ["ed25519-base32", "ed25519-base64"]:
|
|
new_validator[0]["data"]["public_key"]["type"] = iv
|
|
voters = b_mock.get_recipients_list()
|
|
|
|
with pytest.raises(InvalidPublicKey):
|
|
ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign([node_key.private_key])
|
|
|
|
|
|
def test_upsert_validator_invalid_power_election(b_mock, new_validator, node_key):
|
|
voters = b_mock.get_recipients_list()
|
|
new_validator[0]["data"]["power"] = 30
|
|
|
|
election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
|
|
[node_key.private_key]
|
|
)
|
|
with pytest.raises(InvalidPowerChange):
|
|
b_mock.validate_election(election)
|
|
|
|
|
|
def test_upsert_validator_invalid_proposed_election(b_mock, new_validator, node_key):
|
|
from transactions.common.crypto import generate_key_pair
|
|
|
|
alice = generate_key_pair()
|
|
voters = b_mock.get_recipients_list()
|
|
election = ValidatorElection.generate([alice.public_key], voters, new_validator, None).sign([alice.private_key])
|
|
with pytest.raises(InvalidProposer):
|
|
b_mock.validate_election(election)
|
|
|
|
|
|
def test_upsert_validator_invalid_inputs_election(b_mock, new_validator, node_key):
|
|
from transactions.common.crypto import generate_key_pair
|
|
|
|
alice = generate_key_pair()
|
|
voters = b_mock.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]
|
|
)
|
|
with pytest.raises(MultipleInputsError):
|
|
b_mock.validate_election(election)
|
|
|
|
|
|
@patch("transactions.types.elections.election.uuid4", lambda: "mock_uuid4")
|
|
def test_upsert_validator_invalid_election(b_mock, new_validator, node_key, fixed_seed_election):
|
|
voters = b_mock.get_recipients_list()
|
|
duplicate_election = ValidatorElection.generate([node_key.public_key], voters, new_validator, None).sign(
|
|
[node_key.private_key]
|
|
)
|
|
|
|
with pytest.raises(DuplicateTransaction):
|
|
b_mock.validate_election(fixed_seed_election, [duplicate_election])
|
|
|
|
b_mock.store_bulk_transactions([fixed_seed_election])
|
|
|
|
with pytest.raises(DuplicateTransaction):
|
|
b_mock.validate_election(duplicate_election)
|
|
|
|
# Try creating an election with incomplete voter set
|
|
invalid_election = ValidatorElection.generate([node_key.public_key], voters[1:], new_validator, None).sign(
|
|
[node_key.private_key]
|
|
)
|
|
|
|
with pytest.raises(UnequalValidatorSet):
|
|
b_mock.validate_election(invalid_election)
|
|
|
|
recipients = b_mock.get_recipients_list()
|
|
altered_recipients = []
|
|
for r in recipients:
|
|
([r_public_key], voting_power) = r
|
|
altered_recipients.append(([r_public_key], voting_power - 1))
|
|
|
|
# Create a transaction which doesn't enfore the network power
|
|
tx_election = ValidatorElection.generate([node_key.public_key], altered_recipients, new_validator, None).sign(
|
|
[node_key.private_key]
|
|
)
|
|
|
|
with pytest.raises(UnequalValidatorSet):
|
|
b_mock.validate_election(tx_election)
|
|
|
|
|
|
def test_get_status_ongoing(b, ongoing_validator_election, new_validator):
|
|
status = ValidatorElection.ONGOING
|
|
resp = b.get_election_status(ongoing_validator_election)
|
|
assert resp == status
|
|
|
|
|
|
def test_get_status_concluded(b, concluded_election, new_validator):
|
|
status = ValidatorElection.CONCLUDED
|
|
resp = b.get_election_status(concluded_election)
|
|
assert resp == status
|
|
|
|
|
|
def test_get_status_inconclusive(b, inconclusive_election, new_validator):
|
|
def set_block_height_to_3():
|
|
return {"height": 3}
|
|
|
|
def custom_mock_get_validators(height):
|
|
if height >= 3:
|
|
return [
|
|
{
|
|
"pub_key": {"data": "zL/DasvKulXZzhSNFwx4cLRXKkSM9GPK7Y0nZ4FEylM=", "type": "AC26791624DE60"},
|
|
"voting_power": 15,
|
|
},
|
|
{
|
|
"pub_key": {"data": "GIijU7GBcVyiVUcB0GwWZbxCxdk2xV6pxdvL24s/AqM=", "type": "AC26791624DE60"},
|
|
"voting_power": 7,
|
|
},
|
|
{
|
|
"pub_key": {"data": "JbfwrLvCVIwOPm8tj8936ki7IYbmGHjPiKb6nAZegRA=", "type": "AC26791624DE60"},
|
|
"voting_power": 10,
|
|
},
|
|
{
|
|
"pub_key": {"data": "PecJ58SaNRsWJZodDmqjpCWqG6btdwXFHLyE40RYlYM=", "type": "AC26791624DE60"},
|
|
"voting_power": 8,
|
|
},
|
|
]
|
|
else:
|
|
return [
|
|
{
|
|
"pub_key": {"data": "zL/DasvKulXZzhSNFwx4cLRXKkSM9GPK7Y0nZ4FEylM=", "type": "AC26791624DE60"},
|
|
"voting_power": 9,
|
|
},
|
|
{
|
|
"pub_key": {"data": "GIijU7GBcVyiVUcB0GwWZbxCxdk2xV6pxdvL24s/AqM=", "type": "AC26791624DE60"},
|
|
"voting_power": 7,
|
|
},
|
|
{
|
|
"pub_key": {"data": "JbfwrLvCVIwOPm8tj8936ki7IYbmGHjPiKb6nAZegRA=", "type": "AC26791624DE60"},
|
|
"voting_power": 10,
|
|
},
|
|
{
|
|
"pub_key": {"data": "PecJ58SaNRsWJZodDmqjpCWqG6btdwXFHLyE40RYlYM=", "type": "AC26791624DE60"},
|
|
"voting_power": 8,
|
|
},
|
|
]
|
|
|
|
b.get_validators = custom_mock_get_validators
|
|
b.get_latest_block = set_block_height_to_3
|
|
status = ValidatorElection.INCONCLUSIVE
|
|
resp = b.get_election_status(inconclusive_election)
|
|
assert resp == status
|
|
|
|
|
|
def test_upsert_validator_show(caplog, ongoing_validator_election, b):
|
|
from planetmint.commands.planetmint import run_election_show
|
|
|
|
election_id = ongoing_validator_election.id
|
|
public_key = public_key_to_base64(ongoing_validator_election.assets[0]["data"]["public_key"]["value"])
|
|
power = ongoing_validator_election.assets[0]["data"]["power"]
|
|
node_id = ongoing_validator_election.assets[0]["data"]["node_id"]
|
|
status = ValidatorElection.ONGOING
|
|
|
|
show_args = Namespace(action="show", election_id=election_id)
|
|
|
|
msg = run_election_show(show_args, b)
|
|
|
|
assert msg == f"public_key={public_key}\npower={power}\nnode_id={node_id}\nstatus={status}"
|