2021-10-08 18:39:22 +02:00
|
|
|
# standard imports
|
|
|
|
import logging
|
2021-10-09 00:48:20 +02:00
|
|
|
import os
|
2021-10-09 13:22:14 +02:00
|
|
|
import uuid
|
|
|
|
import time
|
2021-10-09 14:18:10 +02:00
|
|
|
import mmap
|
2021-10-09 00:48:20 +02:00
|
|
|
|
|
|
|
# external imports
|
2021-10-09 13:22:14 +02:00
|
|
|
import celery
|
2021-10-09 00:48:20 +02:00
|
|
|
import pytest
|
|
|
|
from hexathon import (
|
|
|
|
strip_0x,
|
|
|
|
uniform as hex_uniform,
|
|
|
|
)
|
2021-10-08 18:39:22 +02:00
|
|
|
|
2021-05-31 17:34:16 +02:00
|
|
|
# local imports
|
|
|
|
from cic_eth.api.api_task import Api
|
|
|
|
from cic_eth.task import BaseTask
|
2021-10-09 00:48:20 +02:00
|
|
|
from cic_eth.error import TrustError
|
|
|
|
from cic_eth.encode import tx_normalize
|
2021-10-09 13:22:14 +02:00
|
|
|
from cic_eth.pytest.mock.callback import CallbackTask
|
2021-05-31 17:34:16 +02:00
|
|
|
|
2021-10-08 18:39:22 +02:00
|
|
|
logg = logging.getLogger()
|
|
|
|
|
|
|
|
|
2021-05-31 17:34:16 +02:00
|
|
|
def test_default_token(
|
|
|
|
default_chain_spec,
|
|
|
|
foo_token,
|
|
|
|
default_token,
|
|
|
|
token_registry,
|
|
|
|
register_tokens,
|
|
|
|
register_lookups,
|
|
|
|
cic_registry,
|
|
|
|
celery_session_worker,
|
|
|
|
):
|
|
|
|
|
|
|
|
api = Api(str(default_chain_spec), queue=None)
|
|
|
|
t = api.default_token()
|
|
|
|
r = t.get_leaf()
|
|
|
|
assert r['address'] == foo_token
|
2021-10-08 16:04:13 +02:00
|
|
|
|
|
|
|
|
2021-10-09 16:21:03 +02:00
|
|
|
def test_to_v_list():
|
2021-10-13 15:13:43 +02:00
|
|
|
assert Api.to_v_list('', 0) == []
|
|
|
|
assert Api.to_v_list([], 0) == []
|
2021-10-09 16:21:03 +02:00
|
|
|
assert Api.to_v_list('foo', 1) == [['foo']]
|
|
|
|
assert Api.to_v_list(['foo'], 1) == [['foo']]
|
|
|
|
assert Api.to_v_list(['foo', 'bar'], 2) == [['foo'], ['bar']]
|
|
|
|
assert Api.to_v_list('foo', 3) == [['foo'], ['foo'], ['foo']]
|
|
|
|
assert Api.to_v_list([['foo'], ['bar']], 2) == [['foo'], ['bar']]
|
|
|
|
with pytest.raises(ValueError):
|
|
|
|
Api.to_v_list([['foo'], ['bar']], 3)
|
|
|
|
with pytest.raises(ValueError):
|
|
|
|
Api.to_v_list(['foo', 'bar'], 3)
|
|
|
|
with pytest.raises(ValueError):
|
|
|
|
Api.to_v_list([['foo'], ['bar'], ['baz']], 2)
|
|
|
|
|
|
|
|
assert Api.to_v_list([
|
|
|
|
['foo'],
|
|
|
|
'bar',
|
|
|
|
['inky', 'pinky', 'blinky', 'clyde'],
|
|
|
|
], 3) == [
|
|
|
|
['foo'],
|
|
|
|
['bar'],
|
|
|
|
['inky', 'pinky', 'blinky', 'clyde'],
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def test_token_single(
|
|
|
|
default_chain_spec,
|
|
|
|
foo_token,
|
|
|
|
bar_token,
|
|
|
|
token_registry,
|
|
|
|
register_tokens,
|
|
|
|
register_lookups,
|
|
|
|
cic_registry,
|
|
|
|
init_database,
|
|
|
|
init_celery_tasks,
|
|
|
|
custodial_roles,
|
|
|
|
foo_token_declaration,
|
|
|
|
bar_token_declaration,
|
|
|
|
celery_session_worker,
|
|
|
|
):
|
|
|
|
|
|
|
|
api = Api(str(default_chain_spec), queue=None, callback_param='foo')
|
|
|
|
|
|
|
|
t = api.token('FOO', proof=None)
|
|
|
|
r = t.get()
|
|
|
|
logg.debug('rr {}'.format(r))
|
|
|
|
assert len(r) == 1
|
|
|
|
assert r[0]['address'] == strip_0x(foo_token)
|
|
|
|
|
|
|
|
|
|
|
|
t = api.token('FOO', proof=foo_token_declaration)
|
|
|
|
r = t.get()
|
|
|
|
assert len(r) == 1
|
|
|
|
assert r[0]['address'] == strip_0x(foo_token)
|
|
|
|
|
|
|
|
|
2021-10-13 15:13:43 +02:00
|
|
|
def test_tokens_noproof(
|
|
|
|
default_chain_spec,
|
|
|
|
foo_token,
|
|
|
|
bar_token,
|
|
|
|
token_registry,
|
|
|
|
register_tokens,
|
|
|
|
register_lookups,
|
|
|
|
cic_registry,
|
|
|
|
init_database,
|
|
|
|
init_celery_tasks,
|
|
|
|
custodial_roles,
|
|
|
|
foo_token_declaration,
|
|
|
|
bar_token_declaration,
|
2021-10-14 12:22:41 +02:00
|
|
|
celery_worker,
|
2021-10-13 15:13:43 +02:00
|
|
|
):
|
|
|
|
|
|
|
|
api = Api(str(default_chain_spec), queue=None, callback_param='foo')
|
|
|
|
|
|
|
|
t = api.tokens(['FOO'], proof=[])
|
|
|
|
r = t.get()
|
|
|
|
assert len(r) == 1
|
|
|
|
assert r[0]['address'] == strip_0x(foo_token)
|
|
|
|
|
2021-10-14 12:22:41 +02:00
|
|
|
t = api.tokens(['BAR'], proof='')
|
2021-10-13 15:13:43 +02:00
|
|
|
r = t.get()
|
|
|
|
assert len(r) == 1
|
2021-10-14 12:22:41 +02:00
|
|
|
assert r[0]['address'] == strip_0x(bar_token)
|
2021-10-13 15:13:43 +02:00
|
|
|
|
|
|
|
t = api.tokens(['FOO'], proof=None)
|
|
|
|
r = t.get()
|
|
|
|
assert len(r) == 1
|
|
|
|
assert r[0]['address'] == strip_0x(foo_token)
|
|
|
|
|
|
|
|
|
2021-10-08 16:04:13 +02:00
|
|
|
def test_tokens(
|
|
|
|
default_chain_spec,
|
|
|
|
foo_token,
|
|
|
|
bar_token,
|
|
|
|
token_registry,
|
|
|
|
register_tokens,
|
|
|
|
register_lookups,
|
|
|
|
cic_registry,
|
|
|
|
init_database,
|
|
|
|
init_celery_tasks,
|
|
|
|
custodial_roles,
|
2021-10-08 20:19:15 +02:00
|
|
|
foo_token_declaration,
|
|
|
|
bar_token_declaration,
|
2021-10-09 14:38:16 +02:00
|
|
|
celery_session_worker,
|
2021-10-08 16:04:13 +02:00
|
|
|
):
|
|
|
|
|
2021-10-09 13:22:14 +02:00
|
|
|
api = Api(str(default_chain_spec), queue=None, callback_param='foo')
|
2021-10-08 16:04:13 +02:00
|
|
|
|
2021-10-09 13:22:14 +02:00
|
|
|
t = api.tokens(['FOO'], proof=[[foo_token_declaration]])
|
2021-10-09 00:48:20 +02:00
|
|
|
r = t.get()
|
2021-10-09 13:22:14 +02:00
|
|
|
logg.debug('rr {}'.format(r))
|
2021-10-08 16:04:13 +02:00
|
|
|
assert len(r) == 1
|
2021-10-09 13:22:14 +02:00
|
|
|
assert r[0]['address'] == strip_0x(foo_token)
|
|
|
|
|
2021-10-09 00:48:20 +02:00
|
|
|
t = api.tokens(['BAR', 'FOO'], proof=[[bar_token_declaration], [foo_token_declaration]])
|
|
|
|
r = t.get()
|
|
|
|
logg.debug('results {}'.format(r))
|
2021-10-08 16:04:13 +02:00
|
|
|
assert len(r) == 2
|
2021-10-09 00:48:20 +02:00
|
|
|
assert r[1]['address'] == strip_0x(foo_token)
|
|
|
|
assert r[0]['address'] == strip_0x(bar_token)
|
|
|
|
|
2021-10-09 13:22:14 +02:00
|
|
|
celery_app = celery.current_app
|
|
|
|
|
2021-10-09 14:18:10 +02:00
|
|
|
results = []
|
|
|
|
targets = []
|
|
|
|
|
2021-10-09 13:22:14 +02:00
|
|
|
api_param = str(uuid.uuid4())
|
2021-10-09 14:18:10 +02:00
|
|
|
api = Api(str(default_chain_spec), queue=None, callback_param=api_param, callback_task='cic_eth.pytest.mock.callback.test_callback')
|
2021-10-09 00:48:20 +02:00
|
|
|
bogus_proof = os.urandom(32).hex()
|
2021-10-09 13:22:14 +02:00
|
|
|
t = api.tokens(['FOO'], proof=[[bogus_proof]])
|
|
|
|
r = t.get()
|
|
|
|
logg.debug('r {}'.format(r))
|
2021-10-09 14:18:10 +02:00
|
|
|
|
|
|
|
while True:
|
|
|
|
fp = os.path.join(CallbackTask.mmap_path, api_param)
|
|
|
|
try:
|
|
|
|
f = open(fp, 'rb')
|
|
|
|
except FileNotFoundError:
|
|
|
|
time.sleep(0.1)
|
|
|
|
logg.debug('look for {}'.format(fp))
|
|
|
|
continue
|
|
|
|
f = open(fp, 'rb')
|
|
|
|
m = mmap.mmap(f.fileno(), access=mmap.ACCESS_READ, length=1)
|
|
|
|
v = m.read(1)
|
|
|
|
m.close()
|
|
|
|
f.close()
|
|
|
|
assert v == b'\x01'
|
|
|
|
break
|
2021-10-09 13:22:14 +02:00
|
|
|
|
|
|
|
api_param = str(uuid.uuid4())
|
2021-10-09 14:18:10 +02:00
|
|
|
api = Api(str(default_chain_spec), queue=None, callback_param=api_param, callback_task='cic_eth.pytest.mock.callback.test_callback')
|
2021-10-09 13:22:14 +02:00
|
|
|
t = api.tokens(['BAR'], proof=[[bar_token_declaration]])
|
|
|
|
r = t.get()
|
|
|
|
logg.debug('rr {} {}'.format(r, t.children))
|
2021-10-09 14:18:10 +02:00
|
|
|
|
|
|
|
while True:
|
|
|
|
fp = os.path.join(CallbackTask.mmap_path, api_param)
|
|
|
|
try:
|
|
|
|
f = open(fp, 'rb')
|
|
|
|
except FileNotFoundError:
|
|
|
|
time.sleep(0.1)
|
|
|
|
continue
|
|
|
|
m = mmap.mmap(f.fileno(), access=mmap.ACCESS_READ, length=1)
|
|
|
|
v = m.read(1)
|
|
|
|
m.close()
|
|
|
|
f.close()
|
|
|
|
assert v == b'\x00'
|
|
|
|
break
|
2021-10-09 16:21:03 +02:00
|
|
|
|