13f4cbf05Sopenharmony_ci/* 23f4cbf05Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 33f4cbf05Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43f4cbf05Sopenharmony_ci * you may not use this file except in compliance with the License. 53f4cbf05Sopenharmony_ci * You may obtain a copy of the License at 63f4cbf05Sopenharmony_ci * 73f4cbf05Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83f4cbf05Sopenharmony_ci * 93f4cbf05Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103f4cbf05Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113f4cbf05Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123f4cbf05Sopenharmony_ci * See the License for the specific language governing permissions and 133f4cbf05Sopenharmony_ci * limitations under the License. 143f4cbf05Sopenharmony_ci */ 153f4cbf05Sopenharmony_ci 163f4cbf05Sopenharmony_ci#include <algorithm> 173f4cbf05Sopenharmony_ci#include <fstream> 183f4cbf05Sopenharmony_ci#include <iostream> 193f4cbf05Sopenharmony_ci#include <unistd.h> 203f4cbf05Sopenharmony_ci#include <sys/mman.h> 213f4cbf05Sopenharmony_ci#include <gtest/gtest.h> 223f4cbf05Sopenharmony_ci#include "directory_ex.h" 233f4cbf05Sopenharmony_ci#include "securec.h" 243f4cbf05Sopenharmony_ci#include "hilog/log.h" 253f4cbf05Sopenharmony_ci#include "parcel.h" 263f4cbf05Sopenharmony_ci#include "refbase.h" 273f4cbf05Sopenharmony_ci#include "ashmem.h" 283f4cbf05Sopenharmony_ci 293f4cbf05Sopenharmony_ciusing namespace testing::ext; 303f4cbf05Sopenharmony_ciusing namespace std; 313f4cbf05Sopenharmony_ci 323f4cbf05Sopenharmony_cinamespace OHOS { 333f4cbf05Sopenharmony_cinamespace { 343f4cbf05Sopenharmony_ciconst int MAX_PARCEL_SIZE = 1000; 353f4cbf05Sopenharmony_cichar g_data[MAX_PARCEL_SIZE]; 363f4cbf05Sopenharmony_ciconst int32_t MEMORY_SIZE = 1024; 373f4cbf05Sopenharmony_ciconst std::string MEMORY_CONTENT = "HelloWorld2020\0"; 383f4cbf05Sopenharmony_ciconst std::string MEMORY_NAME = "Test SharedMemory\0"; 393f4cbf05Sopenharmony_cistatic constexpr HiviewDFX::HiLogLabel label = { LOG_CORE, 0xD003D00, "UtilsAshmemTest" }; 403f4cbf05Sopenharmony_ci#define UTILS_LOGF(...) (void)OHOS::HiviewDFX::HiLog::Fatal(label, __VA_ARGS__) 413f4cbf05Sopenharmony_ci#define UTILS_LOGE(...) (void)OHOS::HiviewDFX::HiLog::Error(label, __VA_ARGS__) 423f4cbf05Sopenharmony_ci#define UTILS_LOGW(...) (void)OHOS::HiviewDFX::HiLog::Warn(label, __VA_ARGS__) 433f4cbf05Sopenharmony_ci#define UTILS_LOGI(...) (void)OHOS::HiviewDFX::HiLog::Info(label, __VA_ARGS__) 443f4cbf05Sopenharmony_ci#define UTILS_LOGD(...) (void)OHOS::HiviewDFX::HiLog::Debug(label, __VA_ARGS__) 453f4cbf05Sopenharmony_ci 463f4cbf05Sopenharmony_ciclass UtilsAshmemTest : public testing::Test { 473f4cbf05Sopenharmony_cipublic: 483f4cbf05Sopenharmony_ci static void TearDownTestCase(void); 493f4cbf05Sopenharmony_ci}; 503f4cbf05Sopenharmony_ci 513f4cbf05Sopenharmony_civoid UtilsAshmemTest::TearDownTestCase(void) 523f4cbf05Sopenharmony_ci{ 533f4cbf05Sopenharmony_ci for (int i = 0; i < MAX_PARCEL_SIZE; i++) { 543f4cbf05Sopenharmony_ci g_data[i] = 0; 553f4cbf05Sopenharmony_ci } 563f4cbf05Sopenharmony_ci} 573f4cbf05Sopenharmony_ci 583f4cbf05Sopenharmony_ci/** 593f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_WriteAndRead_001 603f4cbf05Sopenharmony_ci * @tc.desc: create and map ashmem 613f4cbf05Sopenharmony_ci * @tc.type: FUNC 623f4cbf05Sopenharmony_ci */ 633f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_WriteAndRead_001, TestSize.Level0) 643f4cbf05Sopenharmony_ci{ 653f4cbf05Sopenharmony_ci UTILS_LOGI("test_ashmem_WriteAndRead_001"); 663f4cbf05Sopenharmony_ci 673f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 683f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 693f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem->GetAshmemSize() == MEMORY_SIZE); 703f4cbf05Sopenharmony_ci 713f4cbf05Sopenharmony_ci bool ret = ashmem->MapAshmem(PROT_READ | PROT_WRITE); 723f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 733f4cbf05Sopenharmony_ci 743f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 753f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 763f4cbf05Sopenharmony_ci} 773f4cbf05Sopenharmony_ci 783f4cbf05Sopenharmony_ci/** 793f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_WriteAndRead_002 803f4cbf05Sopenharmony_ci * @tc.desc: write to and read from ashmem 813f4cbf05Sopenharmony_ci * @tc.type: FUNC 823f4cbf05Sopenharmony_ci */ 833f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_WriteAndRead_002, TestSize.Level0) 843f4cbf05Sopenharmony_ci{ 853f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 863f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 873f4cbf05Sopenharmony_ci 883f4cbf05Sopenharmony_ci bool ret = ashmem->MapReadAndWriteAshmem(); 893f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 903f4cbf05Sopenharmony_ci 913f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), 0); 923f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 933f4cbf05Sopenharmony_ci 943f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), sizeof(MEMORY_CONTENT)); 953f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 963f4cbf05Sopenharmony_ci 973f4cbf05Sopenharmony_ci auto readData = ashmem->ReadFromAshmem(sizeof(MEMORY_CONTENT), 0); 983f4cbf05Sopenharmony_ci ASSERT_TRUE(readData != nullptr); 993f4cbf05Sopenharmony_ci 1003f4cbf05Sopenharmony_ci const char *readContent = reinterpret_cast<const char *>(readData); 1013f4cbf05Sopenharmony_ci EXPECT_EQ(memcmp(MEMORY_CONTENT.c_str(), readContent, sizeof(MEMORY_CONTENT)), 0); 1023f4cbf05Sopenharmony_ci 1033f4cbf05Sopenharmony_ci readData = ashmem->ReadFromAshmem(sizeof(MEMORY_CONTENT), sizeof(MEMORY_CONTENT)); 1043f4cbf05Sopenharmony_ci ASSERT_TRUE(readData != nullptr); 1053f4cbf05Sopenharmony_ci 1063f4cbf05Sopenharmony_ci readContent = reinterpret_cast<const char *>(readData); 1073f4cbf05Sopenharmony_ci EXPECT_EQ(memcmp(MEMORY_CONTENT.c_str(), readContent, sizeof(MEMORY_CONTENT)), 0); 1083f4cbf05Sopenharmony_ci 1093f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 1103f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 1113f4cbf05Sopenharmony_ci} 1123f4cbf05Sopenharmony_ci 1133f4cbf05Sopenharmony_ci/** 1143f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_WriteAndRead_003 1153f4cbf05Sopenharmony_ci * @tc.desc: test read-only ashmem 1163f4cbf05Sopenharmony_ci * @tc.type: FUNC 1173f4cbf05Sopenharmony_ci */ 1183f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_WriteAndRead_003, TestSize.Level0) 1193f4cbf05Sopenharmony_ci{ 1203f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 1213f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 1223f4cbf05Sopenharmony_ci 1233f4cbf05Sopenharmony_ci bool ret = ashmem->MapReadAndWriteAshmem(); 1243f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 1253f4cbf05Sopenharmony_ci 1263f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), 0); 1273f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 1283f4cbf05Sopenharmony_ci 1293f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 1303f4cbf05Sopenharmony_ci 1313f4cbf05Sopenharmony_ci ret = ashmem->MapReadOnlyAshmem(); 1323f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 1333f4cbf05Sopenharmony_ci 1343f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), sizeof(MEMORY_CONTENT)); 1353f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 1363f4cbf05Sopenharmony_ci 1373f4cbf05Sopenharmony_ci auto readData = ashmem->ReadFromAshmem(sizeof(MEMORY_CONTENT), 0); 1383f4cbf05Sopenharmony_ci ASSERT_TRUE(readData != nullptr); 1393f4cbf05Sopenharmony_ci 1403f4cbf05Sopenharmony_ci const char *readContent = reinterpret_cast<const char *>(readData); 1413f4cbf05Sopenharmony_ci EXPECT_EQ(memcmp(MEMORY_CONTENT.c_str(), readContent, sizeof(MEMORY_CONTENT)), 0); 1423f4cbf05Sopenharmony_ci 1433f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 1443f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 1453f4cbf05Sopenharmony_ci} 1463f4cbf05Sopenharmony_ci 1473f4cbf05Sopenharmony_ci/** 1483f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_WriteAndRead_004 1493f4cbf05Sopenharmony_ci * @tc.desc: set read-only protection and map again 1503f4cbf05Sopenharmony_ci * @tc.type: FUNC 1513f4cbf05Sopenharmony_ci */ 1523f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_WriteAndRead_004, TestSize.Level0) 1533f4cbf05Sopenharmony_ci{ 1543f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 1553f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 1563f4cbf05Sopenharmony_ci 1573f4cbf05Sopenharmony_ci bool ret = ashmem->MapReadAndWriteAshmem(); 1583f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 1593f4cbf05Sopenharmony_ci 1603f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), 0); 1613f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 1623f4cbf05Sopenharmony_ci 1633f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 1643f4cbf05Sopenharmony_ci 1653f4cbf05Sopenharmony_ci ret = ashmem->SetProtection(PROT_READ); 1663f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 1673f4cbf05Sopenharmony_ci 1683f4cbf05Sopenharmony_ci ret = ashmem->MapReadAndWriteAshmem(); 1693f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 1703f4cbf05Sopenharmony_ci 1713f4cbf05Sopenharmony_ci ret = ashmem->MapReadOnlyAshmem(); 1723f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 1733f4cbf05Sopenharmony_ci 1743f4cbf05Sopenharmony_ci auto readData = ashmem->ReadFromAshmem(sizeof(MEMORY_CONTENT), 0); 1753f4cbf05Sopenharmony_ci ASSERT_TRUE(readData != nullptr); 1763f4cbf05Sopenharmony_ci 1773f4cbf05Sopenharmony_ci const char *readContent = reinterpret_cast<const char *>(readData); 1783f4cbf05Sopenharmony_ci EXPECT_EQ(memcmp(MEMORY_CONTENT.c_str(), readContent, sizeof(MEMORY_CONTENT)), 0); 1793f4cbf05Sopenharmony_ci 1803f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 1813f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 1823f4cbf05Sopenharmony_ci} 1833f4cbf05Sopenharmony_ci 1843f4cbf05Sopenharmony_ci/** 1853f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_WriteAndRead_005 1863f4cbf05Sopenharmony_ci * @tc.desc: set read-only protection without mapping again 1873f4cbf05Sopenharmony_ci * @tc.type: FUNC 1883f4cbf05Sopenharmony_ci */ 1893f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_WriteAndRead_005, TestSize.Level0) 1903f4cbf05Sopenharmony_ci{ 1913f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 1923f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 1933f4cbf05Sopenharmony_ci 1943f4cbf05Sopenharmony_ci bool ret = ashmem->MapReadAndWriteAshmem(); 1953f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 1963f4cbf05Sopenharmony_ci 1973f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), 0); 1983f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 1993f4cbf05Sopenharmony_ci 2003f4cbf05Sopenharmony_ci ret = ashmem->SetProtection(PROT_READ); 2013f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 2023f4cbf05Sopenharmony_ci 2033f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), 0); 2043f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 2053f4cbf05Sopenharmony_ci 2063f4cbf05Sopenharmony_ci auto readData = ashmem->ReadFromAshmem(sizeof(MEMORY_CONTENT), 0); 2073f4cbf05Sopenharmony_ci ASSERT_TRUE(readData != nullptr); 2083f4cbf05Sopenharmony_ci 2093f4cbf05Sopenharmony_ci const char *readContent = reinterpret_cast<const char *>(readData); 2103f4cbf05Sopenharmony_ci EXPECT_EQ(memcmp(MEMORY_CONTENT.c_str(), readContent, sizeof(MEMORY_CONTENT)), 0); 2113f4cbf05Sopenharmony_ci 2123f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 2133f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 2143f4cbf05Sopenharmony_ci} 2153f4cbf05Sopenharmony_ci 2163f4cbf05Sopenharmony_ci/** 2173f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_InvalidOperation_001 2183f4cbf05Sopenharmony_ci * @tc.desc: create invalid-size ashmem or set invalid protection type 2193f4cbf05Sopenharmony_ci * @tc.type: FUNC 2203f4cbf05Sopenharmony_ci */ 2213f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_InvalidOperation_001, TestSize.Level0) 2223f4cbf05Sopenharmony_ci{ 2233f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), -1); 2243f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem == nullptr); 2253f4cbf05Sopenharmony_ci 2263f4cbf05Sopenharmony_ci ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 2273f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 2283f4cbf05Sopenharmony_ci 2293f4cbf05Sopenharmony_ci bool ret = ashmem->SetProtection(-1); 2303f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 2313f4cbf05Sopenharmony_ci 2323f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 2333f4cbf05Sopenharmony_ci} 2343f4cbf05Sopenharmony_ci 2353f4cbf05Sopenharmony_ci/** 2363f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_InvalidOperation_002 2373f4cbf05Sopenharmony_ci * @tc.desc: map after closing ashmem 2383f4cbf05Sopenharmony_ci * @tc.type: FUNC 2393f4cbf05Sopenharmony_ci */ 2403f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_InvalidOperation_002, TestSize.Level0) 2413f4cbf05Sopenharmony_ci{ 2423f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 2433f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 2443f4cbf05Sopenharmony_ci 2453f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 2463f4cbf05Sopenharmony_ci 2473f4cbf05Sopenharmony_ci bool ret = ashmem->MapReadAndWriteAshmem(); 2483f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 2493f4cbf05Sopenharmony_ci} 2503f4cbf05Sopenharmony_ci 2513f4cbf05Sopenharmony_ci/** 2523f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_InvalidOperation_003 2533f4cbf05Sopenharmony_ci * @tc.desc: write or read after closing ashmem 2543f4cbf05Sopenharmony_ci * @tc.type: FUNC 2553f4cbf05Sopenharmony_ci */ 2563f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_InvalidOperation_003, TestSize.Level0) 2573f4cbf05Sopenharmony_ci{ 2583f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 2593f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 2603f4cbf05Sopenharmony_ci 2613f4cbf05Sopenharmony_ci bool ret = ashmem->MapReadAndWriteAshmem(); 2623f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 2633f4cbf05Sopenharmony_ci 2643f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 2653f4cbf05Sopenharmony_ci 2663f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), 0); 2673f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 2683f4cbf05Sopenharmony_ci 2693f4cbf05Sopenharmony_ci auto readData = ashmem->ReadFromAshmem(sizeof(MEMORY_CONTENT), 0); 2703f4cbf05Sopenharmony_ci ASSERT_TRUE(readData == nullptr); 2713f4cbf05Sopenharmony_ci} 2723f4cbf05Sopenharmony_ci 2733f4cbf05Sopenharmony_ci/** 2743f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_InvalidOperation_004 2753f4cbf05Sopenharmony_ci * @tc.desc: write or read after unmapping ashmem 2763f4cbf05Sopenharmony_ci * @tc.type: FUNC 2773f4cbf05Sopenharmony_ci */ 2783f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_InvalidOperation_004, TestSize.Level0) 2793f4cbf05Sopenharmony_ci{ 2803f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 2813f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 2823f4cbf05Sopenharmony_ci 2833f4cbf05Sopenharmony_ci bool ret = ashmem->MapReadAndWriteAshmem(); 2843f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 2853f4cbf05Sopenharmony_ci 2863f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 2873f4cbf05Sopenharmony_ci 2883f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), 0); 2893f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 2903f4cbf05Sopenharmony_ci 2913f4cbf05Sopenharmony_ci auto readData = ashmem->ReadFromAshmem(sizeof(MEMORY_CONTENT), 0); 2923f4cbf05Sopenharmony_ci ASSERT_TRUE(readData == nullptr); 2933f4cbf05Sopenharmony_ci 2943f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 2953f4cbf05Sopenharmony_ci} 2963f4cbf05Sopenharmony_ci 2973f4cbf05Sopenharmony_ci/** 2983f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_InvalidOperation_005 2993f4cbf05Sopenharmony_ci * @tc.desc: expand protection type 3003f4cbf05Sopenharmony_ci * @tc.type: FUNC 3013f4cbf05Sopenharmony_ci */ 3023f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_InvalidOperation_005, TestSize.Level0) 3033f4cbf05Sopenharmony_ci{ 3043f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 3053f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 3063f4cbf05Sopenharmony_ci 3073f4cbf05Sopenharmony_ci bool ret = ashmem->SetProtection(PROT_WRITE); 3083f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 3093f4cbf05Sopenharmony_ci 3103f4cbf05Sopenharmony_ci ret = ashmem->SetProtection(PROT_READ); 3113f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 3123f4cbf05Sopenharmony_ci 3133f4cbf05Sopenharmony_ci ret = ashmem->SetProtection(PROT_READ | PROT_WRITE); 3143f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 3153f4cbf05Sopenharmony_ci 3163f4cbf05Sopenharmony_ci ret = ashmem->SetProtection(PROT_NONE); 3173f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 3183f4cbf05Sopenharmony_ci 3193f4cbf05Sopenharmony_ci ret = ashmem->SetProtection(PROT_READ); 3203f4cbf05Sopenharmony_ci ASSERT_FALSE(ret); 3213f4cbf05Sopenharmony_ci 3223f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 3233f4cbf05Sopenharmony_ci} 3243f4cbf05Sopenharmony_ci 3253f4cbf05Sopenharmony_ci/** 3263f4cbf05Sopenharmony_ci * @tc.name: test_ashmem_InvalidOperation_006 3273f4cbf05Sopenharmony_ci * @tc.desc: test invalid input or test invalid operation 3283f4cbf05Sopenharmony_ci * @tc.type: FUNC 3293f4cbf05Sopenharmony_ci */ 3303f4cbf05Sopenharmony_ciHWTEST_F(UtilsAshmemTest, test_ashmem_InvalidOperation_006, TestSize.Level0) 3313f4cbf05Sopenharmony_ci{ 3323f4cbf05Sopenharmony_ci sptr<Ashmem> ashmem = Ashmem::CreateAshmem(MEMORY_NAME.c_str(), MEMORY_SIZE); 3333f4cbf05Sopenharmony_ci ASSERT_TRUE(ashmem != nullptr); 3343f4cbf05Sopenharmony_ci 3353f4cbf05Sopenharmony_ci bool ret = ashmem->MapReadAndWriteAshmem(); 3363f4cbf05Sopenharmony_ci ASSERT_TRUE(ret); 3373f4cbf05Sopenharmony_ci 3383f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(nullptr, sizeof(MEMORY_CONTENT), 0); 3393f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3403f4cbf05Sopenharmony_ci 3413f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), MEMORY_SIZE+1); 3423f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3433f4cbf05Sopenharmony_ci 3443f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), -1); 3453f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3463f4cbf05Sopenharmony_ci 3473f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), MEMORY_SIZE+1, 0); 3483f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3493f4cbf05Sopenharmony_ci 3503f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), -1, 0); 3513f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3523f4cbf05Sopenharmony_ci 3533f4cbf05Sopenharmony_ci ret = ashmem->WriteToAshmem(MEMORY_CONTENT.c_str(), sizeof(MEMORY_CONTENT), MEMORY_SIZE); 3543f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3553f4cbf05Sopenharmony_ci 3563f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 3573f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 3583f4cbf05Sopenharmony_ci 3593f4cbf05Sopenharmony_ci ashmem->GetAshmemSize(); 3603f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3613f4cbf05Sopenharmony_ci 3623f4cbf05Sopenharmony_ci ashmem->GetProtection(); 3633f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3643f4cbf05Sopenharmony_ci 3653f4cbf05Sopenharmony_ci ashmem->UnmapAshmem(); 3663f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3673f4cbf05Sopenharmony_ci 3683f4cbf05Sopenharmony_ci ashmem->CloseAshmem(); 3693f4cbf05Sopenharmony_ci EXPECT_FALSE(ret); 3703f4cbf05Sopenharmony_ci} 3713f4cbf05Sopenharmony_ci} // namespace 3723f4cbf05Sopenharmony_ci} // namespace OHOS