Finished rewriting the codec test.

Rewrote more tests.

Rewrote most of the codec test and removed it from the regular test.

BUG=
TEST=

Review URL: http://webrtc-codereview.appspot.com/329008

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1355 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/voice_engine/main/test/auto_test/standard/codec_test.cc b/src/voice_engine/main/test/auto_test/standard/codec_test.cc
new file mode 100644
index 0000000..4191ef3
--- /dev/null
+++ b/src/voice_engine/main/test/auto_test/standard/codec_test.cc
@@ -0,0 +1,230 @@
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "after_streaming_fixture.h"
+#include "voice_engine_defines.h"
+
+class CodecTest : public AfterStreamingFixture {
+ protected:
+  void SetUp() {
+    memset(&codec_instance_, 0, sizeof(codec_instance_));
+  }
+
+  void SetArbitrarySendCodec() {
+    // Just grab the first codec.
+    EXPECT_EQ(0, voe_codec_->GetCodec(0, codec_instance_));
+    EXPECT_EQ(0, voe_codec_->SetSendCodec(channel_, codec_instance_));
+  }
+
+  webrtc::CodecInst codec_instance_;
+};
+
+static void SetRateIfILBC(webrtc::CodecInst* codec_instance, int packet_size) {
+  if (!_stricmp(codec_instance->plname, "ilbc")) {
+    if (packet_size == 160 || packet_size == 320) {
+      codec_instance->rate = 15200;
+    } else {
+      codec_instance->rate = 13300;
+    }
+  }
+}
+
+static bool IsNotViableSendCodec(const char* codec_name) {
+  return !_stricmp(codec_name, "CN") ||
+         !_stricmp(codec_name, "telephone-event") ||
+         !_stricmp(codec_name, "red");
+}
+
+TEST_F(CodecTest, PcmuIsDefaultCodecAndHasTheRightValues) {
+  EXPECT_EQ(0, voe_codec_->GetSendCodec(channel_, codec_instance_));
+  EXPECT_EQ(1, codec_instance_.channels);
+  EXPECT_EQ(160, codec_instance_.pacsize);
+  EXPECT_EQ(8000, codec_instance_.plfreq);
+  EXPECT_EQ(0, codec_instance_.pltype);
+  EXPECT_EQ(64000, codec_instance_.rate);
+  EXPECT_STRCASEEQ("PCMU", codec_instance_.plname);
+}
+
+TEST_F(CodecTest, VoiceActivityDetectionIsOffByDefault) {
+  bool vad_enabled = false;
+  bool dtx_disabled = false;
+  webrtc::VadModes vad_mode = webrtc::kVadAggressiveMid;
+
+  voe_codec_->GetVADStatus(channel_, vad_enabled, vad_mode, dtx_disabled);
+
+  EXPECT_FALSE(vad_enabled);
+  EXPECT_TRUE(dtx_disabled);
+  EXPECT_EQ(webrtc::kVadConventional, vad_mode);
+}
+
+TEST_F(CodecTest, VoiceActivityDetectionCanBeEnabled) {
+  EXPECT_EQ(0, voe_codec_->SetVADStatus(channel_, true));
+
+  bool vad_enabled = false;
+  bool dtx_disabled = false;
+  webrtc::VadModes vad_mode = webrtc::kVadAggressiveMid;
+
+  voe_codec_->GetVADStatus(channel_, vad_enabled, vad_mode, dtx_disabled);
+
+  EXPECT_TRUE(vad_enabled);
+  EXPECT_EQ(webrtc::kVadConventional, vad_mode);
+  EXPECT_FALSE(dtx_disabled);
+}
+
+TEST_F(CodecTest, VoiceActivityDetectionTypeSettingsCanBeChanged) {
+  bool vad_enabled = false;
+  bool dtx_disabled = false;
+  webrtc::VadModes vad_mode = webrtc::kVadAggressiveMid;
+
+  EXPECT_EQ(0, voe_codec_->SetVADStatus(
+      channel_, true, webrtc::kVadAggressiveLow, false));
+  EXPECT_EQ(0, voe_codec_->GetVADStatus(
+      channel_, vad_enabled, vad_mode, dtx_disabled));
+  EXPECT_EQ(vad_mode, webrtc::kVadAggressiveLow);
+  EXPECT_FALSE(dtx_disabled);
+
+  EXPECT_EQ(0, voe_codec_->SetVADStatus(
+      channel_, true, webrtc::kVadAggressiveMid, false));
+  EXPECT_EQ(0, voe_codec_->GetVADStatus(
+      channel_, vad_enabled, vad_mode, dtx_disabled));
+  EXPECT_EQ(vad_mode, webrtc::kVadAggressiveMid);
+  EXPECT_FALSE(dtx_disabled);
+
+  // The fourth argument is the DTX disable flag.
+  EXPECT_EQ(0, voe_codec_->SetVADStatus(
+      channel_, true, webrtc::kVadAggressiveHigh, true));
+  EXPECT_EQ(0, voe_codec_->GetVADStatus(
+      channel_, vad_enabled, vad_mode, dtx_disabled));
+  EXPECT_EQ(vad_mode, webrtc::kVadAggressiveHigh);
+  EXPECT_TRUE(dtx_disabled);
+
+  EXPECT_EQ(0, voe_codec_->SetVADStatus(
+      channel_, true, webrtc::kVadConventional, true));
+  EXPECT_EQ(0, voe_codec_->GetVADStatus(
+      channel_, vad_enabled, vad_mode, dtx_disabled));
+  EXPECT_EQ(vad_mode, webrtc::kVadConventional);
+}
+
+TEST_F(CodecTest, VoiceActivityDetectionCanBeTurnedOff) {
+  EXPECT_EQ(0, voe_codec_->SetVADStatus(channel_, true));
+
+  // VAD is always on when DTX is on, so we need to turn off DTX too.
+  EXPECT_EQ(0, voe_codec_->SetVADStatus(
+      channel_, false, webrtc::kVadConventional, true));
+
+  bool vad_enabled = false;
+  bool dtx_disabled = false;
+  webrtc::VadModes vad_mode = webrtc::kVadAggressiveMid;
+
+  voe_codec_->GetVADStatus(channel_, vad_enabled, vad_mode, dtx_disabled);
+
+  EXPECT_FALSE(vad_enabled);
+  EXPECT_TRUE(dtx_disabled);
+  EXPECT_EQ(webrtc::kVadConventional, vad_mode);
+}
+
+// Tests requiring manual verification (although they do have some value
+// without the manual verification):
+TEST_F(CodecTest, ManualExtendedISACApisBehaveAsExpected) {
+   strcpy(codec_instance_.plname, "isac");
+   codec_instance_.pltype = 103;
+   codec_instance_.plfreq = 16000;
+   codec_instance_.channels = 1;
+   // -1 here means "adaptive rate".
+   codec_instance_.rate = -1;
+   codec_instance_.pacsize = 480;
+
+   EXPECT_EQ(0, voe_codec_->SetSendCodec(channel_, codec_instance_));
+
+   EXPECT_NE(0, voe_codec_->SetISACInitTargetRate(channel_, 5000)) <<
+       "iSAC should reject rate 5000.";
+   EXPECT_NE(0, voe_codec_->SetISACInitTargetRate(channel_, 33000)) <<
+       "iSAC should reject rate 33000.";
+   EXPECT_EQ(0, voe_codec_->SetISACInitTargetRate(channel_, 32000));
+
+   TEST_LOG("Ensure that the sound is good (iSAC, target = 32kbps)...\n");
+   Sleep(3000);
+
+   EXPECT_EQ(0, voe_codec_->SetISACInitTargetRate(channel_, 10000));
+   TEST_LOG("Ensure that the sound is good (iSAC, target = 10kbps)...\n");
+   Sleep(3000);
+
+   EXPECT_EQ(0, voe_codec_->SetISACInitTargetRate(channel_, 10000, true));
+   EXPECT_EQ(0, voe_codec_->SetISACInitTargetRate(channel_, 10000, false));
+   EXPECT_EQ(0, voe_codec_->SetISACInitTargetRate(channel_, 0));
+   TEST_LOG("Ensure that the sound is good (iSAC, target = default)...\n");
+   Sleep(3000);
+
+   TEST_LOG("  Testing SetISACMaxPayloadSize:\n");
+   EXPECT_EQ(0, voe_base_->StopSend(channel_));
+   EXPECT_NE(0, voe_codec_->SetISACMaxPayloadSize(channel_, 50));
+   EXPECT_NE(0, voe_codec_->SetISACMaxPayloadSize(channel_, 650));
+   EXPECT_EQ(0, voe_codec_->SetISACMaxPayloadSize(channel_, 120));
+   EXPECT_EQ(0, voe_base_->StartSend(channel_));
+   TEST_LOG("Ensure that the sound is good (iSAC, "
+            "max payload size = 100 bytes)...\n");
+   Sleep(3000);
+
+   TEST_LOG("  Testing SetISACMaxRate:\n");
+   EXPECT_EQ(0, voe_base_->StopSend(channel_));
+   EXPECT_EQ(0, voe_codec_->SetISACMaxPayloadSize(channel_, 400));
+   EXPECT_EQ(0, voe_base_->StartSend(channel_));
+
+   EXPECT_EQ(0, voe_base_->StopSend(channel_));
+   EXPECT_NE(0, voe_codec_->SetISACMaxRate(channel_, 31900));
+   EXPECT_NE(0, voe_codec_->SetISACMaxRate(channel_, 53500));
+   EXPECT_EQ(0, voe_codec_->SetISACMaxRate(channel_, 32000));
+   EXPECT_EQ(0, voe_base_->StartSend(channel_));
+   TEST_LOG("Ensure that the sound is good (iSAC, max rate = 32 kbps)...\n");
+   Sleep(3000);
+
+   EXPECT_EQ(0, voe_base_->StopSend(channel_));
+
+   // Restore "no limitation". No, no limit, we reach for the sky.
+   EXPECT_EQ(0, voe_codec_->SetISACMaxRate(channel_, 53400));
+   EXPECT_EQ(0, voe_base_->StartSend(channel_));
+}
+
+TEST_F(CodecTest, ManualVerifySendCodecsForAllPacketSizes) {
+  for (int i = 0; i < voe_codec_->NumOfCodecs(); ++i) {
+    voe_codec_->GetCodec(i, codec_instance_);
+    if (IsNotViableSendCodec(codec_instance_.plname)) {
+      TEST_LOG("Skipping %s.\n", codec_instance_.plname);
+      continue;
+    }
+    EXPECT_NE(-1, codec_instance_.pltype) <<
+        "The codec database should suggest a payload type.";
+
+    // Test with default packet size:
+    TEST_LOG("%s (pt=%d): default packet size(%d), accepts sizes ",
+             codec_instance_.plname, codec_instance_.pltype,
+             codec_instance_.pacsize);
+    voe_codec_->SetSendCodec(channel_, codec_instance_);
+    Sleep(CODEC_TEST_TIME);
+
+    // Now test other reasonable packet sizes:
+    bool at_least_one_succeeded = false;
+    for (int packet_size = 80; packet_size < 1000; packet_size += 80) {
+      SetRateIfILBC(&codec_instance_, packet_size);
+      codec_instance_.pacsize = packet_size;
+
+      if (voe_codec_->SetSendCodec(channel_, codec_instance_) != -1) {
+        // Note that it's fine for SetSendCodec to fail - what packet sizes
+        // it accepts depends on the codec. It should accept one at minimum.
+        TEST_LOG("%d ", packet_size);
+        TEST_LOG_FLUSH;
+        at_least_one_succeeded = true;
+        Sleep(CODEC_TEST_TIME);
+      }
+    }
+    TEST_LOG("\n");
+    EXPECT_TRUE(at_least_one_succeeded);
+  }
+}
diff --git a/src/voice_engine/main/test/auto_test/voe_standard_test.cc b/src/voice_engine/main/test/auto_test/voe_standard_test.cc
index 6491b73..591521d 100644
--- a/src/voice_engine/main/test/auto_test/voe_standard_test.cc
+++ b/src/voice_engine/main/test/auto_test/voe_standard_test.cc
@@ -971,295 +971,6 @@
   return 0;
 }
 
