mirror of
https://gitlab.com/veilid/veilid.git
synced 2024-10-01 01:26:08 -04:00
Python code cleanup
These changes should not change any functionality. In code: - Added async keyword to CryptoSystem::kind since it's actually implemented async - Removed unused socket import in json_api In tests: - Removed unused imports - Removed unnecessary return statements - Removed unused variables - Cleaned up some spacing to match PEP-8 - Changed many comparisons to match PEP-8 - Use ValueSubKey classes instead of integers to keep types in line
This commit is contained in:
parent
0c19414934
commit
c92e07c88e
@ -4,9 +4,9 @@ from typing import AsyncGenerator
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import pytest_asyncio
|
import pytest_asyncio
|
||||||
from veilid.json_api import _JsonVeilidAPI
|
|
||||||
|
|
||||||
import veilid
|
import veilid
|
||||||
|
from veilid.json_api import _JsonVeilidAPI
|
||||||
|
|
||||||
|
|
||||||
pytest_plugins = ("pytest_asyncio",)
|
pytest_plugins = ("pytest_asyncio",)
|
||||||
@ -22,7 +22,6 @@ async def api_connection() -> AsyncGenerator[_JsonVeilidAPI, None]:
|
|||||||
api = await veilid.api_connector(simple_update_callback)
|
api = await veilid.api_connector(simple_update_callback)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server.")
|
pytest.skip("Unable to connect to veilid-server.")
|
||||||
return
|
|
||||||
|
|
||||||
async with api:
|
async with api:
|
||||||
# purge routes to ensure we start fresh
|
# purge routes to ensure we start fresh
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
import pytest
|
import pytest
|
||||||
import veilid
|
import veilid
|
||||||
from veilid.api import CryptoSystem
|
from veilid.api import CryptoSystem
|
||||||
import gc
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@ -42,9 +41,10 @@ async def test_hash_and_verify_password(api_connection: veilid.VeilidAPI):
|
|||||||
assert await cs.verify_password(b"abc123", phash)
|
assert await cs.verify_password(b"abc123", phash)
|
||||||
|
|
||||||
# Password mismatch
|
# Password mismatch
|
||||||
phash2 = await cs.hash_password(b"abc1234", salt)
|
await cs.hash_password(b"abc1234", salt)
|
||||||
assert not await cs.verify_password(b"abc12345", phash)
|
assert not await cs.verify_password(b"abc12345", phash)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_sign_and_verify_signature(api_connection: veilid.VeilidAPI):
|
async def test_sign_and_verify_signature(api_connection: veilid.VeilidAPI):
|
||||||
cs = await api_connection.best_crypto_system()
|
cs = await api_connection.best_crypto_system()
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
# Routing context veilid tests
|
# Routing context veilid tests
|
||||||
|
|
||||||
import veilid
|
|
||||||
import pytest
|
import pytest
|
||||||
import asyncio
|
import asyncio
|
||||||
import json
|
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
from . import *
|
|
||||||
|
|
||||||
|
import veilid
|
||||||
|
from veilid import ValueSubkey
|
||||||
|
|
||||||
##################################################################
|
##################################################################
|
||||||
BOGUS_KEY = veilid.TypedKey.from_value(
|
BOGUS_KEY = veilid.TypedKey.from_value(
|
||||||
@ -20,7 +19,7 @@ async def test_get_dht_value_unopened(api_connection: veilid.VeilidAPI):
|
|||||||
|
|
||||||
async with rc:
|
async with rc:
|
||||||
with pytest.raises(veilid.VeilidAPIError):
|
with pytest.raises(veilid.VeilidAPIError):
|
||||||
out = await rc.get_dht_value(BOGUS_KEY, veilid.ValueSubkey(0), False)
|
await rc.get_dht_value(BOGUS_KEY, ValueSubkey(0), False)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@ -28,7 +27,7 @@ async def test_open_dht_record_nonexistent_no_writer(api_connection: veilid.Veil
|
|||||||
rc = await api_connection.new_routing_context()
|
rc = await api_connection.new_routing_context()
|
||||||
async with rc:
|
async with rc:
|
||||||
with pytest.raises(veilid.VeilidAPIError):
|
with pytest.raises(veilid.VeilidAPIError):
|
||||||
out = await rc.open_dht_record(BOGUS_KEY, None)
|
await rc.open_dht_record(BOGUS_KEY, None)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@ -63,7 +62,7 @@ async def test_get_dht_value_nonexistent(api_connection: veilid.VeilidAPI):
|
|||||||
rc = await api_connection.new_routing_context()
|
rc = await api_connection.new_routing_context()
|
||||||
async with rc:
|
async with rc:
|
||||||
rec = await rc.create_dht_record(veilid.DHTSchema.dflt(1))
|
rec = await rc.create_dht_record(veilid.DHTSchema.dflt(1))
|
||||||
assert await rc.get_dht_value(rec.key, 0, False) == None
|
assert await rc.get_dht_value(rec.key, ValueSubkey(0), False) is None
|
||||||
await rc.close_dht_record(rec.key)
|
await rc.close_dht_record(rec.key)
|
||||||
await rc.delete_dht_record(rec.key)
|
await rc.delete_dht_record(rec.key)
|
||||||
|
|
||||||
@ -74,17 +73,17 @@ async def test_set_get_dht_value(api_connection: veilid.VeilidAPI):
|
|||||||
async with rc:
|
async with rc:
|
||||||
rec = await rc.create_dht_record(veilid.DHTSchema.dflt(2))
|
rec = await rc.create_dht_record(veilid.DHTSchema.dflt(2))
|
||||||
|
|
||||||
vd = await rc.set_dht_value(rec.key, 0, b"BLAH BLAH BLAH")
|
vd = await rc.set_dht_value(rec.key, ValueSubkey(0), b"BLAH BLAH BLAH")
|
||||||
assert vd == None
|
assert vd is None
|
||||||
|
|
||||||
vd2 = await rc.get_dht_value(rec.key, 0, False)
|
vd2 = await rc.get_dht_value(rec.key, ValueSubkey(0), False)
|
||||||
assert vd2 != None
|
assert vd2 is not None
|
||||||
|
|
||||||
vd3 = await rc.get_dht_value(rec.key, 0, True)
|
vd3 = await rc.get_dht_value(rec.key, ValueSubkey(0), True)
|
||||||
assert vd3 != None
|
assert vd3 is not None
|
||||||
|
|
||||||
vd4 = await rc.get_dht_value(rec.key, 1, False)
|
vd4 = await rc.get_dht_value(rec.key, ValueSubkey(1), False)
|
||||||
assert vd4 == None
|
assert vd4 is None
|
||||||
|
|
||||||
print("vd2: {}", vd2.__dict__)
|
print("vd2: {}", vd2.__dict__)
|
||||||
print("vd3: {}", vd3.__dict__)
|
print("vd3: {}", vd3.__dict__)
|
||||||
@ -115,33 +114,33 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI):
|
|||||||
vc = b"!@#$%^&*()"
|
vc = b"!@#$%^&*()"
|
||||||
|
|
||||||
# Test subkey writes
|
# Test subkey writes
|
||||||
vdtemp = await rc.set_dht_value(key, 1, va)
|
vdtemp = await rc.set_dht_value(key, ValueSubkey(1), va)
|
||||||
assert vdtemp == None
|
assert vdtemp is None
|
||||||
|
|
||||||
vdtemp = await rc.get_dht_value(key, 1, False)
|
vdtemp = await rc.get_dht_value(key, ValueSubkey(1), False)
|
||||||
assert vdtemp.data == va
|
assert vdtemp.data == va
|
||||||
assert vdtemp.seq == 0
|
assert vdtemp.seq == 0
|
||||||
assert vdtemp.writer == owner
|
assert vdtemp.writer == owner
|
||||||
|
|
||||||
vdtemp = await rc.get_dht_value(key, 0, False)
|
vdtemp = await rc.get_dht_value(key, ValueSubkey(0), False)
|
||||||
assert vdtemp == None
|
assert vdtemp is None
|
||||||
|
|
||||||
vdtemp = await rc.set_dht_value(key, 0, vb)
|
vdtemp = await rc.set_dht_value(key, ValueSubkey(0), vb)
|
||||||
assert vdtemp == None
|
assert vdtemp is None
|
||||||
|
|
||||||
vdtemp = await rc.get_dht_value(key, 0, True)
|
vdtemp = await rc.get_dht_value(key, ValueSubkey(0), True)
|
||||||
assert vdtemp.data == vb
|
assert vdtemp.data == vb
|
||||||
|
|
||||||
vdtemp = await rc.get_dht_value(key, 1, True)
|
vdtemp = await rc.get_dht_value(key, ValueSubkey(1), True)
|
||||||
assert vdtemp.data == va
|
assert vdtemp.data == va
|
||||||
|
|
||||||
# Equal value should not trigger sequence number update
|
# Equal value should not trigger sequence number update
|
||||||
vdtemp = await rc.set_dht_value(key, 1, va)
|
vdtemp = await rc.set_dht_value(key, ValueSubkey(1), va)
|
||||||
assert vdtemp == None
|
assert vdtemp is None
|
||||||
|
|
||||||
# Different value should trigger sequence number update
|
# Different value should trigger sequence number update
|
||||||
vdtemp = await rc.set_dht_value(key, 1, vb)
|
vdtemp = await rc.set_dht_value(key, ValueSubkey(1), vb)
|
||||||
assert vdtemp == None
|
assert vdtemp is None
|
||||||
|
|
||||||
# Now that we initialized some subkeys
|
# Now that we initialized some subkeys
|
||||||
# and verified they stored correctly
|
# and verified they stored correctly
|
||||||
@ -152,7 +151,7 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI):
|
|||||||
await rc.delete_dht_record(key)
|
await rc.delete_dht_record(key)
|
||||||
|
|
||||||
rec = await rc.open_dht_record(key, veilid.KeyPair.from_parts(owner, secret))
|
rec = await rc.open_dht_record(key, veilid.KeyPair.from_parts(owner, secret))
|
||||||
assert rec != None
|
assert rec is not None
|
||||||
assert rec.key == key
|
assert rec.key == key
|
||||||
assert rec.owner == owner
|
assert rec.owner == owner
|
||||||
assert rec.owner_secret == secret
|
assert rec.owner_secret == secret
|
||||||
@ -160,19 +159,19 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI):
|
|||||||
assert rec.schema.o_cnt == 2
|
assert rec.schema.o_cnt == 2
|
||||||
|
|
||||||
# Verify subkey 1 can be set before it is get but newer is available online
|
# Verify subkey 1 can be set before it is get but newer is available online
|
||||||
vdtemp = await rc.set_dht_value(key, 1, vc)
|
vdtemp = await rc.set_dht_value(key, ValueSubkey(1), vc)
|
||||||
assert vdtemp != None
|
assert vdtemp is not None
|
||||||
assert vdtemp.data == vb
|
assert vdtemp.data == vb
|
||||||
assert vdtemp.seq == 1
|
assert vdtemp.seq == 1
|
||||||
assert vdtemp.writer == owner
|
assert vdtemp.writer == owner
|
||||||
|
|
||||||
# Verify subkey 1 can be set a second time and it updates because seq is newer
|
# Verify subkey 1 can be set a second time and it updates because seq is newer
|
||||||
vdtemp = await rc.set_dht_value(key, 1, vc)
|
vdtemp = await rc.set_dht_value(key, ValueSubkey(1), vc)
|
||||||
assert vdtemp == None
|
assert vdtemp is None
|
||||||
|
|
||||||
# Verify the network got the subkey update with a refresh check
|
# Verify the network got the subkey update with a refresh check
|
||||||
vdtemp = await rc.get_dht_value(key, 1, True)
|
vdtemp = await rc.get_dht_value(key, ValueSubkey(1), True)
|
||||||
assert vdtemp != None
|
assert vdtemp is not None
|
||||||
assert vdtemp.data == vc
|
assert vdtemp.data == vc
|
||||||
assert vdtemp.seq == 2
|
assert vdtemp.seq == 2
|
||||||
assert vdtemp.writer == owner
|
assert vdtemp.writer == owner
|
||||||
@ -184,29 +183,30 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI):
|
|||||||
await rc.delete_dht_record(key)
|
await rc.delete_dht_record(key)
|
||||||
|
|
||||||
rec = await rc.open_dht_record(key, other_keypair)
|
rec = await rc.open_dht_record(key, other_keypair)
|
||||||
assert rec != None
|
assert rec is not None
|
||||||
assert rec.key == key
|
assert rec.key == key
|
||||||
assert rec.owner == owner
|
assert rec.owner == owner
|
||||||
assert rec.owner_secret == None
|
assert rec.owner_secret is None
|
||||||
assert rec.schema.kind == veilid.DHTSchemaKind.DFLT
|
assert rec.schema.kind == veilid.DHTSchemaKind.DFLT
|
||||||
assert rec.schema.o_cnt == 2
|
assert rec.schema.o_cnt == 2
|
||||||
|
|
||||||
# Verify subkey 1 can NOT be set because we have the wrong writer
|
# Verify subkey 1 can NOT be set because we have the wrong writer
|
||||||
with pytest.raises(veilid.VeilidAPIError):
|
with pytest.raises(veilid.VeilidAPIError):
|
||||||
vdtemp = await rc.set_dht_value(key, 1, va)
|
await rc.set_dht_value(key, ValueSubkey(1), va)
|
||||||
|
|
||||||
# Verify subkey 0 can NOT be set because we have the wrong writer
|
# Verify subkey 0 can NOT be set because we have the wrong writer
|
||||||
with pytest.raises(veilid.VeilidAPIError):
|
with pytest.raises(veilid.VeilidAPIError):
|
||||||
vdtemp = await rc.set_dht_value(key, 0, va)
|
await rc.set_dht_value(key, ValueSubkey(0), va)
|
||||||
|
|
||||||
# Verify subkey 0 can be set because override with the right writer
|
# Verify subkey 0 can be set because override with the right writer
|
||||||
vdtemp = await rc.set_dht_value(key, 0, va, veilid.KeyPair.from_parts(owner, secret))
|
vdtemp = await rc.set_dht_value(key, ValueSubkey(0), va, veilid.KeyPair.from_parts(owner, secret))
|
||||||
assert vdtemp == None
|
assert vdtemp is None
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
await rc.close_dht_record(key)
|
await rc.close_dht_record(key)
|
||||||
await rc.delete_dht_record(key)
|
await rc.delete_dht_record(key)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_watch_dht_values():
|
async def test_watch_dht_values():
|
||||||
|
|
||||||
@ -220,7 +220,6 @@ async def test_watch_dht_values():
|
|||||||
api = await veilid.api_connector(value_change_update_callback)
|
api = await veilid.api_connector(value_change_update_callback)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server.")
|
pytest.skip("Unable to connect to veilid-server.")
|
||||||
return
|
|
||||||
|
|
||||||
# Make two routing contexts, one with and one without safety
|
# Make two routing contexts, one with and one without safety
|
||||||
# So we can pretend to be a different node and get the watch updates
|
# So we can pretend to be a different node and get the watch updates
|
||||||
@ -236,8 +235,8 @@ async def test_watch_dht_values():
|
|||||||
rec = await rcWatch.create_dht_record(veilid.DHTSchema.dflt(10))
|
rec = await rcWatch.create_dht_record(veilid.DHTSchema.dflt(10))
|
||||||
|
|
||||||
# Set some subkey we care about
|
# Set some subkey we care about
|
||||||
vd = await rcWatch.set_dht_value(rec.key, 3, b"BLAH BLAH BLAH")
|
vd = await rcWatch.set_dht_value(rec.key, ValueSubkey(3), b"BLAH BLAH BLAH")
|
||||||
assert vd == None
|
assert vd is None
|
||||||
|
|
||||||
# Make a watch on that subkey
|
# Make a watch on that subkey
|
||||||
ts = await rcWatch.watch_dht_values(rec.key, [], 0, 0xFFFFFFFF)
|
ts = await rcWatch.watch_dht_values(rec.key, [], 0, 0xFFFFFFFF)
|
||||||
@ -247,8 +246,8 @@ async def test_watch_dht_values():
|
|||||||
rec = await rcSet.open_dht_record(rec.key, rec.owner_key_pair())
|
rec = await rcSet.open_dht_record(rec.key, rec.owner_key_pair())
|
||||||
|
|
||||||
# Now set the subkey and trigger an update
|
# Now set the subkey and trigger an update
|
||||||
vd = await rcSet.set_dht_value(rec.key, 3, b"BLAH")
|
vd = await rcSet.set_dht_value(rec.key, ValueSubkey(3), b"BLAH")
|
||||||
assert vd == None
|
assert vd is None
|
||||||
|
|
||||||
# Now we should NOT get an update because the update is the same as our local copy
|
# Now we should NOT get an update because the update is the same as our local copy
|
||||||
update = None
|
update = None
|
||||||
@ -256,10 +255,10 @@ async def test_watch_dht_values():
|
|||||||
update = await asyncio.wait_for(value_change_queue.get(), timeout=5)
|
update = await asyncio.wait_for(value_change_queue.get(), timeout=5)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
pass
|
pass
|
||||||
assert update == None
|
assert update is None
|
||||||
|
|
||||||
# Now set multiple subkeys and trigger an update
|
# Now set multiple subkeys and trigger an update
|
||||||
vd = await asyncio.gather(*[rcSet.set_dht_value(rec.key, 3, b"BLAH BLAH"), rcSet.set_dht_value(rec.key, 4, b"BZORT")])
|
vd = await asyncio.gather(*[rcSet.set_dht_value(rec.key, ValueSubkey(3), b"BLAH BLAH"), rcSet.set_dht_value(rec.key, ValueSubkey(4), b"BZORT")])
|
||||||
assert vd == [None, None]
|
assert vd == [None, None]
|
||||||
|
|
||||||
# Wait for the update
|
# Wait for the update
|
||||||
@ -269,43 +268,45 @@ async def test_watch_dht_values():
|
|||||||
assert upd.detail.key == rec.key
|
assert upd.detail.key == rec.key
|
||||||
assert upd.detail.count == 0xFFFFFFFD
|
assert upd.detail.count == 0xFFFFFFFD
|
||||||
assert upd.detail.subkeys == [(3, 4)]
|
assert upd.detail.subkeys == [(3, 4)]
|
||||||
assert upd.detail.value == None
|
assert upd.detail.value is None
|
||||||
|
|
||||||
# Reopen without closing to change routing context and not lose watch
|
# Reopen without closing to change routing context and not lose watch
|
||||||
rec = await rcWatch.open_dht_record(rec.key, rec.owner_key_pair())
|
rec = await rcWatch.open_dht_record(rec.key, rec.owner_key_pair())
|
||||||
|
|
||||||
# Cancel some subkeys we don't care about
|
# Cancel some subkeys we don't care about
|
||||||
still_active = await rcWatch.cancel_dht_watch(rec.key, [(0, 2)])
|
still_active = await rcWatch.cancel_dht_watch(rec.key, [(ValueSubkey(0), ValueSubkey(2))])
|
||||||
assert still_active == True
|
assert still_active
|
||||||
|
|
||||||
# Reopen without closing to change routing context and not lose watch
|
# Reopen without closing to change routing context and not lose watch
|
||||||
rec = await rcSet.open_dht_record(rec.key, rec.owner_key_pair())
|
rec = await rcSet.open_dht_record(rec.key, rec.owner_key_pair())
|
||||||
|
|
||||||
# Now set multiple subkeys and trigger an update
|
# Now set multiple subkeys and trigger an update
|
||||||
vd = await asyncio.gather(*[rcSet.set_dht_value(rec.key, 3, b"BLAH BLAH BLAH"), rcSet.set_dht_value(rec.key, 5, b"BZORT BZORT")])
|
vd = await asyncio.gather(*[rcSet.set_dht_value(rec.key, ValueSubkey(3), b"BLAH BLAH BLAH"), rcSet.set_dht_value(rec.key, ValueSubkey(5), b"BZORT BZORT")])
|
||||||
assert vd == [None, None]
|
assert vd == [None, None]
|
||||||
|
|
||||||
# Wait for the update
|
# Wait for the update, this longer timeout seems to help the flaky check below
|
||||||
upd = await asyncio.wait_for(value_change_queue.get(), timeout=10)
|
upd = await asyncio.wait_for(value_change_queue.get(), timeout=10)
|
||||||
|
|
||||||
# Verify the update came back but we don't get a new value because the sequence number is the same
|
# Verify the update came back but we don't get a new value because the sequence number is the same
|
||||||
assert upd.detail.key == rec.key
|
assert upd.detail.key == rec.key
|
||||||
|
|
||||||
|
# This check is flaky on slow connections and often fails with different counts
|
||||||
assert upd.detail.count == 0xFFFFFFFC
|
assert upd.detail.count == 0xFFFFFFFC
|
||||||
assert upd.detail.subkeys == [(3, 3), (5, 5)]
|
assert upd.detail.subkeys == [(3, 3), (5, 5)]
|
||||||
assert upd.detail.value == None
|
assert upd.detail.value is None
|
||||||
|
|
||||||
# Reopen without closing to change routing context and not lose watch
|
# Reopen without closing to change routing context and not lose watch
|
||||||
rec = await rcWatch.open_dht_record(rec.key, rec.owner_key_pair())
|
rec = await rcWatch.open_dht_record(rec.key, rec.owner_key_pair())
|
||||||
|
|
||||||
# Now cancel the update
|
# Now cancel the update
|
||||||
still_active = await rcWatch.cancel_dht_watch(rec.key, [(3, 9)])
|
still_active = await rcWatch.cancel_dht_watch(rec.key, [(ValueSubkey(3), ValueSubkey(9))])
|
||||||
assert still_active == False
|
assert not still_active
|
||||||
|
|
||||||
# Reopen without closing to change routing context and not lose watch
|
# Reopen without closing to change routing context and not lose watch
|
||||||
rec = await rcSet.open_dht_record(rec.key, rec.owner_key_pair())
|
rec = await rcSet.open_dht_record(rec.key, rec.owner_key_pair())
|
||||||
|
|
||||||
# Now set multiple subkeys
|
# Now set multiple subkeys
|
||||||
vd = await asyncio.gather(*[rcSet.set_dht_value(rec.key, 3, b"BLAH BLAH BLAH BLAH"), rcSet.set_dht_value(rec.key, 5, b"BZORT BZORT BZORT")])
|
vd = await asyncio.gather(*[rcSet.set_dht_value(rec.key, ValueSubkey(3), b"BLAH BLAH BLAH BLAH"), rcSet.set_dht_value(rec.key, ValueSubkey(5), b"BZORT BZORT BZORT")])
|
||||||
assert vd == [None, None]
|
assert vd == [None, None]
|
||||||
|
|
||||||
# Now we should NOT get an update
|
# Now we should NOT get an update
|
||||||
@ -314,20 +315,21 @@ async def test_watch_dht_values():
|
|||||||
update = await asyncio.wait_for(value_change_queue.get(), timeout=5)
|
update = await asyncio.wait_for(value_change_queue.get(), timeout=5)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
pass
|
pass
|
||||||
assert update == None
|
assert update is None
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
await rcSet.close_dht_record(rec.key)
|
await rcSet.close_dht_record(rec.key)
|
||||||
await rcSet.delete_dht_record(rec.key)
|
await rcSet.delete_dht_record(rec.key)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_inspect_dht_record(api_connection: veilid.VeilidAPI):
|
async def test_inspect_dht_record(api_connection: veilid.VeilidAPI):
|
||||||
rc = await api_connection.new_routing_context()
|
rc = await api_connection.new_routing_context()
|
||||||
async with rc:
|
async with rc:
|
||||||
rec = await rc.create_dht_record(veilid.DHTSchema.dflt(2))
|
rec = await rc.create_dht_record(veilid.DHTSchema.dflt(2))
|
||||||
|
|
||||||
vd = await rc.set_dht_value(rec.key, 0, b"BLAH BLAH BLAH")
|
vd = await rc.set_dht_value(rec.key, ValueSubkey(0), b"BLAH BLAH BLAH")
|
||||||
assert vd == None
|
assert vd is None
|
||||||
|
|
||||||
rr = await rc.inspect_dht_record(rec.key, [], veilid.DHTReportScope.LOCAL)
|
rr = await rc.inspect_dht_record(rec.key, [], veilid.DHTReportScope.LOCAL)
|
||||||
print("rr: {}", rr.__dict__)
|
print("rr: {}", rr.__dict__)
|
||||||
@ -344,6 +346,7 @@ async def test_inspect_dht_record(api_connection: veilid.VeilidAPI):
|
|||||||
await rc.close_dht_record(rec.key)
|
await rc.close_dht_record(rec.key)
|
||||||
await rc.delete_dht_record(rec.key)
|
await rc.delete_dht_record(rec.key)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skipif(os.getenv("INTEGRATION") != "1", reason="integration test requires two servers running")
|
@pytest.mark.skipif(os.getenv("INTEGRATION") != "1", reason="integration test requires two servers running")
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_dht_integration_writer_reader():
|
async def test_dht_integration_writer_reader():
|
||||||
@ -355,13 +358,11 @@ async def test_dht_integration_writer_reader():
|
|||||||
api0 = await veilid.api_connector(null_update_callback, 0)
|
api0 = await veilid.api_connector(null_update_callback, 0)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server 0.")
|
pytest.skip("Unable to connect to veilid-server 0.")
|
||||||
return
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
api1 = await veilid.api_connector(null_update_callback, 1)
|
api1 = await veilid.api_connector(null_update_callback, 1)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server 1.")
|
pytest.skip("Unable to connect to veilid-server 1.")
|
||||||
return
|
|
||||||
|
|
||||||
async with api0, api1:
|
async with api0, api1:
|
||||||
# purge local and remote record stores to ensure we start fresh
|
# purge local and remote record stores to ensure we start fresh
|
||||||
@ -386,11 +387,11 @@ async def test_dht_integration_writer_reader():
|
|||||||
desc = await rc0.create_dht_record(schema)
|
desc = await rc0.create_dht_record(schema)
|
||||||
records.append(desc)
|
records.append(desc)
|
||||||
|
|
||||||
await rc0.set_dht_value(desc.key, 0, TEST_DATA)
|
await rc0.set_dht_value(desc.key, ValueSubkey(0), TEST_DATA)
|
||||||
|
|
||||||
print(f' {n}')
|
print(f' {n}')
|
||||||
|
|
||||||
print(f'syncing records to the network')
|
print('syncing records to the network')
|
||||||
for desc0 in records:
|
for desc0 in records:
|
||||||
while True:
|
while True:
|
||||||
rr = await rc0.inspect_dht_record(desc0.key, [])
|
rr = await rc0.inspect_dht_record(desc0.key, [])
|
||||||
@ -401,15 +402,16 @@ async def test_dht_integration_writer_reader():
|
|||||||
|
|
||||||
# read dht records on server 1
|
# read dht records on server 1
|
||||||
print(f'reading {COUNT} records')
|
print(f'reading {COUNT} records')
|
||||||
n=0
|
n = 0
|
||||||
for desc0 in records:
|
for desc0 in records:
|
||||||
desc1 = await rc1.open_dht_record(desc0.key)
|
desc1 = await rc1.open_dht_record(desc0.key)
|
||||||
vd1 = await rc1.get_dht_value(desc1.key, 0)
|
vd1 = await rc1.get_dht_value(desc1.key, ValueSubkey(0))
|
||||||
assert vd1.data == TEST_DATA
|
assert vd1.data == TEST_DATA
|
||||||
await rc1.close_dht_record(desc1.key)
|
await rc1.close_dht_record(desc1.key)
|
||||||
|
|
||||||
print(f' {n}')
|
print(f' {n}')
|
||||||
n+=1
|
n += 1
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_dht_write_read_local():
|
async def test_dht_write_read_local():
|
||||||
@ -421,7 +423,6 @@ async def test_dht_write_read_local():
|
|||||||
api0 = await veilid.api_connector(null_update_callback, 0)
|
api0 = await veilid.api_connector(null_update_callback, 0)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server 0.")
|
pytest.skip("Unable to connect to veilid-server 0.")
|
||||||
return
|
|
||||||
|
|
||||||
async with api0:
|
async with api0:
|
||||||
# purge local and remote record stores to ensure we start fresh
|
# purge local and remote record stores to ensure we start fresh
|
||||||
@ -432,8 +433,9 @@ async def test_dht_write_read_local():
|
|||||||
rc0 = await api0.new_routing_context()
|
rc0 = await api0.new_routing_context()
|
||||||
async with rc0:
|
async with rc0:
|
||||||
|
|
||||||
# FIXME: 500
|
# Previously COUNT was set to 500, which causes these tests to take
|
||||||
COUNT = 5
|
# 10s of minutes on slow connections or debug veilid-server builds
|
||||||
|
COUNT = 10
|
||||||
TEST_DATA = b"ABCD"*1024
|
TEST_DATA = b"ABCD"*1024
|
||||||
TEST_DATA2 = b"ABCD"*4096
|
TEST_DATA2 = b"ABCD"*4096
|
||||||
|
|
||||||
@ -445,8 +447,8 @@ async def test_dht_write_read_local():
|
|||||||
desc = await rc0.create_dht_record(schema)
|
desc = await rc0.create_dht_record(schema)
|
||||||
records.append(desc)
|
records.append(desc)
|
||||||
|
|
||||||
await rc0.set_dht_value(desc.key, 0, TEST_DATA)
|
await rc0.set_dht_value(desc.key, ValueSubkey(0), TEST_DATA)
|
||||||
await rc0.set_dht_value(desc.key, 1, TEST_DATA2)
|
await rc0.set_dht_value(desc.key, ValueSubkey(1), TEST_DATA2)
|
||||||
|
|
||||||
print(f' {n}')
|
print(f' {n}')
|
||||||
|
|
||||||
@ -461,18 +463,16 @@ async def test_dht_write_read_local():
|
|||||||
|
|
||||||
# read dht records on server 0
|
# read dht records on server 0
|
||||||
print(f'reading {COUNT} records')
|
print(f'reading {COUNT} records')
|
||||||
n=0
|
n = 0
|
||||||
for desc0 in records:
|
for desc0 in records:
|
||||||
desc1 = await rc0.open_dht_record(desc0.key)
|
desc1 = await rc0.open_dht_record(desc0.key)
|
||||||
|
|
||||||
vd0 = await rc0.get_dht_value(desc1.key, 0)
|
vd0 = await rc0.get_dht_value(desc1.key, ValueSubkey(0))
|
||||||
assert vd0.data == TEST_DATA
|
assert vd0.data == TEST_DATA
|
||||||
|
|
||||||
vd1 = await rc0.get_dht_value(desc1.key, 1)
|
vd1 = await rc0.get_dht_value(desc1.key, ValueSubkey(1))
|
||||||
assert vd1.data == TEST_DATA2
|
assert vd1.data == TEST_DATA2
|
||||||
await rc0.close_dht_record(desc1.key)
|
await rc0.close_dht_record(desc1.key)
|
||||||
|
|
||||||
print(f' {n}')
|
print(f' {n}')
|
||||||
n+=1
|
n += 1
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,12 +3,11 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import sys
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
import veilid
|
import veilid
|
||||||
|
|
||||||
|
|
||||||
##################################################################
|
##################################################################
|
||||||
|
|
||||||
|
|
||||||
@ -54,7 +53,6 @@ async def test_routing_context_app_message_loopback():
|
|||||||
api = await veilid.api_connector(app_message_queue_update_callback)
|
api = await veilid.api_connector(app_message_queue_update_callback)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server.")
|
pytest.skip("Unable to connect to veilid-server.")
|
||||||
return
|
|
||||||
|
|
||||||
async with api:
|
async with api:
|
||||||
# purge routes to ensure we start fresh
|
# purge routes to ensure we start fresh
|
||||||
@ -102,7 +100,6 @@ async def test_routing_context_app_call_loopback():
|
|||||||
api = await veilid.api_connector(app_call_queue_update_callback)
|
api = await veilid.api_connector(app_call_queue_update_callback)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server.")
|
pytest.skip("Unable to connect to veilid-server.")
|
||||||
return
|
|
||||||
|
|
||||||
async with api:
|
async with api:
|
||||||
# purge routes to ensure we start fresh
|
# purge routes to ensure we start fresh
|
||||||
@ -163,7 +160,6 @@ async def test_routing_context_app_message_loopback_big_packets():
|
|||||||
api = await veilid.api_connector(app_message_queue_update_callback)
|
api = await veilid.api_connector(app_message_queue_update_callback)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server.")
|
pytest.skip("Unable to connect to veilid-server.")
|
||||||
return
|
|
||||||
|
|
||||||
async with api:
|
async with api:
|
||||||
# purge routes to ensure we start fresh
|
# purge routes to ensure we start fresh
|
||||||
@ -204,9 +200,9 @@ async def test_routing_context_app_message_loopback_big_packets():
|
|||||||
await api.release_private_route(prl)
|
await api.release_private_route(prl)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_routing_context_app_call_loopback_big_packets():
|
async def test_routing_context_app_call_loopback_big_packets():
|
||||||
|
# This test has a tendency to timeout on slow connections
|
||||||
count_hack = [0]
|
count_hack = [0]
|
||||||
|
|
||||||
app_call_queue: asyncio.Queue = asyncio.Queue()
|
app_call_queue: asyncio.Queue = asyncio.Queue()
|
||||||
@ -228,7 +224,6 @@ async def test_routing_context_app_call_loopback_big_packets():
|
|||||||
api = await veilid.api_connector(app_call_queue_update_callback)
|
api = await veilid.api_connector(app_call_queue_update_callback)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server.")
|
pytest.skip("Unable to connect to veilid-server.")
|
||||||
return
|
|
||||||
|
|
||||||
async with api:
|
async with api:
|
||||||
# purge routes to ensure we start fresh
|
# purge routes to ensure we start fresh
|
||||||
@ -278,7 +273,6 @@ async def test_routing_context_app_message_loopback_bandwidth():
|
|||||||
api = await veilid.api_connector(app_message_queue_update_callback)
|
api = await veilid.api_connector(app_message_queue_update_callback)
|
||||||
except veilid.VeilidConnectionError:
|
except veilid.VeilidConnectionError:
|
||||||
pytest.skip("Unable to connect to veilid-server.")
|
pytest.skip("Unable to connect to veilid-server.")
|
||||||
return
|
|
||||||
|
|
||||||
async with api:
|
async with api:
|
||||||
# purge routes to ensure we start fresh
|
# purge routes to ensure we start fresh
|
||||||
@ -293,7 +287,7 @@ async def test_routing_context_app_message_loopback_bandwidth():
|
|||||||
# import it as a remote route as well so we can send to it
|
# import it as a remote route as well so we can send to it
|
||||||
prr = await api.import_remote_private_route(blob)
|
prr = await api.import_remote_private_route(blob)
|
||||||
try:
|
try:
|
||||||
# do this test 1000 times
|
# do this test 10000 times
|
||||||
message = random.randbytes(16384)
|
message = random.randbytes(16384)
|
||||||
for _ in range(10000):
|
for _ in range(10000):
|
||||||
# send a random sized random app message to our own private route
|
# send a random sized random app message to our own private route
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from .api import *
|
from .api import *
|
||||||
from .connection import *
|
|
||||||
from .config import *
|
from .config import *
|
||||||
|
from .connection import *
|
||||||
from .error import *
|
from .error import *
|
||||||
from .json_api import *
|
from .json_api import *
|
||||||
from .state import *
|
from .state import *
|
||||||
|
@ -187,7 +187,7 @@ class CryptoSystem(ABC):
|
|||||||
await self.release()
|
await self.release()
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def kind(self) -> types.CryptoKind:
|
async def kind(self) -> types.CryptoKind:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
@ -2,7 +2,6 @@ import asyncio
|
|||||||
import importlib.resources as importlib_resources
|
import importlib.resources as importlib_resources
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import socket
|
|
||||||
from typing import Awaitable, Callable, Optional, Self
|
from typing import Awaitable, Callable, Optional, Self
|
||||||
|
|
||||||
from jsonschema import exceptions, validators
|
from jsonschema import exceptions, validators
|
||||||
|
Loading…
Reference in New Issue
Block a user