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 #define LOG_TAG "ObjectServiceImplTest"
17
18 #include "object_service_impl.h"
19
20 #include <gtest/gtest.h>
21
22 #include "accesstoken_kit.h"
23 #include "device_manager_adapter_mock.h"
24 #include "ipc_skeleton.h"
25 #include "token_setproc.h"
26
27 using namespace testing::ext;
28 using namespace OHOS::DistributedObject;
29 using namespace std;
30 using namespace testing;
31 namespace OHOS::Test {
32 class ObjectServiceImplTest : public testing::Test {
33 public:
34 void SetUp();
35 void TearDown();
36 protected:
37 ObjectStore::Asset asset_;
38 std::string uri_;
39 std::string appId_ = "ObjectServiceImplTest_appid_1";
40 std::string sessionId_ = "123";
41 std::vector<uint8_t> data_;
42 std::string deviceId_ = "7001005458323933328a258f413b3900";
43 uint64_t sequenceId_ = 10;
44 uint64_t sequenceId_2 = 20;
45 uint64_t sequenceId_3 = 30;
46 std::string userId_ = "100";
47 std::string bundleName_ = "test_bundleName";
48 ObjectStore::AssetBindInfo assetBindInfo_;
49 pid_t pid_ = 10;
50 uint32_t tokenId_ = 100;
51 static inline std::shared_ptr<DeviceManagerAdapterMock> devMgrAdapterMock = nullptr;
52 };
53
SetUp()54 void ObjectServiceImplTest::SetUp()
55 {
56 uri_ = "file:://com.examples.notepad/data/storage/el2/distributedfiles/dir/asset1.jpg";
57 ObjectStore::Asset asset{
58 .id = "test_name",
59 .name = uri_,
60 .uri = uri_,
61 .createTime = "2025.03.05",
62 .modifyTime = "modifyTime",
63 .size = "size",
64 .hash = "modifyTime_size",
65 .path = "/data/storage/el2",
66 };
67 asset_ = asset;
68
69 data_.push_back(sequenceId_);
70 data_.push_back(sequenceId_2);
71 data_.push_back(sequenceId_3);
72
73 ObjectStore::AssetBindInfo AssetBindInfo{
74 .storeName = "store_test",
75 .tableName = "table_test",
76 .field = "attachment",
77 .assetName = "asset1.jpg",
78 };
79 assetBindInfo_ = AssetBindInfo;
80 devMgrAdapterMock = make_shared<DeviceManagerAdapterMock>();
81 BDeviceManagerAdapter::deviceManagerAdapter = devMgrAdapterMock;
82 }
83
TearDown()84 void ObjectServiceImplTest::TearDown()
85 {
86 devMgrAdapterMock = nullptr;
87 }
88
89 /**
90 * @tc.name: OnAssetChanged001
91 * @tc.desc: OnAssetChanged test.
92 * @tc.type: FUNC
93 */
94 HWTEST_F(ObjectServiceImplTest, OnAssetChanged001, TestSize.Level1)
95 {
96 std::string bundleName = "com.examples.notepad";
97 OHOS::Security::AccessToken::AccessTokenID tokenId =
98 OHOS::Security::AccessToken::AccessTokenKit::GetHapTokenID(100, bundleName, 0);
99 SetSelfTokenID(tokenId);
100
101 std::shared_ptr<ObjectServiceImpl> objectServiceImpl = std::make_shared<ObjectServiceImpl>();
102
103 // bundleName not equal tokenId
104 auto ret = objectServiceImpl->OnAssetChanged(bundleName_, sessionId_, deviceId_, asset_);
105 EXPECT_EQ(ret, OBJECT_PERMISSION_DENIED);
106 }
107
108 /**
109 * @tc.name: BindAssetStore001
110 * @tc.desc: BindAssetStore test.
111 * @tc.type: FUNC
112 */
113 HWTEST_F(ObjectServiceImplTest, BindAssetStore001, TestSize.Level1)
114 {
115 std::string bundleName = "com.examples.notepad";
116 OHOS::Security::AccessToken::AccessTokenID tokenId =
117 OHOS::Security::AccessToken::AccessTokenKit::GetHapTokenID(100, bundleName, 0);
118 SetSelfTokenID(tokenId);
119
120 std::shared_ptr<ObjectServiceImpl> objectServiceImpl = std::make_shared<ObjectServiceImpl>();
121
122 // bundleName not equal tokenId
123 auto ret = objectServiceImpl->BindAssetStore(bundleName_, sessionId_, asset_, assetBindInfo_);
124 EXPECT_EQ(ret, OBJECT_PERMISSION_DENIED);
125 }
126
127 /**
128 * @tc.name: DeleteSnapshot001
129 * @tc.desc: DeleteSnapshot test.
130 * @tc.type: FUNC
131 */
132 HWTEST_F(ObjectServiceImplTest, DeleteSnapshot001, TestSize.Level1)
133 {
134 std::string bundleName = "com.examples.notepad";
135 OHOS::Security::AccessToken::AccessTokenID tokenId =
136 OHOS::Security::AccessToken::AccessTokenKit::GetHapTokenID(100, bundleName, 0);
137 SetSelfTokenID(tokenId);
138
139 std::shared_ptr<ObjectServiceImpl> objectServiceImpl = std::make_shared<ObjectServiceImpl>();
140
141 // bundleName not equal tokenId
142 auto ret = objectServiceImpl->DeleteSnapshot(bundleName_, sessionId_);
143 EXPECT_EQ(ret, OBJECT_PERMISSION_DENIED);
144 }
145
146 /**
147 * @tc.name: ResolveAutoLaunch001
148 * @tc.desc: ResolveAutoLaunch test.
149 * @tc.type: FUNC
150 */
151 HWTEST_F(ObjectServiceImplTest, ResolveAutoLaunch001, TestSize.Level1)
152 {
153 DistributedDB::AutoLaunchParam param {
154 .userId = userId_,
155 .appId = appId_,
156 .storeId = "storeId",
157 };
158 std::string identifier = "identifier";
159 std::shared_ptr<ObjectServiceImpl> objectServiceImpl = std::make_shared<ObjectServiceImpl>();
160 int32_t ret = objectServiceImpl->ResolveAutoLaunch(identifier, param);
161 EXPECT_EQ(ret, OBJECT_SUCCESS);
162 }
163
164 /**
165 * @tc.name: OnInitialize001
166 * @tc.desc: OnInitialize test.
167 * @tc.type: FUNC
168 */
169 HWTEST_F(ObjectServiceImplTest, OnInitialize001, TestSize.Level1)
170 {
171 std::shared_ptr<ObjectServiceImpl> objectServiceImpl = std::make_shared<ObjectServiceImpl>();
172 objectServiceImpl->executors_ = nullptr;
173 DeviceInfo devInfo = { .uuid = "123" };
174 EXPECT_CALL(*devMgrAdapterMock, GetLocalDevice())
175 .WillOnce(Return(devInfo));
176 int32_t ret = objectServiceImpl->OnInitialize();
177 EXPECT_EQ(ret, OBJECT_INNER_ERROR);
178 }
179
180 /**
181 * @tc.name: RegisterProgressObserver001
182 * @tc.desc: RegisterProgressObserver test.
183 * @tc.type: FUNC
184 */
185 HWTEST_F(ObjectServiceImplTest, RegisterProgressObserver001, TestSize.Level1)
186 {
187 std::shared_ptr<ObjectServiceImpl> objectServiceImpl = std::make_shared<ObjectServiceImpl>();
188 sptr<IRemoteObject> callback;
189 int32_t ret = objectServiceImpl->RegisterProgressObserver(bundleName_, sessionId_, callback);
190 EXPECT_EQ(ret, OBJECT_PERMISSION_DENIED);
191 }
192
193 /**
194 * @tc.name: UnregisterProgressObserver001
195 * @tc.desc: UnregisterProgressObserver test.
196 * @tc.type: FUNC
197 */
198 HWTEST_F(ObjectServiceImplTest, UnregisterProgressObserver001, TestSize.Level1)
199 {
200 std::shared_ptr<ObjectServiceImpl> objectServiceImpl = std::make_shared<ObjectServiceImpl>();
201 int32_t ret = objectServiceImpl->UnregisterProgressObserver(bundleName_, sessionId_);
202 EXPECT_EQ(ret, OBJECT_PERMISSION_DENIED);
203 }
204 }