Isolate packet loss fixtures between call policy scenarios

This commit is contained in:
evgeny committed 2026-10-19 15:03:59 +02:00
1 parent babcb7786a
commit 5a318f6f60
2 files changed
+4 -1

No files matched your search

+1
View File
@@ -872,6 +872,7 @@ static void call_tick(void* arg) {
break; break;
case P_POLICY_START: { case P_POLICY_START: {
DEBUG_INFO(DEBUG_CATEGORY_CALL, "phone policy starting scenario=%d", t->policy_index); DEBUG_INFO(DEBUG_CATEGORY_CALL, "phone policy starting scenario=%d", t->policy_index);
g_drop_acks[IDX_A] = g_drop_acks[IDX_B] = 0;
static const struct { int state; unsigned policy; } policies[] = { static const struct { int state; unsigned policy; } policies[] = {
{0, CALL_POLICY_WARN_PHONE}, {2, CALL_POLICY_PUBLISH_PHONE}, {2, CALL_POLICY_WARN_PHONE}, {0, CALL_POLICY_WARN_PHONE}, {2, CALL_POLICY_PUBLISH_PHONE}, {2, CALL_POLICY_WARN_PHONE},
{2, CALL_POLICY_WARN_PHONE}, {2, CALL_POLICY_WARN_PHONE | CALL_POLICY_REJECT_PHONE}, {2, CALL_POLICY_WARN_PHONE}, {2, CALL_POLICY_WARN_PHONE | CALL_POLICY_REJECT_PHONE},
+3 -1
View File
@@ -126,7 +126,7 @@ static void call_packet_loss(struct ETCP_CONN* conn, struct ll_entry* entry) {
int cmd = entry->dgram[ROUTER_SVC_PAYLOAD_OFF]; int cmd = entry->dgram[ROUTER_SVC_PAYLOAD_OFF];
if ((idx == IDX_A && cmd == 3 && g_drop_result-- > 0) || (idx == IDX_C && cmd == 4 && g_drop_ack-- > 0) || if ((idx == IDX_A && cmd == 3 && g_drop_result-- > 0) || (idx == IDX_C && cmd == 4 && g_drop_ack-- > 0) ||
(idx == IDX_C && cmd == 6 && g_drop_force-- > 0)) { (idx == IDX_C && cmd == 6 && g_drop_force-- > 0)) {
DEBUG_INFO(DEBUG_CATEGORY_RADIO, "test drops radio result/ACK dst=%d command=%d", idx, cmd); DEBUG_INFO(DEBUG_CATEGORY_RADIO, "test drops radio signaling dst=%d command=%d", idx, cmd);
queue_dgram_free(entry); queue_entry_free(entry); return; queue_dgram_free(entry); queue_entry_free(entry); return;
} }
g_call_recv[idx](conn, entry); g_call_recv[idx](conn, entry);
@@ -603,6 +603,8 @@ static void rad_tick(void* arg) {
t->result = 2; uasync_stop(t->ua); return; t->result = 2; uasync_stop(t->ua); return;
} }
DEBUG_INFO(DEBUG_CATEGORY_RADIO, "test radio calls passed: 2s/60s, accept/decline/cancel/busy, lost result/ACK, idle has no timer"); DEBUG_INFO(DEBUG_CATEGORY_RADIO, "test radio calls passed: 2s/60s, accept/decline/cancel/busy, lost result/ACK, idle has no timer");
// Проверка idle пересоздала сервис и его binding; снова включаем потерю пакетов приложения.
for (int i = 0; i < 3; ++i) t->inst[i]->router_bindings.callbacks[ETCP_RT_ID_RADIO_CALL] = call_packet_loss;
call_set_phone_state(C, 2, CALL_POLICY_WARN_PHONE); call_set_phone_state(C, 2, CALL_POLICY_WARN_PHONE);
radio_action(A, 108, RADIO_CALL_START, nc); ++t->call_step; radio_action(A, 108, RADIO_CALL_START, nc); ++t->call_step;
} }