summaryrefslogtreecommitdiff
path: root/src/ipcpd/unicast/dir/tests
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2026-08-16 18:05:20 +0000
committerSander Vrijders <sander@ouroboros.rocks>2026-08-31 08:31:45 +0200
commit657fdee8e909bd50fcc0b809b454cf1ad551384b (patch)
treeef6f2cfa3abacfe2ff33279f6af034358033a0a1 /src/ipcpd/unicast/dir/tests
parent2e06d9b85f2e2eadd94ade6b36d0aa2835a20ce2 (diff)
downloadouroboros-657fdee8e909bd50fcc0b809b454cf1ad551384b.tar.gz
ouroboros-657fdee8e909bd50fcc0b809b454cf1ad551384b.zip
ipcpd: Fix next value iteration in DHT
There was a bug in the loop where only the last entry was checked. Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/ipcpd/unicast/dir/tests')
-rw-r--r--src/ipcpd/unicast/dir/tests/dht_test.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/ipcpd/unicast/dir/tests/dht_test.c b/src/ipcpd/unicast/dir/tests/dht_test.c
index 1f7026b3..ee6861a0 100644
--- a/src/ipcpd/unicast/dir/tests/dht_test.c
+++ b/src/ipcpd/unicast/dir/tests/dht_test.c
@@ -796,6 +796,68 @@ static int test_dht_kv_get_values(void)
return TEST_RC_FAIL;
}
+static int test_dht_kv_next_values(void)
+{
+ struct list_head repl;
+ struct list_head rebl;
+ uint8_t * key;
+ size_t n;
+ size_t i;
+
+ TEST_START();
+
+ list_head_init(&repl);
+ list_head_init(&rebl);
+
+ if (dht_init(&test_dht_config) < 0) {
+ printf("Failed to create dht.\n");
+ goto fail_init;
+ }
+
+ if (fill_store_with_random_values(NULL, sizeof(uint64_t), 3) < 0) {
+ printf("Failed to fill store with random values.\n");
+ goto fail_fill;
+ }
+
+ key = dht_dup_key(dht.id.data);
+ if (key == NULL) {
+ printf("Failed to duplicate DHT ID.\n");
+ goto fail_fill;
+ }
+
+ n = 0;
+
+ for (i = 0; i < 5; ++i) {
+ if (dht_kv_next_values(key, &repl, &rebl) < 0)
+ break;
+
+ ++n;
+ value_list_destroy(&repl);
+ value_list_destroy(&rebl);
+ }
+
+ if (n != 3) {
+ printf("Failed to visit each entry once (%zu != 3).\n", n);
+ goto fail_next;
+ }
+
+ free(key);
+
+ dht_fini();
+
+ TEST_SUCCESS();
+
+ return TEST_RC_SUCCESS;
+
+ fail_next:
+ free(key);
+ fail_fill:
+ dht_fini();
+ fail_init:
+ TEST_FAIL();
+ return TEST_RC_FAIL;
+}
+
static int test_dht_kv_find_node_req_msg(void)
{
dht_msg_t * msg;
@@ -1894,6 +1956,7 @@ int dht_test(int argc,
rc |= test_dht_kv_contact_list();
rc |= test_dht_kv_update_bucket();
rc |= test_dht_kv_get_values();
+ rc |= test_dht_kv_next_values();
rc |= test_dht_kv_find_node_req_msg();
rc |= test_dht_kv_find_node_rsp_msg();
rc |= test_dht_kv_find_node_rsp_msg_contacts();