diff --git a/base/src/string_ex.cpp b/base/src/string_ex.cpp index f54e7bf263c6d48d6dfef2175dd804c4d5ed640b..eb56b0d0e060cbd3002c6ada24624eec4827a1e3 100644 --- a/base/src/string_ex.cpp +++ b/base/src/string_ex.cpp @@ -297,7 +297,7 @@ int Char16ToChar8(const u16string& str16, char *buffer, int bufferLen) } const char16_t *utf16Str = str16.c_str(); int utf8Len = Utf16ToUtf8Length(utf16Str, str16Len); - if (utf8Len < 0 || (utf8Len + 1) > bufferLen) { + if (utf8Len < 0 || utf8Len >= INT_MAX || (utf8Len + 1) > bufferLen) { UTILS_LOGD("utf8buffer len:%{public}d, actual buffer len:%{public}d!", utf8Len + 1, bufferLen); return CHAR16_TO_CHAR8_INSUFFICIENT_BUFFER; } diff --git a/base/src/unicode_ex.cpp b/base/src/unicode_ex.cpp index c21e39ee861d1f39bb714c473703218298a4f4e7..79854cc440c588e408ae729ffbd99eab86479ecb 100644 --- a/base/src/unicode_ex.cpp +++ b/base/src/unicode_ex.cpp @@ -181,7 +181,7 @@ char* Char16ToChar8(const char16_t* str16, size_t str16Len) { char* str8 = nullptr; int utf8Len = Utf16ToUtf8Length(str16, str16Len); - if (utf8Len < 0) { + if (utf8Len < 0 || utf8Len >= INT_MAX) { return nullptr; } @@ -330,7 +330,7 @@ char16_t* Char8ToChar16(const char* str8, size_t str8Len) { char16_t* str16 = nullptr; int utf16Len = Utf8ToUtf16Length(str8, str8Len); - if (utf16Len < 0) { + if (utf16Len < 0 || utf16Len >= INT_MAX) { UTILS_LOGE("Get str16 length failed,length is: %{public}d", utf16Len); return nullptr; } diff --git a/base/test/unittest/common/utils_refbase_test.cpp b/base/test/unittest/common/utils_refbase_test.cpp index 31a165d1c810121615cc0d6bab77bf2016aad5f6..b6208804c9e22e54c43e79e2b09a44a5c991313b 100644 --- a/base/test/unittest/common/utils_refbase_test.cpp +++ b/base/test/unittest/common/utils_refbase_test.cpp @@ -65,6 +65,10 @@ public: g_freeFlag = 1; } + void OnLastWeakRef(const void *objectIda) override + { + } + void SetRefPtr() { isgetrefptr_ = true; @@ -681,6 +685,45 @@ HWTEST_F(UtilsRefbaseTest, testSptrefbase011, TestSize.Level0) EXPECT_EQ(strongObject->GetSptrRefCount(), 1); } +/* + * @tc.name: testSptrefbase012 + * @tc.desc: Refbase + */ +HWTEST_F(UtilsRefbaseTest, testSptrefbase012, TestSize.Level0) +{ + // test clear + sptr testObject1 = new RefBaseTest(); + testObject1.clear(); + ASSERT_EQ(testObject1.GetRefPtr(), nullptr); +} + +/* + * @tc.name: testSptrefbase013 + * @tc.desc: Refbase + */ +HWTEST_F(UtilsRefbaseTest, testSptrefbase013, TestSize.Level0) +{ + sptr testObject1; + wptr testObject2 = new RefBaseTest(); + testObject1 = testObject2; + ASSERT_EQ(testObject2->GetWptrRefCount(), 2); + ASSERT_EQ(testObject1->GetSptrRefCount(), 1); +} + +/* + * @tc.name: testSptrefbase014 + * @tc.desc: Refbase + */ +HWTEST_F(UtilsRefbaseTest, testSptrefbase014, TestSize.Level0) +{ + sptr testObject1(new RefBaseTest()); + const RefBaseTest *rawPointer = testObject1.GetRefPtr(); + ASSERT_TRUE(testObject1 == rawPointer); + + wptr testObject2(new RefBaseTest()); + ASSERT_FALSE(testObject1 == testObject2); +} + class SptrTest : public RefBase { public: SptrTest() @@ -1034,6 +1077,26 @@ HWTEST_F(UtilsRefbaseTest, testWptrefbase008, TestSize.Level0) EXPECT_EQ(testObject1->GetWptrRefCount(), 2); } +/* + * @tc.name: testWptrefbase008 + * @tc.desc: Refbase + */ +HWTEST_F(UtilsRefbaseTest, testWptrefbase009, TestSize.Level0) +{ + // test bool operator==(const T *) + wptr testObject1 = new WptrTest(); + const WptrTest *rawPointer = testObject1.GetRefPtr(); + ASSERT_TRUE(testObject1 == rawPointer); + + // test bool operator==(const wptr &) + wptr testObject2 = testObject1; + ASSERT_TRUE(testObject2 == testObject1); + + // test operator==(const sptr &) + sptr testObject3 = new WptrTest(); + ASSERT_FALSE(testObject2 == testObject3); +} + /* * @tc.name: testSptrWptrefbase001 * @tc.desc: test interaction between sptr and wptr. diff --git a/base/test/unittest/common/utils_safe_block_queue_test.cpp b/base/test/unittest/common/utils_safe_block_queue_test.cpp index 4cb44db8c6dc0374e5f696491921881bf4fa9274..cf62438bb363a53f8fff1f0e5cf99bde6e6cc789 100644 --- a/base/test/unittest/common/utils_safe_block_queue_test.cpp +++ b/base/test/unittest/common/utils_safe_block_queue_test.cpp @@ -634,5 +634,22 @@ HWTEST_F(UtilsSafeBlockQueue, testMutilthreadConcurrentGetAndPopInfullqueue001, demoDatas[0].Get(); } } + +/* + * @tc.name: testPushAndPopNoWait + * @tc.desc: test PushNoWait and PopNoWait + */ +HWTEST_F(UtilsSafeBlockQueue, testPushAndPopNoWait, TestSize.Level0) +{ + ASSERT_TRUE(DemoThreadData::shareQueue.IsEmpty()); + + int testElem = 1; + DemoThreadData::shareQueue.PushNoWait(testElem); + + int outElem = 0; + DemoThreadData::shareQueue.PopNotWait(outElem); + + ASSERT_EQ(testElem, outElem); +} } // namespace } // namespace OHOS \ No newline at end of file diff --git a/base/test/unittest/common/utils_safe_block_queue_tracking.cpp b/base/test/unittest/common/utils_safe_block_queue_tracking.cpp index 05e35b7fc46a191c625c32ae6692eda8ce6f653e..25103a0ae20540e0a89450722075561685cc5b92 100644 --- a/base/test/unittest/common/utils_safe_block_queue_tracking.cpp +++ b/base/test/unittest/common/utils_safe_block_queue_tracking.cpp @@ -695,5 +695,22 @@ HWTEST_F(UtilsSafeBlockQueueTracking, testMutilthreadConcurrentGetAndPopInfullqu ASSERT_TRUE(demoDatas[0].joinStatus); demoDatas[0].joinStatus = false; } + +/* + * @tc.name: testPushAndPopNoWait + * @tc.desc: test PushNoWait and PopNoWait + */ +HWTEST_F(UtilsSafeBlockQueueTracking, testPushAndPopNoWait, TestSize.Level0) +{ + ASSERT_TRUE(DemoThreadData::shareQueue.IsEmpty()); + + int testElem = 1; + DemoThreadData::shareQueue.PushNoWait(testElem); + + int outElem = 0; + DemoThreadData::shareQueue.PopNotWait(outElem); + + ASSERT_EQ(testElem, outElem); +} } // namespace } // namespace OHOS \ No newline at end of file diff --git a/base/test/unittest/common/utils_safe_queue_test.cpp b/base/test/unittest/common/utils_safe_queue_test.cpp index b198982b56a838fcc24825b1fd22aa15fd732159..13579bd7d777ec2f0425cef313af9a2c81d9ee3d 100644 --- a/base/test/unittest/common/utils_safe_queue_test.cpp +++ b/base/test/unittest/common/utils_safe_queue_test.cpp @@ -286,5 +286,31 @@ HWTEST_F(UtilsSafeQueue, testMutilthreadConcurrentGetAndPopInNotEmptyQueue, Test putInTestThread.ResetStatus(); getOutTestThread.ResetStatus(); } + +/* +* Feature: SafeBlockQueue +* Function:Erase and Clear +* SubFunction: NA +* FunctionPoints: +* EnvConditions: NA +* CaseDescription: Push elememts into the queue, then erase certain element, finally clear the queue. +*/ +HWTEST_F(UtilsSafeQueue, testEraseAndClearInNotEmptyQueue, TestSize.Level0) +{ + ASSERT_EQ(DemoThreadData::shareQueue.Size(), 0); + + int t = 1; + for (unsigned int i = 0; i < THREAD_NUM; i++) + { + DemoThreadData::shareQueue.Push(t); + } + ASSERT_TRUE(DemoThreadData::shareQueue.Size() == THREAD_NUM); + ASSERT_FALSE(DemoThreadData::shareQueue.Empty()); + + DemoThreadData::shareQueue.Erase(t); + ASSERT_EQ(DemoThreadData::shareQueue.Size(), THREAD_NUM - 1); + DemoThreadData::shareQueue.Clear(); + ASSERT_EQ(DemoThreadData::shareQueue.Size(), 0); +} } // namespace } // namespace OHOS \ No newline at end of file diff --git a/base/test/unittest/common/utils_singleton_test.cpp b/base/test/unittest/common/utils_singleton_test.cpp index 8461612a958e56d84d57ec48b61d3cf57ecd310e..2d7767908584e17d836b2c50e32b1b99198b8d3b 100644 --- a/base/test/unittest/common/utils_singleton_test.cpp +++ b/base/test/unittest/common/utils_singleton_test.cpp @@ -139,6 +139,15 @@ HWTEST_F(UtilsSingletonTest, test_SingletonTest, TestSize.Level0) EXPECT_EQ(st1.GetObjAddr(), st2.GetObjAddr()); } +HWTEST_F(UtilsSingletonTest, test_DestroyInstanceTest, TestSize.Level0) +{ + shared_ptr sp1 = DelayedSingletonTest::GetInstance(); + auto oldInstance = sp1; + sp1->DestroyInstance(); + + auto newInstance = sp1->GetInstance(); + ASSERT_NE(oldInstance->GetObjAddr(), newInstance->GetObjAddr()); +} HWTEST_F(UtilsSingletonTest, test_DelayedSingletonTest, TestSize.Level0) { diff --git a/base/test/unittest/common/utils_sorted_vector_test.cpp b/base/test/unittest/common/utils_sorted_vector_test.cpp index 8316b5465b1db0c01daaea68bf722eb1a231cb1e..873935a2a2eff54635f188505c6a5d93d0061dd3 100644 --- a/base/test/unittest/common/utils_sorted_vector_test.cpp +++ b/base/test/unittest/common/utils_sorted_vector_test.cpp @@ -595,5 +595,26 @@ HWTEST_F(UtilsSortedVector, testAddNotAllowDuplicate, TestSize.Level0) ASSERT_EQ(i, svec[i]); } } + +HWTEST_F(UtilsSortedVector, testErase, TestSize.Level0) +{ + SortedVector svec; + + for (int i = 9; i >= 0; i--) { + + ASSERT_NE(svec.Add(i), static_cast(-1)); + } + ASSERT_EQ(static_cast(10), svec.Size()); + + ASSERT_EQ(svec.Front(), 0); + + int currentSize = svec.Size(); + svec.PopBack(); + ASSERT_EQ(svec.Size(), currentSize - 1); + + auto iter = svec.Erase(svec.IndexOf(3)); + ASSERT_EQ(iter[0], 4); +} + } // namespace } // namespace OHOS \ No newline at end of file diff --git a/base/test/unittest/common/utils_string_test.cpp b/base/test/unittest/common/utils_string_test.cpp index 8b54675c233fa46a7d57071188cb756ec701bf67..b6efc93b8a812d6078baa5eae20b1f15b3969c46 100644 --- a/base/test/unittest/common/utils_string_test.cpp +++ b/base/test/unittest/common/utils_string_test.cpp @@ -17,6 +17,7 @@ #include "string_ex.h" #include #include +#include using namespace testing::ext; using namespace std; @@ -665,5 +666,13 @@ HWTEST_F(UtilsStringTest, DexToHexString_01, TestSize.Level0) result = DexToHexString(11259375, false); EXPECT_EQ(result, "abcdef"); } + +HWTEST_F(UtilsStringTest, GetUtf16ToUtf8Length, TestSize.Level0) +{ + string strValue = "hello world"; + u16string str16 = Str8ToStr16(strValue); + GetUtf16ToUtf8Length(str16); + ASSERT_EQ(strValue.length(), str16.length()); +} } // namespace } // namespace OHOS \ No newline at end of file diff --git a/base/test/unittest/common/utils_unique_fd_test.cpp b/base/test/unittest/common/utils_unique_fd_test.cpp index 3747ec793be829a4ceeef0cd8de0233be0e272c1..8e451d9db0a00ecd5985b2f8990b0b363c48c74f 100644 --- a/base/test/unittest/common/utils_unique_fd_test.cpp +++ b/base/test/unittest/common/utils_unique_fd_test.cpp @@ -158,5 +158,19 @@ HWTEST_F(UtilsUniqueFd, testUtilsUniqueFdDefineDeletorCloseStatus, TestSize.Leve int ret = write(fd, buf, sizeof(buf)); ASSERT_EQ(ret, -1); }; + +HWTEST_F(UtilsUniqueFd, testUtilsUniqueFdReleaseAndGet, TestSize.Level0) +{ + int fd = open(testfilename, O_RDWR); + + UniqueFd ufd2(fd); + ASSERT_EQ(ufd2.Get(), fd); + ASSERT_EQ(ufd2.Release(), fd); + + UniqueFd ufd3(fd); + UniqueFd ufd1; + ufd1 = std::move(ufd3); + ASSERT_EQ(ufd1, fd); +}; } // namespace } // namespace OHOS diff --git a/base/test/unittest/rust/BUILD.gn b/base/test/unittest/rust/BUILD.gn index 1b6d69f6dfcf585333f906748c8c4cb2ab7c7d12..43dd50e0e995f4cd94bd2550e4d3964ec01ab962 100644 --- a/base/test/unittest/rust/BUILD.gn +++ b/base/test/unittest/rust/BUILD.gn @@ -25,10 +25,12 @@ if (host_os == "linux" && !is_asan && !is_arkui_x) { testonly = true deps = [] - deps += [ - ":rust_utils_ashmem_test", - ":rust_utils_file_test", - ] + if (!use_clang_coverage) { + deps += [ + ":rust_utils_ashmem_test", + ":rust_utils_file_test", + ] + } } ohos_rust_unittest("rust_utils_ashmem_test") {