diff --git a/tests/test_stream_core.c b/tests/test_stream_core.c index 7ee55e05..bdcc1d62 100644 --- a/tests/test_stream_core.c +++ b/tests/test_stream_core.c @@ -6,6 +6,7 @@ #include "../src/stream/stream_source.h" #include "../src/stream/stream_metrics.h" #include "../src/stream/stream_load.h" +#include "../src/stream/stream_optimizer.h" #include "../lib/debug_config.h" #include "../lib/mem.h" #include "test_clock.h" @@ -381,6 +382,26 @@ static void test_source_timer(void) { DEBUG_INFO(DEBUG_CATEGORY_STREAM, "[PASS] source: 100ms timer, immediate full batch, padding, finish and cancellation on destroy"); } +static void test_probe_schedule(void) { + struct stream_probe_schedule schedule = {0}; + CHECK(stream_probe_schedule_tick(&schedule, 0, 40, 0) == 32 && schedule.cycle == 1); + CHECK(stream_probe_schedule_tick(&schedule, 999, 8, 32) == 0); + CHECK(stream_probe_schedule_tick(&schedule, 1000, 8, 32) == 1 && schedule.cycle == 1); + CHECK(stream_probe_schedule_tick(&schedule, 1001, 7, 32) == 0); + for (uint64_t now = 2000; now <= 29000; now += 1000) + CHECK(stream_probe_schedule_tick(&schedule, now, 0, 0) == 1 && schedule.cycle == 1); + CHECK(stream_probe_schedule_tick(&schedule, 29999, 1, 0) == 0); /* Новая запись не добавляет второй burst. */ + CHECK(stream_probe_schedule_tick(&schedule, 30000, 1, 0) == 1 && schedule.cycle == 1); + CHECK(stream_probe_schedule_tick(&schedule, 31000, 0, 1) == 1 && schedule.cycle == 1); /* Ещё идёт старая проба. */ + CHECK(stream_probe_schedule_tick(&schedule, 32000, 0, 0) == 1 && schedule.cycle == 2 && schedule.started_ms == 32000); + CHECK(stream_probe_schedule_tick(&schedule, 32001, 40, 0) == 0); + memset(&schedule, 0, sizeof(schedule)); + CHECK(stream_probe_schedule_tick(&schedule, 0, 0, 0) == 32); + CHECK(stream_probe_schedule_tick(&schedule, 30000, 0, 0) == 1 && schedule.cycle == 2); + CHECK(stream_probe_schedule_tick(&schedule, 60000, 0, 0) == 1 && schedule.cycle == 3); + DEBUG_INFO(DEBUG_CATEGORY_STREAM, "[PASS] probe schedule: one 32-node burst, 1/s, new peers, 30s minimum and unfinished cycles"); +} + int main(void) { debug_config_init(); debug_set_level(DEBUG_LEVEL_ERROR); @@ -392,6 +413,7 @@ int main(void) { test_signed_blocks(); CHECK(u_get_allocated_count() == allocations); test_wire(); CHECK(u_get_allocated_count() == allocations); test_load(); CHECK(u_get_allocated_count() == allocations); + test_probe_schedule(); CHECK(u_get_allocated_count() == allocations); test_fec_and_padding(); CHECK(u_get_allocated_count() == allocations); test_ring_and_conflicts(); CHECK(u_get_allocated_count() == allocations); test_relative_metrics(); CHECK(u_get_allocated_count() == allocations);