2022-10-10 17:25:10 +04:00
|
|
|
import delegator
|
|
|
|
import random
|
|
|
|
import json
|
|
|
|
import os
|
|
|
|
from config import get_local
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
delegator.run("npx fluence dep npm i", block=True)
|
|
|
|
default_peers = json.loads(delegator.run(
|
|
|
|
f"node ./getDefaultPeers.js", block=True).out)
|
2022-10-10 17:25:10 +04:00
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
|
|
|
|
def get_relays():
|
2022-10-10 17:25:10 +04:00
|
|
|
env = os.environ.get("FLUENCE_ENV")
|
|
|
|
if env == "local":
|
|
|
|
peers = get_local()
|
|
|
|
else:
|
|
|
|
if env is None:
|
|
|
|
env = "testnet"
|
2023-01-18 11:28:51 +01:00
|
|
|
peers = [peer["multiaddr"] for peer in default_peers[env]]
|
|
|
|
|
|
|
|
assert len(peers) != 0
|
|
|
|
return peers
|
|
|
|
|
|
|
|
|
|
|
|
relays = get_relays()
|
|
|
|
peer_ids = [relay.split("/")[-1] for relay in relays]
|
2022-10-10 17:25:10 +04:00
|
|
|
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
def get_random_list_item(ar):
|
|
|
|
return ar[random.randint(0, len(ar) - 1)]
|
|
|
|
|
|
|
|
|
|
|
|
def get_random_relay():
|
|
|
|
return get_random_list_item(relays)
|
|
|
|
|
2022-10-10 17:25:10 +04:00
|
|
|
|
|
|
|
def get_random_peer_id():
|
2023-01-18 11:28:51 +01:00
|
|
|
return get_random_list_item(peer_ids)
|
|
|
|
|
2022-10-10 17:25:10 +04:00
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
def get_label():
|
|
|
|
return ''.join(random.choice('0123456789ABCDEF') for i in range(16))
|
|
|
|
|
|
|
|
|
|
|
|
def run_aqua(func, args, relay=get_random_relay()):
|
2022-10-10 17:25:10 +04:00
|
|
|
|
|
|
|
# "a" : arg1, "b" : arg2 .....
|
|
|
|
data = {chr(97 + i): arg for (i, arg) in enumerate(args)}
|
2023-01-18 11:28:51 +01:00
|
|
|
call = f"{func}(" + ", ".join([chr(97 + i)
|
|
|
|
for i in range(0, len(args))]) + ")"
|
2022-10-10 17:25:10 +04:00
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
command = f"npx fluence run --relay {relay} -f '{call}' --data '{json.dumps(data)}' --import 'node_modules' --quiet"
|
2022-10-10 17:25:10 +04:00
|
|
|
print(command)
|
|
|
|
c = delegator.run(command, block=True)
|
|
|
|
if len(c.err) != 0:
|
|
|
|
print(c.err)
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
try:
|
|
|
|
result = json.loads(c.out)
|
|
|
|
print(result)
|
|
|
|
return result
|
|
|
|
except:
|
|
|
|
print(c.out)
|
|
|
|
return c.out
|
|
|
|
|
|
|
|
|
|
|
|
def create_resource(label):
|
|
|
|
result, error = run_aqua("createResource", [label])
|
|
|
|
assert result != None, error
|
2022-10-10 17:25:10 +04:00
|
|
|
return result
|
|
|
|
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
def get_peer_id():
|
|
|
|
return run_aqua("get_peer_id", [])
|
|
|
|
|
2022-10-10 17:25:10 +04:00
|
|
|
|
|
|
|
def test_create_resource():
|
2023-01-18 11:28:51 +01:00
|
|
|
label = get_label()
|
|
|
|
result = create_resource(label)
|
|
|
|
peer_id = get_peer_id()
|
|
|
|
resource_id = run_aqua("getResourceId", [label, peer_id])
|
|
|
|
assert result == resource_id
|
|
|
|
|
2022-10-10 17:25:10 +04:00
|
|
|
|
|
|
|
def test_get_resource():
|
2023-01-18 11:28:51 +01:00
|
|
|
label = get_label()
|
|
|
|
resource_id = create_resource(label)
|
|
|
|
peer_id = get_peer_id()
|
|
|
|
result, error = run_aqua("getResource", [resource_id])
|
|
|
|
assert result != None, error
|
|
|
|
assert result["id"] == resource_id, error
|
|
|
|
assert result["owner_peer_id"] == peer_id, error
|
|
|
|
assert result["label"] == label, error
|
|
|
|
|
2022-10-10 17:25:10 +04:00
|
|
|
|
|
|
|
def test_register_record_unregister():
|
2023-01-18 11:28:51 +01:00
|
|
|
relay = get_random_relay()
|
|
|
|
label = get_label()
|
2022-10-10 17:25:10 +04:00
|
|
|
value = "some_value"
|
2023-01-18 11:28:51 +01:00
|
|
|
peer_id = get_peer_id()
|
2022-10-10 17:25:10 +04:00
|
|
|
service_id = "id"
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
resource_id = create_resource(label)
|
|
|
|
result, error = run_aqua(
|
|
|
|
"registerService", [resource_id, value, peer_id, service_id], relay)
|
2022-10-10 17:25:10 +04:00
|
|
|
assert result, error
|
|
|
|
|
2022-10-10 18:05:53 +04:00
|
|
|
# we want at least 1 successful response
|
2023-01-18 11:28:51 +01:00
|
|
|
result, error = run_aqua("resolveResource", [resource_id, 1], relay)
|
|
|
|
assert result != None, error
|
2022-10-10 17:25:10 +04:00
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
assert len(result) == 1, "records not found"
|
2022-10-10 17:25:10 +04:00
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
record = result[0]
|
2022-10-10 17:25:10 +04:00
|
|
|
assert record["metadata"]["key_id"] == resource_id
|
|
|
|
assert record["metadata"]["issued_by"] == peer_id
|
|
|
|
assert record["metadata"]["peer_id"] == peer_id
|
|
|
|
assert record["metadata"]["service_id"] == [service_id]
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
result, error = run_aqua("unregisterService", [resource_id, peer_id],
|
|
|
|
relay)
|
2022-10-10 17:25:10 +04:00
|
|
|
assert result, error
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
result, error = run_aqua("resolveResource", [resource_id, 2], relay)
|
|
|
|
assert result != None, error
|
|
|
|
assert len(result) == 0
|
|
|
|
|
2022-10-10 17:25:10 +04:00
|
|
|
|
|
|
|
def test_register_unregister_remote_record():
|
2023-01-18 11:28:51 +01:00
|
|
|
relay = get_random_relay()
|
|
|
|
label = get_label()
|
2022-10-10 17:25:10 +04:00
|
|
|
value = "some_value"
|
2023-01-18 11:28:51 +01:00
|
|
|
issuer_peer_id = get_peer_id()
|
2022-10-10 17:25:10 +04:00
|
|
|
peer_id = get_random_peer_id()
|
|
|
|
service_id = "id"
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
resource_id = create_resource(label)
|
|
|
|
result, error = run_aqua(
|
|
|
|
"registerService", [resource_id, value, peer_id, service_id], relay)
|
2022-10-10 17:25:10 +04:00
|
|
|
assert result, error
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
result, error = run_aqua("resolveResource", [resource_id, 2], relay)
|
|
|
|
assert result != None, error
|
2022-10-10 17:25:10 +04:00
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
assert len(result) == 1, "records not found"
|
2022-10-10 17:25:10 +04:00
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
record = result[0]
|
2022-10-10 17:25:10 +04:00
|
|
|
assert record["metadata"]["key_id"] == resource_id
|
|
|
|
assert record["metadata"]["issued_by"] == issuer_peer_id
|
|
|
|
assert record["metadata"]["peer_id"] == peer_id
|
|
|
|
assert record["metadata"]["service_id"] == [service_id]
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
result, error = run_aqua("unregisterService", [resource_id, peer_id],
|
|
|
|
relay)
|
2022-10-10 17:25:10 +04:00
|
|
|
assert result, error
|
|
|
|
|
2023-01-18 11:28:51 +01:00
|
|
|
result, error = run_aqua("resolveResource", [resource_id, 2], relay)
|
|
|
|
assert result != None, error
|
|
|
|
assert len(result) == 0
|