diff --git a/interfaces/innerkits/native/BUILD.gn b/interfaces/innerkits/native/BUILD.gn index 6ae1aa14c4dd074a485db3f0168c7c25993867b4..a300b1f3ead29cbc94d41595e96a0365b6409e66 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 3c41d02b052fdb20c363dfec2c5162c10830f520..d06a1cba560cb0026dd4eda0f7b72342d03f110a 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 57417adbf2f489f51b28af8caba30d08bc64c6a3..6ce2059dfcce4940cc407a89febb43160c244ad2 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 96a4bbf5b40fbfbc9e30ddcc2f488af4365952f0..e3fa7ca70780309fa49255f79378acf0807608e8 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 60ba075bb6cc4ebfdf05f83d417a06bd2247e2ca..f17c0ac4a8d4bcf0a41d2c86ed531224c6ea9793 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 ee998d1d1cab31a6ad5cd090bfc04c6ea1ab799e..148765cb52ee7b4e97c586a8f5a35b5d45fd9488 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 0000000000000000000000000000000000000000..715e208aa19360005dcb11633a5ab58a8c8d7045 --- /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 f43684f532884fc8b82d6f26f871aabf5261e500..afd74849e5b8efef8721aa68850d1b31ae1e9645 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 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