From 731be170b8b866c333a0a25e7681092f57c49fcc Mon Sep 17 00:00:00 2001 From: Vanshdeep Singh Date: Mon, 24 Sep 2018 13:12:26 +0200 Subject: [PATCH] Problem: No test for checking mixed spent outputs Solution: Add test for `get_spending_transactions` to check that correct matching is done when querying documents with multiple inputs --- tests/backend/localmongodb/test_queries.py | 41 ++++++++++++++++++++++ tests/test_core.py | 1 + 2 files changed, 42 insertions(+) diff --git a/tests/backend/localmongodb/test_queries.py b/tests/backend/localmongodb/test_queries.py index 6a7ae2c4..3db2c6ec 100644 --- a/tests/backend/localmongodb/test_queries.py +++ b/tests/backend/localmongodb/test_queries.py @@ -234,6 +234,47 @@ def test_get_spending_transactions(user_pk, user_sk): assert txns == [tx2.to_dict(), tx4.to_dict()] +def test_get_spending_transactions_multiple_inputs(): + from bigchaindb.backend import connect, query + from bigchaindb.models import Transaction + from bigchaindb.common.crypto import generate_key_pair + conn = connect() + (alice_sk, alice_pk) = generate_key_pair() + (bob_sk, bob_pk) = generate_key_pair() + (carol_sk, carol_pk) = generate_key_pair() + + out = [([alice_pk], 9)] + tx1 = Transaction.create([alice_pk], out).sign([alice_sk]) + + inputs1 = tx1.to_inputs() + tx2 = Transaction.transfer([inputs1[0]], + [([alice_pk], 6), ([bob_pk], 3)], + tx1.id).sign([alice_sk]) + + inputs2 = tx2.to_inputs() + tx3 = Transaction.transfer([inputs2[0]], + [([bob_pk], 3), ([carol_pk], 3)], + tx1.id).sign([alice_sk]) + + inputs3 = tx3.to_inputs() + tx4 = Transaction.transfer([inputs2[1], inputs3[0]], + [([carol_pk], 6)], + tx1.id).sign([bob_sk]) + + txns = [deepcopy(tx.to_dict()) for tx in [tx1, tx2, tx3, tx4]] + conn.db.transactions.insert_many(txns) + + links = [ + ({'transaction_id': tx2.id, 'output_index': 0}, 1), + ({'transaction_id': tx2.id, 'output_index': 1}, 1), + ({'transaction_id': tx3.id, 'output_index': 0}, 1), + ({'transaction_id': tx3.id, 'output_index': 1}, 0), + ] + for l, num in links: + txns = list(query.get_spending_transactions(conn, [l])) + assert len(txns) == num + + def test_store_block(): from bigchaindb.backend import connect, query from bigchaindb.lib import Block diff --git a/tests/test_core.py b/tests/test_core.py index d7bc4bb5..423f5c57 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -64,6 +64,7 @@ def test_bigchain_class_initialization_with_parameters(): assert bigchain.validation == BaseValidationRules +@pytest.mark.bdb def test_get_spent_issue_1271(b, alice, bob, carol): from bigchaindb.models import Transaction