Add more unit tests for RateControlSettings.

Bug: webrtc:10271
Change-Id: I882c1ebe8f99cc93331b30a2c0bd4ab48f8ed037
Reviewed-on: https://webrtc-review.googlesource.com/c/121400
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Rasmus Brandt <brandtr@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26564}
diff --git a/rtc_base/experiments/rate_control_settings_unittest.cc b/rtc_base/experiments/rate_control_settings_unittest.cc
index d049bc7..ae9a192 100644
--- a/rtc_base/experiments/rate_control_settings_unittest.cc
+++ b/rtc_base/experiments/rate_control_settings_unittest.cc
@@ -19,35 +19,109 @@
 
 namespace {
 
-TEST(RateControlSettingsTest, LibvpxTrustedRateController) {
-  test::ScopedFieldTrials field_trials(
-      "WebRTC-VideoRateControl/trust_vp8:1,trust_vp9:0/");
-  const RateControlSettings rate_control_settings =
-      RateControlSettings::ParseFromFieldTrials();
+TEST(RateControlSettingsTest, CongestionWindow) {
+  EXPECT_FALSE(
+      RateControlSettings::ParseFromFieldTrials().UseCongestionWindow());
 
-  EXPECT_TRUE(rate_control_settings.LibvpxVp8TrustedRateController());
-  EXPECT_FALSE(rate_control_settings.LibvpxVp9TrustedRateController());
+  test::ScopedFieldTrials field_trials("WebRTC-VideoRateControl/cwnd:100/");
+  const RateControlSettings settings_after =
+      RateControlSettings::ParseFromFieldTrials();
+  EXPECT_TRUE(settings_after.UseCongestionWindow());
+  EXPECT_EQ(settings_after.GetCongestionWindowAdditionalTimeMs(), 100);
+}
+
+TEST(RateControlSettingsTest, CongestionWindowPushback) {
+  EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials()
+                   .UseCongestionWindowPushback());
+
+  test::ScopedFieldTrials field_trials(
+      "WebRTC-VideoRateControl/cwnd:100,cwnd_pushback:100000/");
+  const RateControlSettings settings_after =
+      RateControlSettings::ParseFromFieldTrials();
+  EXPECT_TRUE(settings_after.UseCongestionWindowPushback());
+  EXPECT_EQ(settings_after.CongestionWindowMinPushbackTargetBitrateBps(),
+            100000u);
+}
+
+TEST(RateControlSettingsTest, PacingFactor) {
+  EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials().GetPacingFactor());
+
+  test::ScopedFieldTrials field_trials(
+      "WebRTC-VideoRateControl/pacing_factor:1.2/");
+  const RateControlSettings settings_after =
+      RateControlSettings::ParseFromFieldTrials();
+  // Need to explicitly dereference the absl::optional
+  // for the EXPECT_DOUBLE_EQ to compile.
+  ASSERT_TRUE(settings_after.GetPacingFactor());
+  EXPECT_DOUBLE_EQ(*settings_after.GetPacingFactor(), 1.2);
+}
+
+TEST(RateControlSettingsTest, AlrProbing) {
+  EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials().UseAlrProbing());
+
+  test::ScopedFieldTrials field_trials(
+      "WebRTC-VideoRateControl/alr_probing:1/");
+  EXPECT_TRUE(RateControlSettings::ParseFromFieldTrials().UseAlrProbing());
+}
+
+TEST(RateControlSettingsTest, LibvpxTrustedRateController) {
+  const RateControlSettings settings_before =
+      RateControlSettings::ParseFromFieldTrials();
+  EXPECT_FALSE(settings_before.LibvpxVp8TrustedRateController());
+  EXPECT_FALSE(settings_before.LibvpxVp9TrustedRateController());
+
+  test::ScopedFieldTrials field_trials(
+      "WebRTC-VideoRateControl/trust_vp8:1,trust_vp9:1/");
+  const RateControlSettings settings_after =
+      RateControlSettings::ParseFromFieldTrials();
+  EXPECT_TRUE(settings_after.LibvpxVp8TrustedRateController());
+  EXPECT_TRUE(settings_after.LibvpxVp9TrustedRateController());
 }
 
 TEST(RateControlSettingsTest, GetSimulcastHysteresisFactor) {
+  const RateControlSettings settings_before =
+      RateControlSettings::ParseFromFieldTrials();
+  EXPECT_DOUBLE_EQ(settings_before.GetSimulcastHysteresisFactor(
+                       VideoCodecMode::kRealtimeVideo),
+                   1.0);
+  EXPECT_DOUBLE_EQ(settings_before.GetSimulcastHysteresisFactor(
+                       VideoEncoderConfig::ContentType::kRealtimeVideo),
+                   1.0);
+  EXPECT_DOUBLE_EQ(settings_before.GetSimulcastHysteresisFactor(
+                       VideoCodecMode::kScreensharing),
+                   1.35);
+  EXPECT_DOUBLE_EQ(settings_before.GetSimulcastHysteresisFactor(
+                       VideoEncoderConfig::ContentType::kScreen),
+                   1.35);
+
   test::ScopedFieldTrials field_trials(
       "WebRTC-VideoRateControl/"
       "video_hysteresis:1.2,screenshare_hysteresis:1.4/");
-  const RateControlSettings rate_control_settings =
+  const RateControlSettings settings_after =
       RateControlSettings::ParseFromFieldTrials();
 
-  EXPECT_EQ(rate_control_settings.GetSimulcastHysteresisFactor(
-                VideoCodecMode::kRealtimeVideo),
-            1.2);
-  EXPECT_EQ(rate_control_settings.GetSimulcastHysteresisFactor(
-                VideoEncoderConfig::ContentType::kRealtimeVideo),
-            1.2);
-  EXPECT_EQ(rate_control_settings.GetSimulcastHysteresisFactor(
-                VideoCodecMode::kScreensharing),
-            1.4);
-  EXPECT_EQ(rate_control_settings.GetSimulcastHysteresisFactor(
-                VideoEncoderConfig::ContentType::kScreen),
-            1.4);
+  EXPECT_DOUBLE_EQ(settings_after.GetSimulcastHysteresisFactor(
+                       VideoCodecMode::kRealtimeVideo),
+                   1.2);
+  EXPECT_DOUBLE_EQ(settings_after.GetSimulcastHysteresisFactor(
+                       VideoEncoderConfig::ContentType::kRealtimeVideo),
+                   1.2);
+  EXPECT_DOUBLE_EQ(settings_after.GetSimulcastHysteresisFactor(
+                       VideoCodecMode::kScreensharing),
+                   1.4);
+  EXPECT_DOUBLE_EQ(settings_after.GetSimulcastHysteresisFactor(
+                       VideoEncoderConfig::ContentType::kScreen),
+                   1.4);
+}
+
+TEST(RateControlSettingsTest, TriggerProbeOnMaxAllocatedBitrateChange) {
+  EXPECT_TRUE(RateControlSettings::ParseFromFieldTrials()
+                  .TriggerProbeOnMaxAllocatedBitrateChange());
+
+  test::ScopedFieldTrials field_trials(
+      "WebRTC-VideoRateControl/probe_max_allocation:0/");
+  EXPECT_FALSE(RateControlSettings::ParseFromFieldTrials()
+                   .TriggerProbeOnMaxAllocatedBitrateChange());
 }
 
 }  // namespace