diff --git a/veilid-core/src/storage_manager/mod.rs b/veilid-core/src/storage_manager/mod.rs index b6dad7a2..4b21abb7 100644 --- a/veilid-core/src/storage_manager/mod.rs +++ b/veilid-core/src/storage_manager/mod.rs @@ -347,8 +347,9 @@ impl StorageManager { if last_signed_value_data.value_data().data() == &data && last_signed_value_data.value_data().writer() == &writer.key { - // Data and writer is the name, nothing is changing, just return the same ValueData - return Ok(Some(last_signed_value_data.into_value_data())); + // Data and writer is the same, nothing is changing, + // just return that we set it, but no network activity needs to happen + return Ok(None); } let seq = last_signed_value_data.value_data().seq(); ValueData::new_with_seq(seq + 1, data, writer.key) diff --git a/veilid-python/tests/test_dht.py b/veilid-python/tests/test_dht.py index 8faae302..713f5675 100644 --- a/veilid-python/tests/test_dht.py +++ b/veilid-python/tests/test_dht.py @@ -7,7 +7,9 @@ import json from . import * ################################################################## -BOGUS_KEY = veilid.TypedKey.from_value(veilid.CryptoKind.CRYPTO_KIND_VLD0, veilid.PublicKey.from_bytes(b' ')) +BOGUS_KEY = veilid.TypedKey.from_value( + veilid.CryptoKind.CRYPTO_KIND_VLD0, veilid.PublicKey.from_bytes(b' ')) + @pytest.mark.asyncio async def test_get_dht_value_unopened(api_connection: veilid.VeilidAPI): @@ -24,6 +26,7 @@ async def test_open_dht_record_nonexistent_no_writer(api_connection: veilid.Veil with pytest.raises(veilid.VeilidAPIError): out = await rc.open_dht_record(BOGUS_KEY, None) + @pytest.mark.asyncio async def test_close_dht_record_nonexistent(api_connection: veilid.VeilidAPI): rc = await api_connection.new_routing_context() @@ -31,13 +34,15 @@ async def test_close_dht_record_nonexistent(api_connection: veilid.VeilidAPI): with pytest.raises(veilid.VeilidAPIError): await rc.close_dht_record(BOGUS_KEY) + @pytest.mark.asyncio async def test_delete_dht_record_nonexistent(api_connection: veilid.VeilidAPI): rc = await api_connection.new_routing_context() async with rc: with pytest.raises(veilid.VeilidAPIError): await rc.delete_dht_record(BOGUS_KEY) - + + @pytest.mark.asyncio async def test_create_delete_dht_record_simple(api_connection: veilid.VeilidAPI): rc = await api_connection.new_routing_context() @@ -46,6 +51,7 @@ async def test_create_delete_dht_record_simple(api_connection: veilid.VeilidAPI) await rc.close_dht_record(rec.key) await rc.delete_dht_record(rec.key) + @pytest.mark.asyncio async def test_get_dht_value_nonexistent(api_connection: veilid.VeilidAPI): rc = await api_connection.new_routing_context() @@ -55,34 +61,34 @@ async def test_get_dht_value_nonexistent(api_connection: veilid.VeilidAPI): await rc.close_dht_record(rec.key) await rc.delete_dht_record(rec.key) + @pytest.mark.asyncio async def test_set_get_dht_value(api_connection: veilid.VeilidAPI): rc = await api_connection.new_routing_context() async with rc: rec = await rc.create_dht_record(veilid.DHTSchema.dflt(2)) - + vd = await rc.set_dht_value(rec.key, 0, b"BLAH BLAH BLAH") - assert vd != None - + assert vd == None + vd2 = await rc.get_dht_value(rec.key, 0, False) assert vd2 != None - + vd3 = await rc.get_dht_value(rec.key, 0, True) assert vd3 != None vd4 = await rc.get_dht_value(rec.key, 1, False) assert vd4 == None - print("vd: {}", vd.__dict__) print("vd2: {}", vd2.__dict__) print("vd3: {}", vd3.__dict__) - assert vd == vd2 assert vd2 == vd3 await rc.close_dht_record(rec.key) await rc.delete_dht_record(rec.key) + @pytest.mark.asyncio async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI): rc = await api_connection.new_routing_context() @@ -104,10 +110,7 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI): # Test subkey writes vdtemp = await rc.set_dht_value(key, 1, va) - assert vdtemp != None - assert vdtemp.data == va - assert vdtemp.seq == 0 - assert vdtemp.writer == owner + assert vdtemp == None vdtemp = await rc.get_dht_value(key, 1, False) assert vdtemp.data == va @@ -118,8 +121,7 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI): assert vdtemp == None vdtemp = await rc.set_dht_value(key, 0, vb) - assert vdtemp.data == vb - assert vdtemp.seq == 0 + assert vdtemp == None vdtemp = await rc.get_dht_value(key, 0, True) assert vdtemp.data == vb @@ -129,17 +131,11 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI): # Equal value should not trigger sequence number update vdtemp = await rc.set_dht_value(key, 1, va) - assert vdtemp != None - assert vdtemp.data == va - assert vdtemp.seq == 0 - assert vdtemp.writer == owner + assert vdtemp == None # Different value should trigger sequence number update vdtemp = await rc.set_dht_value(key, 1, vb) - assert vdtemp != None - assert vdtemp.data == vb - assert vdtemp.seq == 1 - assert vdtemp.writer == owner + assert vdtemp == None # Now that we initialized some subkeys # and verified they stored correctly @@ -166,11 +162,8 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI): # 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) - assert vdtemp != None - assert vdtemp.data == vc - assert vdtemp.seq == 2 - assert vdtemp.writer == owner - + assert vdtemp == None + # Verify the network got the subkey update with a refresh check vdtemp = await rc.get_dht_value(key, 1, True) assert vdtemp != None @@ -183,7 +176,7 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI): await rc.close_dht_record(key) await rc.delete_dht_record(key) - + rec = await rc.open_dht_record(key, other_keypair) assert rec != None assert rec.key == key @@ -195,12 +188,11 @@ async def test_open_writer_dht_value(api_connection: veilid.VeilidAPI): # Verify subkey 1 can NOT be set because we have the wrong writer with pytest.raises(veilid.VeilidAPIError): vdtemp = await rc.set_dht_value(key, 1, va) - + # Verify subkey 0 can NOT be set because we have the wrong writer with pytest.raises(veilid.VeilidAPIError): vdtemp = await rc.set_dht_value(key, 0, va) - + # Clean up await rc.close_dht_record(key) await rc.delete_dht_record(key) -