From 25277c610183ca4cca7276664b64352db3c0df67 Mon Sep 17 00:00:00 2001 From: wangyongzhong2 Date: Tue, 1 Nov 2022 20:12:14 +0800 Subject: [PATCH] update test Signed-off-by: wangyongzhong2 --- bundle.json | 3 +- interfaces/innerkits/datatransmitmgr/BUILD.gn | 6 +- .../datatransmitmgr_fuzzer/BUILD.gn | 47 ++++++++ .../datatransmitmgr_fuzzer/corpus/init | 14 +++ .../datatransmitmgr_fuzzer.cpp | 105 ++++++++++++++++++ .../datatransmitmgr_fuzzer.h | 24 ++++ .../datatransmitmgr_fuzzer/project.xml | 25 +++++ test/unittest/datatransmitmgr/BUILD.gn | 8 +- .../unittest/datatransmitmgr/DevSLMgrTest.cpp | 75 +++++++++++++ 9 files changed, 304 insertions(+), 3 deletions(-) create mode 100644 test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/BUILD.gn create mode 100644 test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/corpus/init create mode 100644 test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/datatransmitmgr_fuzzer.cpp create mode 100644 test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/datatransmitmgr_fuzzer.h create mode 100644 test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/project.xml diff --git a/bundle.json b/bundle.json index fb2ee10..77e345a 100644 --- a/bundle.json +++ b/bundle.json @@ -46,7 +46,8 @@ } ], "test": [ - "//base/security/dataclassification/test/unittest/datatransmitmgr:DevSLMgrTest" + "//base/security/dataclassification/test/unittest/datatransmitmgr:DevSLMgrTest", + "//base/security/dataclassification/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer:DataTransmitMgrFuzzTest" ] } } diff --git a/interfaces/innerkits/datatransmitmgr/BUILD.gn b/interfaces/innerkits/datatransmitmgr/BUILD.gn index f9e75de..c6f21d4 100644 --- a/interfaces/innerkits/datatransmitmgr/BUILD.gn +++ b/interfaces/innerkits/datatransmitmgr/BUILD.gn @@ -40,5 +40,9 @@ ohos_shared_library("data_transit_mgr") { "hiviewdfx_hilog_native:libhilog", ] - cflags = [ "-Wall" ] + cflags = [ + "-Wall", + "--coverage", + ] + ldflags = [ "--coverage" ] } diff --git a/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/BUILD.gn b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/BUILD.gn new file mode 100644 index 0000000..7fba437 --- /dev/null +++ b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/BUILD.gn @@ -0,0 +1,47 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# 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. + +import("//build/ohos.gni") +import("//build/test.gni") + +ohos_fuzztest("DataTransmitMgrFuzzTest") { + module_out_path = "security/dataclassification" + fuzz_config_file = "//base/security/dataclassification/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer" + + cflags = [ + "-g", + "-O0", + "-Wno-unused-variable", + "-fno-omit-frame-pointer", + ] + + include_dirs = [ + "//base/security/dataclassification/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer", + "//base/security/dataclassification/interfaces/innerkits/datatransmitmgr/include", + ] + + sources = [ "datatransmitmgr_fuzzer.cpp" ] + + deps = [ + "//base/security/access_token/interfaces/innerkits/accesstoken:libaccesstoken_sdk", + "//base/security/access_token/interfaces/innerkits/nativetoken:libnativetoken", + "//base/security/access_token/interfaces/innerkits/token_setproc:libtoken_setproc", + "//base/security/dataclassification/interfaces/innerkits/datatransmitmgr:data_transit_mgr", + ] + + external_deps = [ + "c_utils:utils", + "dsoftbus:softbus_client", + "hiviewdfx_hilog_native:libhilog", + ] +} diff --git a/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/corpus/init b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/corpus/init new file mode 100644 index 0000000..2be750d --- /dev/null +++ b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/corpus/init @@ -0,0 +1,14 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# 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. + +FUZZ \ No newline at end of file diff --git a/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/datatransmitmgr_fuzzer.cpp b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/datatransmitmgr_fuzzer.cpp new file mode 100644 index 0000000..02e46b3 --- /dev/null +++ b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/datatransmitmgr_fuzzer.cpp @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * 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 "datatransmitmgr_fuzzer.h" + +#include +#include + +#include "securec.h" +#include "dev_slinfo_mgr.h" +#include "softbus_bus_center.h" +#include "nativetoken_kit.h" +#include "token_setproc.h" +#include "accesstoken_kit.h" + +namespace OHOS { + static void tmpCallback(DEVSLQueryParams *queryParams, int32_t result, uint32_t levelInfo) + { + return; + } + + static void GetLocalUdid(DEVSLQueryParams *queryParams) + { + const char *pkgName = "ohos.dslm"; + NodeBasicInfo info; + (void)GetLocalNodeDeviceInfo(pkgName, &info); + if (GetNodeKeyInfo(pkgName, info.networkId, NODE_KEY_UDID, (uint8_t *)(queryParams->udid), UDID_BUF_LEN) != 0) { + return; + } + queryParams->udidLen = MAX_UDID_LENGTH; + } + + void FuzzDoDataTransmitMgr(const uint8_t* data, size_t size) + { + if (data == nullptr) { + return; + } + if (size < MAX_UDID_LENGTH) { + return; + } + uint32_t levelInfo = 0; + DEVSLQueryParams queryParams; + (void)memset_s(&queryParams, sizeof(DEVSLQueryParams), 0, sizeof(DEVSLQueryParams)); + queryParams.udidLen = MAX_UDID_LENGTH; + (void)memcpy_s(queryParams.udid, queryParams.udidLen, data, MAX_UDID_LENGTH); + + int32_t ret = DATASL_OnStart(); + if (ret != DEVSL_SUCCESS) { + return; + } + (void)DATASL_GetHighestSecLevelAsync(&queryParams, tmpCallback); + (void)DATASL_GetHighestSecLevelAsync(nullptr, tmpCallback); + (void)DATASL_GetHighestSecLevelAsync(&queryParams, nullptr); + (void)DATASL_GetHighestSecLevel(&queryParams, &levelInfo); + (void)DATASL_GetHighestSecLevel(nullptr, &levelInfo); + (void)DATASL_GetHighestSecLevel(&queryParams, nullptr); + GetLocalUdid(&queryParams); + (void)DATASL_GetHighestSecLevelAsync(&queryParams, tmpCallback); + (void)DATASL_GetHighestSecLevel(&queryParams, &levelInfo); + DATASL_OnStop(); + } +} + +static void NativeTokenGet() +{ + uint64_t tokenId; + const char **perms = new const char *[1]; + perms[0] = "ohos.permission.DISTRIBUTED_DATASYNC"; + NativeTokenInfoParams infoInstance = { + .dcapsNum = 0, + .permsNum = 1, + .aclsNum = 0, + .dcaps = nullptr, + .perms = perms, + .acls = nullptr, + .aplStr = "system_basic", + }; + + infoInstance.processName = "DevSLMgrTest"; + tokenId = GetAccessTokenId(&infoInstance); + SetSelfTokenID(tokenId); + OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); + delete[] perms; +} + +/* Fuzzer entry point */ +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) +{ + /* Run your code on data */ + NativeTokenGet(); + OHOS::FuzzDoDataTransmitMgr(data, size); + return 0; +} \ No newline at end of file diff --git a/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/datatransmitmgr_fuzzer.h b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/datatransmitmgr_fuzzer.h new file mode 100644 index 0000000..a1225ca --- /dev/null +++ b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/datatransmitmgr_fuzzer.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * 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 +#include +#include +#include +#include +#include + +#define FUZZ_PROJECT_NAME "datatransmitmgr_fuzzer" + diff --git a/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/project.xml b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/project.xml new file mode 100644 index 0000000..5e3b584 --- /dev/null +++ b/test/fuzztest/datatransmitmgr/datatransmitmgr_fuzzer/project.xml @@ -0,0 +1,25 @@ + + + + + + 1000 + + 300 + + 4096 + + diff --git a/test/unittest/datatransmitmgr/BUILD.gn b/test/unittest/datatransmitmgr/BUILD.gn index 246141d..58eef50 100644 --- a/test/unittest/datatransmitmgr/BUILD.gn +++ b/test/unittest/datatransmitmgr/BUILD.gn @@ -19,6 +19,7 @@ config("datatransmitmgr_test_config") { include_dirs = [ "//base/security/dataclassification/test/unittest/datatransmitmgr", "//base/security/dataclassification/interfaces/innerkits/datatransmitmgr/include", + "//base/startup/init/interfaces/innerkits/include/syspara", "//third_party/googletest/googletest/include", "//commonlibrary/c_utils/base/include", ] @@ -32,7 +33,12 @@ ohos_unittest("DevSLMgrTest") { sources = [ "DevSLMgrTest.cpp" ] - deps = [ "//base/security/dataclassification/interfaces/innerkits/datatransmitmgr:data_transit_mgr" ] + deps = [ + "//base/security/access_token/interfaces/innerkits/accesstoken:libaccesstoken_sdk", + "//base/security/access_token/interfaces/innerkits/nativetoken:libnativetoken", + "//base/security/access_token/interfaces/innerkits/token_setproc:libtoken_setproc", + "//base/security/dataclassification/interfaces/innerkits/datatransmitmgr:data_transit_mgr", + ] external_deps = [ "c_utils:utils", "device_security_level:dslm_sdk", diff --git a/test/unittest/datatransmitmgr/DevSLMgrTest.cpp b/test/unittest/datatransmitmgr/DevSLMgrTest.cpp index 5a6fac5..b30a5ca 100644 --- a/test/unittest/datatransmitmgr/DevSLMgrTest.cpp +++ b/test/unittest/datatransmitmgr/DevSLMgrTest.cpp @@ -21,6 +21,9 @@ #include "softbus_bus_center.h" #include "dev_slinfo_adpt.h" #include "DevSLMgrTest.h" +#include "nativetoken_kit.h" +#include "token_setproc.h" +#include "accesstoken_kit.h" using namespace testing::ext; @@ -35,11 +38,34 @@ protected: private: }; +void NativeTokenGet() +{ + uint64_t tokenId; + const char **perms = new const char *[1]; + perms[0] = "ohos.permission.DISTRIBUTED_DATASYNC"; + NativeTokenInfoParams infoInstance = { + .dcapsNum = 0, + .permsNum = 1, + .aclsNum = 0, + .dcaps = nullptr, + .perms = perms, + .acls = nullptr, + .aplStr = "system_basic", + }; + + infoInstance.processName = "DevSLMgrTest"; + tokenId = GetAccessTokenId(&infoInstance); + SetSelfTokenID(tokenId); + OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); + delete[] perms; +} + DevSLMgrTest::DevSLMgrTest() {} DevSLMgrTest::~DevSLMgrTest() {} void DevSLMgrTest::SetUpTestCase() { OHOS::SaveStringToFile("/sys/fs/selinux/enforce", "0"); + NativeTokenGet(); } void DevSLMgrTest::TearDownTestCase() { @@ -55,6 +81,18 @@ static void DATASL_GetUdidByOpp(DEVSLQueryParams *queryParams) queryParams->udidLen = MAX_UDID_LENGTH; } +static int32_t GetLocalUdid(DEVSLQueryParams *queryParams) +{ + const char *pkgName = "ohos.dslm"; + NodeBasicInfo info; + int32_t ret = GetLocalNodeDeviceInfo(pkgName, &info); + if (GetNodeKeyInfo(pkgName, info.networkId, NODE_KEY_UDID, (uint8_t *)(queryParams->udid), UDID_BUF_LEN) != 0) { + return ret; + } + queryParams->udidLen = MAX_UDID_LENGTH; + return DEVSL_SUCCESS; +} + static HWTEST_F(DevSLMgrTest, TestOnstart, TestSize.Level1) { int32_t ret; @@ -108,6 +146,23 @@ static HWTEST_F(DevSLMgrTest, TestGetHighestSecLevel003, TestSize.Level1) DATASL_OnStop(); } +static HWTEST_F(DevSLMgrTest, TestGetHighestSecLevel004, TestSize.Level1) +{ + int32_t ret; + uint32_t levelInfo = 0; + + DEVSLQueryParams queryParams; + (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); + ret = GetLocalUdid(&queryParams); + EXPECT_EQ(DEVSL_SUCCESS, ret); + + ret = DATASL_OnStart(); + EXPECT_EQ(DEVSL_SUCCESS, ret); + ret = DATASL_GetHighestSecLevel(&queryParams, &levelInfo); + EXPECT_EQ(DEVSL_SUCCESS, ret); + DATASL_OnStop(); +} + static void tmpCallback000(DEVSLQueryParams *queryParams, int32_t result, uint32_t levelInfo) { EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, result); @@ -156,4 +211,24 @@ static HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelAsync003, TestSize.Level1) ret = DATASL_GetHighestSecLevelAsync(&queryParams, &tmpCallback); EXPECT_EQ(ERR_NOEXIST_DEVICE, ret); DATASL_OnStop(); +} + +static void tmpCallbackLocal(DEVSLQueryParams *queryParams, int32_t result, uint32_t levelInfo) +{ + EXPECT_EQ(DEVSL_SUCCESS, result); +} + +static HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelAsync004, TestSize.Level1) +{ + int32_t ret; + DEVSLQueryParams queryParams; + (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); + ret = GetLocalUdid(&queryParams); + EXPECT_EQ(DEVSL_SUCCESS, ret); + + ret = DATASL_OnStart(); + EXPECT_EQ(DEVSL_SUCCESS, ret); + ret = DATASL_GetHighestSecLevelAsync(&queryParams, &tmpCallbackLocal); + EXPECT_EQ(DEVSL_SUCCESS, ret); + DATASL_OnStop(); } \ No newline at end of file -- Gitee