blob: 9e38220e01287a1b4f21e222abfbce5172253ef6 [file] [log] [blame]
stefan@webrtc.org82462aa2014-10-23 11:57:05 +00001/*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include <limits>
12
13#include "testing/gtest/include/gtest/gtest.h"
14#include "webrtc/modules/pacing/bitrate_prober.h"
15
16namespace webrtc {
17
18TEST(BitrateProberTest, VerifyStatesAndTimeBetweenProbes) {
19 BitrateProber prober;
20 EXPECT_FALSE(prober.IsProbing());
21 int64_t now_ms = 0;
stefan@webrtc.orge9f0f592015-02-16 15:47:51 +000022 EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000023
24 prober.SetEnabled(true);
25 EXPECT_FALSE(prober.IsProbing());
26
Peter Boström0453ef82016-02-16 16:23:08 +010027 prober.OnIncomingPacket(300000, 1000, now_ms);
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000028 EXPECT_TRUE(prober.IsProbing());
philipeldd324862016-05-06 17:06:14 +020029 EXPECT_EQ(0, prober.CurrentClusterId());
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000030
Peter Boström0453ef82016-02-16 16:23:08 +010031 // First packet should probe as soon as possible.
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000032 EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
33 prober.PacketSent(now_ms, 1000);
34
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000035 for (int i = 0; i < 5; ++i) {
stefan@webrtc.orgd839e0a2014-11-04 19:33:55 +000036 EXPECT_EQ(8, prober.TimeUntilNextProbe(now_ms));
37 now_ms += 4;
38 EXPECT_EQ(4, prober.TimeUntilNextProbe(now_ms));
39 now_ms += 4;
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000040 EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
philipeldd324862016-05-06 17:06:14 +020041 EXPECT_EQ(0, prober.CurrentClusterId());
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000042 prober.PacketSent(now_ms, 1000);
43 }
44 for (int i = 0; i < 5; ++i) {
45 EXPECT_EQ(4, prober.TimeUntilNextProbe(now_ms));
46 now_ms += 4;
47 EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
philipeldd324862016-05-06 17:06:14 +020048 EXPECT_EQ(1, prober.CurrentClusterId());
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000049 prober.PacketSent(now_ms, 1000);
50 }
51
stefan@webrtc.orge9f0f592015-02-16 15:47:51 +000052 EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000053 EXPECT_FALSE(prober.IsProbing());
54}
Peter Boström0453ef82016-02-16 16:23:08 +010055
56TEST(BitrateProberTest, DoesntProbeWithoutRecentPackets) {
57 BitrateProber prober;
58 EXPECT_FALSE(prober.IsProbing());
59 int64_t now_ms = 0;
60 EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
61
62 prober.SetEnabled(true);
63 EXPECT_FALSE(prober.IsProbing());
64
65 prober.OnIncomingPacket(300000, 1000, now_ms);
66 EXPECT_TRUE(prober.IsProbing());
67 EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
68 // Let time pass, no large enough packets put into prober.
69 now_ms += 6000;
70 EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
71 // Insert a small packet, not a candidate for probing.
72 prober.OnIncomingPacket(300000, 100, now_ms);
73 prober.PacketSent(now_ms, 100);
74 EXPECT_EQ(-1, prober.TimeUntilNextProbe(now_ms));
75 // Insert a large-enough packet after downtime while probing should reset to
76 // perform a new probe since the requested one didn't finish.
77 prober.OnIncomingPacket(300000, 1000, now_ms);
78 EXPECT_EQ(0, prober.TimeUntilNextProbe(now_ms));
79 prober.PacketSent(now_ms, 1000);
80 // Next packet should be part of new probe and be sent with non-zero delay.
81 prober.OnIncomingPacket(300000, 1000, now_ms);
82 EXPECT_GT(prober.TimeUntilNextProbe(now_ms), 0);
83}
84
85TEST(BitrateProberTest, DoesntInitializeProbingForSmallPackets) {
86 BitrateProber prober;
87 prober.SetEnabled(true);
88 EXPECT_FALSE(prober.IsProbing());
89
90 prober.OnIncomingPacket(300000, 100, 0);
91 EXPECT_FALSE(prober.IsProbing());
92}
93
stefan@webrtc.org82462aa2014-10-23 11:57:05 +000094} // namespace webrtc