diff --git a/interfaces/innerkits/native/BUILD.gn b/interfaces/innerkits/native/BUILD.gn index ca339af1d8f8989eb747f8a8592fe6a77284e516..2085208753003dd53c303ea281a18a6210ec6c04 100644 --- a/interfaces/innerkits/native/BUILD.gn +++ b/interfaces/innerkits/native/BUILD.gn @@ -71,8 +71,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 d82281d4f8dc22ca2ffe1773e16ccdeb1bee0327..ea7e11483148c9778139e72d8c33da0c4fdc1099 100644 --- a/interfaces/innerkits/native/file_share/src/file_permission.cpp +++ b/interfaces/innerkits/native/file_share/src/file_permission.cpp @@ -23,6 +23,7 @@ #include #ifdef SANDBOX_MANAGER #include "sandbox_manager_err_code.h" +#include "uri_permission_manager_client.h" #endif #include "bundle_constants.h" #include "hap_token_info.h" @@ -318,7 +319,8 @@ int32_t FilePermission::ActivatePermission(const vector &uriPolic return EPERM; } 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 (errorCode == EPERM) { ParseErrorResults(resultCodes, pathPolicies, errorResults); diff --git a/interfaces/kits/js/BUILD.gn b/interfaces/kits/js/BUILD.gn index aa2ff83d424e3b0163351f67c33c2595cf316a6b..4900f4ff7dd435edd95e51202b2baf5a974e8e5e 100644 --- a/interfaces/kits/js/BUILD.gn +++ b/interfaces/kits/js/BUILD.gn @@ -66,7 +66,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 8267cac3162ab2868cd90cf7edf0d96a284f2e4b..9e89815258792cecd86332dc75d14e1d9761de0a 100644 --- a/test/unittest/file_permission_native/BUILD.gn +++ b/test/unittest/file_permission_native/BUILD.gn @@ -33,6 +33,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", "${app_file_service_path}/tests/mock/library_func_mock/library_func_mock.cpp", "src/file_permission_test.cpp", ] @@ -54,8 +55,14 @@ ohos_unittest("file_permission_test") { ] defines = [ "private = public" ] 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 de0193b3a7207c4ab2bb3841a00c2c4b83b59e18..ac41c3661d71b1a205e4687ecdfae3f9dac5b218 100644 --- a/test/unittest/file_permission_native/include/file_permission_test.h +++ b/test/unittest/file_permission_native/include/file_permission_test.h @@ -17,8 +17,9 @@ #include -#include "sandbox_mock.h" #include "library_func_mock.h" +#include "sandbox_mock.h" +#include "upms_mock.h" namespace OHOS { namespace AppFileService { @@ -29,10 +30,11 @@ public: static void TearDownTestCase(); void SetUp() {}; void TearDown() {}; - #ifdef SANDBOX_MANAGER +#ifdef SANDBOX_MANAGER static inline shared_ptr sandboxMock_ = nullptr; static inline shared_ptr funcMock = 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 dcd7a5c7e0d8c4405ce50b26cfe0d714aedaf8ba..3f3c2e4e8cbb37016c87aab69b8090978c413c26 100644 --- a/test/unittest/file_permission_native/src/file_permission_test.cpp +++ b/test/unittest/file_permission_native/src/file_permission_test.cpp @@ -114,6 +114,8 @@ void FilePermissionTest::SetUpTestCase() SandboxMock::sandboxManagerKitMock = sandboxMock_; funcMock = make_shared(); LibraryFuncMock::libraryFunc_ = funcMock; + upmsMock_ = make_shared(); + UpmsMock::upmsManagerKitMock = upmsMock_; #endif } void FilePermissionTest::TearDownTestCase() @@ -124,6 +126,8 @@ void FilePermissionTest::TearDownTestCase() sandboxMock_ = nullptr; LibraryFuncMock::libraryFunc_ = nullptr; funcMock = nullptr; + UpmsMock::upmsManagerKitMock = nullptr; + upmsMock_ = nullptr; #endif } @@ -221,7 +225,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_0000, testing::ext::TestSiz uriPolicies.emplace_back(infoA); deque errorResults; EXPECT_CALL(*funcMock, access(_, _)).WillRepeatedly(Return(0)); - 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, EPERM); GTEST_LOG_(INFO) << "FileShareTest-end ActivatePermission_test_0000"; @@ -247,8 +251,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_0001, testing::ext::TestSiz vector resultCodes; resultCodes.push_back(PolicyErrorCode::INVALID_MODE); EXPECT_CALL(*funcMock, access(_, _)).WillRepeatedly(Return(0)); - 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); EXPECT_EQ(ret, EPERM); GTEST_LOG_(INFO) << "FileShareTest-end ActivatePermission_test_0001"; @@ -270,7 +273,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_0002, testing::ext::TestSiz uriPolicies.emplace_back(infoA); deque errorResults; EXPECT_CALL(*funcMock, access(_, _)).WillRepeatedly(Return(0)); - 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, EPERM); GTEST_LOG_(INFO) << "FileShareTest-end ActivatePermission_test_0002"; @@ -790,7 +793,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_1000, testing::ext::TestSiz uriPolicies.emplace_back(infoTestA); deque errorResults; EXPECT_CALL(*funcMock, access(_, _)).WillRepeatedly(Return(0)); - 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, EPERM); GTEST_LOG_(INFO) << "FileShareTest-end ActivatePermission_test_1000"; @@ -814,8 +817,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_1001, testing::ext::TestSiz vector resultCodes; resultCodes.emplace_back(static_cast(PolicyErrorCode::INVALID_PATH)); EXPECT_CALL(*funcMock, access(_, _)).WillRepeatedly(Return(0)); - 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); EXPECT_EQ(ret, EPERM); EXPECT_EQ(errorResults[0].code, PolicyErrorCode::INVALID_PATH); @@ -840,8 +842,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_1002, testing::ext::TestSiz vector resultCodes; resultCodes.emplace_back(static_cast(PolicyErrorCode::INVALID_MODE)); EXPECT_CALL(*funcMock, access(_, _)).WillRepeatedly(Return(0)); - 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); EXPECT_EQ(ret, EPERM); EXPECT_EQ(errorResults[0].code, PolicyErrorCode::INVALID_MODE); @@ -867,8 +868,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_1003, testing::ext::TestSiz vector resultCodes; resultCodes.emplace_back(static_cast(PolicyErrorCode::PERSISTENCE_FORBIDDEN)); EXPECT_CALL(*funcMock, access(_, _)).WillRepeatedly(Return(0)); - 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); EXPECT_EQ(ret, EPERM); EXPECT_EQ(errorResults[0].code, PolicyErrorCode::PERSISTENCE_FORBIDDEN); @@ -894,8 +894,7 @@ HWTEST_F(FilePermissionTest, ActivatePermission_test_1004, testing::ext::TestSiz vector resultCodes; resultCodes.emplace_back(static_cast(PolicyErrorCode::INVALID_MODE)); EXPECT_CALL(*funcMock, access(_, _)).WillRepeatedly(Return(0)); - 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); EXPECT_EQ(ret, EPERM); EXPECT_EQ(errorResults[0].code, PolicyErrorCode::INVALID_MODE); 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 0000000000000000000000000000000000000000..4c16de623d69867911d034bbe8e86fdb8621b422 --- /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 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 0000000000000000000000000000000000000000..0da21f40f1457bc9b4f6949d6e542d592516e7d0 --- /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