summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBodam Nam <bodamnam@google.com>2023-04-03 23:39:14 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-04-03 23:39:14 +0000
commit475cf479c2ee232bb9b42b9de437e78c853cd4e9 (patch)
tree3e8c3ee1e71d4351dbf8088633b795d8950e8ca1
parentb57f1978a9c13d465a243f3ba59e3274c52c257f (diff)
parent2229812bc19cb445198e186b44c8338f201976c3 (diff)
downloadImsMedia-475cf479c2ee232bb9b42b9de437e78c853cd4e9.tar.gz
Merge "Add unit test for ImsMediaBitWriter/Reader" into udc-dev
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaBitWriter.h6
-rw-r--r--service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriter.cpp35
-rw-r--r--tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitReaderTest.cpp75
-rw-r--r--tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriterTest.cpp77
4 files changed, 182 insertions, 11 deletions
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaBitWriter.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaBitWriter.h
index e4aa8ea9..693b2f5c 100644
--- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaBitWriter.h
+++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/utils/ImsMediaBitWriter.h
@@ -25,9 +25,9 @@ public:
ImsMediaBitWriter();
~ImsMediaBitWriter();
void SetBuffer(uint8_t* pbBuffer, uint32_t nBufferSize);
- void Write(uint32_t nValue, uint32_t nSize);
- void WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize);
- void WriteByteBuffer(uint32_t value);
+ bool Write(uint32_t nValue, uint32_t nSize);
+ bool WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize);
+ bool WriteByteBuffer(uint32_t value);
void Seek(uint32_t nSize);
void AddPadding();
uint32_t GetBufferSize();
diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriter.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriter.cpp
index cba37f55..91d69581 100644
--- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriter.cpp
+++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriter.cpp
@@ -40,15 +40,17 @@ void ImsMediaBitWriter::SetBuffer(uint8_t* pbBuffer, uint32_t nBufferSize)
mMaxBufferSize = nBufferSize;
}
-void ImsMediaBitWriter::Write(uint32_t nValue, uint32_t nSize)
+bool ImsMediaBitWriter::Write(uint32_t nValue, uint32_t nSize)
{
if (nSize == 0)
- return;
+ {
+ return false;
+ }
if (mBuffer == nullptr || nSize > 24 || mBufferFull)
{
IMLOGE2("[Write] nSize[%d], BufferFull[%d]", nSize, mBufferFull);
- return;
+ return false;
}
// write to bit buffer
@@ -67,9 +69,11 @@ void ImsMediaBitWriter::Write(uint32_t nValue, uint32_t nSize)
{
mBufferFull = true;
}
+
+ return true;
}
-void ImsMediaBitWriter::WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize)
+bool ImsMediaBitWriter::WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize)
{
uint32_t nByteSize;
uint32_t nRemainBitSize;
@@ -87,7 +91,10 @@ void ImsMediaBitWriter::WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize)
for (i = 0; i < nByteSize; i++)
{
- Write(pbSrc[i], 8);
+ if (!Write(pbSrc[i], 8))
+ {
+ return false;
+ }
}
}
@@ -95,11 +102,17 @@ void ImsMediaBitWriter::WriteByteBuffer(uint8_t* pbSrc, uint32_t nBitSize)
{
uint32_t v = pbSrc[nByteSize];
v >>= (8 - nRemainBitSize);
- Write(v, nRemainBitSize);
+
+ if (!Write(v, nRemainBitSize))
+ {
+ return false;
+ }
}
+
+ return true;
}
-void ImsMediaBitWriter::WriteByteBuffer(uint32_t value)
+bool ImsMediaBitWriter::WriteByteBuffer(uint32_t value)
{
uint32_t nRemainBitSize = 32;
@@ -107,8 +120,14 @@ void ImsMediaBitWriter::WriteByteBuffer(uint32_t value)
{
nRemainBitSize -= 8;
uint8_t v = (value >> nRemainBitSize) & 0x00ff;
- Write(v, 8);
+
+ if (!Write(v, 8))
+ {
+ return false;
+ }
}
+
+ return true;
}
void ImsMediaBitWriter::Seek(uint32_t nSize)
diff --git a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitReaderTest.cpp b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitReaderTest.cpp
new file mode 100644
index 00000000..da66bcf8
--- /dev/null
+++ b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitReaderTest.cpp
@@ -0,0 +1,75 @@
+/**
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+#include <ImsMediaBitReader.h>
+#include <string.h>
+
+class ImsMediaBitReaderTest : public ::testing::Test
+{
+public:
+protected:
+ virtual void SetUp() override {}
+
+ virtual void TearDown() override {}
+};
+
+TEST_F(ImsMediaBitReaderTest, SetBufferAndReadBitTest)
+{
+ uint8_t testBuffer[] = {1, 2, 4, 8, 16, 32, 64, 128};
+
+ ImsMediaBitReader reader;
+ EXPECT_EQ(reader.Read(24), 0);
+ reader.SetBuffer(testBuffer, sizeof(testBuffer));
+ EXPECT_EQ(reader.Read(32), 0);
+
+ for (int32_t i = 0; i < sizeof(testBuffer); i++)
+ {
+ EXPECT_EQ(reader.Read(8), testBuffer[i]);
+ }
+
+ EXPECT_EQ(reader.Read(8), 0);
+}
+
+TEST_F(ImsMediaBitReaderTest, SetBufferAndReadByteTest)
+{
+ uint8_t testBuffer[] = {1, 2, 4, 8, 16, 32, 64, 128};
+
+ ImsMediaBitReader reader;
+ reader.SetBuffer(testBuffer, sizeof(testBuffer));
+
+ uint8_t dstBuffer[8] = {0};
+
+ for (int32_t i = 0; i < sizeof(testBuffer); i++)
+ {
+ reader.ReadByteBuffer(dstBuffer + i, 8);
+ }
+
+ EXPECT_EQ(memcmp(dstBuffer, testBuffer, sizeof(testBuffer)), 0);
+}
+
+TEST_F(ImsMediaBitReaderTest, SetBufferAndReadUEModeTest)
+{
+ uint8_t testBuffer[] = {0xDA}; // 11011010
+
+ ImsMediaBitReader reader;
+ reader.SetBuffer(testBuffer, sizeof(testBuffer));
+
+ EXPECT_EQ(reader.ReadByUEMode(), 0);
+ EXPECT_EQ(reader.ReadByUEMode(), 0);
+ EXPECT_EQ(reader.ReadByUEMode(), 2);
+ EXPECT_EQ(reader.ReadByUEMode(), 1);
+}
diff --git a/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriterTest.cpp b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriterTest.cpp
new file mode 100644
index 00000000..af10eaa2
--- /dev/null
+++ b/tests/native/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/utils/ImsMediaBitWriterTest.cpp
@@ -0,0 +1,77 @@
+/**
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+#include <ImsMediaBitWriter.h>
+#include <string.h>
+
+class ImsMediaBitWriterTest : public ::testing::Test
+{
+public:
+protected:
+ virtual void SetUp() override {}
+
+ virtual void TearDown() override {}
+};
+
+TEST_F(ImsMediaBitWriterTest, SetBufferAndWriteBitTest)
+{
+ uint8_t testBuffer[] = {1, 2, 4, 8, 16, 32, 64, 128};
+ uint8_t dstBuffer[8] = {0};
+
+ ImsMediaBitWriter writer;
+
+ EXPECT_EQ(writer.Write(0, 24), false);
+ writer.SetBuffer(dstBuffer, sizeof(dstBuffer));
+ EXPECT_EQ(writer.Write(0, 32), false);
+
+ for (int32_t i = 0; i < sizeof(testBuffer); i++)
+ {
+ EXPECT_EQ(writer.Write(testBuffer[i], 8), true);
+ }
+
+ EXPECT_EQ(writer.Write(0, 8), false);
+ EXPECT_EQ(memcmp(dstBuffer, testBuffer, sizeof(testBuffer)), 0);
+}
+
+TEST_F(ImsMediaBitWriterTest, SetBufferAndWriteByteTest)
+{
+ uint8_t testBuffer[] = {1, 2, 4, 8, 16, 32, 64, 128};
+ uint8_t dstBuffer[8] = {0};
+
+ ImsMediaBitWriter writer;
+ writer.SetBuffer(dstBuffer, sizeof(dstBuffer));
+
+ for (int32_t i = 0; i < sizeof(testBuffer); i++)
+ {
+ EXPECT_EQ(writer.WriteByteBuffer(testBuffer + i, 8), true);
+ }
+
+ EXPECT_EQ(memcmp(dstBuffer, testBuffer, sizeof(testBuffer)), 0);
+}
+
+TEST_F(ImsMediaBitWriterTest, SetBufferAndSeekToWriteTest)
+{
+ uint8_t testBuffer[] = {1, 2, 4, 8, 16, 32, 64, 128};
+ uint8_t dstBuffer[8] = {1, 2, 4, 8};
+
+ ImsMediaBitWriter writer;
+ writer.SetBuffer(dstBuffer, sizeof(dstBuffer));
+ writer.Seek(32);
+ writer.WriteByteBuffer(testBuffer + 4, 32);
+
+ EXPECT_EQ(memcmp(dstBuffer, testBuffer, sizeof(testBuffer)), 0);
+}