From cb010e04760d5b453f168f3570e40910049c25ae Mon Sep 17 00:00:00 2001 From: l00520400 Date: Mon, 24 Jan 2022 14:42:57 +0800 Subject: [PATCH] test innerkits Signed-off-by: l00520400 Change-Id: I729cbdd52a2a0cbb3aae9b6a1b1d2046af804a2a Signed-off-by: l00520400 --- .../innerkits/accesstoken/test/BUILD.gn | 6 + .../unittest/src/accesstoken_kit_test.cpp | 167 ++++++++++++++++++ .../innerkits/nativetoken/test/BUILD.gn | 9 + .../unittest/src/nativetoken_kit_test.cpp | 99 +++++++++++ .../test/unittest/src/nativetoken_kit_test.h | 19 +- 5 files changed, 297 insertions(+), 3 deletions(-) diff --git a/interfaces/innerkits/accesstoken/test/BUILD.gn b/interfaces/innerkits/accesstoken/test/BUILD.gn index a39d7014d..b02643686 100755 --- a/interfaces/innerkits/accesstoken/test/BUILD.gn +++ b/interfaces/innerkits/accesstoken/test/BUILD.gn @@ -23,6 +23,11 @@ ohos_unittest("libaccesstoken_sdk_test") { "//third_party/googletest/include", "//base/security/access_token/interfaces/innerkits/accesstoken/include", "//base/security/access_token/interfaces/innerkits/nativetoken/include", + "//base/security/access_token/services/accesstokenmanager/main/cpp/include/service", + "//base/security/access_token/services/accesstokenmanager/main/cpp/include/token", + "//base/security/access_token/services/accesstokenmanager/main/cpp/include/permission", + "//base/security/access_token/services/accesstokenmanager/main/cpp/include/database", + "//third_party/json/include", ] sources = [ "unittest/src/accesstoken_kit_test.cpp" ] @@ -32,6 +37,7 @@ ohos_unittest("libaccesstoken_sdk_test") { deps = [ "//base/security/access_token/interfaces/innerkits/accesstoken:libaccesstoken_sdk", "//base/security/access_token/interfaces/innerkits/nativetoken:libnativetoken", + "//base/security/access_token/services/accesstokenmanager/:accesstoken_manager_service", "//utils/native/base:utils", ] } diff --git a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp index 84fd25bc9..c350ca003 100755 --- a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp +++ b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp @@ -18,6 +18,9 @@ #include "accesstoken_kit.h" #include "nativetoken_kit.h" +#define private public +#include "native_token_receptor.h" +#undef private using namespace testing::ext; using namespace OHOS::Security::AccessToken; @@ -2012,6 +2015,71 @@ HWTEST_F(AccessTokenKitTest, CheckNativeDCap002, TestSize.Level1) ASSERT_EQ(RET_FAILED, ret); } +/** + * @tc.name: CheckNativeDCap003 + * @tc.desc: + * @tc.type: FUNC + * @tc.require:AR000GK6TD + */ +HWTEST_F(AccessTokenKitTest, CheckNativeDCap003, TestSize.Level1) +{ + const char **dcaps = (const char **)malloc(sizeof(char *) * 1); + dcaps[0] = "AT_CAP_01"; + int dcapNum = 1; + uint64_t tokenId01 = GetAccessTokenId("CheckNativeDCap003", dcaps, dcapNum, "system_core"); + + AccessTokenID tokenID = tokenId01 & 0xffffffff; + int ret = AccessTokenKit::CheckNativeDCap(tokenID, "AT_CAP_01"); + ASSERT_EQ(RET_SUCCESS, ret); + + dcaps[0] = "AT_CAP_02"; + uint64_t tokenId02 = GetAccessTokenId("CheckNativeDCap003", dcaps, dcapNum, "system_core"); + ASSERT_EQ(tokenId01, tokenId02); + + tokenID = tokenId02 & 0xffffffff; + ret = AccessTokenKit::CheckNativeDCap(tokenID, "AT_CAP_01"); + ASSERT_EQ(RET_FAILED, ret); + ret = AccessTokenKit::CheckNativeDCap(tokenID, "AT_CAP_02"); + ASSERT_EQ(RET_SUCCESS, ret); + free(dcaps); +} + +static void ConcurrencyCheckNativeDCapTask(unsigned int tokenID) +{ + for (int i = 0; i < CYCLE_TIMES; i++) { + int ret = AccessTokenKit::CheckNativeDCap(tokenID, "AT_CAP_01"); + ASSERT_EQ(RET_SUCCESS, ret); + } +} + +/** + * @tc.name: CheckNativeDCap004 + * @tc.desc: Check native dcap multiple threads. + * @tc.type: FUNC + * @tc.require:AR000GK6TD + */ +HWTEST_F(AccessTokenKitTest, CheckNativeDCap004, TestSize.Level1) +{ + const char **dcaps = (const char **)malloc(sizeof(char *) * 1); + dcaps[0] = "AT_CAP_01"; + int dcapNum = 1; + uint64_t tokenId; + tokenId = GetAccessTokenId("foundation", dcaps, dcapNum, "system_core"); + ASSERT_NE(tokenId, 0); + tokenId = GetAccessTokenId("CheckNativeDCap004", dcaps, dcapNum, "system_core"); + ASSERT_NE(tokenId, 0); + + AccessTokenID tokenID = tokenId & 0xffffffff; + std::vector threadVec; + for (int i = 0; i < THREAD_NUM; i++) { + threadVec.emplace_back(std::thread(ConcurrencyCheckNativeDCapTask, tokenID)); + } + for (auto it = threadVec.begin(); it != threadVec.end(); it++) { + it->join(); + } + free(dcaps); +} + /** * @tc.name: GetNativeTokenInfo001 * @tc.desc: cannot get native token with invalid tokenID. @@ -2028,4 +2096,103 @@ HWTEST_F(AccessTokenKitTest, GetNativeTokenInfo001, TestSize.Level1) tokenID = 0xff; ret = AccessTokenKit::GetNativeTokenInfo(tokenID, findInfo); ASSERT_EQ(ret, RET_FAILED); +} + +/** + * @tc.name: GetNativeTokenInfo002 + * @tc.desc: get native token successfully. + * @tc.type: FUNC + * @tc.require:AR000GK6TD + */ +HWTEST_F(AccessTokenKitTest, GetNativeTokenInfo002, TestSize.Level1) +{ + const char **dcaps = (const char **)malloc(sizeof(char *) * 2); + dcaps[0] = "AT_CAP_01"; + dcaps[1] = "ST_CAP_01"; + int dcapNum = 2; + uint64_t tokenId; + tokenId = GetAccessTokenId("foundation", dcaps, dcapNum, "system_core"); + ASSERT_NE(tokenId, 0); + tokenId = GetAccessTokenId("GetNativeTokenInfo002", dcaps, dcapNum, "system_core"); + ASSERT_NE(tokenId, 0); + + AccessTokenID tokenID = tokenId & 0xffffffff; + NativeTokenInfo findInfo; + int ret = AccessTokenKit::GetNativeTokenInfo(tokenID, findInfo); + ASSERT_EQ(ret, RET_SUCCESS); + ASSERT_EQ(findInfo.apl, 3); + ASSERT_EQ(findInfo.ver, 1); + ASSERT_EQ(findInfo.processName, "GetNativeTokenInfo002"); + ASSERT_EQ(findInfo.tokenID, tokenID); + ASSERT_EQ(findInfo.tokenAttr, 0); + std::vector dcap = {"AT_CAP_01", "ST_CAP_01"}; + ASSERT_EQ(findInfo.dcap, dcap); + free(dcaps); +} + +/** + * @tc.name: GetNativeTokenInfo003 + * @tc.desc: get native token successfully with dcapNum equaling to 0. + * @tc.type: FUNC + * @tc.require:AR000GK6TD + */ +HWTEST_F(AccessTokenKitTest, GetNativeTokenInfo003, TestSize.Level1) +{ + const char **dcaps = (const char **)malloc(sizeof(char *) * 2); + dcaps[0] = "AT_CAP_01"; + dcaps[1] = "ST_CAP_01"; + int dcapNum = 0; + uint64_t tokenId; + tokenId = GetAccessTokenId("foundation", dcaps, dcapNum, "system_core"); + ASSERT_NE(tokenId, 0); + tokenId = GetAccessTokenId("GetNativeTokenInfo003", nullptr, 0, "system_core"); + ASSERT_NE(tokenId, 0); + + sleep(5); + AccessTokenID tokenID = tokenId & 0xffffffff; + NativeTokenInfo findInfo; + int ret = AccessTokenKit::GetNativeTokenInfo(tokenID, findInfo); + ASSERT_EQ(ret, RET_SUCCESS); + ASSERT_EQ(findInfo.apl, 3); + ASSERT_EQ(findInfo.ver, 1); + ASSERT_EQ(findInfo.processName, "GetNativeTokenInfo003"); + ASSERT_EQ(findInfo.tokenID, tokenID); + ASSERT_EQ(findInfo.tokenAttr, 0); +} + +static void ConcurrGetNativeTokenInfoTask(unsigned int tokenID) +{ + NativeTokenInfo findInfo; + for (int i = 0; i < CYCLE_TIMES; i++) { + int ret = AccessTokenKit::GetNativeTokenInfo(tokenID, findInfo); + ASSERT_EQ(RET_SUCCESS, ret); + ASSERT_EQ(findInfo.processName, "GetNativeTokenInfo004"); + } +} + +/** + * @tc.name: GetNativeTokenInfo004 + * @tc.desc: Concurrency testing. + * @tc.type: FUNC + * @tc.require:AR000GK6TD + */ +HWTEST_F(AccessTokenKitTest, GetNativeTokenInfo004, TestSize.Level1) +{ + const char **dcaps = (const char **)malloc(sizeof(char *) * 1); + dcaps[0] = "AT_CAP_01"; + int dcapNum = 1; + uint64_t tokenId; + tokenId = GetAccessTokenId("GetNativeTokenInfo004", dcaps, dcapNum, "system_core"); + ASSERT_NE(tokenId, 0); + + sleep(5); + AccessTokenID tokenID = tokenId & 0xffffffff; + std::vector threadVec; + for (int i = 0; i < THREAD_NUM; i++) { + threadVec.emplace_back(std::thread(ConcurrGetNativeTokenInfoTask, tokenID)); + } + for (auto it = threadVec.begin(); it != threadVec.end(); it++) { + it->join(); + } + free(dcaps); } \ No newline at end of file diff --git a/interfaces/innerkits/nativetoken/test/BUILD.gn b/interfaces/innerkits/nativetoken/test/BUILD.gn index 6b14f56e0..88548e9db 100644 --- a/interfaces/innerkits/nativetoken/test/BUILD.gn +++ b/interfaces/innerkits/nativetoken/test/BUILD.gn @@ -19,19 +19,28 @@ ohos_unittest("libnativetoken_test") { module_out_path = part_name + "/" + part_name include_dirs = [ + "//third_party/json/include", "//third_party/cJSON", "//third_party/bounds_checking_function/include", + "//utils/native/base/include", "//base/security/access_token/interfaces/innerkits/nativetoken/include", + "//base/security/access_token/interfaces/innerkits/accesstoken/include", + "//base/security/access_token/services/accesstokenmanager/main/cpp/include/service", + "//base/security/access_token/services/accesstokenmanager/main/cpp/include/token", + "//base/security/access_token/services/accesstokenmanager/main/cpp/include/permission", + "//base/security/access_token/services/accesstokenmanager/main/cpp/include/database", ] sources = [ "unittest/src/nativetoken_kit_test.cpp" ] deps = [ "//base/security/access_token/interfaces/innerkits/nativetoken:libnativetoken", + "//base/security/access_token/services/accesstokenmanager/:accesstoken_manager_service", "//third_party/bounds_checking_function:libsec_static", "//third_party/cJSON:cjson_static", "//third_party/googletest:gmock", "//third_party/googletest:gtest", + "//utils/native/base:utils", ] } diff --git a/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp b/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp index a6782999a..0acfb8868 100644 --- a/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp +++ b/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp @@ -17,6 +17,10 @@ #include #include "nativetoken.h" #include "nativetoken_kit.h" +#include "native_token_info.h" +#define private public +#include "native_token_receptor.h" +#undef private using namespace testing::ext; using namespace OHOS::Security; @@ -71,6 +75,101 @@ void TokenLibKitTest::ResetFile(void) } } +void from_json(const nlohmann::json& j, std::shared_ptr& p) +{ + OHOS::Security::AccessToken::NativeTokenInfo native; + if (j.find(JSON_PROCESS_NAME) != j.end()) { + native.processName = j.at(JSON_PROCESS_NAME).get(); + } else { + ASSERT_EQ(1, 0); + } + + if (j.find(JSON_APL) != j.end()) { + int aplNum = j.at(JSON_APL).get(); + native.apl = (OHOS::Security::AccessToken::ATokenAplEnum)aplNum; + } else { + ASSERT_EQ(1, 0); + } + + if (j.find(JSON_VERSION) != j.end()) { + native.ver = (uint8_t)j.at(JSON_VERSION).get(); + } else { + ASSERT_EQ(1, 0); + } + + if (j.find(JSON_TOKEN_ID) != j.end()) { + native.tokenID = j.at(JSON_TOKEN_ID).get(); + } else { + ASSERT_EQ(1, 0); + } + + if (j.find(JSON_TOKEN_ATTR) != j.end()) { + native.tokenAttr = j.at(JSON_TOKEN_ATTR).get(); + } else { + ASSERT_EQ(1, 0); + } + + if (j.find(JSON_DCAPS) != j.end()) { + native.dcap = j.at(JSON_DCAPS).get>(); + } else { + ASSERT_EQ(1, 0); + } + p = std::make_shared(native); +} + +void TokenLibKitTest::ParserNativeRawData(const std::string& nativeRawData, + std::vector>& tokenInfos) +{ + nlohmann::json jsonRes = nlohmann::json::parse(nativeRawData, nullptr, false); + for (auto it = jsonRes.begin(); it != jsonRes.end(); it++) { + // auto token = it->get>(); + // if (token != nullptr) { + // tokenInfos.emplace_back(token); + // } + } +} + +void TokenLibKitTest::ReadCfgFile(std::string& nativeRawData) +{ + int32_t fd = open(NATIVE_TOKEN_CONFIG_FILE.c_str(), O_RDONLY); + if (fd < 0) { + ASSERT_EQ(1, 0); + } + struct stat statBuffer; + + if (fstat(fd, &statBuffer) != 0) { + close(fd); + ASSERT_EQ(1, 0); + } + + if (statBuffer.st_size == 0) { + close(fd); + ASSERT_EQ(1, 0); + } + if (statBuffer.st_size > MAX_NATIVE_CONFIG_FILE_SIZE) { + close(fd); + ASSERT_EQ(1, 0); + } + nativeRawData.reserve(statBuffer.st_size); + + char buff[BUFFER_SIZE] = {0}; + ssize_t readLen = 0; + while ((readLen = read(fd, buff, BUFFER_SIZE)) > 0) { + nativeRawData.append(buff, readLen); + } + close(fd); + ASSERT_EQ(readLen, 0); +} + +void TokenLibKitTest::ReadFile() +{ + std::string nativeRawData; + ReadCfgFile(nativeRawData); + + std::vector> tokenInfos; + ParserNativeRawData(nativeRawData, tokenInfos); +} + int Start(const char *processName) { const char *processname = processName; diff --git a/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.h b/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.h index 8aa651750..457273b0d 100644 --- a/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.h +++ b/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.h @@ -17,12 +17,22 @@ #define TOKENSYNC_KIT_TEST_H #include - +#include "nlohmann/json.hpp" +#include "native_token_info_inner.h" +//#include "nocopyable.h" namespace OHOS { namespace Security { -static const int BUFF_LEN = 102400; static const int DELAY_ONE_SECONDS = 5; static const int DELAY_FIVE_SECONDS = 10; +constexpr size_t BUFFER_SIZE = 1024; +const std::string NATIVE_TOKEN_CONFIG_FILE = "/data/system/access_token/nativetoken.json"; +constexpr int MAX_NATIVE_CONFIG_FILE_SIZE = 5 * 1024 * 1024; // 5M +static const std::string JSON_PROCESS_NAME = "processName"; +static const std::string JSON_APL = "APL"; +static const std::string JSON_VERSION = "version"; +static const std::string JSON_TOKEN_ID = "tokenId"; +static const std::string JSON_TOKEN_ATTR = "tokenAttr"; +static const std::string JSON_DCAPS = "dcaps"; class TokenLibKitTest : public testing::Test { public: static void SetUpTestCase(); @@ -33,7 +43,10 @@ public: void TearDown(); void ResetFile(void); - void PthreadCloseTrigger(void); + void ReadFile(); + void ReadCfgFile(std::string& nativeRawData); + void ParserNativeRawData(const std::string& nativeRawData, std::vector>& tokenInfos); + void from_json(const nlohmann::json& j, std::shared_ptr& p); }; } // namespace Security } // namespace OHOS -- Gitee