summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorbodamnam <bodamnam@google.com>2022-12-22 13:01:04 +0000
committerbodamnam <bodamnam@google.com>2022-12-30 02:22:32 +0000
commita2929ca030c540db1cf76b454c1b732b6f0d2643 (patch)
tree5eb730bdd3475c09c8001de146542af404a4ab7a /tests
parenta7cd9f1b43ba316fdb53b8aa6450880760af4556 (diff)
downloadImsMedia-a2929ca030c540db1cf76b454c1b732b6f0d2643.tar.gz
Fix crash in MediaQualityAnalyzer
The current MediaQualityAnalyzer is using direct function call from the multiple node module running in different thread. It causes the vilolated memory access crash when the data list is not synchronized. I modify MediaQualityAnalzyer the collecting statistics and process message in the same thread using the message queue to prevent the crash. Modify MediaQuality member valuable to use stack memory Bug: 262843907 Bug: 263464083 Bug: 263442080 Test: Voice Call test with device, atest ImsMediaNativeTests Change-Id: Ifd9be2102a7b959c404674f515486f661ca932f2
Diffstat (limited to 'tests')
-rw-r--r--tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/MediaQualityAnalyzerTest.cpp78
1 files changed, 44 insertions, 34 deletions
diff --git a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/MediaQualityAnalyzerTest.cpp b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/MediaQualityAnalyzerTest.cpp
index 6c4df9ee..1c5b3425 100644
--- a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/MediaQualityAnalyzerTest.cpp
+++ b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/MediaQualityAnalyzerTest.cpp
@@ -21,6 +21,7 @@
#include <MediaQualityAnalyzer.h>
#include <ImsMediaCondition.h>
#include <MockBaseSessionCallback.h>
+#include <ImsMediaTimer.h>
using namespace android::telephony::imsmedia;
using ::testing::_;
@@ -168,10 +169,10 @@ protected:
TEST_F(MediaQualityAnalyzerTest, TestStartStop)
{
EXPECT_CALL(mCallback, onEvent(kAudioCallQualityChangedInd, _, _)).Times(1);
- mAnalyzer->startTimer(1000);
+ mAnalyzer->start();
MediaQuality quality = mAnalyzer->getMediaQuality();
- mAnalyzer->stopTimer();
+ mAnalyzer->stop();
EXPECT_EQ(mFakeCallback.getMediaQuality(), quality);
}
@@ -179,22 +180,22 @@ TEST_F(MediaQualityAnalyzerTest, TestStartStop)
TEST_F(MediaQualityAnalyzerTest, TestCollectTxPackets)
{
EXPECT_CALL(mCallback, onEvent(kAudioCallQualityChangedInd, _, _)).Times(1);
- mAnalyzer->startTimer(1000);
+ mAnalyzer->start();
const int32_t numPackets = 10;
for (int32_t i = 0; i < numPackets; i++)
{
RtpPacket* packet = new RtpPacket();
- mAnalyzer->collectInfo(kStreamRtpTx, packet);
+ mAnalyzer->SendEvent(kCollectPacketInfo, kStreamRtpTx, reinterpret_cast<uint64_t>(packet));
}
+ mCondition.wait_timeout(1100); // 1.1 sec
EXPECT_EQ(mAnalyzer->getTxPacketSize(), numPackets);
EXPECT_EQ(mAnalyzer->getRxPacketSize(), 0);
EXPECT_EQ(mAnalyzer->getLostPacketSize(), 0);
-
MediaQuality quality = mAnalyzer->getMediaQuality();
- mAnalyzer->stopTimer();
+ mAnalyzer->stop();
EXPECT_EQ(mAnalyzer->getTxPacketSize(), 0);
EXPECT_EQ(mAnalyzer->getRxPacketSize(), 0);
@@ -209,11 +210,11 @@ TEST_F(MediaQualityAnalyzerTest, TestCollectTxPackets)
TEST_F(MediaQualityAnalyzerTest, TestRxInactivityInd)
{
EXPECT_CALL(mCallback, onEvent(kAudioCallQualityChangedInd, _, _)).Times(2);
- mAnalyzer->startTimer(1000);
- mCondition.wait_timeout(6000); // 6sec
+ mAnalyzer->start();
+ mCondition.wait_timeout(5100); // 5.1 sec
MediaQuality quality = mAnalyzer->getMediaQuality();
- mAnalyzer->stopTimer();
+ mAnalyzer->stop();
// Check MediaQuality value
MediaQuality quality2 = mFakeCallback.getMediaQuality();
@@ -224,7 +225,7 @@ TEST_F(MediaQualityAnalyzerTest, TestRxInactivityInd)
TEST_F(MediaQualityAnalyzerTest, TestCallQualityLevelChanged)
{
EXPECT_CALL(mCallback, onEvent(kAudioCallQualityChangedInd, _, _)).Times(2);
- mAnalyzer->startTimer(1000);
+ mAnalyzer->start();
const int32_t numPackets = 10;
const int32_t jitter = 10;
@@ -240,20 +241,23 @@ TEST_F(MediaQualityAnalyzerTest, TestCallQualityLevelChanged)
packet->seqNum = i;
packet->jitter = jitter;
- mAnalyzer->collectInfo(kStreamRtpRx, packet);
- mAnalyzer->collectRxRtpStatus(i, kRtpStatusNormal);
+ mAnalyzer->SendEvent(kCollectPacketInfo, kStreamRtpRx, reinterpret_cast<uint64_t>(packet));
+
+ SessionCallbackParameter* param = new SessionCallbackParameter(
+ i, kRtpStatusNormal, ImsMediaTimer::GetTimeInMilliSeconds());
+ mAnalyzer->SendEvent(kCollectRxRtpStatus, reinterpret_cast<uint64_t>(param));
}
+ SessionCallbackParameter* param = new SessionCallbackParameter(kReportPacketLossGap, 5, 1);
+ mAnalyzer->SendEvent(kCollectOptionalInfo, reinterpret_cast<uint64_t>(param), 0);
+
+ mCondition.wait_timeout(5100); // 5.1 sec
+
EXPECT_EQ(mAnalyzer->getTxPacketSize(), 0);
EXPECT_EQ(mAnalyzer->getRxPacketSize(), numPackets - 1);
- EXPECT_EQ(mAnalyzer->getLostPacketSize(), 0);
- mAnalyzer->collectOptionalInfo(kReportPacketLossGap, 5, 1);
EXPECT_EQ(mAnalyzer->getLostPacketSize(), 1);
-
- mCondition.wait_timeout(6000); // 6sec
-
MediaQuality quality = mAnalyzer->getMediaQuality();
- mAnalyzer->stopTimer();
+ mAnalyzer->stop();
EXPECT_EQ(mAnalyzer->getTxPacketSize(), 0);
EXPECT_EQ(mAnalyzer->getRxPacketSize(), 0);
@@ -272,7 +276,7 @@ TEST_F(MediaQualityAnalyzerTest, TestJitterInd)
EXPECT_CALL(mCallback, onEvent(kAudioCallQualityChangedInd, _, _)).Times(1);
// set 10 milliseconds jitter threshold in 1 sec interval
mAnalyzer->setJitterThreshold(1, 10);
- mAnalyzer->startTimer(1000);
+ mAnalyzer->start();
const int32_t numPackets = 20;
const int32_t jitter = 20;
@@ -284,17 +288,17 @@ TEST_F(MediaQualityAnalyzerTest, TestJitterInd)
packet->seqNum = i;
packet->jitter = jitter;
packet->ssrc = ssrc;
- mAnalyzer->collectInfo(kStreamRtpRx, packet);
+ mAnalyzer->SendEvent(kCollectPacketInfo, kStreamRtpRx, reinterpret_cast<uint64_t>(packet));
}
+ mCondition.wait_timeout(1100); // 1.1 sec
+
EXPECT_EQ(mAnalyzer->getTxPacketSize(), 0);
EXPECT_EQ(mAnalyzer->getRxPacketSize(), numPackets);
EXPECT_EQ(mAnalyzer->getLostPacketSize(), 0);
- mCondition.wait_timeout(1500); // wait 1.5sec
-
MediaQuality quality = mAnalyzer->getMediaQuality();
- mAnalyzer->stopTimer();
+ mAnalyzer->stop();
EXPECT_EQ(mAnalyzer->getTxPacketSize(), 0);
EXPECT_EQ(mAnalyzer->getRxPacketSize(), 0);
@@ -308,7 +312,7 @@ TEST_F(MediaQualityAnalyzerTest, TestJitterInd)
TEST_F(MediaQualityAnalyzerTest, TestSsrcChange)
{
- mAnalyzer->startTimer(1000);
+ mAnalyzer->start();
const int32_t numPackets = 20;
const int32_t jitter = 20;
@@ -327,11 +331,17 @@ TEST_F(MediaQualityAnalyzerTest, TestSsrcChange)
packet->ssrc = ssrc2;
}
- mAnalyzer->collectInfo(kStreamRtpRx, packet);
+ mAnalyzer->SendEvent(kCollectPacketInfo, kStreamRtpRx, reinterpret_cast<uint64_t>(packet));
}
+ mCondition.wait_timeout(1100); // 1.1 sec
EXPECT_EQ(mAnalyzer->getTxPacketSize(), 0);
- EXPECT_EQ(mAnalyzer->getRxPacketSize(), numPackets - 5);
+ EXPECT_EQ(mAnalyzer->getRxPacketSize(), numPackets);
+ EXPECT_EQ(mAnalyzer->getLostPacketSize(), 0);
+ mAnalyzer->stop();
+
+ EXPECT_EQ(mAnalyzer->getTxPacketSize(), 0);
+ EXPECT_EQ(mAnalyzer->getRxPacketSize(), 0);
EXPECT_EQ(mAnalyzer->getLostPacketSize(), 0);
}
@@ -341,7 +351,7 @@ TEST_F(MediaQualityAnalyzerTest, TestPacketLossInd)
EXPECT_CALL(mCallback, onEvent(kAudioCallQualityChangedInd, _, _)).Times(1);
// 1 percent packet loss threshold in 1 sec interval
mAnalyzer->setPacketLossThreshold(1, 1);
- mAnalyzer->startTimer(1000);
+ mAnalyzer->start();
const int32_t numPackets = 10;
@@ -356,20 +366,20 @@ TEST_F(MediaQualityAnalyzerTest, TestPacketLossInd)
packet->seqNum = i;
packet->jitter = 10;
- mAnalyzer->collectInfo(kStreamRtpRx, packet);
+ mAnalyzer->SendEvent(kCollectPacketInfo, kStreamRtpRx, reinterpret_cast<uint64_t>(packet));
}
+ SessionCallbackParameter* param = new SessionCallbackParameter(kReportPacketLossGap, 5, 1);
+ mAnalyzer->SendEvent(kCollectOptionalInfo, reinterpret_cast<uint64_t>(param), 0);
+
+ mCondition.wait_timeout(1100); // 1.1 sec
+
EXPECT_EQ(mAnalyzer->getTxPacketSize(), 0);
EXPECT_EQ(mAnalyzer->getRxPacketSize(), numPackets - 1);
- EXPECT_EQ(mAnalyzer->getLostPacketSize(), 0);
-
- mAnalyzer->collectOptionalInfo(kReportPacketLossGap, 5, 1);
EXPECT_EQ(mAnalyzer->getLostPacketSize(), 1);
- mCondition.wait_timeout(1500); // wait 1.5sec
-
MediaQuality quality = mAnalyzer->getMediaQuality();
- mAnalyzer->stopTimer();
+ mAnalyzer->stop();
EXPECT_EQ(mAnalyzer->getTxPacketSize(), 0);
EXPECT_EQ(mAnalyzer->getRxPacketSize(), 0);