diff --git a/media/libaudioclient/tests/audio_test_utils.cpp b/media/libaudioclient/tests/audio_test_utils.cpp
index ec9a192..b068bdf 100644
--- a/media/libaudioclient/tests/audio_test_utils.cpp
+++ b/media/libaudioclient/tests/audio_test_utils.cpp
@@ -402,11 +402,8 @@
     }
     if (mFlags & AUDIO_INPUT_FLAG_FAST) {
         ALOGW("Overriding all previous computations");
-        const uint32_t kMinNormalCaptureBufferSizeMs = 12;
-        size_t maxFrameCount = kMinNormalCaptureBufferSizeMs * mSampleRate / 1000;
-        mMaxBytesPerCallback = maxFrameCount * samplesPerFrame * bytesPerSample / 2;
-        mNotificationFrames = maxFrameCount / 2;
-        mFrameCount = 2 * mNotificationFrames;
+        mFrameCount = 0;
+        mNotificationFrames = 0;
     }
     mNumFramesToRecord = (mSampleRate * 0.25);  // record .25 sec
     std::string packageName{"AudioCapture"};
@@ -416,10 +413,16 @@
     attributionSource.pid = VALUE_OR_FATAL(legacy2aidl_pid_t_int32_t(getpid()));
     attributionSource.token = sp<BBinder>::make();
     if (mTransferType == AudioRecord::TRANSFER_OBTAIN) {
-        mRecord = new AudioRecord(attributionSource);
-        status = mRecord->set(mInputSource, mSampleRate, mFormat, mChannelMask, mFrameCount,
-                              nullptr, nullptr, 0, false, mSessionId, mTransferType, mFlags,
-                              attributionSource.uid, attributionSource.pid);
+        if (mSampleRate == 48000) {  // test all available constructors
+            mRecord = new AudioRecord(mInputSource, mSampleRate, mFormat, mChannelMask,
+                                      attributionSource, mFrameCount, nullptr, nullptr,
+                                      mNotificationFrames, mSessionId, mTransferType, mFlags);
+        } else {
+            mRecord = new AudioRecord(attributionSource);
+            status = mRecord->set(mInputSource, mSampleRate, mFormat, mChannelMask, mFrameCount,
+                                  nullptr, nullptr, 0, false, mSessionId, mTransferType, mFlags,
+                                  attributionSource.uid, attributionSource.pid);
+        }
         if (NO_ERROR != status) return status;
     } else if (mTransferType == AudioRecord::TRANSFER_CALLBACK) {
         mRecord = new AudioRecord(mInputSource, mSampleRate, mFormat, mChannelMask,
@@ -433,6 +436,11 @@
     mRecord->setCallerName(packageName);
     status = mRecord->initCheck();
     if (NO_ERROR == status) mState = REC_READY;
+    if (mFlags & AUDIO_INPUT_FLAG_FAST) {
+        mFrameCount = mRecord->frameCount();
+        mNotificationFrames = mRecord->getNotificationPeriodInFrames();
+        mMaxBytesPerCallback = mNotificationFrames * samplesPerFrame * bytesPerSample;
+    }
     return status;
 }
 
@@ -458,12 +466,6 @@
     status_t status = OK;
     mStopRecording = true;
     if (mState != REC_STOPPED) {
-        uint32_t position;
-        status = mRecord->getPosition(&position);
-        if (OK == status && mTransferType == AudioRecord::TRANSFER_CALLBACK) {
-            if (position - mNumFramesToRecord > mFrameCount)
-                if (mBufferOverrun == false) status = BAD_VALUE;
-        }
         mRecord->stopAndJoinCallbacks();
         mState = REC_STOPPED;
         LOG_FATAL_IF(true != mRecord->stopped());
diff --git a/media/libaudioclient/tests/audiorecord_tests.cpp b/media/libaudioclient/tests/audiorecord_tests.cpp
index 0002384..8ac5e82 100644
--- a/media/libaudioclient/tests/audiorecord_tests.cpp
+++ b/media/libaudioclient/tests/audiorecord_tests.cpp
@@ -162,20 +162,6 @@
             << "configured marker and received cb marker are different";
 }
 
-TEST_F(AudioRecordTest, TestMicDirectionConfiguration) {
-    EXPECT_EQ(OK, mAC->getAudioRecordHandle()->setPreferredMicrophoneDirection(MIC_DIRECTION_FRONT))
-            << "setPreferredMicrophoneDirection() Failed";
-    EXPECT_EQ(OK, mAC->start()) << "start recording failed";
-    EXPECT_EQ(OK, mAC->audioProcess()) << "audioProcess failed";
-}
-
-TEST_F(AudioRecordTest, TestMicFieldConfiguration) {
-    EXPECT_EQ(OK, mAC->getAudioRecordHandle()->setPreferredMicrophoneFieldDimension(0.5f))
-            << "setPreferredMicrophoneFieldDimension() Failed";
-    EXPECT_EQ(OK, mAC->start()) << "start recording failed";
-    EXPECT_EQ(OK, mAC->audioProcess()) << "audioProcess failed";
-}
-
 TEST_F(AudioRecordTest, TestGetPosition) {
     uint32_t position;
     EXPECT_EQ(OK, mAC->getAudioRecordHandle()->getPosition(&position)) << "getPosition() failed";
@@ -223,6 +209,18 @@
                                             ::testing::Values(AUDIO_SESSION_NONE),
                                             ::testing::Values(AUDIO_SOURCE_DEFAULT)));
 
+// for port fast input
+INSTANTIATE_TEST_SUITE_P(AudioRecordFastInput, AudioRecordCreateTest,
+                         ::testing::Combine(::testing::Values(8000, 11025, 12000, 16000, 22050,
+                                                              24000, 32000, 44100, 48000),
+                                            ::testing::Values(AUDIO_FORMAT_PCM_8_24_BIT),
+                                            ::testing::Values(AUDIO_CHANNEL_IN_MONO,
+                                                              AUDIO_CHANNEL_IN_STEREO,
+                                                              AUDIO_CHANNEL_IN_FRONT_BACK),
+                                            ::testing::Values(AUDIO_INPUT_FLAG_FAST),
+                                            ::testing::Values(AUDIO_SESSION_NONE),
+                                            ::testing::Values(AUDIO_SOURCE_DEFAULT)));
+
 // misc
 INSTANTIATE_TEST_SUITE_P(AudioRecordMiscInput, AudioRecordCreateTest,
                          ::testing::Combine(::testing::Values(48000),
