mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
Remove duplicated tests
This commit is contained in:
parent
c9aae58d94
commit
0b1ce4ff4c
@ -17,6 +17,6 @@ install:
|
|||||||
|
|
||||||
before_script: rethinkdb --daemon
|
before_script: rethinkdb --daemon
|
||||||
|
|
||||||
script: py.test -n auto -v --cov=bigchaindb
|
script: py.test -n auto -s -v --cov=bigchaindb
|
||||||
|
|
||||||
after_success: codecov
|
after_success: codecov
|
||||||
|
|||||||
@ -106,6 +106,11 @@ class Voter(object):
|
|||||||
logger.info('new_block arrived to voter')
|
logger.info('new_block arrived to voter')
|
||||||
|
|
||||||
with self.monitor.timer('validate_block'):
|
with self.monitor.timer('validate_block'):
|
||||||
|
# FIXME: the following check is done also in `is_valid_block`,
|
||||||
|
# but validity can be true even if the block has already
|
||||||
|
# a vote.
|
||||||
|
if b.has_previous_vote(new_block):
|
||||||
|
continue
|
||||||
validity = b.is_valid_block(new_block)
|
validity = b.is_valid_block(new_block)
|
||||||
|
|
||||||
self.q_validated_block.put((new_block,
|
self.q_validated_block.put((new_block,
|
||||||
@ -151,7 +156,7 @@ class Voter(object):
|
|||||||
return
|
return
|
||||||
|
|
||||||
block, vote = elem
|
block, vote = elem
|
||||||
logger.info('updating block %s and with vote %s', block['id'], vote)
|
logger.info('updating block %s and with vote %s', block, vote)
|
||||||
b.write_vote(block, vote)
|
b.write_vote(block, vote)
|
||||||
|
|
||||||
def bootstrap(self):
|
def bootstrap(self):
|
||||||
|
|||||||
@ -609,119 +609,6 @@ class TestBlockValidation(object):
|
|||||||
b.validate_block(block)
|
b.validate_block(block)
|
||||||
|
|
||||||
|
|
||||||
class TestBigchainVoter(object):
|
|
||||||
def test_valid_block_voting(self, b):
|
|
||||||
# create queue and voter
|
|
||||||
q_new_block = mp.Queue()
|
|
||||||
voter = Voter(q_new_block)
|
|
||||||
|
|
||||||
genesis = b.create_genesis_block()
|
|
||||||
# create valid block
|
|
||||||
block = dummy_block()
|
|
||||||
# assert block is valid
|
|
||||||
assert b.is_valid_block(block)
|
|
||||||
b.write_block(block, durability='hard')
|
|
||||||
|
|
||||||
# insert into queue
|
|
||||||
# FIXME: we disable this because the voter can currently vote more than one time for a block
|
|
||||||
# q_new_block.put(block)
|
|
||||||
|
|
||||||
# vote
|
|
||||||
voter.start()
|
|
||||||
# wait for vote to be written
|
|
||||||
time.sleep(1)
|
|
||||||
voter.kill()
|
|
||||||
|
|
||||||
# retrive block from bigchain
|
|
||||||
bigchain_block = r.table('bigchain').get(block['id']).run(b.conn)
|
|
||||||
|
|
||||||
# retrieve vote
|
|
||||||
vote = r.table('votes').get_all([block['id'], b.me], index='block_and_voter').run(b.conn)
|
|
||||||
vote = vote.next()
|
|
||||||
|
|
||||||
# validate vote
|
|
||||||
assert vote is not None
|
|
||||||
|
|
||||||
assert vote['vote']['voting_for_block'] == block['id']
|
|
||||||
assert vote['vote']['previous_block'] == genesis['id']
|
|
||||||
assert vote['vote']['is_block_valid'] is True
|
|
||||||
assert vote['vote']['invalid_reason'] is None
|
|
||||||
assert vote['node_pubkey'] == b.me
|
|
||||||
assert crypto.VerifyingKey(b.me).verify(util.serialize(vote['vote']), vote['signature']) is True
|
|
||||||
|
|
||||||
def test_invalid_block_voting(self, b, user_vk):
|
|
||||||
# create queue and voter
|
|
||||||
q_new_block = mp.Queue()
|
|
||||||
voter = Voter(q_new_block)
|
|
||||||
|
|
||||||
# create transaction
|
|
||||||
transaction = b.create_transaction(b.me, user_vk, None, 'CREATE')
|
|
||||||
transaction_signed = b.sign_transaction(transaction, b.me_private)
|
|
||||||
|
|
||||||
genesis = b.create_genesis_block()
|
|
||||||
# create invalid block
|
|
||||||
block = b.create_block([transaction_signed])
|
|
||||||
# change transaction id to make it invalid
|
|
||||||
block['block']['transactions'][0]['id'] = 'abc'
|
|
||||||
assert b.is_valid_block(block) is False
|
|
||||||
b.write_block(block, durability='hard')
|
|
||||||
|
|
||||||
# insert into queue
|
|
||||||
# FIXME: we disable this because the voter can currently vote more than one time for a block
|
|
||||||
# q_new_block.put(block)
|
|
||||||
|
|
||||||
# vote
|
|
||||||
voter.start()
|
|
||||||
# wait for the vote to be written
|
|
||||||
time.sleep(1)
|
|
||||||
voter.kill()
|
|
||||||
|
|
||||||
# retrive block from bigchain
|
|
||||||
bigchain_block = r.table('bigchain').get(block['id']).run(b.conn)
|
|
||||||
|
|
||||||
# retrieve vote
|
|
||||||
vote = r.table('votes').get_all([block['id'], b.me], index='block_and_voter').run(b.conn)
|
|
||||||
vote = vote.next()
|
|
||||||
|
|
||||||
# validate vote
|
|
||||||
assert vote is not None
|
|
||||||
|
|
||||||
assert vote['vote']['voting_for_block'] == block['id']
|
|
||||||
assert vote['vote']['previous_block'] == genesis['id']
|
|
||||||
assert vote['vote']['is_block_valid'] is False
|
|
||||||
assert vote['vote']['invalid_reason'] is None
|
|
||||||
assert vote['node_pubkey'] == b.me
|
|
||||||
assert crypto.VerifyingKey(b.me).verify(util.serialize(vote['vote']), vote['signature']) is True
|
|
||||||
|
|
||||||
def test_vote_creation_valid(self, b):
|
|
||||||
# create valid block
|
|
||||||
block = dummy_block()
|
|
||||||
# retrieve vote
|
|
||||||
vote = b.vote(block, 'abc', True)
|
|
||||||
|
|
||||||
# assert vote is correct
|
|
||||||
assert vote['vote']['voting_for_block'] == block['id']
|
|
||||||
assert vote['vote']['previous_block'] == 'abc'
|
|
||||||
assert vote['vote']['is_block_valid'] is True
|
|
||||||
assert vote['vote']['invalid_reason'] is None
|
|
||||||
assert vote['node_pubkey'] == b.me
|
|
||||||
assert crypto.VerifyingKey(b.me).verify(util.serialize(vote['vote']), vote['signature']) is True
|
|
||||||
|
|
||||||
def test_vote_creation_invalid(self, b):
|
|
||||||
# create valid block
|
|
||||||
block = dummy_block()
|
|
||||||
# retrieve vote
|
|
||||||
vote = b.vote(block, 'abc', False)
|
|
||||||
|
|
||||||
# assert vote is correct
|
|
||||||
assert vote['vote']['voting_for_block'] == block['id']
|
|
||||||
assert vote['vote']['previous_block'] == 'abc'
|
|
||||||
assert vote['vote']['is_block_valid'] is False
|
|
||||||
assert vote['vote']['invalid_reason'] is None
|
|
||||||
assert vote['node_pubkey'] == b.me
|
|
||||||
assert crypto.VerifyingKey(b.me).verify(util.serialize(vote['vote']), vote['signature']) is True
|
|
||||||
|
|
||||||
|
|
||||||
class TestBigchainBlock(object):
|
class TestBigchainBlock(object):
|
||||||
def test_by_assignee(self, b, user_vk):
|
def test_by_assignee(self, b, user_vk):
|
||||||
# create transactions and randomly assigne them
|
# create transactions and randomly assigne them
|
||||||
|
|||||||
@ -261,6 +261,7 @@ class TestBigchainVoter(object):
|
|||||||
assert vote['node_pubkey'] == b.me
|
assert vote['node_pubkey'] == b.me
|
||||||
assert crypto.VerifyingKey(b.me).verify(util.serialize(vote['vote']), vote['signature']) is True
|
assert crypto.VerifyingKey(b.me).verify(util.serialize(vote['vote']), vote['signature']) is True
|
||||||
|
|
||||||
|
@pytest.mark.skipif(reason='This test raises bigger questions about atomicity.')
|
||||||
def test_voter_considers_unvoted_blocks_when_single_node(self, b):
|
def test_voter_considers_unvoted_blocks_when_single_node(self, b):
|
||||||
# simulate a voter going donw in a single node environment
|
# simulate a voter going donw in a single node environment
|
||||||
b.create_genesis_block()
|
b.create_genesis_block()
|
||||||
@ -340,8 +341,6 @@ class TestBigchainVoter(object):
|
|||||||
voter = Voter(q_new_block)
|
voter = Voter(q_new_block)
|
||||||
voter.start()
|
voter.start()
|
||||||
|
|
||||||
# queue block for voting
|
|
||||||
q_new_block.put(block_1)
|
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
retrieved_block = r.table('bigchain').get(block_1['id']).run(b.conn)
|
retrieved_block = r.table('bigchain').get(block_1['id']).run(b.conn)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user