diff --git a/tests/test_dummynet_channels.c b/tests/test_dummynet_channels.c index 3875024e..57c6b473 100644 --- a/tests/test_dummynet_channels.c +++ b/tests/test_dummynet_channels.c @@ -88,6 +88,7 @@ static void bandwidth(unsigned bw) { CHECK(elapsed * 100 >= expected * 95 && elapsed * 100 <= expected * 105 + 5000); const struct dummynet_stats* stats = dummynet_get_stats(dn, 1-i); CHECK(stats->sent_bytes == total && !stats->queue_size && !stats->lost && !stats->dropped); + CHECK(stats->max_queue_delay_us <= elapsed && stats->max_queue_delay_us >= expected - 40000); } teardown(); } diff --git a/tests/test_etcp_multipath.c b/tests/test_etcp_multipath.c index 824063f9..b73c0c96 100644 --- a/tests/test_etcp_multipath.c +++ b/tests/test_etcp_multipath.c @@ -286,13 +286,16 @@ static uint64_t measure_rate(const struct profile* settings, unsigned count, uns for (unsigned p = 0; p < count; p++) if (mask & (1u << p)) { uint64_t wire = dummynet_get_stats(channels[p], side)->sent_bytes * 8000 / elapsed; uint64_t unique = traffic[side][p].rx_unique * 8000 / elapsed; + uint64_t queue_us = dummynet_get_stats(channels[p], side)->max_queue_delay_us; unique_total += traffic[side][p].rx_unique; capacity += settings[p].kbps; - DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "RATE %s dir=%u path=%u RTT=%u BWlim=%u wire=%llu unique=%llu kbps retries=%llu", + DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "RATE %s dir=%u path=%u RTT=%u BWlim=%u wire=%llu unique=%llu kbps retries=%llu queue_us=%llu", case_name, side, p, settings[p].rtt_ms, settings[p].kbps, (unsigned long long)wire, - (unsigned long long)unique, (unsigned long long)traffic[side][p].retries); + (unsigned long long)unique, (unsigned long long)traffic[side][p].retries, (unsigned long long)queue_us); expect(wire >= settings[p].kbps * 90 / 100, "channel wire utilization >=90%", wire, settings[p].kbps * 90 / 100); expect(unique >= settings[p].kbps * 80 / 100, "channel unique DATA >=80%", unique, settings[p].kbps * 80 / 100); + expect(queue_us <= (settings[p].rtt_ms + 20) * 1000ULL, "queue delay <=base RTT+20ms", + queue_us, (settings[p].rtt_ms + 20) * 1000ULL); } uint64_t fresh = unique_total * 8000 / elapsed; DEBUG_INFO(DEBUG_CATEGORY_DEBUG, "GOODPUT %s dir=%u application=%llu fresh_DATA=%llu capacity=%llu kbps", case_name, side,