Browse Source

tests: resend withdrawn relay advertisements during recovery

master
evgeny 2 weeks ago
parent
commit
969c085085
  1. 11
      tests/test_conn_mgr_phases.c

11
tests/test_conn_mgr_phases.c

@ -661,6 +661,12 @@ static int run_relay_recovery(void) {
}
struct ETCP_CONN* to_a = instance_find_conn(inst_c, nid_a);
struct TOPO_GROUP_NODE* b_on_c = topo_node_find_by_id(defgrp(inst_c), nid_b);
// Получатель потерял анонс: очищаем кэш отправителя, чтобы NODEINFO действительно ушёл по сети.
for (struct ll_entry* e = defgrp(inst_c)->senders_list->head; e; e = e->next) {
struct TOPO_GROUP_CONN_ITEM* peer = (struct TOPO_GROUP_CONN_ITEM*)e->data;
struct ll_entry* advert = peer->node_id == nid_a && peer->advertised ? queue_find_data_by_index(peer->advertised, &nid_b) : NULL;
if (advert) { queue_remove_data(peer->advertised, advert); queue_entry_free(advert); }
}
if (!to_a || !b_on_c || topo_group_send_nodeinfo(defgrp(inst_c), b_on_c, to_a) < 0) return -1;
ev_a = -1;
if (!poll_until(ev_a_up, 3000) || up_count != 2 || down_count != 1 || timeout_count ||
@ -696,6 +702,11 @@ static int run_initial_timeout(void) {
}
struct ETCP_CONN* to_a = instance_find_conn(inst_c, nid_a);
struct TOPO_GROUP_NODE* b_on_c = topo_node_find_by_id(defgrp(inst_c), nid_b);
for (struct ll_entry* e = defgrp(inst_c)->senders_list->head; e; e = e->next) {
struct TOPO_GROUP_CONN_ITEM* peer = (struct TOPO_GROUP_CONN_ITEM*)e->data;
struct ll_entry* advert = peer->node_id == nid_a && peer->advertised ? queue_find_data_by_index(peer->advertised, &nid_b) : NULL;
if (advert) { queue_remove_data(peer->advertised, advert); queue_entry_free(advert); }
}
if (!to_a || !b_on_c || topo_group_send_nodeinfo(defgrp(inst_c), b_on_c, to_a) < 0) return -1;
ev_a = -1;
if (!poll_until(ev_a_up, 3000) || up_count != 1 || timeout_count != 1 || down_count) {

Loading…
Cancel
Save