Problem: No test covering upsert-validator show

Solution: Wrote a test. Also changed validator node_ids to include the name of the test they're part of, which should prevent `DuplicateTransaction` collisions during testing.
This commit is contained in:
z-bowen 2018-08-24 14:18:54 +02:00
parent 6ca97bd0e5
commit b3a0c13da1

View File

@ -352,34 +352,22 @@ class MockResponse():
return {'result': {'latest_block_height': self.height}} return {'result': {'latest_block_height': self.height}}
# @pytest.mark.execute @pytest.mark.abci
# @patch('bigchaindb.lib.BigchainDB.get_validators') def test_upsert_validator_new_with_tendermint(b, priv_validator_path, user_sk, validators):
# @pytest.mark.abci
@pytest.mark.skip
def test_upsert_validator_new_with_tendermint(b, priv_validator_path, user_sk, monkeypatch):
"""WIP: Will be fixed and activated in the next PR """WIP: Will be fixed and activated in the next PR
""" """
from bigchaindb.commands.bigchaindb import run_upsert_validator_new from bigchaindb.commands.bigchaindb import run_upsert_validator_new
import time
time.sleep(3) new_args = Namespace(action='new',
public_key='8eJ8q9ZQpReWyQT5aFCiwtZ5wDZC4eDnCen88p3tQ6ie',
power=1,
node_id='unique_node_id_for_test_upsert_validator_new_with_tendermint',
sk=priv_validator_path,
config={})
# b.get_validators = mock_get election_id = run_upsert_validator_new(new_args, b)
# mock_get_validators = mock_get
# monkeypatch.setattr('requests.get', mock_get)
proposer_key = b.get_validators()[0]['pub_key']['value'] assert b.get_transaction(election_id)
args = Namespace(action='new',
public_key=proposer_key,
power=1,
node_id='12345',
sk=priv_validator_path,
config={})
resp = run_upsert_validator_new(args, b)
time.sleep(3)
assert b.get_transaction(resp)
@pytest.mark.tendermint @pytest.mark.tendermint
@ -391,13 +379,13 @@ def test_upsert_validator_new_without_tendermint(b, priv_validator_path, user_sk
b.store_bulk_transactions([tx]) b.store_bulk_transactions([tx])
return (202, '') return (202, '')
b.get_validators = mock_get b.get_validators = mock_get_validators
b.write_transaction = mock_write b.write_transaction = mock_write
args = Namespace(action='new', args = Namespace(action='new',
public_key='CJxdItf4lz2PwEf4SmYNAu/c/VpmX39JEgC5YpH7fxg=', public_key='CJxdItf4lz2PwEf4SmYNAu/c/VpmX39JEgC5YpH7fxg=',
power=1, power=1,
node_id='12345', node_id='unique_node_id_for_test_upsert_validator_new_without_tendermint',
sk=priv_validator_path, sk=priv_validator_path,
config={}) config={})
resp = run_upsert_validator_new(args, b) resp = run_upsert_validator_new(args, b)
@ -405,6 +393,47 @@ def test_upsert_validator_new_without_tendermint(b, priv_validator_path, user_sk
assert b.get_transaction(resp) assert b.get_transaction(resp)
@pytest.mark.tendermint
@pytest.mark.bdb
def test_upsert_validator_show(b, priv_validator_path, user_sk, monkeypatch):
from bigchaindb.commands.bigchaindb import run_upsert_validator_show, run_upsert_validator_new
def mock_get(height):
return [
{'pub_key': {'data': 'zL/DasvKulXZzhSNFwx4cLRXKkSM9GPK7Y0nZ4FEylM=',
'type': 'tendermint/PubKeyEd25519'},
'voting_power': 10}
]
def mock_write(tx, mode):
b.store_bulk_transactions([tx])
return 202, ''
b.get_validators = mock_get
b.write_transaction = mock_write
monkeypatch.setattr('requests.get', mock_get)
public_key = 'CJxdItf4lz2PwEf4SmYNAu/c/VpmX39JEgC5YpH7fxg='
power = 1
node_id = 'unique_node_id_for_test_upsert_validator_show'
new_args = Namespace(action='new',
public_key=public_key,
power=1,
node_id=node_id,
sk=priv_validator_path,
config={})
election_id = run_upsert_validator_new(new_args, b)
show_args = Namespace(action='show',
election_id=election_id)
resp = run_upsert_validator_show(show_args, b)
assert resp == (public_key, power, node_id)
@pytest.mark.abci @pytest.mark.abci
def test_upsert_validator_approve_with_tendermint(b, priv_validator_path, user_sk, validators): def test_upsert_validator_approve_with_tendermint(b, priv_validator_path, user_sk, validators):
from bigchaindb.commands.bigchaindb import run_upsert_validator_new, \ from bigchaindb.commands.bigchaindb import run_upsert_validator_new, \
@ -414,7 +443,7 @@ def test_upsert_validator_approve_with_tendermint(b, priv_validator_path, user_s
new_args = Namespace(action='new', new_args = Namespace(action='new',
public_key=public_key, public_key=public_key,
power=1, power=1,
node_id='12345', node_id='unique_node_id_for_test_upsert_validator_approve_with_tendermint',
sk=priv_validator_path, sk=priv_validator_path,
config={}) config={})
@ -467,7 +496,7 @@ def test_upsert_validator_approve_called_with_bad_key(b, bad_validator_path, new
run_upsert_validator_approve(args, b) run_upsert_validator_approve(args, b)
def mock_get(height): def mock_get_validators(height):
keys = node_keys() keys = node_keys()
pub_key = list(keys.keys())[0] pub_key = list(keys.keys())[0]
return [ return [
@ -484,7 +513,7 @@ def call_election(b, new_validator, node_key):
return (202, '') return (202, '')
# patch the validator set. We now have one validator with power 10 # patch the validator set. We now have one validator with power 10
b.get_validators = mock_get b.get_validators = mock_get_validators
b.write_transaction = mock_write b.write_transaction = mock_write
# our voters is a list of length 1, populated from our mocked validator # our voters is a list of length 1, populated from our mocked validator
@ -500,44 +529,3 @@ def call_election(b, new_validator, node_key):
b.store_bulk_transactions([valid_election]) b.store_bulk_transactions([valid_election])
return b, election_id return b, election_id
@pytest.mark.tendermint
@pytest.mark.bdb
def test_upsert_validator_show(b, priv_validator_path, user_sk, monkeypatch):
from bigchaindb.commands.bigchaindb import run_upsert_validator_show, run_upsert_validator_new
def mock_get():
return [
{'pub_key': {'value': 'zL/DasvKulXZzhSNFwx4cLRXKkSM9GPK7Y0nZ4FEylM=',
'type': 'tendermint/PubKeyEd25519'},
'voting_power': 10}
]
def mock_write(tx, mode):
b.store_transaction(tx)
return 202, ''
b.get_validators = mock_get
b.write_transaction = mock_write
monkeypatch.setattr('requests.get', mock_get)
public_key = 'CJxdItf4lz2PwEf4SmYNAu/c/VpmX39JEgC5YpH7fxg='
power = 1
node_id = '12345'
new_args = Namespace(action='new',
public_key=public_key,
power=1,
node_id='12345',
sk=priv_validator_path,
config={})
election_id = run_upsert_validator_new(new_args, b)
show_args = Namespace(action='show',
election_id=election_id)
resp = run_upsert_validator_show(show_args, b)
assert resp == (public_key, power, node_id)