|
|
|
|
@ -22,6 +22,7 @@
|
|
|
|
|
#include "routing.h" |
|
|
|
|
#include "topo_node.h" |
|
|
|
|
#include "topo_node_sqlite.h" |
|
|
|
|
#include "../src/routing_layer/topo_group.h" |
|
|
|
|
#include "../src/tun_if.h" |
|
|
|
|
#include "secure_channel.h" |
|
|
|
|
#include "secure_channel.h" |
|
|
|
|
@ -206,9 +207,19 @@ static void seed_members(struct UTUN_INSTANCE* self, struct UTUN_INSTANCE** peer
|
|
|
|
|
for (int i = 0; i < peer_count; i++) |
|
|
|
|
if (peers[i] && peers[i]->node_id) |
|
|
|
|
topo_node_sqlite_member_placeholder_put(db, groups[gi], peers[i]->node_id, z32, z32); |
|
|
|
|
uint64_t gid = strtoull(groups[gi], NULL, 10); |
|
|
|
|
if (!topo_groups_find(self->topo_groups, gid)) |
|
|
|
|
topo_groups_create_group(self->topo_groups, gid, TOPO_GROUP_TYPE_CHAT, groups[gi]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Протокольные тесты сами подготовили участников; включение обмена явно отделено от регистрации. */ |
|
|
|
|
static struct DB_SYNC_INSTANCE* add_table(struct UTUN_INSTANCE* inst, const char* table, uint64_t gid) { |
|
|
|
|
struct DB_SYNC_INSTANCE* si = db_sync_instance_add(inst, table, gid); |
|
|
|
|
if (si) db_sync_instance_set_gated(si, 0); |
|
|
|
|
return si; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int main(void) { |
|
|
|
|
printf("=== test_db_sync ===\n"); |
|
|
|
|
debug_config_init(); debug_set_level(DEBUG_LEVEL_ERROR); |
|
|
|
|
@ -235,8 +246,8 @@ int main(void) {
|
|
|
|
|
// ===================================================================
|
|
|
|
|
printf("Phase 1: peer_empty\n"); |
|
|
|
|
reset_done_flags(); |
|
|
|
|
si_a = db_sync_instance_add(inst_a, "test", 1, 0); |
|
|
|
|
si_b = db_sync_instance_add(inst_b, "test", 1, 0); |
|
|
|
|
si_a = add_table(inst_a, "test", 1); |
|
|
|
|
si_b = add_table(inst_b, "test", 1); |
|
|
|
|
if (!si_a || !si_b) { test_phase = 2; goto done; } |
|
|
|
|
if (insert_many(si_a, inst_a, 0, 5) != 0) { test_phase = 2; goto done; } |
|
|
|
|
db_sync_reinitiate(si_b, inst_a->node_id); |
|
|
|
|
@ -269,8 +280,8 @@ int main(void) {
|
|
|
|
|
printf("Phase 3: divergence merge\n"); |
|
|
|
|
reset_done_flags(); |
|
|
|
|
remove_si(&si_a); remove_si(&si_b); |
|
|
|
|
si_a = db_sync_instance_add(inst_a, "test2", 2, 0); |
|
|
|
|
si_b = db_sync_instance_add(inst_b, "test2", 2, 0); |
|
|
|
|
si_a = add_table(inst_a, "test2", 2); |
|
|
|
|
si_b = add_table(inst_b, "test2", 2); |
|
|
|
|
if (!si_a || !si_b) { test_phase = 2; goto done; } |
|
|
|
|
if (insert_many(si_a, inst_a, 0, 3) != 0 || insert_many(si_b, inst_b, 10, 2) != 0) |
|
|
|
|
{ test_phase = 2; goto done; } |
|
|
|
|
@ -287,8 +298,8 @@ int main(void) {
|
|
|
|
|
printf("Phase 4: divergence merge 2\n"); |
|
|
|
|
reset_done_flags(); |
|
|
|
|
remove_si(&si_a); remove_si(&si_b); |
|
|
|
|
si_a = db_sync_instance_add(inst_a, "test_div", 30, 0); |
|
|
|
|
si_b = db_sync_instance_add(inst_b, "test_div", 30, 0); |
|
|
|
|
si_a = add_table(inst_a, "test_div", 30); |
|
|
|
|
si_b = add_table(inst_b, "test_div", 30); |
|
|
|
|
if (!si_a || !si_b) { test_phase = 2; goto done; } |
|
|
|
|
if (insert_many(si_a, inst_a, 0, 2) != 0 || insert_many(si_b, inst_b, 10, 2) != 0) |
|
|
|
|
{ test_phase = 2; goto done; } |
|
|
|
|
@ -305,8 +316,8 @@ int main(void) {
|
|
|
|
|
printf("Phase 5: PUSH not-at-tail\n"); |
|
|
|
|
reset_done_flags(); |
|
|
|
|
remove_si(&si_a); remove_si(&si_b); |
|
|
|
|
si_a = db_sync_instance_add(inst_a, "push_t", 40, 1); |
|
|
|
|
si_b = db_sync_instance_add(inst_b, "push_t", 40, 1); |
|
|
|
|
si_a = add_table(inst_a, "push_t", 40); |
|
|
|
|
si_b = add_table(inst_b, "push_t", 40); |
|
|
|
|
if (!si_a || !si_b) { test_phase = 2; goto done; } |
|
|
|
|
if (insert_many(si_a, inst_a, 0, 2) != 0) { test_phase = 2; goto done; } |
|
|
|
|
cb_target = 2; |
|
|
|
|
@ -343,9 +354,9 @@ int main(void) {
|
|
|
|
|
if (!wait_for("C links up", cond_links_init, PHASE_TIMEOUT_TB)) { test_phase = 2; goto done; } |
|
|
|
|
if (!wait_for("pubkeys", cond_pubkeys_ready, PHASE_TIMEOUT_TB)) { test_phase = 2; goto done; } |
|
|
|
|
|
|
|
|
|
si_a = db_sync_instance_add(inst_a, "triple", 70, 0); |
|
|
|
|
si_b = db_sync_instance_add(inst_b, "triple", 70, 0); |
|
|
|
|
si_c = db_sync_instance_add(inst_c, "triple", 70, 0); |
|
|
|
|
si_a = add_table(inst_a, "triple", 70); |
|
|
|
|
si_b = add_table(inst_b, "triple", 70); |
|
|
|
|
si_c = add_table(inst_c, "triple", 70); |
|
|
|
|
if (!si_a || !si_b || !si_c) { test_phase = 2; goto done; } |
|
|
|
|
if (insert_many(si_a, inst_a, 0, 2) != 0 || insert_many(si_b, inst_b, 10, 1) != 0 |
|
|
|
|
|| insert_many(si_c, inst_c, 20, 1) != 0) { test_phase = 2; goto done; } |
|
|
|
|
@ -394,9 +405,9 @@ int main(void) {
|
|
|
|
|
srand((unsigned)time(NULL)); |
|
|
|
|
printf("seed=%u\n", (unsigned)time(NULL)); |
|
|
|
|
|
|
|
|
|
si_a = db_sync_instance_add(inst_a, "rnd_triple", 80, 0); |
|
|
|
|
si_b = db_sync_instance_add(inst_b, "rnd_triple", 80, 0); |
|
|
|
|
si_c = db_sync_instance_add(inst_c, "rnd_triple", 80, 0); |
|
|
|
|
si_a = add_table(inst_a, "rnd_triple", 80); |
|
|
|
|
si_b = add_table(inst_b, "rnd_triple", 80); |
|
|
|
|
si_c = add_table(inst_c, "rnd_triple", 80); |
|
|
|
|
if (!si_a || !si_b || !si_c) { test_phase = 2; goto done; } |
|
|
|
|
|
|
|
|
|
// -- Round 1: cold start divergence merge with 0..20 random records per peer --
|
|
|
|
|
|