diff --git a/test/utils/SharedData/src/SharedDataTest.cpp b/test/utils/SharedData/src/SharedDataTest.cpp index 47bd0af..58df1d9 100644 --- a/test/utils/SharedData/src/SharedDataTest.cpp +++ b/test/utils/SharedData/src/SharedDataTest.cpp @@ -49,6 +49,7 @@ namespace SharedDataTest // ../output_files/test/bin/SharedDataTest --gtest_filter=SharedDataTest.Demo2 TEST(SharedDataTest, Demo2) { + constexpr int WRITABLE_DATA = 189; CreateLogModule(); ILogInit(LOG_INSTANCE_TYPE_END); constexpr int PROJECT_ID = 9; @@ -56,17 +57,129 @@ namespace SharedDataTest SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID); if (nullptr != sharedDataMinor) { - int writableData = 189; - IMakeSharedData(sharedDataMinor, sizeof(int) * 200, sizeof(int)); - ISetWritableData(sharedDataMinor, &writableData, sizeof(int)); + IMakeSharedData(sharedDataMinor, sizeof(int), sizeof(int)); + ISetWritableData(sharedDataMinor, (void *)&WRITABLE_DATA, sizeof(int)); } if (nullptr != sharedDataPrimary) { - int readableData[2] = {0}; - IMakeSharedData(sharedDataPrimary, sizeof(int) * 2, sizeof(int)); - StatusCode code = IGetReadableData(sharedDataPrimary, readableData, sizeof(int) * 2); + int readableData = 0; + IMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int)); + StatusCode code = IGetReadableData(sharedDataPrimary, &readableData, sizeof(int)); PrintStringCode(code); LogInfo("readableData = %d\n", readableData); + EXPECT_EQ(readableData, WRITABLE_DATA); + IFree(sharedDataPrimary); + } + if (nullptr != sharedDataMinor) + { + IFree(sharedDataMinor); + } + ILogUnInit(); + } + // ../output_files/test/bin/SharedDataTest --gtest_filter=SharedDataTest.Demo3 + TEST(SharedDataTest, Demo3) + { + CreateLogModule(); + ILogInit(LOG_INSTANCE_TYPE_END); + constexpr int PROJECT_ID = 9; + SharedData *sharedDataPrimary = CreateSharedData(SHARER_NAME_PRIMARY, "./shared_file", PROJECT_ID); + SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID); + if (nullptr != sharedDataMinor) + { + constexpr int WRITABLE_DATA_LENGTH = 9; + char writableData[WRITABLE_DATA_LENGTH] = {0}; + IMakeSharedData(sharedDataMinor, sizeof(int), sizeof(writableData)); + ISetWritableData(sharedDataMinor, writableData, sizeof(writableData)); + } + if (nullptr != sharedDataPrimary) + { + constexpr int DEFAULT_DATA = 0; + int readableData = DEFAULT_DATA; + IMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int)); + StatusCode code = IGetReadableData(sharedDataPrimary, &readableData, sizeof(int)); + PrintStringCode(code); + LogInfo("readableData = %d\n", readableData); + EXPECT_NE(code.mStatusCode, STATUS_CODE_OK); + EXPECT_EQ(readableData, DEFAULT_DATA); + IFree(sharedDataPrimary); + } + if (nullptr != sharedDataMinor) + { + IFree(sharedDataMinor); + } + ILogUnInit(); + } + // ../output_files/test/bin/SharedDataTest --gtest_filter=SharedDataTest.Demo4 + TEST(SharedDataTest, Demo4) + { + constexpr int WRITABLE_DATA = 189; + CreateLogModule(); + ILogInit(LOG_INSTANCE_TYPE_END); + constexpr int PROJECT_ID = 9; + SharedData *sharedDataPrimary = CreateSharedData(SHARER_NAME_PRIMARY, "./shared_file", PROJECT_ID); + SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID); + if (nullptr != sharedDataMinor) + { + IMakeSharedData(sharedDataMinor, sizeof(int) * 2, sizeof(int)); + ISetWritableData(sharedDataMinor, (void *)&WRITABLE_DATA, sizeof(int)); + } + if (nullptr != sharedDataPrimary) + { + constexpr int DEFAULT_DATA = 0; + int readableData = DEFAULT_DATA; + IMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int)); + StatusCode code = IGetReadableData(sharedDataPrimary, &readableData, sizeof(int)); + PrintStringCode(code); + LogInfo("readableData = %d\n", readableData); + EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); + EXPECT_EQ(readableData, WRITABLE_DATA); + IFree(sharedDataPrimary); + } + if (nullptr != sharedDataMinor) + { + IFree(sharedDataMinor); + } + ILogUnInit(); + } + // ../output_files/test/bin/SharedDataTest --gtest_filter=SharedDataTest.Demo5 + TEST(SharedDataTest, Demo5) + { + CreateLogModule(); + ILogInit(LOG_INSTANCE_TYPE_END); + constexpr int PROJECT_ID = 9; + SharedData *sharedDataPrimary = CreateSharedData(SHARER_NAME_PRIMARY, "./shared_file", PROJECT_ID); + if (nullptr != sharedDataPrimary) + { + constexpr int DEFAULT_DATA = 0; + int readableData = DEFAULT_DATA; + IMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int)); + StatusCode code = IGetReadableData(sharedDataPrimary, &readableData, sizeof(int)); + PrintStringCode(code); + LogInfo("readableData = %d\n", readableData); + EXPECT_NE(code.mStatusCode, STATUS_CODE_OK); + EXPECT_EQ(readableData, DEFAULT_DATA); + IFree(sharedDataPrimary); + } + ILogUnInit(); + } + // ../output_files/test/bin/SharedDataTest --gtest_filter=SharedDataTest.Demo6 + TEST(SharedDataTest, Demo6) + { + CreateLogModule(); + ILogInit(LOG_INSTANCE_TYPE_END); + constexpr int PROJECT_ID = 9; + SharedData *sharedDataPrimary = CreateSharedData(SHARER_NAME_PRIMARY, "./shared_file", PROJECT_ID); + SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID); + if (nullptr != sharedDataPrimary) + { + constexpr int DEFAULT_DATA = 0; + int readableData = DEFAULT_DATA; + IMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int)); + StatusCode code = IGetReadableData(sharedDataPrimary, &readableData, sizeof(int)); + PrintStringCode(code); + LogInfo("readableData = %d\n", readableData); + EXPECT_NE(code.mStatusCode, STATUS_CODE_OK); + EXPECT_EQ(readableData, DEFAULT_DATA); IFree(sharedDataPrimary); } if (nullptr != sharedDataMinor) diff --git a/utils/SharedData/src/SharedDataImpl.cpp b/utils/SharedData/src/SharedDataImpl.cpp index eabba1e..80049d0 100644 --- a/utils/SharedData/src/SharedDataImpl.cpp +++ b/utils/SharedData/src/SharedDataImpl.cpp @@ -127,9 +127,18 @@ void SharedDataCpp::SetWritableMemory(void *buf, const unsigned int &bufLength) } if (SHARER_NAME_PRIMARY == mSharerName && bufLength == mMinorReadSize) { - memcpy((char *)mSharedMemeory + sizeof(UserDataHeader) * THERE_TWO_USER_DATA_HEADER + mPrimaryReadSize, - buf, - bufLength); + UserDataHeader *readableHeader = (UserDataHeader *)((char *)mSharedMemeory); + if (memcmp(readableHeader->mUserName, USER_NAME_INIT_NAME, USER_NAME_BUF_LENGTH) == 0 && + mPrimaryReadSize == readableHeader->mDataLength) + { + memcpy((char *)mSharedMemeory + sizeof(UserDataHeader) * THERE_TWO_USER_DATA_HEADER + mPrimaryReadSize, + buf, + bufLength); + } + else + { + LogError("Peer not match.\n"); + } } else if (SHARER_NAME_MINOR == mSharerName && bufLength == mPrimaryReadSize) { diff --git a/utils/SharedData/src/SharedDataImpl.h b/utils/SharedData/src/SharedDataImpl.h index 5e7671f..5aee3cd 100644 --- a/utils/SharedData/src/SharedDataImpl.h +++ b/utils/SharedData/src/SharedDataImpl.h @@ -17,6 +17,7 @@ #include "SharedData.h" #include "SharedMemory.h" #include +#include constexpr int USER_NAME_BUF_LENGTH = 4; #define USER_NAME_INIT_NAME "XING" enum USER_DATA_INIT @@ -29,6 +30,10 @@ typedef struct shared_data_header { const char *mCheckName; } SharedDataHeader; +typedef struct shared_memory_header +{ + std::mutex mMutex; +}; typedef struct user_data_header { char mUserName[USER_NAME_BUF_LENGTH];