-int VoETestManager::TestCodecs() {
-
-#ifdef _TEST_CODEC_
-  CodecInst codec_instance;
-  memset(&codec_instance, 0, sizeof(codec_instance));
-
-  TEST_LOG("\n\n+++ Codec tests +++\n\n");
-
-  TEST_LOG("Checking default codec\n");
-  TEST_MUSTPASS(voe_codec_->GetSendCodec(0, codec_instance));
-  TEST_MUSTPASS(codec_instance.channels != 1);
-  TEST_MUSTPASS(codec_instance.pacsize != 160);
-  TEST_MUSTPASS(codec_instance.plfreq != 8000);
-  TEST_MUSTPASS(codec_instance.pltype != 0);
-  TEST_MUSTPASS(codec_instance.rate != 64000);
-  TEST_MUSTPASS(strcmp("PCMU", codec_instance.plname) != 0);
-
-  TEST_LOG("Looping through all codecs and packet sizes\n");
-  TEST_LOG("NOTE: For swb codecs, ensure that you speak in the mic\n");
-  int num_codecs = voe_codec_->NumOfCodecs();
-  for (int i = 0; i < num_codecs; i++) {
-    TEST_MUSTPASS(voe_codec_->GetCodec(i, codec_instance));
-
-    if (!((!_stricmp("CN", codec_instance.plname)) ||
-          (!_stricmp("telephone-event", codec_instance.plname) ||
-          (!_stricmp("red", codec_instance.plname))))) {
-      // If no default payload type is defined, we use 127 and also set
-      // receive payload type.
-      if (-1 == codec_instance.pltype) {
-        codec_instance.pltype = 127;
-        TEST_MUSTPASS(voe_base_->StopPlayout(0));
-        TEST_MUSTPASS(voe_base_->StopReceive(0));
-        TEST_MUSTPASS(voe_codec_->SetRecPayloadType(0, codec_instance));
-        TEST_MUSTPASS(voe_base_->StartReceive(0));
-        TEST_MUSTPASS(voe_base_->StartPlayout(0));
-      }
-      TEST_LOG("%s (pt=%d): default(%d) ", codec_instance.plname,
-               codec_instance.pltype, codec_instance.pacsize);
-      TEST_MUSTPASS(voe_codec_->SetSendCodec(0, codec_instance));
-      SLEEP(CODEC_TEST_TIME);
-      // special case for G.722.1:
-      if (!_stricmp("g7221", codec_instance.plname))
-      {
-        // Test 16 and 32 kHz.
-        for (int freq = 16000; freq <= 32000; freq += 16000) {
-          codec_instance.plfreq = freq;
-          // Test 16/24/32 and 24/32/48 kbit respectively.
-          int rate = (16000 == freq ? 16000 : 24000);
-          int maxRate = (16000 == freq ? 32000 : 40000);
-          // In fact 48, see below.
-          for (; rate <= maxRate; rate += 8000) {
-            rate = (40000 == rate ? 48000 : rate); // 40 -> 48
-            codec_instance.rate = rate;
-            // Test packet sizes.
-            TEST_LOG("\n%s (pt=%d, fs=%d, rate=%d): ", codec_instance.plname,
-                     codec_instance.pltype, codec_instance.plfreq,
-                     codec_instance.rate);
-            for (int packet_size = 80; packet_size < 1000; packet_size += 80) {
-              // Set codec, and receive payload type.
-              codec_instance.pacsize = packet_size;
-              if (-1 != voe_codec_->SetSendCodec(0, codec_instance)) {
-                TEST_MUSTPASS(voe_base_->StopPlayout(0));
-                TEST_MUSTPASS(voe_base_->StopReceive(0));
-                TEST_MUSTPASS(voe_codec_->SetRecPayloadType(0,
-                        codec_instance));
-                TEST_MUSTPASS(voe_base_->StartReceive(0));
-                TEST_MUSTPASS(voe_base_->StartPlayout(0));
-                TEST_LOG("%d ", packet_size);
-                fflush(NULL);
-                SLEEP(2 * CODEC_TEST_TIME);
-              }
-            }
-          }
-        }
-      } else {
-        for (int pacsize = 80; pacsize < 1000; pacsize += 80) {
-          // Set codec. From VoE 4.0, we need the specify the right rate.
-          if (!_stricmp("ilbc", codec_instance.plname)) {
-
-            if ((pacsize == 160) || (pacsize == 320)) {
-              codec_instance.rate = 15200;
-            } else {
-              codec_instance.rate = 13300;
-            }
-          }
-          codec_instance.pacsize = pacsize;
-          if (-1 != voe_codec_->SetSendCodec(0, codec_instance)) {
-            TEST_LOG("%d ", pacsize);
-            fflush(NULL);
-            SLEEP(CODEC_TEST_TIME);
-          }
-        }
-      }
-      TEST_LOG("\n");
-    }
-  }
-
-  TEST_MUSTPASS(voe_codec_->GetCodec(0, codec_instance));
-  TEST_LOG("Setting codec to first in list: %s \n", codec_instance.plname);
-  TEST_MUSTPASS(voe_codec_->SetSendCodec(0, codec_instance));
-
-  TEST_LOG("Voice Activity Detection calls\n");
-  TEST_LOG("Must be OFF by default\n");
-  bool vad_test = true;
-  VadModes vadMode = kVadAggressiveHigh;
-  bool disabled_dtx = true;
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(vad_test);
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(!disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(vad_test);
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(!disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(vad_test);
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(!disabled_dtx);
-
-  TEST_LOG("Turn ON VAD\n");
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, true));
-  TEST_LOG("Should be ON now\n");
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(!vad_test);
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(!vad_test);
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(!vad_test);
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(disabled_dtx);
-
-  TEST_LOG("Testing Type settings\n");
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, true, kVadAggressiveLow));
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadAggressiveLow != vadMode);
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, true, kVadAggressiveMid));
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadAggressiveMid != vadMode);
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, true, kVadAggressiveMid));
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadAggressiveMid != vadMode);
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, true, kVadAggressiveMid));
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadAggressiveMid != vadMode);
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, true, kVadAggressiveHigh, true));
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadAggressiveHigh != vadMode);
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, true, kVadAggressiveHigh, true));
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadAggressiveHigh != vadMode);
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, true, kVadAggressiveHigh, true));
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadAggressiveHigh != vadMode);
-  TEST_MUSTPASS(!disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadAggressiveHigh != vadMode);
-  TEST_MUSTPASS(!disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadAggressiveHigh != vadMode);
-  TEST_MUSTPASS(!disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, true, kVadConventional));
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(disabled_dtx);
-
-  // VAD is always on when DTX is on, so we need to turn off DTX too.
-  TEST_LOG("Turn OFF VAD\n");
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, false, kVadConventional, true));
-  TEST_LOG("Should be OFF now\n");
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(vad_test);
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(!disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(vad_test);
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(!disabled_dtx);
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(vad_test);
-  TEST_MUSTPASS(kVadConventional != vadMode);
-  TEST_MUSTPASS(!disabled_dtx);
-
-#if defined(WEBRTC_CODEC_ISAC)
-  TEST_LOG("Test extended iSAC APIs\n");
-  TEST_LOG("Start by selecting iSAC 30ms adaptive mode\n");
-  strcpy(codec_instance.plname, "isac");
-  codec_instance.pltype = 103;
-  codec_instance.plfreq = 16000;
-  codec_instance.channels = 1;
-  codec_instance.rate = -1;  // Adaptive rate.
-  codec_instance.pacsize = 480;
-  TEST_LOG("  testing SetISACInitTargetRate:\n");
-  TEST_MUSTPASS(voe_codec_->SetSendCodec(0, codec_instance));
-  TEST_MUSTPASS(!voe_codec_->SetISACInitTargetRate(0, 5000));
-  TEST_MUSTPASS(!voe_codec_->SetISACInitTargetRate(0, 33000));
-  TEST_MUSTPASS(voe_codec_->SetISACInitTargetRate(0, 32000));
-  TEST_LOG("Speak and ensure that iSAC sounds OK (target = 32kbps)...\n");
-  SLEEP(3000);
-  TEST_MUSTPASS(voe_codec_->SetISACInitTargetRate(0, 10000));
-  TEST_LOG("Speak and ensure that iSAC sounds OK (target = 10kbps)...\n");
-  SLEEP(3000);
-  TEST_MUSTPASS(voe_codec_->SetISACInitTargetRate(0, 10000, true));
-  TEST_MUSTPASS(voe_codec_->SetISACInitTargetRate(0, 10000, false));
-  TEST_MUSTPASS(voe_codec_->SetISACInitTargetRate(0, 0));
-  TEST_LOG("Speak and ensure that iSAC sounds OK (target = default)...\n");
-  SLEEP(3000);
-
-  TEST_LOG("  testing SetISACMaxPayloadSize:\n");
-  TEST_MUSTPASS(voe_base_->StopSend(0));
-  TEST_MUSTPASS(!voe_codec_->SetISACMaxPayloadSize(0, 50));
-  TEST_MUSTPASS(!voe_codec_->SetISACMaxPayloadSize(0, 650));
-  TEST_MUSTPASS(voe_codec_->SetISACMaxPayloadSize(0, 120));
-  TEST_MUSTPASS(voe_base_->StartSend(0));
-  TEST_LOG("Speak and ensure that iSAC sounds OK"
-    "(max payload size = 100 bytes)...\n");
-  SLEEP(3000);
-  TEST_MUSTPASS(voe_base_->StopSend(0));
-  TEST_MUSTPASS(voe_codec_->SetISACMaxPayloadSize(0, 400));
-  TEST_MUSTPASS(voe_base_->StartSend(0));
-
-  TEST_LOG("  testing SetISACMaxRate:\n");
-  TEST_MUSTPASS(voe_base_->StopSend(0));
-  TEST_MUSTPASS(!voe_codec_->SetISACMaxRate(0, 31900));
-  TEST_MUSTPASS(!voe_codec_->SetISACMaxRate(0, 53500));
-  TEST_MUSTPASS(voe_codec_->SetISACMaxRate(0, 32000));
-  TEST_MUSTPASS(voe_base_->StartSend(0));
-  TEST_LOG("Speak and ensure that iSAC sounds OK (max rate = 32 kbps)...\n");
-  SLEEP(3000);
-  TEST_MUSTPASS(voe_base_->StopSend(0));
-  TEST_MUSTPASS(voe_codec_->SetISACMaxRate(0, 53400)); // restore no limitation
-  TEST_MUSTPASS(voe_base_->StartSend(0));
-  if (voe_file_) {
-    TEST_LOG("==> Start playing a file as microphone again \n");
-    TEST_MUSTPASS(voe_file_->StartPlayingFileAsMicrophone(
-            0, AudioFilename(), true, true));
-  }
-#else
-  TEST_LOG("Skipping extended iSAC API tests - "
-      "WEBRTC_CODEC_ISAC not defined\n");
-#endif // #if defined(WEBRTC_CODEC_ISAC)
-  // Tests on AMR setencformat and setdecformat: the calls should fail.
-  TEST_MUSTPASS(!voe_codec_->SetAMREncFormat(0, kRfc3267BwEfficient));
-  TEST_MUSTPASS(!voe_codec_->SetAMRDecFormat(0, kRfc3267BwEfficient));
-  TEST_MUSTPASS(!voe_codec_->SetAMREncFormat(0, kRfc3267OctetAligned));
-  TEST_MUSTPASS(!voe_codec_->SetAMRDecFormat(0, kRfc3267OctetAligned));
-  TEST_MUSTPASS(!voe_codec_->SetAMREncFormat(0, kRfc3267FileStorage));
-  TEST_MUSTPASS(!voe_codec_->SetAMRDecFormat(0, kRfc3267FileStorage));
-
-  // Tests on AMRWB setencformat and setdecformat: the calls should fail.
-  TEST_MUSTPASS(!voe_codec_->SetAMRWbEncFormat(0, kRfc3267BwEfficient));
-  TEST_MUSTPASS(!voe_codec_->SetAMRWbDecFormat(0, kRfc3267BwEfficient));
-  TEST_MUSTPASS(!voe_codec_->SetAMRWbEncFormat(0, kRfc3267OctetAligned));
-  TEST_MUSTPASS(!voe_codec_->SetAMRWbDecFormat(0, kRfc3267OctetAligned));
-  TEST_MUSTPASS(!voe_codec_->SetAMRWbEncFormat(0, kRfc3267FileStorage));
-  TEST_MUSTPASS(!voe_codec_->SetAMRWbDecFormat(0, kRfc3267FileStorage));
-
-  TEST_LOG("Turn on VAD,G711 and set packet size to 30 ms:\n");
-  strcpy(codec_instance.plname, "pcmu");
-  codec_instance.pacsize = 160;
-  codec_instance.pltype = 0;
-  codec_instance.plfreq = 8000;
-  codec_instance.channels = 1;
-  codec_instance.rate = 64000;
-  TEST_MUSTPASS(voe_codec_->SetSendCodec(0, codec_instance));
-  // The test here is confusing, what are we expecting? VADtest = false?
-  TEST_MUSTPASS(voe_codec_->GetVADStatus(0, vad_test, vadMode, disabled_dtx));
-  TEST_MUSTPASS(vad_test);
-  TEST_MUSTPASS(voe_codec_->SetVADStatus(0, false, vadMode, true));
-
-  // Set back to preferred codec.
-  TEST_MUSTPASS(voe_codec_->GetCodec(0, codec_instance));
-  TEST_MUSTPASS(voe_codec_->SetSendCodec(0, codec_instance));
-
-#else
-  TEST_LOG("\n\n+++ Codec tests NOT ENABLED +++\n");
-#endif // #ifdef _TEST_CODEC_
-  return 0;
-}
-
 int VoETestManager::DoStandardTest() {
   // Ensure we have all input files:
   TEST_MUSTPASS(!strcmp("", AudioFilename()));
@@ -1276,9 +987,7 @@
 
   FakeExternalTransport channel0_transport(voe_network_);
   if (TestStartStreaming(channel0_transport) != 0) return -1;
-
   if (TestStartPlaying() != 0) return -1;
-  if (TestCodecs() != 0) return -1;
 
   /////////////////////////
   // Start another channel
diff --git a/src/voice_engine/main/test/auto_test/voe_test_defines.h b/src/voice_engine/main/test/auto_test/voe_test_defines.h
index cb31a41..c9c103a 100644
--- a/src/voice_engine/main/test/auto_test/voe_test_defines.h
+++ b/src/voice_engine/main/test/auto_test/voe_test_defines.h
@@ -24,6 +24,7 @@
 #else
 #define TEST_LOG printf
 #define TEST_LOG_ERROR printf
+#define TEST_LOG_FLUSH fflush(NULL)
 #endif
 
 // Select the tests to execute, list order below is same as they will be
diff --git a/src/voice_engine/main/test/voice_engine_tests.gypi b/src/voice_engine/main/test/voice_engine_tests.gypi
index 1ce7e1a..ac48545 100644
--- a/src/voice_engine/main/test/voice_engine_tests.gypi
+++ b/src/voice_engine/main/test/voice_engine_tests.gypi
@@ -37,6 +37,7 @@
         'auto_test/fixtures/before_initialization_fixture.cc',
         'auto_test/fixtures/before_initialization_fixture.h',
         'auto_test/standard/codec_before_streaming_test.cc',
+        'auto_test/standard/codec_test.cc',
         'auto_test/standard/hardware_before_initializing_test.cc',
         'auto_test/standard/hardware_before_streaming_test.cc',
         'auto_test/standard/manual_hold_test.cc',