Here are the examples of the python api testing.mocks.stub.StubContext taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
81 Examples
3
Source : test_events.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_add_event_with_attributes_none():
"""
Case: add event to the stub context by type and attributes where the last is None.
Expect: even has been added to the events list with attributes is empty list ([]).
"""
event_type = 'transfer'
event_data = b'additional-information-about-the-event'
event_attributes = None
expected_event_attributes = []
stub_context = StubContext(inputs=[], outputs=[], initial_state={})
stub_context.add_event(event_type=event_type, attributes=event_attributes, data=event_data)
single_event = stub_context.events()[0]
assert expected_event_attributes == single_event._attributes
3
Source : test_get_state.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_get_state_not_input_address():
"""
Case: get state from stub context by addresses list with address isn't presented in inputs.
Expect: AuthorizationError is raised.
"""
requested_addresses = ['1120...0001', '1120...0003', '1120...0005']
stub_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(AuthorizationException) as error:
stub_context.get_state(addresses=requested_addresses)
assert f'Tried to get unauthorized address: {requested_addresses}' == str(error.value)
def test_get_state_address_data_none():
3
Source : test_set_state.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_set_state_not_output_address():
"""
Case: set state to the stub context by list of addresses-data as tuple with address isn't presented in outputs.
Expect: AuthorizationError is raised.
"""
requested_addresses = ['1120...0007']
requested_entries = {
'1120...0007': '700',
}
stub_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(AuthorizationException) as error:
stub_context.set_state(entries=requested_entries)
assert f'Tried to set unauthorized address: {requested_addresses}' == str(error.value)
0
Source : test_events.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_add_event():
"""
Case: add event to the stub context by type and attributes.
Expect: even has been added to the events list.
"""
event_type = 'transfer'
event_data = b'additional-information-about-the-event'
event_attributes = [
('batch_id', '71cd...f636'),
('amount', '100'),
]
expected_event = StubContextEvent(event_type=event_type, attributes=event_attributes, data=event_data)
stub_context = StubContext(inputs=[], outputs=[], initial_state={})
stub_context.add_event(event_type=event_type, attributes=event_attributes, data=event_data)
single_event = stub_context.events()[0]
assert expected_event._event_type == single_event._event_type
assert expected_event._attributes == single_event._attributes
assert expected_event._data == single_event._data
def test_add_event_with_attributes_none():
0
Source : test_get_state.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_get_state():
"""
Case: get state from stub context by addresses list.
Expect: list of StubContextTpStateEntry objects with addresses, that match requested addresses,
with its data as key-value tuple.
"""
initial_state = {
'1120...0001': '100',
'1120...0002': '200',
'1120...0003': '300',
}
requested_addresses = ['1120...0001', '1120...0003']
expected_state = [
StubContextTpStateEntry(address='1120...0001', data='100'),
StubContextTpStateEntry(address='1120...0003', data='300'),
]
stub_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state=initial_state)
stub_context_state = stub_context.get_state(addresses=requested_addresses)
for index in range(len(expected_state)):
assert expected_state[index].address == stub_context_state[index].address
assert expected_state[index].data == stub_context_state[index].data
def test_get_state_not_input_address():
0
Source : test_get_state.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_get_state_address_data_none():
"""
Case: get state from stub context by addresses list where some address data is None.
Expect: list of StubContextTpStateEntry objects with addresses, excluding one where data is None,
with its data as key-value tuple.
"""
requested_addresses = ['1120...0001', '1120...0003', '1120...0004']
expected_state = [
StubContextTpStateEntry(address='1120...0001', data='100'),
StubContextTpStateEntry(address='1120...0003', data='300'),
]
initial_state = {
'1120...0001': '100',
'1120...0002': '200',
'1120...0003': '300',
'1120...0004': None,
}
stub_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state=initial_state)
stub_context_state = stub_context.get_state(addresses=requested_addresses)
for index in range(len(expected_state)):
assert expected_state[index].address == stub_context_state[index].address
assert expected_state[index].data == stub_context_state[index].data
0
Source : test_set_state.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_set_state():
"""
Case: set state to the stub context by list of addresses-data as tuple.
Expect: list of addresses that were set.
"""
expected_result = ['1120...0006']
expected_state = {
'1120...0006': '1200',
}
requested_entries = {
'1120...0006': '1200',
}
stub_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
assert expected_result == stub_context.set_state(entries=requested_entries)
assert expected_state == stub_context.state
def test_set_state_not_output_address():
0
Source : test_genesis.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_account_handler_genesis_apply_with_empty_proto():
"""
Case: send transaction request of genesis with empty proto
Expect: invalid transaction error
"""
genesis_payload = GenesisPayload()
transaction_payload = TransactionPayload()
transaction_payload.method = AccountMethod.GENESIS
transaction_payload.data = genesis_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=NODE_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=NODE_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AccountHandler().apply(transaction=transaction_request, context=mock_context)
assert proto_error_msg(
GenesisPayload,
{'total_supply': ['This field is required.']}
) == str(error.value)
def test_account_handler_genesis_apply():
0
Source : test_genesis.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_account_handler_genesis_apply():
"""
Case: send transaction request, to send tokens from genesis address, to the account handler.
Expect:
"""
account = Account()
account.balance = TOKENS_AMOUNT_TO_SUPPLY
expected_serialized_account_to_balance = account.SerializeToString()
genesis_payload = GenesisPayload()
genesis_payload.total_supply = TOKENS_AMOUNT_TO_SUPPLY
transaction_payload = TransactionPayload()
transaction_payload.method = AccountMethod.GENESIS
transaction_payload.data = genesis_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=NODE_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=NODE_PRIVATE_KEY).sign(serialized_header),
)
genesis_status = GenesisStatus()
genesis_status.status = True
expected_state = {
GENESIS_ADDRESS: genesis_status.SerializeToString(),
ACCOUNT_ADDRESS_TO: expected_serialized_account_to_balance,
}
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
AccountHandler().apply(transaction=transaction_request, context=mock_context)
state_as_list = mock_context.get_state(addresses=[GENESIS_ADDRESS, ACCOUNT_ADDRESS_TO])
state_as_dict = {entry.address: entry.data for entry in state_as_list}
assert expected_state == state_as_dict
def test_account_handler_genesis_already_initialized():
0
Source : test_genesis.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_account_handler_genesis_already_initialized():
"""
Case: send transaction request, to send tokens from genesis address,
to the account handler when genesis was already initialized.
Expect: invalid transaction error is raised with genesis is already initialized error message.
"""
genesis_payload = GenesisPayload()
genesis_payload.total_supply = TOKENS_AMOUNT_TO_SUPPLY
transaction_payload = TransactionPayload()
transaction_payload.method = AccountMethod.GENESIS
transaction_payload.data = genesis_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=NODE_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=NODE_PRIVATE_KEY).sign(serialized_header),
)
genesis_status = GenesisStatus()
genesis_status.status = True
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
GENESIS_ADDRESS: genesis_status.SerializeToString()
})
with pytest.raises(InvalidTransaction) as error:
AccountHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Genesis is already initialized.' == str(error.value)
0
Source : test_transfer.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def create_context(account_from_balance, account_to_balance):
"""
Create stub context with initial data.
Stub context is an interface around Sawtooth state, consider as database.
State is key-value storage that contains address with its data (i.e. account balance).
References:
- https://github.com/Remmeauth/remme-core/blob/dev/testing/mocks/stub.py
"""
account_protobuf = Account()
account_protobuf.balance = account_from_balance
serialized_account_from_balance = account_protobuf.SerializeToString()
account_protobuf.balance = account_to_balance
serialized_account_to_balance = account_protobuf.SerializeToString()
initial_state = {
ACCOUNT_ADDRESS_FROM: serialized_account_from_balance,
ACCOUNT_ADDRESS_TO: serialized_account_to_balance,
}
return StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state=initial_state)
def test_account_handler_with_empty_proto():
0
Source : test_transfer.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_account_handler_with_empty_proto():
"""
Case: send transaction request with empty proto
Expect: invalid transaction error
"""
transfer_payload = TransferPayload()
transaction_payload = TransactionPayload()
transaction_payload.method = AccountMethod.TRANSFER
transaction_payload.data = transfer_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=RANDOM_NODE_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=ACCOUNT_FROM_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AccountHandler().apply(transaction=transaction_request, context=mock_context)
assert proto_error_msg(
TransferPayload,
{
'address_to': ['Missed address'],
'value': ['Could not transfer with zero amount.'],
}
) == str(error.value)
def test_account_handler_apply():
0
Source : test_transfer.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_account_transfer_from_address_without_previous_usage():
"""
Case: transfer tokens from address to address when them have never been used before.
Expect: invalid transaction error is raised with not enough transferable balance error message.
"""
initial_state = {
ACCOUNT_ADDRESS_FROM: None,
ACCOUNT_ADDRESS_TO: None,
}
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state=initial_state)
transfer_payload = TransferPayload()
transfer_payload.address_to = ACCOUNT_ADDRESS_TO
transfer_payload.value = TOKENS_AMOUNT_TO_SEND
transaction_payload = TransactionPayload()
transaction_payload.method = AccountMethod.TRANSFER
transaction_payload.data = transfer_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=RANDOM_NODE_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=ACCOUNT_FROM_PRIVATE_KEY).sign(serialized_header),
)
with pytest.raises(InvalidTransaction) as error:
AccountHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Not enough transferable balance. Sender\'s current balance: 0.' == str(error.value)
0
Source : test_approve.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_approve_with_empty_proto():
"""
Case: send empty proto for approve
Expect: invalid transaction error
"""
atomic_swap_init_payload = AtomicSwapApprovePayload()
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.APPROVE
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert proto_error_msg(
AtomicSwapApprovePayload,
{
'swap_id': ['Missed swap_id'],
}
) == str(error.value)
def test_approve_atomic_swap():
0
Source : test_approve.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_approve_atomic_swap():
"""
Case: approve atomic swap.
Expect: atomic swap state is changed to approved.
"""
atomic_swap_init_payload = AtomicSwapApprovePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.APPROVE
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
existing_swap_info = AtomicSwapInfo()
existing_swap_info.swap_id = SWAP_ID
existing_swap_info.state = AtomicSwapInfo.SECRET_LOCK_PROVIDED
existing_swap_info.sender_address = BOT_ADDRESS
existing_swap_info.secret_lock = SECRET_LOCK
existing_swap_info.is_initiator = True
serialized_existing_swap_info = existing_swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info,
})
expected_swap_info = AtomicSwapInfo()
expected_swap_info.swap_id = SWAP_ID
expected_swap_info.state = AtomicSwapInfo.APPROVED
expected_swap_info.sender_address = BOT_ADDRESS
expected_swap_info.secret_lock = SECRET_LOCK
expected_swap_info.is_initiator = True
serialized_expected_swap_info = expected_swap_info.SerializeToString()
expected_state = {
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_expected_swap_info,
}
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
state_as_list = mock_context.get_state(addresses=[ADDRESS_TO_STORE_SWAP_INFO_BY])
state_as_dict = {entry.address: entry.data for entry in state_as_list}
assert expected_state == state_as_dict
def test_approve_not_initialized_atomic_swap():
0
Source : test_approve.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_approve_not_initialized_atomic_swap():
"""
Case: approve not initialized atomic swap.
Expect: invalid transaction error is raised with atomic swap was not initiated error message.
"""
atomic_swap_approve_payload = AtomicSwapApprovePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.APPROVE
transaction_payload.data = atomic_swap_approve_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Atomic swap was not initiated for identifier {SWAP_ID}!' == str(error.value)
def test_approve_already_closed_atomic_swap():
0
Source : test_approve.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_approve_already_closed_atomic_swap():
"""
Case: to expire already closed atomic swap.
Expect: invalid transaction error is raised with already operation with closed or expired swap error message.
"""
atomic_swap_approve_payload = AtomicSwapApprovePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.APPROVE
transaction_payload.data = atomic_swap_approve_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
already_closed_swap_info = AtomicSwapInfo()
already_closed_swap_info.swap_id = SWAP_ID
already_closed_swap_info.state = AtomicSwapInfo.CLOSED
serialized_already_closed_swap_info = already_closed_swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_already_closed_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'No operations can be done upon the swap: {SWAP_ID} as it is already closed or expired.' == str(error.value)
def test_approve_atomic_swap_by_bot():
0
Source : test_approve.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_approve_atomic_swap_by_bot():
"""
Case: approve atomic swap by bot.
Expect: invalid transaction error is raised with only transaction initiator may approve the swap error message.
"""
atomic_swap_approve_payload = AtomicSwapApprovePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.APPROVE
transaction_payload.data = atomic_swap_approve_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
swap_info = AtomicSwapInfo()
swap_info.swap_id = SWAP_ID
swap_info.state = AtomicSwapInfo.OPENED
swap_info.amount = TOKENS_AMOUNT_TO_SWAP
swap_info.created_at = CURRENT_TIMESTAMP
swap_info.sender_address = ALICE_ADDRESS
swap_info.receiver_address = BOT_ADDRESS
swap_info.is_initiator = True
serialized_swap_info = swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Only transaction initiator (Alice) may approve the swap, once Bob provided a secret lock.' == \
str(error.value)
def test_approve_atomic_swap_without_secret_lock():
0
Source : test_approve.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_approve_atomic_swap_without_secret_lock():
"""
Case: approve atomic swap without set secret lock.
Expect: invalid transaction error is raised with only transaction initiator may approve the swap error message.
"""
atomic_swap_approve_payload = AtomicSwapApprovePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.APPROVE
transaction_payload.data = atomic_swap_approve_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
swap_info = AtomicSwapInfo()
swap_info.swap_id = SWAP_ID
swap_info.state = AtomicSwapInfo.OPENED
swap_info.amount = TOKENS_AMOUNT_TO_SWAP
swap_info.created_at = CURRENT_TIMESTAMP
swap_info.sender_address = BOT_ADDRESS
swap_info.receiver_address = ALICE_ADDRESS
swap_info.is_initiator = True
serialized_swap_info = swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert 'Secret lock is needed for Bob to provide a secret key.' == str(error.value)
def test_approve_atomic_swap_without_secret_lock_state():
0
Source : test_approve.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_approve_atomic_swap_without_secret_lock_state():
"""
Case: approve atomic swap without secret lock state.
Expect: invalid transaction error is raised with swap identifier is already closed error message.
"""
atomic_swap_approve_payload = AtomicSwapApprovePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.APPROVE
transaction_payload.data = atomic_swap_approve_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
swap_info = AtomicSwapInfo()
swap_info.swap_id = SWAP_ID
swap_info.state = AtomicSwapInfo.OPENED
swap_info.amount = TOKENS_AMOUNT_TO_SWAP
swap_info.created_at = CURRENT_TIMESTAMP
swap_info.sender_address = BOT_ADDRESS
swap_info.secret_lock = SECRET_LOCK
swap_info.receiver_address = ALICE_ADDRESS
swap_info.is_initiator = True
serialized_swap_info = swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Swap identifier {SWAP_ID} is already closed.' == str(error.value)
0
Source : test_close.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_close_with_empty_proto():
"""
Case: send empty proto for close
Expect: invalid transaction error
"""
atomic_swap_init_payload = AtomicSwapClosePayload()
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.CLOSE
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert proto_error_msg(
AtomicSwapClosePayload,
{
'swap_id': ['Missed swap_id'],
'secret_key': ['This field is required.'],
}
) == str(error.value)
def test_close_atomic_swap():
0
Source : test_close.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_close_atomic_swap():
"""
Case: close atomic swap.
Expect: increase Alice account address by swap amount.
"""
atomic_swap_close_payload = AtomicSwapClosePayload(
swap_id=SWAP_ID,
secret_key=SECRET_KEY,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.CLOSE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
alice_account = Account()
alice_account.balance = 0
serialized_alice_account = alice_account.SerializeToString()
existing_swap_info_to_close = AtomicSwapInfo()
existing_swap_info_to_close.swap_id = SWAP_ID
existing_swap_info_to_close.amount = 200
existing_swap_info_to_close.state = AtomicSwapInfo.APPROVED
existing_swap_info_to_close.secret_lock = SECRET_LOCK
existing_swap_info_to_close.is_initiator = True
existing_swap_info_to_close.sender_address = BOT_ADDRESS
existing_swap_info_to_close.receiver_address = ALICE_ADDRESS
serialized_existing_swap_info_to_lock = existing_swap_info_to_close.SerializeToString()
genesis_members_setting = Setting()
genesis_members_setting.entries.add(key=SETTINGS_KEY_ZERO_ADDRESS_OWNERS, value=f'{BOT_PUBLIC_KEY},')
serialized_genesis_members_setting = genesis_members_setting.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_GET_GENESIS_MEMBERS_AS_STRING_BY: serialized_genesis_members_setting,
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info_to_lock,
ALICE_ADDRESS: serialized_alice_account,
})
expected_alice_account = Account()
expected_alice_account.balance = TOKENS_AMOUNT_TO_SWAP
serialized_expected_alice_account = expected_alice_account.SerializeToString()
expected_closed_swap_info = AtomicSwapInfo()
expected_closed_swap_info.swap_id = SWAP_ID
expected_closed_swap_info.amount = 200
expected_closed_swap_info.state = AtomicSwapInfo.CLOSED
expected_closed_swap_info.secret_lock = SECRET_LOCK
expected_closed_swap_info.secret_key = SECRET_KEY
expected_closed_swap_info.is_initiator = True
expected_closed_swap_info.sender_address = BOT_ADDRESS
expected_closed_swap_info.receiver_address = ALICE_ADDRESS
serialized_expected_closed_swap_info = expected_closed_swap_info.SerializeToString()
expected_state = {
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_expected_closed_swap_info,
ALICE_ADDRESS: serialized_expected_alice_account,
}
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
state_as_list = mock_context.get_state(addresses=[ADDRESS_TO_STORE_SWAP_INFO_BY, ALICE_ADDRESS])
state_as_dict = {entry.address: entry.data for entry in state_as_list}
assert expected_state == state_as_dict
def test_close_not_initialized_atomic_swap():
0
Source : test_close.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_close_not_initialized_atomic_swap():
"""
Case: close not initialized atomic swap.
Expect: invalid transaction error is raised with atomic swap was not initiated error message.
"""
atomic_swap_close_payload = AtomicSwapClosePayload(
swap_id=SWAP_ID,
secret_key=SECRET_KEY,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.CLOSE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Atomic swap was not initiated for identifier {SWAP_ID}!' == str(error.value)
def test_close_already_closed_atomic_swap():
0
Source : test_close.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_close_already_closed_atomic_swap():
"""
Case: close already closed atomic swap.
Expect: invalid transaction error is raised with already operation with closed or expired swap error message.
"""
atomic_swap_close_payload = AtomicSwapClosePayload(
swap_id=SWAP_ID,
secret_key=SECRET_KEY,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.CLOSE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
already_closed_swap_info = AtomicSwapInfo()
already_closed_swap_info.swap_id = SWAP_ID
already_closed_swap_info.state = AtomicSwapInfo.CLOSED
serialized_already_closed_swap_info = already_closed_swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_already_closed_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'No operations can be done upon the swap: {SWAP_ID} as it is already closed or expired.' == str(error.value)
def test_close_atomic_swap_without_secret_lock():
0
Source : test_close.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_close_atomic_swap_without_secret_lock():
"""
Case: close swap without secret key.
Expect: invalid transaction error is raised with secret lock is required to close the swap error message.
"""
atomic_swap_close_payload = AtomicSwapClosePayload(
swap_id=SWAP_ID,
secret_key=SECRET_KEY,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.CLOSE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
existing_swap_info_to_close = AtomicSwapInfo()
existing_swap_info_to_close.swap_id = SWAP_ID
existing_swap_info_to_close.state = AtomicSwapInfo.OPENED
serialized_existing_swap_info_to_lock = existing_swap_info_to_close.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info_to_lock,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert 'Secret lock is required to close the swap.' == str(error.value)
def test_close_atomic_swap_with_false_secret_key():
0
Source : test_close.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_close_atomic_swap_with_false_secret_key():
"""
Case: close swap with false secret key.
Expect: invalid transaction error is raised with secret key does not match specified secret lock error message.
"""
atomic_swap_close_payload = AtomicSwapClosePayload(
swap_id=SWAP_ID,
secret_key=FALSE_SECRET_KEY,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.CLOSE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
existing_swap_info_to_close = AtomicSwapInfo()
existing_swap_info_to_close.swap_id = SWAP_ID
existing_swap_info_to_close.state = AtomicSwapInfo.OPENED
existing_swap_info_to_close.secret_lock = SECRET_LOCK
serialized_existing_swap_info_to_lock = existing_swap_info_to_close.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info_to_lock,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert 'Secret key doesn\'t match specified secret lock.' == str(error.value)
def test_close_atomic_swap_before_approve():
0
Source : test_close.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_close_atomic_swap_before_approve():
"""
Case: close swap before it is approved.
Expect: invalid transaction error is raised with transaction cannot be closed before it is approved error message.
"""
atomic_swap_close_payload = AtomicSwapClosePayload(
swap_id=SWAP_ID,
secret_key=SECRET_KEY,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.CLOSE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
existing_swap_info_to_close = AtomicSwapInfo()
existing_swap_info_to_close.swap_id = SWAP_ID
existing_swap_info_to_close.state = AtomicSwapInfo.OPENED
existing_swap_info_to_close.secret_lock = SECRET_LOCK
existing_swap_info_to_close.is_initiator = True
serialized_existing_swap_info_to_lock = existing_swap_info_to_close.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info_to_lock,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert 'Transaction cannot be closed before it\'s approved.' == str(error.value)
0
Source : test_expire.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_expire_with_empty_proto():
"""
Case: send empty proto for expire
Expect: invalid transaction error
"""
atomic_swap_init_payload = AtomicSwapExpirePayload()
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.EXPIRE
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert proto_error_msg(
AtomicSwapExpirePayload,
{
'swap_id': ['Missed swap_id'],
}
) == str(error.value)
def test_expire_atomic_swap():
0
Source : test_expire.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_expire_atomic_swap():
"""
Case: to expire atomic swap.
Expect: increase bot address balance by swap amount. Leave commission on zero address.
"""
atomic_swap_expire_payload = AtomicSwapExpirePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.EXPIRE
transaction_payload.data = atomic_swap_expire_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
bot_account = Account()
bot_account.balance = 4700
serialized_bot_account = bot_account.SerializeToString()
genesis_members_setting = Setting()
genesis_members_setting.entries.add(key=SETTINGS_KEY_ZERO_ADDRESS_OWNERS, value=f'{BOT_PUBLIC_KEY},')
serialized_genesis_members_setting = genesis_members_setting.SerializeToString()
existing_swap_info = AtomicSwapInfo()
existing_swap_info.swap_id = SWAP_ID
existing_swap_info.state = AtomicSwapInfo.OPENED
existing_swap_info.amount = TOKENS_AMOUNT_TO_SWAP
existing_swap_info.created_at = CURRENT_TIMESTAMP // 2
existing_swap_info.sender_address = BOT_ADDRESS
existing_swap_info.receiver_address = ALICE_ADDRESS
existing_swap_info.is_initiator = True
serialized_existing_swap_info = existing_swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
BLOCK_INFO_ADDRESS: SERIALIZED_BLOCK_INFO,
BOT_ADDRESS: serialized_bot_account,
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info,
ADDRESS_TO_GET_GENESIS_MEMBERS_AS_STRING_BY: serialized_genesis_members_setting,
})
expected_bot_account = Account()
expected_bot_account.balance = 4700 + TOKENS_AMOUNT_TO_SWAP
serialized_expected_bot_account = expected_bot_account.SerializeToString()
expected_swap_info = AtomicSwapInfo()
expected_swap_info.swap_id = SWAP_ID
expected_swap_info.state = AtomicSwapInfo.EXPIRED
expected_swap_info.amount = TOKENS_AMOUNT_TO_SWAP
expected_swap_info.created_at = CURRENT_TIMESTAMP // 2
expected_swap_info.sender_address = BOT_ADDRESS
expected_swap_info.receiver_address = ALICE_ADDRESS
expected_swap_info.is_initiator = True
serialized_expected_swap_info = expected_swap_info.SerializeToString()
expected_state = {
BOT_ADDRESS: serialized_expected_bot_account,
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_expected_swap_info,
}
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
state_as_list = mock_context.get_state(addresses=[
ADDRESS_TO_STORE_SWAP_INFO_BY, BOT_ADDRESS,
])
state_as_dict = {entry.address: entry.data for entry in state_as_list}
assert expected_state == state_as_dict
def test_expire_not_initialized_atomic_swap():
0
Source : test_expire.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_expire_not_initialized_atomic_swap():
"""
Case: to expire not initialized atomic swap.
Expect: invalid transaction error is raised with atomic swap was not initiated error message.
"""
atomic_swap_close_payload = AtomicSwapClosePayload(
swap_id=SWAP_ID,
secret_key=SECRET_KEY
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.CLOSE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Atomic swap was not initiated for identifier {SWAP_ID}!' == str(error.value)
def test_expire_already_closed_atomic_swap():
0
Source : test_expire.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_expire_already_closed_atomic_swap():
"""
Case: to expire already closed atomic swap.
Expect: invalid transaction error is raised with already operation with closed or expired swap error message.
"""
atomic_swap_close_payload = AtomicSwapClosePayload(
swap_id=SWAP_ID,
secret_key=SECRET_KEY
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.CLOSE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
already_closed_swap_info = AtomicSwapInfo()
already_closed_swap_info.swap_id = SWAP_ID
already_closed_swap_info.state = AtomicSwapInfo.CLOSED
serialized_already_closed_swap_info = already_closed_swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_already_closed_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'No operations can be done upon the swap: {SWAP_ID} as it is already closed or expired.' == str(error.value)
def test_expire_atomic_swap_by_not_swap_owner():
0
Source : test_expire.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_expire_atomic_swap_by_not_swap_owner():
"""
Case: to expire atomic swap by signer address isn't specified in atomic swap sender address.
Expect: invalid transaction error is raised with signer is not the one who opened the swap. error message.
"""
atomic_swap_close_payload = AtomicSwapExpirePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.EXPIRE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
existing_swap_info_to_expire = AtomicSwapInfo()
existing_swap_info_to_expire.swap_id = SWAP_ID
existing_swap_info_to_expire.state = AtomicSwapInfo.OPENED
existing_swap_info_to_expire.sender_address = RANDOM_ADDRESS
serialized_existing_swap_info_to_expire = existing_swap_info_to_expire.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info_to_expire,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Signer is not the one who opened the swap.' == str(error.value)
def test_expire_atomic_swap_before_invalid_withdrawal_by_alice():
0
Source : test_expire.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_expire_atomic_swap_before_invalid_withdrawal_by_alice():
"""
Case: to expire atomic swap by alice if 24 hasn't been passed from atomic swap initialization timestamp.
Expect: invalid transaction error is raised with signer is not the one who opened the swap. error message.
"""
atomic_swap_close_payload = AtomicSwapExpirePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.EXPIRE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=ALICE_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=ALICE_PRIVATE_KEY).sign(serialized_header),
)
mock_context_for_blocks = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
BLOCK_INFO_ADDRESS: SERIALIZED_BLOCK_INFO,
})
existing_swap_info_to_expire = AtomicSwapInfo()
existing_swap_info_to_expire.swap_id = SWAP_ID
existing_swap_info_to_expire.state = AtomicSwapInfo.OPENED
existing_swap_info_to_expire.sender_address = ALICE_ADDRESS
existing_swap_info_to_expire.created_at = CURRENT_TIMESTAMP
existing_swap_info_to_expire.is_initiator = False
serialized_existing_swap_info_to_expire = existing_swap_info_to_expire.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info_to_expire,
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
BLOCK_INFO_ADDRESS: SERIALIZED_BLOCK_INFO,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Swap non initiator needs to wait 48 hours since timestamp {CURRENT_TIMESTAMP} to withdraw.' == \
str(error.value)
def test_expire_atomic_swap_before_invalid_withdrawal_by_bot():
0
Source : test_expire.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_expire_atomic_swap_before_invalid_withdrawal_by_bot():
"""
Case: to expire atomic swap by bot if 48 hasn't been passed from atomic swap initialization timestamp.
Expect: invalid transaction error is raised with signer is not the one who opened the swap. error message.
"""
atomic_swap_close_payload = AtomicSwapExpirePayload(
swap_id=SWAP_ID,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.EXPIRE
transaction_payload.data = atomic_swap_close_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
existing_swap_info_to_expire = AtomicSwapInfo()
existing_swap_info_to_expire.swap_id = SWAP_ID
existing_swap_info_to_expire.state = AtomicSwapInfo.OPENED
existing_swap_info_to_expire.sender_address = BOT_ADDRESS
existing_swap_info_to_expire.created_at = CURRENT_TIMESTAMP
existing_swap_info_to_expire.is_initiator = True
serialized_existing_swap_info_to_expire = existing_swap_info_to_expire.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info_to_expire,
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
BLOCK_INFO_ADDRESS: SERIALIZED_BLOCK_INFO,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Swap initiator needs to wait 24 hours since timestamp {CURRENT_TIMESTAMP} to withdraw.' == \
str(error.value)
0
Source : test_init.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_init_with_empty_proto():
"""
Case: send empty proto for init
Expect: invalid transaction error
"""
inputs = outputs = [
ADDRESS_TO_GET_SWAP_COMMISSION_AMOUNT_BY,
BLOCK_INFO_CONFIG_ADDRESS,
BLOCK_INFO_ADDRESS,
BOT_ADDRESS,
ZERO_ADDRESS,
ADDRESS_TO_STORE_SWAP_INFO_BY,
ADDRESS_TO_GET_GENESIS_MEMBERS_AS_STRING_BY,
]
atomic_swap_init_payload = AtomicSwapInitPayload()
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.INIT
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=inputs,
outputs=outputs,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=inputs, outputs=outputs, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert proto_error_msg(
AtomicSwapInitPayload,
{
'receiver_address': ['Missed address'],
'sender_address_non_local': ['This field is required.'],
'amount': ['This field is required.'],
'swap_id': ['Missed swap_id'],
'created_at': ['This field is required.'],
}
) == str(error.value)
def test_atomic_swap_init():
0
Source : test_init.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_init():
"""
Case: initialize swap of bot's Remme node tokens to Alice's ERC20 Remme tokens.
Expect: bot sends commission to the zero account address, swap amount is decreased from bot account.
"""
atomic_swap_init_payload = AtomicSwapInitPayload(
receiver_address=ALICE_ADDRESS,
sender_address_non_local=BOT_ETHEREUM_ADDRESS,
amount=TOKENS_AMOUNT_TO_SWAP,
swap_id=SWAP_ID,
secret_lock_by_solicitor=BOT_IT_IS_INITIATOR_MARK,
email_address_encrypted_by_initiator=ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR,
created_at=CURRENT_TIMESTAMP,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.INIT
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
bot_account = Account()
bot_account.balance = 5000
serialized_bot_account = bot_account.SerializeToString()
zero_account = Account()
zero_account.balance = 0
serialized_zero_account = zero_account.SerializeToString()
swap_commission_setting = Setting()
swap_commission_setting.entries.add(key=SETTINGS_SWAP_COMMISSION, value=str(SWAP_COMMISSION_AMOUNT))
serialized_swap_commission_setting = swap_commission_setting.SerializeToString()
genesis_members_setting = Setting()
genesis_members_setting.entries.add(key=SETTINGS_KEY_ZERO_ADDRESS_OWNERS, value=f'{BOT_PUBLIC_KEY},')
serialized_genesis_members_setting = genesis_members_setting.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
BLOCK_INFO_ADDRESS: SERIALIZED_BLOCK_INFO,
BOT_ADDRESS: serialized_bot_account,
ZERO_ADDRESS: serialized_zero_account,
ADDRESS_TO_GET_SWAP_COMMISSION_AMOUNT_BY: serialized_swap_commission_setting,
ADDRESS_TO_GET_GENESIS_MEMBERS_AS_STRING_BY: serialized_genesis_members_setting,
})
swap_info = AtomicSwapInfo()
swap_info.swap_id = SWAP_ID
swap_info.state = AtomicSwapInfo.OPENED
swap_info.amount = TOKENS_AMOUNT_TO_SWAP
swap_info.created_at = CURRENT_TIMESTAMP
swap_info.email_address_encrypted_optional = ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR
swap_info.sender_address = BOT_ADDRESS
swap_info.sender_address_non_local = BOT_ETHEREUM_ADDRESS
swap_info.receiver_address = ALICE_ADDRESS
swap_info.is_initiator = True
serialized_swap_info = swap_info.SerializeToString()
expected_bot_account = Account()
expected_bot_account.balance = 5000 - TOKENS_AMOUNT_TO_SWAP - SWAP_COMMISSION_AMOUNT
serialized_expected_bot_account = expected_bot_account.SerializeToString()
expected_zero_account = Account()
expected_zero_account.balance = SWAP_COMMISSION_AMOUNT
serialized_expected_zero_account = expected_zero_account.SerializeToString()
expected_state = {
BOT_ADDRESS: serialized_expected_bot_account,
ZERO_ADDRESS: serialized_expected_zero_account,
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_swap_info,
}
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
state_as_list = mock_context.get_state(addresses=[
ADDRESS_TO_STORE_SWAP_INFO_BY, BOT_ADDRESS, ZERO_ADDRESS,
])
state_as_dict = {entry.address: entry.data for entry in state_as_list}
assert expected_state == state_as_dict
def test_atomic_swap_init_already_taken_id():
0
Source : test_init.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_init_already_taken_id():
"""
Case: initialize swap of bot's Remme node tokens to Alice's ERC20 Remme tokens with already existing swap id.
Expect: invalid transaction error is raised with atomic swap id has already been taken error message.
"""
atomic_swap_init_payload = AtomicSwapInitPayload(
receiver_address=ALICE_ADDRESS,
sender_address_non_local=BOT_ETHEREUM_ADDRESS,
amount=TOKENS_AMOUNT_TO_SWAP,
swap_id=SWAP_ID,
secret_lock_by_solicitor=BOT_IT_IS_INITIATOR_MARK,
email_address_encrypted_by_initiator=ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR,
created_at=CURRENT_TIMESTAMP,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.INIT
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
swap_info = AtomicSwapInfo()
swap_info.swap_id = SWAP_ID
swap_info.state = AtomicSwapInfo.OPENED
swap_info.amount = TOKENS_AMOUNT_TO_SWAP
swap_info.created_at = CURRENT_TIMESTAMP
swap_info.email_address_encrypted_optional = ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR
swap_info.sender_address = BOT_ADDRESS
swap_info.sender_address_non_local = BOT_ETHEREUM_ADDRESS
swap_info.receiver_address = ALICE_ADDRESS
serialized_swap_info = swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert 'Atomic swap ID has already been taken, please use a different one.' == str(error.value)
def test_atomic_swap_init_swap_no_block_config_info():
0
Source : test_init.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_init_swap_no_block_config_info():
"""
Case: initialize swap of bot's Remme node tokens to Alice's ERC20 Remme tokens when no block config settings.
Expect: invalid transaction error is raised with nlock config not found error message.
"""
atomic_swap_init_payload = AtomicSwapInitPayload(
receiver_address=ALICE_ADDRESS,
sender_address_non_local=BOT_ETHEREUM_ADDRESS,
amount=TOKENS_AMOUNT_TO_SWAP,
swap_id=SWAP_ID,
secret_lock_by_solicitor=BOT_IT_IS_INITIATOR_MARK,
email_address_encrypted_by_initiator=ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR,
created_at=CURRENT_TIMESTAMP,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.INIT
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert 'Block config not found.' == str(error.value)
def test_atomic_swap_init_swap_no_block_info():
0
Source : test_init.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_init_swap_no_block_info():
"""
Case: initialize swap of bot's Remme node tokens to Alice's ERC20 Remme tokens when no needed block information.
Expect: invalid transaction error is raised with nlock config not found error message.
"""
atomic_swap_init_payload = AtomicSwapInitPayload(
receiver_address=ALICE_ADDRESS,
sender_address_non_local=BOT_ETHEREUM_ADDRESS,
amount=TOKENS_AMOUNT_TO_SWAP,
swap_id=SWAP_ID,
secret_lock_by_solicitor=BOT_IT_IS_INITIATOR_MARK,
email_address_encrypted_by_initiator=ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR,
created_at=CURRENT_TIMESTAMP,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.INIT
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Block {block_info_config.latest_block + 1} not found.' == str(error.value)
def test_atomic_swap_init_swap_receiver_address_invalid_type():
0
Source : test_init.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_init_swap_receiver_address_invalid_type():
"""
Case: initialize swap of bot's Remme node tokens to Alice's ERC20 Remme tokens with invalid Alice node address.
Expect: invalid transaction error is raised with atomic swap id has already been taken error message.
"""
invalid_receiver_address = '112934y*(J#QJ3UH*PD(:9B&TYDB*I0b0a8edc4104ef28093ee30'
atomic_swap_init_payload = AtomicSwapInitPayload(
receiver_address=invalid_receiver_address,
sender_address_non_local=BOT_ETHEREUM_ADDRESS,
amount=TOKENS_AMOUNT_TO_SWAP,
swap_id=SWAP_ID,
secret_lock_by_solicitor=BOT_IT_IS_INITIATOR_MARK,
email_address_encrypted_by_initiator=ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR,
created_at=CURRENT_TIMESTAMP,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.INIT
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
BLOCK_INFO_ADDRESS: SERIALIZED_BLOCK_INFO,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert proto_error_msg(
AtomicSwapInitPayload,
{'receiver_address': ['Address is not of a blockchain token type.']}
) == str(error.value)
def test_atomic_swap_init_swap_wrong_commission_address():
0
Source : test_init.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_init_swap_wrong_commission_address():
"""
Case: initialize swap of bot's Remme node tokens to Alice's ERC20 Remme tokens with wrong commission settings.
Expect: invalid transaction error is raised with wrong commission address error message.
"""
atomic_swap_init_payload = AtomicSwapInitPayload(
receiver_address=ALICE_ADDRESS,
sender_address_non_local=BOT_ETHEREUM_ADDRESS,
amount=TOKENS_AMOUNT_TO_SWAP,
swap_id=SWAP_ID,
secret_lock_by_solicitor=BOT_IT_IS_INITIATOR_MARK,
email_address_encrypted_by_initiator=ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR,
created_at=CURRENT_TIMESTAMP,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.INIT
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
swap_commission_setting = Setting()
swap_commission_setting.entries.add(key=SETTINGS_SWAP_COMMISSION, value='-1')
serialized_swap_commission_setting = swap_commission_setting.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
BLOCK_INFO_ADDRESS: SERIALIZED_BLOCK_INFO,
ADDRESS_TO_GET_SWAP_COMMISSION_AMOUNT_BY: serialized_swap_commission_setting,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert 'Wrong commission address.' == str(error.value)
def test_atomic_swap_init_swap_no_account_in_state():
0
Source : test_init.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_init_swap_no_account_in_state():
"""
Case: initialize swap of bot's Remme node tokens to Alice's ERC20 Remme tokens from non-existent bot address.
Expect: invalid transaction error is raised with not enough balance error message.
"""
atomic_swap_init_payload = AtomicSwapInitPayload(
receiver_address=ALICE_ADDRESS,
sender_address_non_local=BOT_ETHEREUM_ADDRESS,
amount=TOKENS_AMOUNT_TO_SWAP,
swap_id=SWAP_ID,
secret_lock_by_solicitor=BOT_IT_IS_INITIATOR_MARK,
email_address_encrypted_by_initiator=ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR,
created_at=CURRENT_TIMESTAMP,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.INIT
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
swap_commission_setting = Setting()
swap_commission_setting.entries.add(key=SETTINGS_SWAP_COMMISSION, value=str(SWAP_COMMISSION_AMOUNT))
serialized_swap_commission_setting = swap_commission_setting.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
BLOCK_INFO_ADDRESS: SERIALIZED_BLOCK_INFO,
ADDRESS_TO_GET_SWAP_COMMISSION_AMOUNT_BY: serialized_swap_commission_setting,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
total_amount = TOKENS_AMOUNT_TO_SWAP + SWAP_COMMISSION_AMOUNT
assert f'Not enough balance to perform the transaction in the amount (with a commission) {total_amount}.' \
== str(error.value)
def test_atomic_swap_init_swap_not_enough_balance():
0
Source : test_init.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_init_swap_not_enough_balance():
"""
Case: initialize swap of bot's Remme node tokens to Alice's ERC20 Remme tokens with not enough bot address balance.
Expect: invalid transaction error is raised with not enough balance error message.
"""
atomic_swap_init_payload = AtomicSwapInitPayload(
receiver_address=ALICE_ADDRESS,
sender_address_non_local=BOT_ETHEREUM_ADDRESS,
amount=TOKENS_AMOUNT_TO_SWAP,
swap_id=SWAP_ID,
secret_lock_by_solicitor=BOT_IT_IS_INITIATOR_MARK,
email_address_encrypted_by_initiator=ALICE_EMAIL_ADDRESS_ENCRYPTED_BY_INITIATOR,
created_at=CURRENT_TIMESTAMP,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.INIT
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
bot_account = Account()
bot_account.balance = 0
serialized_bot_account_balance = bot_account.SerializeToString()
swap_commission_setting = Setting()
swap_commission_setting.entries.add(key=SETTINGS_SWAP_COMMISSION, value=str(SWAP_COMMISSION_AMOUNT))
serialized_swap_commission_setting = swap_commission_setting.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
BLOCK_INFO_CONFIG_ADDRESS: SERIALIZED_BLOCK_INFO_CONFIG,
BLOCK_INFO_ADDRESS: SERIALIZED_BLOCK_INFO,
BOT_ADDRESS: serialized_bot_account_balance,
ADDRESS_TO_GET_SWAP_COMMISSION_AMOUNT_BY: serialized_swap_commission_setting,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
total_amount = TOKENS_AMOUNT_TO_SWAP + SWAP_COMMISSION_AMOUNT
assert f'Not enough balance to perform the transaction in the amount (with a commission) {total_amount}.' \
== str(error.value)
0
Source : test_set_lock.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_set_lock_with_empty_proto():
"""
Case: send empty proto for set lock
Expect: invalid transaction error
"""
atomic_swap_init_payload = AtomicSwapSetSecretLockPayload()
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.SET_SECRET_LOCK
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert proto_error_msg(
AtomicSwapSetSecretLockPayload,
{
'swap_id': ['Missed swap_id'],
'secret_lock': ['This field is required.'],
}
) == str(error.value)
def test_set_lock_to_atomic_swa():
0
Source : test_set_lock.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_set_lock_to_atomic_swa():
"""
Case: set secret lock to atomic swap.
Expect: secret lock has been set, swap status changed to secret lock is provided.
"""
atomic_swap_init_payload = AtomicSwapSetSecretLockPayload(
swap_id=SWAP_ID,
secret_lock=SECRET_LOCK,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.SET_SECRET_LOCK
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
existing_swap_info_to_lock = AtomicSwapInfo()
existing_swap_info_to_lock.swap_id = SWAP_ID
existing_swap_info_to_lock.state = AtomicSwapInfo.OPENED
serialized_existing_swap_info_to_lock = existing_swap_info_to_lock.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_existing_swap_info_to_lock,
})
expected_swap_info = AtomicSwapInfo()
expected_swap_info.swap_id = SWAP_ID
expected_swap_info.state = AtomicSwapInfo.SECRET_LOCK_PROVIDED
expected_swap_info.secret_lock = SECRET_LOCK
serialized_expected_swap_info = expected_swap_info.SerializeToString()
expected_state = {
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_expected_swap_info,
}
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
state_as_list = mock_context.get_state(addresses=[ADDRESS_TO_STORE_SWAP_INFO_BY])
state_as_dict = {entry.address: entry.data for entry in state_as_list}
assert expected_state == state_as_dict
def test_set_lock_to_not_initialized_atomic_swap():
0
Source : test_set_lock.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_set_lock_to_not_initialized_atomic_swap():
"""
Case: set secret lock to not initialized swap.
Expect: invalid transaction error is raised with swap was not initiated error message.
"""
atomic_swap_init_payload = AtomicSwapSetSecretLockPayload(
swap_id=SWAP_ID,
secret_lock=SECRET_LOCK,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.SET_SECRET_LOCK
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Atomic swap was not initiated for identifier {SWAP_ID}!' == str(error.value)
def test_set_lock_to_already_closed_atomic_swap():
0
Source : test_set_lock.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_set_lock_to_already_closed_atomic_swap():
"""
Case: set secret lock to already closed atomic swap.
Expect: invalid transaction error is raised with already operation with closed or expired swap error message.
"""
atomic_swap_init_payload = AtomicSwapSetSecretLockPayload(
swap_id=SWAP_ID,
secret_lock=SECRET_LOCK,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.SET_SECRET_LOCK
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
already_set_lock_swap_info = AtomicSwapInfo()
already_set_lock_swap_info.swap_id = SWAP_ID
already_set_lock_swap_info.state = AtomicSwapInfo.CLOSED
serialized_already_set_lock_swap_info = already_set_lock_swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_already_set_lock_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'No operations can be done upon the swap: {SWAP_ID} as it is already closed or expired.' == str(error.value)
def test_atomic_swap_already_expired_swap():
0
Source : test_set_lock.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_atomic_swap_already_expired_swap():
"""
Case: set secret lock to already expired atomic swap.
Expect: invalid transaction error is raised with already operation with closed or expired swap error message.
"""
atomic_swap_init_payload = AtomicSwapSetSecretLockPayload(
swap_id=SWAP_ID,
secret_lock=SECRET_LOCK,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.SET_SECRET_LOCK
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
already_set_lock_swap_info = AtomicSwapInfo()
already_set_lock_swap_info.swap_id = SWAP_ID
already_set_lock_swap_info.state = AtomicSwapInfo.EXPIRED
serialized_already_set_lock_swap_info = already_set_lock_swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_already_set_lock_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'No operations can be done upon the swap: {SWAP_ID} as it is already closed or expired.' == str(error.value)
def test_set_lock_to_atomic_swap_with_set_lock():
0
Source : test_set_lock.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_set_lock_to_atomic_swap_with_set_lock():
"""
Case: set secret lock to atomic swap with already set secret lock.
Expect: invalid transaction error is raised with secret lock is already added error message.
"""
atomic_swap_init_payload = AtomicSwapSetSecretLockPayload(
swap_id=SWAP_ID,
secret_lock=SECRET_LOCK,
)
transaction_payload = TransactionPayload()
transaction_payload.method = AtomicSwapMethod.SET_SECRET_LOCK
transaction_payload.data = atomic_swap_init_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = TransactionHeader(
signer_public_key=BOT_PUBLIC_KEY,
family_name=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_name'),
family_version=TRANSACTION_REQUEST_ACCOUNT_HANDLER_PARAMS.get('family_version'),
inputs=INPUTS,
outputs=OUTPUTS,
dependencies=[],
payload_sha512=hash512(data=serialized_transaction_payload),
batcher_public_key=RANDOM_NODE_PUBLIC_KEY,
nonce=time.time().hex().encode(),
)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=BOT_PRIVATE_KEY).sign(serialized_header),
)
already_set_lock_swap_info = AtomicSwapInfo()
already_set_lock_swap_info.swap_id = SWAP_ID
already_set_lock_swap_info.state = AtomicSwapInfo.OPENED
already_set_lock_swap_info.secret_lock = SECRET_LOCK
serialized_already_set_lock_swap_info = already_set_lock_swap_info.SerializeToString()
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={
ADDRESS_TO_STORE_SWAP_INFO_BY: serialized_already_set_lock_swap_info,
})
with pytest.raises(InvalidTransaction) as error:
AtomicSwapHandler().apply(transaction=transaction_request, context=mock_context)
assert f'Secret lock is already added for {SWAP_ID}.' == str(error.value)
0
Source : test_revoke.py
with Apache License 2.0
from Remmeauth
with Apache License 2.0
from Remmeauth
def test_public_key_handler_revoke_with_empty_proto():
"""
Case: send transaction request to revoke another ownder certificate public key with empty proto
Expect: invalid transaction error
"""
revoke_public_key_payload = RevokePubKeyPayload()
transaction_payload = TransactionPayload()
transaction_payload.method = PubKeyMethod.REVOKE
transaction_payload.data = revoke_public_key_payload.SerializeToString()
serialized_transaction_payload = transaction_payload.SerializeToString()
transaction_header = generate_header(serialized_transaction_payload, INPUTS, OUTPUTS)
serialized_header = transaction_header.SerializeToString()
transaction_request = TpProcessRequest(
header=transaction_header,
payload=serialized_transaction_payload,
signature=create_signer(private_key=SENDER_PRIVATE_KEY).sign(serialized_header),
)
mock_context = StubContext(inputs=INPUTS, outputs=OUTPUTS, initial_state={})
with pytest.raises(InvalidTransaction) as error:
PubKeyHandler().apply(transaction=transaction_request, context=mock_context)
assert proto_error_msg(
RevokePubKeyPayload,
{'address': ['Missed address']}
) == str(error.value)
def test_public_key_handler_revoke():
See More Examples