mirror of
https://github.com/planetmint/planetmint.git
synced 2025-11-26 15:35:45 +00:00
* 31 restructue documentation (#138) * removed korean documentation Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed CN and KOR readme Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * changed to the press theme Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * first changes Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixe H3 vs H1 issues Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added missing png Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added missing file Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed warnings Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * moved documents Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obsolete files Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obsolete folder Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obs. file Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added some final changes Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obs. reference Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * moved chain migration to election types (#109) Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Final zenroom (#147) * zenroom fixes Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * expl. defined the aiohttp package Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased version number and fixed a zenroom runtime bug Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added fialing zenroom tx signing test Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * extended test to pass zenrooom validation, but to fail planetmint validation. Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added manual tx crafting Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added zenroom fulfillment verification Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * the last mile before integration Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * zenroom unit tests are passing Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * simplified zenroom unit tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obsolte lines from the zenroom tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed acceptance tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * adjusted zenroom integraiton tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed linting errors Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * simplified zenroom unit test Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased version number Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * using cryptoconditions without print message Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased cc usage to 0.9.9 readded daemon proceses Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased version to 0.9.6 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed deployment issue for 0.9.6 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * adjusted get_assets and from_db for tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added comment Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * improve usability of zenroom (#159) * improve usability of zenroom * * increased version * fixed test cases * added changelog Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com> * migrated to AGPLv3 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * 150 add cryptoconditions documentation (#166) * added smaller logos fixed reference issue Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed some erros and typos Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added cryptoconditions reference to the subproject Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * docker all in one now install tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added user to integration init.lua Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated integration test setup for tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed print statements Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated changelog Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed error messaging Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed exception verification Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed printing of testdata Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> Co-authored-by: Jürgen Eckel <eckelj@users.noreply.github.com> Co-authored-by: Lorenz Herzberger <64837895+LaurentDeMontBlanc@users.noreply.github.com> Co-authored-by: Alberto Lerda <30939098+albertolerda@users.noreply.github.com> Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com>
264 lines
9.3 KiB
Python
264 lines
9.3 KiB
Python
import pytest
|
|
|
|
from tests.utils import generate_election, generate_validators
|
|
|
|
from planetmint.lib import Block
|
|
from planetmint.transactions.types.elections.election import Election
|
|
from planetmint.transactions.types.elections.chain_migration_election import ChainMigrationElection
|
|
from planetmint.upsert_validator.validator_election import ValidatorElection
|
|
|
|
@pytest.mark.bdb
|
|
def test_process_block_concludes_all_elections(b):
|
|
validators = generate_validators([1] * 4)
|
|
b.store_validator_set(1, [v['storage'] for v in validators])
|
|
|
|
new_validator = generate_validators([1])[0]
|
|
|
|
public_key = validators[0]['public_key']
|
|
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,
|
|
{},
|
|
voter_keys)
|
|
|
|
txs = [election]
|
|
total_votes = votes
|
|
|
|
election, votes = generate_election(b,
|
|
ValidatorElection,
|
|
public_key, private_key,
|
|
new_validator['election'],
|
|
voter_keys)
|
|
txs += [election]
|
|
total_votes += votes
|
|
|
|
b.store_abci_chain(1, 'chain-X')
|
|
Election.process_block(b, 1, txs)
|
|
b.store_block(Block(height=1,
|
|
transactions=[tx.id for tx in txs],
|
|
app_hash='')._asdict())
|
|
b.store_bulk_transactions(txs)
|
|
|
|
Election.process_block(b, 2, total_votes)
|
|
|
|
validators = b.get_validators()
|
|
assert len(validators) == 5
|
|
assert new_validator['storage'] in validators
|
|
|
|
chain = b.get_latest_abci_chain()
|
|
assert chain
|
|
assert chain == {
|
|
'height': 2,
|
|
'is_synced': False,
|
|
'chain_id': 'chain-X-migrated-at-height-1',
|
|
}
|
|
|
|
for tx in txs:
|
|
assert b.get_election(tx.id)['is_concluded']
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_process_block_approves_only_one_validator_update(b):
|
|
validators = generate_validators([1] * 4)
|
|
b.store_validator_set(1, [v['storage'] for v in validators])
|
|
|
|
new_validator = generate_validators([1])[0]
|
|
|
|
public_key = validators[0]['public_key']
|
|
private_key = validators[0]['private_key']
|
|
voter_keys = [v['private_key'] for v in validators]
|
|
|
|
election, votes = generate_election(b,
|
|
ValidatorElection,
|
|
public_key, private_key,
|
|
new_validator['election'],
|
|
voter_keys)
|
|
txs = [election]
|
|
total_votes = votes
|
|
|
|
another_validator = generate_validators([1])[0]
|
|
|
|
election, votes = generate_election(b,
|
|
ValidatorElection,
|
|
public_key, private_key,
|
|
another_validator['election'],
|
|
voter_keys)
|
|
txs += [election]
|
|
total_votes += votes
|
|
|
|
Election.process_block(b, 1, txs)
|
|
b.store_block(Block(height=1,
|
|
transactions=[tx.id for tx in txs],
|
|
app_hash='')._asdict())
|
|
b.store_bulk_transactions(txs)
|
|
|
|
Election.process_block(b, 2, total_votes)
|
|
|
|
validators = b.get_validators()
|
|
assert len(validators) == 5
|
|
assert new_validator['storage'] in validators
|
|
assert another_validator['storage'] not in validators
|
|
|
|
assert b.get_election(txs[0].id)['is_concluded']
|
|
assert not b.get_election(txs[1].id)['is_concluded']
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_process_block_approves_after_pending_validator_update(b):
|
|
validators = generate_validators([1] * 4)
|
|
b.store_validator_set(1, [v['storage'] for v in validators])
|
|
|
|
new_validator = generate_validators([1])[0]
|
|
|
|
public_key = validators[0]['public_key']
|
|
private_key = validators[0]['private_key']
|
|
voter_keys = [v['private_key'] for v in validators]
|
|
|
|
election, votes = generate_election(b,
|
|
ValidatorElection,
|
|
public_key, private_key,
|
|
new_validator['election'],
|
|
voter_keys)
|
|
txs = [election]
|
|
total_votes = votes
|
|
|
|
another_validator = generate_validators([1])[0]
|
|
|
|
election, votes = generate_election(b,
|
|
ValidatorElection,
|
|
public_key, private_key,
|
|
another_validator['election'],
|
|
voter_keys)
|
|
txs += [election]
|
|
total_votes += votes
|
|
|
|
election, votes = generate_election(b,
|
|
ChainMigrationElection,
|
|
public_key, private_key,
|
|
{},
|
|
voter_keys)
|
|
|
|
txs += [election]
|
|
total_votes += votes
|
|
|
|
b.store_abci_chain(1, 'chain-X')
|
|
Election.process_block(b, 1, txs)
|
|
b.store_block(Block(height=1,
|
|
transactions=[tx.id for tx in txs],
|
|
app_hash='')._asdict())
|
|
b.store_bulk_transactions(txs)
|
|
|
|
Election.process_block(b, 2, total_votes)
|
|
|
|
validators = b.get_validators()
|
|
assert len(validators) == 5
|
|
assert new_validator['storage'] in validators
|
|
assert another_validator['storage'] not in validators
|
|
|
|
assert b.get_election(txs[0].id)['is_concluded']
|
|
assert not b.get_election(txs[1].id)['is_concluded']
|
|
assert b.get_election(txs[2].id)['is_concluded']
|
|
|
|
assert b.get_latest_abci_chain() == {'height': 2,
|
|
'chain_id': 'chain-X-migrated-at-height-1',
|
|
'is_synced': False}
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_process_block_does_not_approve_after_validator_update(b):
|
|
validators = generate_validators([1] * 4)
|
|
b.store_validator_set(1, [v['storage'] for v in validators])
|
|
|
|
new_validator = generate_validators([1])[0]
|
|
|
|
public_key = validators[0]['public_key']
|
|
private_key = validators[0]['private_key']
|
|
voter_keys = [v['private_key'] for v in validators]
|
|
|
|
election, votes = generate_election(b,
|
|
ValidatorElection,
|
|
public_key, private_key,
|
|
new_validator['election'],
|
|
voter_keys)
|
|
txs = [election]
|
|
total_votes = votes
|
|
|
|
b.store_block(Block(height=1,
|
|
transactions=[tx.id for tx in txs],
|
|
app_hash='')._asdict())
|
|
Election.process_block(b, 1, txs)
|
|
b.store_bulk_transactions(txs)
|
|
|
|
second_election, second_votes = generate_election(b,
|
|
ChainMigrationElection,
|
|
public_key, private_key,
|
|
{},
|
|
voter_keys)
|
|
|
|
Election.process_block(b, 2, total_votes + [second_election])
|
|
|
|
b.store_block(Block(height=2,
|
|
transactions=[v.id for v in total_votes + [second_election]],
|
|
app_hash='')._asdict())
|
|
|
|
b.store_abci_chain(1, 'chain-X')
|
|
Election.process_block(b, 3, second_votes)
|
|
|
|
assert not b.get_election(second_election.id)['is_concluded']
|
|
assert b.get_latest_abci_chain() == {'height': 1,
|
|
'chain_id': 'chain-X',
|
|
'is_synced': True}
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_process_block_applies_only_one_migration(b):
|
|
validators = generate_validators([1] * 4)
|
|
b.store_validator_set(1, [v['storage'] for v in validators])
|
|
|
|
public_key = validators[0]['public_key']
|
|
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,
|
|
{},
|
|
voter_keys)
|
|
txs = [election]
|
|
total_votes = votes
|
|
|
|
election, votes = generate_election(b,
|
|
ChainMigrationElection,
|
|
public_key, private_key,
|
|
{},
|
|
voter_keys)
|
|
|
|
txs += [election]
|
|
total_votes += votes
|
|
|
|
b.store_abci_chain(1, 'chain-X')
|
|
Election.process_block(b, 1, txs)
|
|
b.store_block(Block(height=1,
|
|
transactions=[tx.id for tx in txs],
|
|
app_hash='')._asdict())
|
|
b.store_bulk_transactions(txs)
|
|
|
|
Election.process_block(b, 1, total_votes)
|
|
chain = b.get_latest_abci_chain()
|
|
assert chain
|
|
assert chain == {
|
|
'height': 2,
|
|
'is_synced': False,
|
|
'chain_id': 'chain-X-migrated-at-height-1',
|
|
}
|
|
|
|
assert b.get_election(txs[0].id)['is_concluded']
|
|
assert not b.get_election(txs[1].id)['is_concluded']
|
|
|
|
|
|
def test_process_block_gracefully_handles_empty_block(b):
|
|
Election.process_block(b, 1, [])
|