Move AGC2 config ToString to the right place and update Validate()

The APM config to string mapping must be in one place (namely,
in `audio_processing.cc`). This CL moves the AGC2 config to string
impl to the right place.

This CL also updates `GainController2::Validate()` and adds the
missing unit tests for the parameters that have recently been added.

Stack buffer size in `AudioProcessing::Config::ToString()` increased
because of the extra params. Syntax near `multi_channel_capture` fixed.
Output string format verified with a JS linter.

Bug: webrtc:7494
Change-Id: I692e1549b7d40c970d88a14c8e83da16325fb54c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/187080
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32400}
diff --git a/modules/audio_processing/gain_controller2_unittest.cc b/modules/audio_processing/gain_controller2_unittest.cc
index 9369a8a..09bad50 100644
--- a/modules/audio_processing/gain_controller2_unittest.cc
+++ b/modules/audio_processing/gain_controller2_unittest.cc
@@ -104,36 +104,107 @@
 
 }  // namespace
 
-TEST(GainController2, CreateApplyConfig) {
-  // Instances GainController2 and applies different configurations.
-  std::unique_ptr<GainController2> gain_controller2(new GainController2());
-
-  // Check that the default config is valid.
+TEST(GainController2, CheckDefaultConfig) {
   AudioProcessing::Config::GainController2 config;
   EXPECT_TRUE(GainController2::Validate(config));
-  gain_controller2->ApplyConfig(config);
-
-  // Check that attenuation is not allowed.
-  config.fixed_digital.gain_db = -5.f;
-  EXPECT_FALSE(GainController2::Validate(config));
-
-  // Check that valid configurations are applied.
-  for (const float& fixed_gain_db : {0.f, 5.f, 10.f, 40.f}) {
-    config.fixed_digital.gain_db = fixed_gain_db;
-    EXPECT_TRUE(GainController2::Validate(config));
-    gain_controller2->ApplyConfig(config);
-  }
 }
 
-TEST(GainController2, ToString) {
-  // Tests GainController2::ToString(). Only test the enabled property.
+TEST(GainController2, CheckFixedDigitalConfig) {
   AudioProcessing::Config::GainController2 config;
+  // Attenuation is not allowed.
+  config.fixed_digital.gain_db = -5.f;
+  EXPECT_FALSE(GainController2::Validate(config));
+  // No gain is allowed.
+  config.fixed_digital.gain_db = 0.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+  // Positive gain is allowed.
+  config.fixed_digital.gain_db = 15.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+}
 
-  config.enabled = false;
-  EXPECT_EQ("{enabled: false", GainController2::ToString(config).substr(0, 15));
+TEST(GainController2, CheckAdaptiveDigitalVadProbabilityAttackConfig) {
+  AudioProcessing::Config::GainController2 config;
+  // Reject invalid attack.
+  config.adaptive_digital.vad_probability_attack = -123.f;
+  EXPECT_FALSE(GainController2::Validate(config));
+  config.adaptive_digital.vad_probability_attack = 0.f;
+  EXPECT_FALSE(GainController2::Validate(config));
+  config.adaptive_digital.vad_probability_attack = 42.f;
+  EXPECT_FALSE(GainController2::Validate(config));
+  // Accept valid attack.
+  config.adaptive_digital.vad_probability_attack = 0.1f;
+  EXPECT_TRUE(GainController2::Validate(config));
+  config.adaptive_digital.vad_probability_attack = 1.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+}
 
-  config.enabled = true;
-  EXPECT_EQ("{enabled: true", GainController2::ToString(config).substr(0, 14));
+TEST(GainController2,
+     CheckAdaptiveDigitalLevelEstimatorSpeechFramesThresholdConfig) {
+  AudioProcessing::Config::GainController2 config;
+  config.adaptive_digital.level_estimator_adjacent_speech_frames_threshold = 0;
+  EXPECT_FALSE(GainController2::Validate(config));
+  config.adaptive_digital.level_estimator_adjacent_speech_frames_threshold = 1;
+  EXPECT_TRUE(GainController2::Validate(config));
+  config.adaptive_digital.level_estimator_adjacent_speech_frames_threshold = 7;
+  EXPECT_TRUE(GainController2::Validate(config));
+}
+
+TEST(GainController2, CheckAdaptiveDigitalInitialSaturationMarginConfig) {
+  AudioProcessing::Config::GainController2 config;
+  config.adaptive_digital.initial_saturation_margin_db = -1.f;
+  EXPECT_FALSE(GainController2::Validate(config));
+  config.adaptive_digital.initial_saturation_margin_db = 0.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+  config.adaptive_digital.initial_saturation_margin_db = 50.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+}
+
+TEST(GainController2, CheckAdaptiveDigitalExtraSaturationMarginConfig) {
+  AudioProcessing::Config::GainController2 config;
+  config.adaptive_digital.extra_saturation_margin_db = -1.f;
+  EXPECT_FALSE(GainController2::Validate(config));
+  config.adaptive_digital.extra_saturation_margin_db = 0.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+  config.adaptive_digital.extra_saturation_margin_db = 50.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+}
+
+TEST(GainController2,
+     CheckAdaptiveDigitalGainApplierSpeechFramesThresholdConfig) {
+  AudioProcessing::Config::GainController2 config;
+  config.adaptive_digital.gain_applier_adjacent_speech_frames_threshold = 0;
+  EXPECT_FALSE(GainController2::Validate(config));
+  config.adaptive_digital.gain_applier_adjacent_speech_frames_threshold = 1;
+  EXPECT_TRUE(GainController2::Validate(config));
+  config.adaptive_digital.gain_applier_adjacent_speech_frames_threshold = 7;
+  EXPECT_TRUE(GainController2::Validate(config));
+}
+
+TEST(GainController2, CheckAdaptiveDigitalMaxGainChangeSpeedConfig) {
+  AudioProcessing::Config::GainController2 config;
+  config.adaptive_digital.max_gain_change_db_per_second = -1.f;
+  EXPECT_FALSE(GainController2::Validate(config));
+  config.adaptive_digital.max_gain_change_db_per_second = 0.f;
+  EXPECT_FALSE(GainController2::Validate(config));
+  config.adaptive_digital.max_gain_change_db_per_second = 5.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+}
+
+TEST(GainController2, CheckAdaptiveDigitalMaxOutputNoiseLevelConfig) {
+  AudioProcessing::Config::GainController2 config;
+  config.adaptive_digital.max_output_noise_level_dbfs = 5.f;
+  EXPECT_FALSE(GainController2::Validate(config));
+  config.adaptive_digital.max_output_noise_level_dbfs = 0.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+  config.adaptive_digital.max_output_noise_level_dbfs = -5.f;
+  EXPECT_TRUE(GainController2::Validate(config));
+}
+
+// Checks that the default config is applied.
+TEST(GainController2, ApplyDefaultConfig) {
+  auto gain_controller2 = std::make_unique<GainController2>();
+  AudioProcessing::Config::GainController2 config;
+  gain_controller2->ApplyConfig(config);
 }
 
 TEST(GainController2FixedDigital, GainShouldChangeOnSetGain) {