Files
dragonx/qa/cryptoconditions/test_integration.py
2018-02-19 15:16:14 -03:00

101 lines
3.0 KiB
Python

import sys
import time
import json
import logging
import binascii
from testsupport import *
@fanout_input(0)
def test_basic_spend(inp):
spend0 = {
'inputs': [inp],
"outputs": [
{"amount": 500, "script": {"condition": cond_alice}},
{"amount": 500, "script": {"address": notary_addr}}
]
}
spend0_txid = submit(sign(spend0))
spend1 = {
'inputs': [
{'txid': spend0_txid, 'idx': 0, 'script': {"fulfillment": cond_alice}},
{'txid': spend0_txid, 'idx': 1, 'script': {'address': notary_addr}}
],
'outputs': [{"amount": 1000, "script": {"address": notary_addr}}]
}
spend1_txid = submit(sign(spend1))
assert rpc.getrawtransaction(spend1_txid)
@fanout_input(1)
def test_fulfillment_wrong_signature(inp):
spend0 = {
'inputs': [inp],
"outputs": [{"amount": 1000, "script": {"condition": cond_bob}}]
}
spend0_txid = submit(sign(spend0))
spend1 = {
'inputs': [{'txid': spend0_txid, 'idx': 0, 'script': {"fulfillment": cond_alice}}],
'outputs': [{"amount": 1000, "script": {"address": notary_addr}}]
}
signed = sign(spend1)
# Set the correct pubkey, signature is wrong
signed['tx']['inputs'][0]['script']['fulfillment']['publicKey'] = bob_pk
try:
assert not submit(sign(spend1)), 'should raise an error'
except RPCError as e:
assert '16: mandatory-script-verify-flag-failed' in str(e), str(e)
@fanout_input(2)
def test_fulfillment_wrong_pubkey(inp):
spend0 = {
'inputs': [inp],
"outputs": [{"amount": 1000, "script": {"condition": cond_alice}}]
}
spend0_txid = submit(sign(spend0))
spend1 = {
'inputs': [{'txid': spend0_txid, 'idx': 0, 'script': {"fulfillment": cond_alice}}],
'outputs': [{"amount": 1000, "script": {"address": notary_addr}}]
}
signed = sign(spend1)
# Set the wrong pubkey, signature is correct
signed['tx']['inputs'][0]['script']['fulfillment']['publicKey'] = bob_pk
try:
assert not submit(signed), 'should raise an error'
except RPCError as e:
assert '16: mandatory-script-verify-flag-failed' in str(e), str(e)
@fanout_input(3)
def test_fulfillment_invalid_fulfillment(inp):
spend0 = {
'inputs': [inp],
"outputs": [{"amount": 1000, "script": {"condition": cond_alice}}]
}
spend0_txid = submit(sign(spend0))
# Create a valid script with an invalid fulfillment payload
script = binascii.hexlify(b"\007invalid").decode('utf-8')
spend1 = {
'inputs': [{'txid': spend0_txid, 'idx': 0, 'script': script}],
'outputs': [{"amount": 1000, "script": {"address": notary_addr}}]
}
try:
assert not submit({'tx': spend1}), 'should raise an error'
except RPCError as e:
assert 'Crypto-Condition payload is invalid' in str(e), str(e)
if __name__ == '__main__':
for name, f in globals().items():
if name.startswith('test_'):
logging.info("Running test: %s" % name)
f()