@pytest.mark.parametrize(
"system_contract_interactions_per_block,block_body_override_requests,"
"exception",
[
pytest.param(
[[]],
[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
source_address=Address(0),
),
],
BlockException.INVALID_REQUESTS,
id="no_consolidations_non_empty_requests_list",
),
pytest.param(
[
[
SystemContractInteractionTransaction(
requests=[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
),
]
),
]
],
[],
BlockException.INVALID_REQUESTS,
id="single_consolidation_request_empty_requests_list",
),
pytest.param(
[
[
SystemContractInteractionTransaction(
requests=[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
),
]
),
]
],
[
ConsolidationRequest(
source_pubkey=0x00,
target_pubkey=0x02,
source_address=TestAddress,
)
],
BlockException.INVALID_REQUESTS,
id="single_consolidation_request_source_public_key_mismatch",
),
pytest.param(
[
[
SystemContractInteractionTransaction(
requests=[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
),
]
),
]
],
[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x00,
source_address=TestAddress,
)
],
BlockException.INVALID_REQUESTS,
id="single_consolidation_request_target_public_key_mismatch",
),
pytest.param(
[
[
SystemContractInteractionTransaction(
requests=[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
),
]
),
]
],
[
ConsolidationRequest(
source_pubkey=0x02,
target_pubkey=0x01,
source_address=TestAddress,
)
],
BlockException.INVALID_REQUESTS,
id="single_consolidation_request_pubkeys_swapped",
),
pytest.param(
[
[
SystemContractInteractionTransaction(
requests=[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
)
],
),
]
],
[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
source_address=TestAddress2,
)
],
BlockException.INVALID_REQUESTS,
id="single_consolidation_request_source_address_mismatch",
),
pytest.param(
[
[
SystemContractInteractionTransaction(
requests=[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
),
ConsolidationRequest(
source_pubkey=0x03,
target_pubkey=0x04,
),
],
),
]
],
[
ConsolidationRequest(
source_pubkey=0x03,
target_pubkey=0x04,
source_address=TestAddress,
),
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
source_address=TestAddress,
),
],
BlockException.INVALID_REQUESTS,
id="two_consolidation_requests_out_of_order",
),
pytest.param(
[
[
SystemContractInteractionTransaction(
requests=[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
)
],
),
]
],
[
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
source_address=TestAddress,
),
ConsolidationRequest(
source_pubkey=0x01,
target_pubkey=0x02,
source_address=TestAddress,
),
],
BlockException.INVALID_REQUESTS,
id="single_consolidation_requests_duplicate_in_requests_list",
),
],
)
@pytest.mark.exception_test
def test_consolidation_requests_negative(
blockchain_test: BlockchainTestFiller,
override_blocks: List[Block],
pre: Alloc,
) -> None:
"""
Test blocks where the requests list and the actual consolidation requests
that happened in the block's transactions do not match.
"""
blockchain_test(pre=pre, post={}, blocks=override_blocks)