From 15f94d6aec7e518d066c30dcee9bce90d1f703af Mon Sep 17 00:00:00 2001 From: cuiruibin Date: Mon, 9 Dec 2024 20:07:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=81=E4=B9=85=E5=8C=96=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=BF=80=E6=B4=BB=E6=B5=81=E7=A8=8B=E5=88=87=E6=8D=A2UMPS?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: cuiruibin --- interfaces/innerkits/native/BUILD.gn | 10 ++++- .../native/file_share/src/file_permission.cpp | 4 +- interfaces/kits/js/BUILD.gn | 5 ++- test/unittest/file_permission_native/BUILD.gn | 11 ++++- .../include/file_permission_test.h | 6 ++- .../src/file_permission_test.cpp | 11 +++-- .../include/upms_mock.h | 40 +++++++++++++++++++ .../src/sandbox_mock.cpp | 5 ++- .../file_permission_native/src/upms_mock.cpp | 36 +++++++++++++++++ 9 files changed, 114 insertions(+), 14 deletions(-) create mode 100644 tests/mock/file_permission_native/include/upms_mock.h create mode 100644 tests/mock/file_permission_native/src/upms_mock.cpp diff --git a/interfaces/innerkits/native/BUILD.gn b/interfaces/innerkits/native/BUILD.gn index 6ae1aa14c..a300b1f3e 100644 --- a/interfaces/innerkits/native/BUILD.gn +++ b/interfaces/innerkits/native/BUILD.gn @@ -68,8 +68,14 @@ ohos_shared_library("fileshare_native") { ] defines = [] if (sandbox_manarer) { - external_deps += [ "sandbox_manager:libsandbox_manager_sdk" ] - defines += [ "SANDBOX_MANAGER" ] + external_deps += [ + "ability_runtime:uri_permission_mgr", + "sandbox_manager:libsandbox_manager_sdk", + ] + defines += [ + "SANDBOX_MANAGER", + "ABILITY_RUNTIME_FEATURE_SANDBOXMANAGER", + ] } part_name = "app_file_service" subsystem_name = "filemanagement" diff --git a/interfaces/innerkits/native/file_share/src/file_permission.cpp b/interfaces/innerkits/native/file_share/src/file_permission.cpp index 3c41d02b0..d06a1cba5 100644 --- a/interfaces/innerkits/native/file_share/src/file_permission.cpp +++ b/interfaces/innerkits/native/file_share/src/file_permission.cpp @@ -19,6 +19,7 @@ #include #include #ifdef SANDBOX_MANAGER +#include "uri_permission_manager_client.h" #include "accesstoken_kit.h" #include "bundle_constants.h" #include "hap_token_info.h" @@ -295,7 +296,8 @@ int32_t FilePermission::ActivatePermission(const vector &uriPolic #ifdef SANDBOX_MANAGER vector pathPolicies = GetPathPolicyInfoFromUriPolicyInfo(uriPolicies, errorResults); vector resultCodes; - int32_t sandboxManagerErrorCode = SandboxManagerKit::StartAccessingPolicy(pathPolicies, resultCodes); + auto &uriPermissionClient = AAFwk::UriPermissionManagerClient::GetInstance(); + int32_t sandboxManagerErrorCode = uriPermissionClient.Active(pathPolicies, resultCodes); errorCode = ErrorCodeConversion(sandboxManagerErrorCode, errorResults, resultCodes); if (resultCodes.size() > MAX_ARRAY_SIZE) { LOGE("The number of result codes exceeds the maximum"); diff --git a/interfaces/kits/js/BUILD.gn b/interfaces/kits/js/BUILD.gn index 57417adbf..6ce2059df 100644 --- a/interfaces/kits/js/BUILD.gn +++ b/interfaces/kits/js/BUILD.gn @@ -63,7 +63,10 @@ ohos_shared_library("fileshare") { defines = [] if (sandbox_manarer) { external_deps += [ "sandbox_manager:libsandbox_manager_sdk" ] - defines += [ "SANDBOX_MANAGER" ] + defines += [ + "SANDBOX_MANAGER", + "ABILITY_RUNTIME_FEATURE_SANDBOXMANAGER", + ] } relative_install_dir = "module" diff --git a/test/unittest/file_permission_native/BUILD.gn b/test/unittest/file_permission_native/BUILD.gn index 96a4bbf5b..e3fa7ca70 100644 --- a/test/unittest/file_permission_native/BUILD.gn +++ b/test/unittest/file_permission_native/BUILD.gn @@ -32,6 +32,7 @@ ohos_unittest("file_permission_test") { ] sources = [ "${app_file_service_path}/tests/mock/file_permission_native/src/sandbox_mock.cpp", + "${app_file_service_path}/tests/mock/file_permission_native/src/upms_mock.cpp", "src/file_permission_test.cpp", ] @@ -52,8 +53,14 @@ ohos_unittest("file_permission_test") { ] defines = [] if (sandbox_manarer) { - external_deps += [ "sandbox_manager:libsandbox_manager_sdk" ] - defines += [ "SANDBOX_MANAGER" ] + external_deps += [ + "ability_runtime:uri_permission_mgr", + "sandbox_manager:libsandbox_manager_sdk", + ] + defines += [ + "SANDBOX_MANAGER", + "ABILITY_RUNTIME_FEATURE_SANDBOXMANAGER", + ] } deps = [ "//third_party/googletest:gmock_main", diff --git a/test/unittest/file_permission_native/include/file_permission_test.h b/test/unittest/file_permission_native/include/file_permission_test.h index 60ba075bb..f17c0ac4a 100644 --- a/test/unittest/file_permission_native/include/file_permission_test.h +++ b/test/unittest/file_permission_native/include/file_permission_test.h @@ -18,6 +18,7 @@ #include #include "sandbox_mock.h" +#include "upms_mock.h" namespace OHOS { namespace AppFileService { @@ -28,9 +29,10 @@ public: static void TearDownTestCase(); void SetUp() {}; void TearDown() {}; - #ifdef SANDBOX_MANAGER +#ifdef SANDBOX_MANAGER static inline shared_ptr sandboxMock_ = nullptr; - #endif + static inline shared_ptr upmsMock_ = nullptr; +#endif }; } // namespace AppFileService } // namespace OHOS diff --git a/test/unittest/file_permission_native/src/file_permission_test.cpp b/test/unittest/file_permission_native/src/file_permission_test.cpp index ee998d1d1..148765cb5 100644 --- a/test/unittest/file_permission_native/src/file_permission_test.cpp +++ b/test/unittest/file_permission_native/src/file_permission_test.cpp @@ -115,6 +115,8 @@ void FilePermissionTest::SetUpTestCase() #ifdef SANDBOX_MANAGER sandboxMock_ = make_shared(); SandboxMock::sandboxManagerKitMock = sandboxMock_; + upmsMock_ = make_shared(); + UpmsMock::upmsManagerKitMock = upmsMock_; #endif } void FilePermissionTest::TearDownTestCase() @@ -123,6 +125,8 @@ void FilePermissionTest::TearDownTestCase() #ifdef SANDBOX_MANAGER SandboxMock::sandboxManagerKitMock = nullptr; sandboxMock_ = nullptr; + UpmsMock::upmsManagerKitMock = nullptr; + upmsMock_ = nullptr; #endif } @@ -233,7 +237,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_0000, testing::ext::TestSiz std::vector uriPolicies; uriPolicies.emplace_back(infoA); deque errorResults; - EXPECT_CALL(*sandboxMock_, StartAccessingPolicy(_, _)).WillOnce(Return(SANDBOX_MANAGER_OK)); + EXPECT_CALL(*upmsMock_, Active(_, _)).WillOnce(Return(SANDBOX_MANAGER_OK)); int32_t ret = FilePermission::ActivatePermission(uriPolicies, errorResults); EXPECT_EQ(ret, 0); GTEST_LOG_(INFO) << "FileShareTest-end ActivatePermission_test_0000"; @@ -258,8 +262,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_0001, testing::ext::TestSiz deque errorResults; vector resultCodes; resultCodes.push_back(PolicyErrorCode::INVALID_MODE); - EXPECT_CALL(*sandboxMock_, StartAccessingPolicy(_, _)) - .WillOnce(DoAll(SetArgReferee<1>(resultCodes), Return(SANDBOX_MANAGER_OK))); + EXPECT_CALL(*upmsMock_, Active(_, _)).WillOnce(DoAll(SetArgReferee<1>(resultCodes), Return(SANDBOX_MANAGER_OK))); int32_t ret = FilePermission::ActivatePermission(uriPolicies, errorResults); if (CheckFileManagerFullMountEnable()) { EXPECT_EQ(ret, EPERM); @@ -285,7 +288,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_0002, testing::ext::TestSiz std::vector uriPolicies; uriPolicies.emplace_back(infoA); deque errorResults; - EXPECT_CALL(*sandboxMock_, StartAccessingPolicy(_, _)).WillOnce(Return(SANDBOX_MANAGER_OK)); + EXPECT_CALL(*upmsMock_, Active(_, _)).WillOnce(Return(SANDBOX_MANAGER_OK)); int32_t ret = FilePermission::ActivatePermission(uriPolicies, errorResults); if (CheckFileManagerFullMountEnable()) { EXPECT_EQ(ret, EPERM); diff --git a/tests/mock/file_permission_native/include/upms_mock.h b/tests/mock/file_permission_native/include/upms_mock.h new file mode 100644 index 000000000..715e208aa --- /dev/null +++ b/tests/mock/file_permission_native/include/upms_mock.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 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. + */ + +#ifndef FILEMANAGEMENT_APP_FILE_SERVICE_UPMS_MOCK_H +#define FILEMANAGEMENT_APP_FILE_SERVICE_UPMS_MOCK_H +#ifdef SANDBOX_MANAGER +#include + +#include "uri_permission_manager_client.h" + +namespace OHOS { +namespace AppFileService { +using namespace OHOS::AccessControl::SandboxManager; +class UpmsManagerKitMock { +public: + virtual ~UpmsManagerKitMock() = default; + virtual int32_t Active(const std::vector &policy, std::vector &result) = 0; + static inline std::shared_ptr upmsManagerKitMock = nullptr; +}; + +class UpmsMock : public UpmsManagerKitMock { +public: + MOCK_METHOD2(Active, int32_t(const std::vector &policy, std::vector &result)); +}; +} // namespace AppFileService +} // namespace OHOS +#endif +#endif \ No newline at end of file diff --git a/tests/mock/file_permission_native/src/sandbox_mock.cpp b/tests/mock/file_permission_native/src/sandbox_mock.cpp index f43684f53..afd74849e 100644 --- a/tests/mock/file_permission_native/src/sandbox_mock.cpp +++ b/tests/mock/file_permission_native/src/sandbox_mock.cpp @@ -19,7 +19,8 @@ namespace OHOS { using namespace AppFileService; using namespace OHOS::AccessControl::SandboxManager; int32_t SandboxManagerKit::CheckPersistPolicy(uint32_t tokenId, - const std::vector &policy, std::vector &result) + const std::vector &policy, + std::vector &result) { return SandboxManagerKitMock::sandboxManagerKitMock->CheckPersistPolicy(tokenId, policy, result); } @@ -43,5 +44,5 @@ int32_t SandboxManagerKit::StopAccessingPolicy(const std::vector &po { return SandboxManagerKitMock::sandboxManagerKitMock->StopAccessingPolicy(policy, result); } -} +} // namespace OHOS #endif \ No newline at end of file diff --git a/tests/mock/file_permission_native/src/upms_mock.cpp b/tests/mock/file_permission_native/src/upms_mock.cpp new file mode 100644 index 000000000..0da21f40f --- /dev/null +++ b/tests/mock/file_permission_native/src/upms_mock.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2024 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. + */ +#ifdef SANDBOX_MANAGER +#include "upms_mock.h" + +namespace OHOS { +using namespace AppFileService; +using namespace OHOS::AAFwk; +using namespace OHOS::AccessControl::SandboxManager; +UriPermissionManagerClient &UriPermissionManagerClient::GetInstance() +{ + static UriPermissionManagerClient instance; + return instance; +} +int32_t UriPermissionManagerClient::Active(const std::vector &policy, std::vector &result) +{ + if (UpmsManagerKitMock::upmsManagerKitMock == nullptr) { + return -1; + } + return UpmsManagerKitMock::upmsManagerKitMock->Active(policy, result); +} + +} // namespace OHOS +#endif \ No newline at end of file -- Gitee