1 /*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <gtest/gtest.h>
17 #include <gmock/gmock.h>
18
19 #include "user_delegate_mock.h"
20 #include "device_manager_adapter_mock.h"
21 #include "auth_delegate.h"
22 #include "types.h"
23
24 namespace OHOS::DistributedData {
25 using DmAdapter = OHOS::DistributedData::DeviceManagerAdapter;
26 using DistributedData::UserStatus;
27 using AclParams = OHOS::AppDistributedKv::AclParams;
28 using namespace testing;
29 using namespace std;
30 class AuthDelegateMockTest : public testing::Test {
31 public:
32 static void SetUpTestCase(void);
33 static void TearDownTestCase(void);
34 void SetUp();
35 void TearDown();
36 public:
37 static inline shared_ptr<DeviceManagerAdapterMock> devMgrAdapterMock = nullptr;
38 static inline shared_ptr<UserDelegateMock> userDelegateMock = nullptr;
39 static inline AuthHandler *authHandler = nullptr;
40 };
41
SetUpTestCase(void)42 void AuthDelegateMockTest::SetUpTestCase(void)
43 {
44 authHandler = AuthDelegate::GetInstance();
45 devMgrAdapterMock = make_shared<DeviceManagerAdapterMock>();
46 BDeviceManagerAdapter::deviceManagerAdapter = devMgrAdapterMock;
47 userDelegateMock = make_shared<UserDelegateMock>();
48 BUserDelegate::userDelegate = userDelegateMock;
49 }
50
TearDownTestCase(void)51 void AuthDelegateMockTest::TearDownTestCase(void)
52 {
53 BDeviceManagerAdapter::deviceManagerAdapter = nullptr;
54 devMgrAdapterMock = nullptr;
55 userDelegateMock = nullptr;
56 BUserDelegate::userDelegate = nullptr;
57 authHandler = nullptr;
58 }
59
SetUp(void)60 void AuthDelegateMockTest::SetUp(void)
61 {}
62
TearDown(void)63 void AuthDelegateMockTest::TearDown(void)
64 {}
65
66 /**
67 * @tc.name: CheckAccess001
68 * @tc.desc: Check access.
69 * @tc.type: FUNC
70 * @tc.require:
71 * @tc.author: caozhijun
72 */
73 HWTEST_F(AuthDelegateMockTest, CheckAccess001, testing::ext::TestSize.Level0)
74 {
75 ASSERT_NE(authHandler, nullptr);
76 int localUserId = 1;
77 int peerUserId = 1;
78 std::string peerDevId = "CheckAccess001";
79 AclParams aclParams;
80 UserStatus local;
81 local.id = localUserId;
82 local.isActive = true;
83 UserStatus remote;
84 remote.id = peerUserId;
85 remote.isActive = true;
86 std::vector<UserStatus> localUsers;
87 std::vector<UserStatus> peerUsers;
88 localUsers.push_back(local);
89 peerUsers.push_back(remote);
90 EXPECT_CALL(*userDelegateMock, GetLocalUserStatus()).WillOnce(Return(localUsers));
91 EXPECT_CALL(*userDelegateMock, GetRemoteUserStatus(_)).WillOnce(Return(peerUsers));
92 EXPECT_CALL(*devMgrAdapterMock, IsOHOSType(_)).WillOnce(Return(false));
93 auto result = authHandler->CheckAccess(localUserId, peerUserId, peerDevId, aclParams);
94 EXPECT_FALSE(result.first);
95 }
96
97 /**
98 * @tc.name: CheckAccess002
99 * @tc.desc: Check access.
100 * @tc.type: FUNC
101 * @tc.require:
102 * @tc.author: caozhijun
103 */
104 HWTEST_F(AuthDelegateMockTest, CheckAccess002, testing::ext::TestSize.Level0)
105 {
106 ASSERT_NE(authHandler, nullptr);
107 int localUserId = 1;
108 int peerUserId = 1;
109 std::string peerDevId = "CheckAccess002";
110 AclParams aclParams;
111 aclParams.authType = static_cast<int32_t>(DistributedKv::AuthType::DEFAULT);
112 UserStatus local;
113 local.id = localUserId;
114 local.isActive = true;
115 std::vector<UserStatus> localUsers = { local };
116 std::vector<UserStatus> peerUsers(localUsers);
117 EXPECT_CALL(*userDelegateMock, GetLocalUserStatus()).WillOnce(Return(localUsers));
118 EXPECT_CALL(*userDelegateMock, GetRemoteUserStatus(_)).WillOnce(Return(peerUsers));
119 EXPECT_CALL(*devMgrAdapterMock, IsOHOSType(_)).WillOnce(Return(true));
120 EXPECT_CALL(*devMgrAdapterMock, IsSameAccount(_, _)).WillOnce(Return(true));
121 auto result = authHandler->CheckAccess(localUserId, peerUserId, peerDevId, aclParams);
122 EXPECT_TRUE(result.first);
123
124 EXPECT_CALL(*userDelegateMock, GetLocalUserStatus()).WillOnce(Return(localUsers));
125 EXPECT_CALL(*userDelegateMock, GetRemoteUserStatus(_)).WillOnce(Return(peerUsers));
126 EXPECT_CALL(*devMgrAdapterMock, IsOHOSType(_)).WillOnce(Return(true));
127 EXPECT_CALL(*devMgrAdapterMock, IsSameAccount(_, _)).WillOnce(Return(false));
128 EXPECT_CALL(*devMgrAdapterMock, CheckAccessControl(_, _)).WillOnce(Return(true));
129 result = authHandler->CheckAccess(localUserId, peerUserId, peerDevId, aclParams);
130 EXPECT_TRUE(result.first);
131
132 aclParams.accCaller.bundleName = "com.AuthDelegateMockTest.app";
133 EXPECT_CALL(*userDelegateMock, GetLocalUserStatus()).WillOnce(Return(localUsers));
134 EXPECT_CALL(*userDelegateMock, GetRemoteUserStatus(_)).WillOnce(Return(peerUsers));
135 EXPECT_CALL(*devMgrAdapterMock, IsOHOSType(_)).WillOnce(Return(true));
136 EXPECT_CALL(*devMgrAdapterMock, IsSameAccount(_, _)).WillOnce(Return(false));
137 EXPECT_CALL(*devMgrAdapterMock, CheckAccessControl(_, _)).WillOnce(Return(false));
138 result = authHandler->CheckAccess(localUserId, peerUserId, peerDevId, aclParams);
139 EXPECT_FALSE(result.first);
140 }
141
142 /**
143 * @tc.name: CheckAccess003
144 * @tc.desc: Check access.
145 * @tc.type: FUNC
146 * @tc.require:
147 * @tc.author: caozhijun
148 */
149 HWTEST_F(AuthDelegateMockTest, CheckAccess003, testing::ext::TestSize.Level0)
150 {
151 ASSERT_NE(authHandler, nullptr);
152 int localUserId = 1;
153 int peerUserId = 1;
154 std::string peerDevId = "CheckAccess003";
155 AclParams aclParams;
156 aclParams.authType = static_cast<int32_t>(DistributedKv::AuthType::IDENTICAL_ACCOUNT);
157 UserStatus local;
158 local.id = localUserId;
159 local.isActive = true;
160 std::vector<UserStatus> localUsers = { local };
161 std::vector<UserStatus> peerUsers(localUsers);
162 EXPECT_CALL(*userDelegateMock, GetLocalUserStatus()).WillOnce(Return(localUsers));
163 EXPECT_CALL(*userDelegateMock, GetRemoteUserStatus(_)).WillOnce(Return(peerUsers));
164 EXPECT_CALL(*devMgrAdapterMock, IsOHOSType(_)).WillOnce(Return(true));
165 EXPECT_CALL(*devMgrAdapterMock, IsSameAccount(_, _)).WillOnce(Return(true));
166 auto result = authHandler->CheckAccess(localUserId, peerUserId, peerDevId, aclParams);
167 EXPECT_TRUE(result.first);
168
169 aclParams.authType += 1;
170 aclParams.accCaller.bundleName = "com.AuthDelegateTest.app";
171 EXPECT_CALL(*userDelegateMock, GetLocalUserStatus()).WillOnce(Return(localUsers));
172 EXPECT_CALL(*userDelegateMock, GetRemoteUserStatus(_)).WillOnce(Return(peerUsers));
173 EXPECT_CALL(*devMgrAdapterMock, IsOHOSType(_)).WillOnce(Return(true));
174 result = authHandler->CheckAccess(localUserId, peerUserId, peerDevId, aclParams);
175 EXPECT_FALSE(result.second);
176 }
177 }
178