• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 #define LOG_TAG "UdmfClientTest"
16 #include <gtest/gtest.h>
17 
18 #include <unistd.h>
19 #include <thread>
20 #include <chrono>
21 
22 #include "token_setproc.h"
23 #include "accesstoken_kit.h"
24 #include "directory_ex.h"
25 #include "nativetoken_kit.h"
26 
27 #include "logger.h"
28 #include "udmf_client.h"
29 #include "application_defined_record.h"
30 #include "audio.h"
31 #include "file.h"
32 #include "file_uri.h"
33 #include "folder.h"
34 #include "html.h"
35 #include "image.h"
36 #include "link.h"
37 #include "plain_text.h"
38 #include "system_defined_appitem.h"
39 #include "system_defined_form.h"
40 #include "system_defined_pixelmap.h"
41 #include "system_defined_record.h"
42 #include "text.h"
43 #include "unified_data_helper.h"
44 #include "unified_html_record_process.h"
45 #include "video.h"
46 
47 using namespace testing::ext;
48 using namespace OHOS::Security::AccessToken;
49 using namespace OHOS::UDMF;
50 using namespace OHOS;
51 namespace OHOS::Test {
52 constexpr int SLEEP_TIME = 50;   // 50 ms
53 constexpr int BATCH_SIZE_2K = 2000;
54 constexpr int BATCH_SIZE_5K = 5000;
55 constexpr double BASE_CONVERSION = 1000.0;
56 constexpr const char *FILE_SCHEME_PREFIX = "file://";
57 class UdmfClientTest : public testing::Test {
58 public:
59     static void SetUpTestCase();
60     static void TearDownTestCase();
61     void SetUp() override;
62     void TearDown() override;
63 
64     void SetNativeToken(const std::string &processName);
65     static void AllocHapToken1();
66     static void AllocHapToken2();
67     void SetHapToken1();
68     void SetHapToken2();
69 
70     void AddPrivilege(QueryOption &option);
71     void AddPrivilege1(QueryOption &option);
72     void CompareDetails(const UDDetails &details);
73     void GetEmptyData(QueryOption &option);
74     void GetFileUriUnifiedData(UnifiedData &data);
75     void ComparePixelMap(const UDDetails details, std::shared_ptr<OHOS::Media::PixelMap> pixelMapIn);
76 
77     static constexpr int USER_ID = 100;
78     static constexpr int INST_INDEX = 0;
79 };
80 
SetUpTestCase()81 void UdmfClientTest::SetUpTestCase()
82 {
83     AllocHapToken1();
84     AllocHapToken2();
85 }
86 
TearDownTestCase()87 void UdmfClientTest::TearDownTestCase()
88 {
89     auto tokenId = AccessTokenKit::GetHapTokenID(USER_ID, "ohos.test.demo1", INST_INDEX);
90     AccessTokenKit::DeleteToken(tokenId);
91     tokenId = AccessTokenKit::GetHapTokenID(USER_ID, "ohos.test.demo2", INST_INDEX);
92     AccessTokenKit::DeleteToken(tokenId);
93 }
94 
SetUp()95 void UdmfClientTest::SetUp()
96 {
97     SetHapToken1();
98 }
99 
TearDown()100 void UdmfClientTest::TearDown()
101 {
102     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
103     std::vector<UnifiedData> unifiedDataSet;
104     UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
105     query = { .intention = Intention::UD_INTENTION_DRAG };
106     UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
107 }
108 
SetNativeToken(const std::string & processName)109 void UdmfClientTest::SetNativeToken(const std::string &processName)
110 {
111     auto tokenId = AccessTokenKit::GetNativeTokenId(processName);
112     SetSelfTokenID(tokenId);
113 }
114 
AllocHapToken1()115 void UdmfClientTest::AllocHapToken1()
116 {
117     HapInfoParams info = {
118         .userID = USER_ID,
119         .bundleName = "ohos.test.demo1",
120         .instIndex = INST_INDEX,
121         .appIDDesc = "ohos.test.demo1"
122     };
123 
124     HapPolicyParams policy = {
125         .apl = APL_NORMAL,
126         .domain = "test.domain",
127         .permList = {
128             {
129                 .permissionName = "ohos.permission.test",
130                 .bundleName = "ohos.test.demo1",
131                 .grantMode = 1,
132                 .availableLevel = APL_NORMAL,
133                 .label = "label",
134                 .labelId = 1,
135                 .description = "test1",
136                 .descriptionId = 1
137             }
138         },
139         .permStateList = {
140             {
141                 .permissionName = "ohos.permission.test",
142                 .isGeneral = true,
143                 .resDeviceID = { "local" },
144                 .grantStatus = { PermissionState::PERMISSION_GRANTED },
145                 .grantFlags = { 1 }
146             }
147         }
148     };
149     auto tokenID = AccessTokenKit::AllocHapToken(info, policy);
150     SetSelfTokenID(tokenID.tokenIDEx);
151 }
152 
AllocHapToken2()153 void UdmfClientTest::AllocHapToken2()
154 {
155     HapInfoParams info = {
156         .userID = USER_ID,
157         .bundleName = "ohos.test.demo2",
158         .instIndex = INST_INDEX,
159         .appIDDesc = "ohos.test.demo2"
160     };
161 
162     HapPolicyParams policy = {
163         .apl = APL_NORMAL,
164         .domain = "test.domain",
165         .permList = {
166             {
167                 .permissionName = "ohos.permission.test",
168                 .bundleName = "ohos.test.demo2",
169                 .grantMode = 1,
170                 .availableLevel = APL_NORMAL,
171                 .label = "label",
172                 .labelId = 1,
173                 .description = "test2",
174                 .descriptionId = 1
175             }
176         },
177         .permStateList = {
178             {
179                 .permissionName = "ohos.permission.test",
180                 .isGeneral = true,
181                 .resDeviceID = { "local" },
182                 .grantStatus = { PermissionState::PERMISSION_GRANTED },
183                 .grantFlags = { 1 }
184             }
185         }
186     };
187     auto tokenID = AccessTokenKit::AllocHapToken(info, policy);
188     SetSelfTokenID(tokenID.tokenIDEx);
189 }
190 
SetHapToken1()191 void UdmfClientTest::SetHapToken1()
192 {
193     auto tokenId = AccessTokenKit::GetHapTokenID(USER_ID, "ohos.test.demo1", INST_INDEX);
194     SetSelfTokenID(tokenId);
195 }
196 
SetHapToken2()197 void UdmfClientTest::SetHapToken2()
198 {
199     auto tokenId = AccessTokenKit::GetHapTokenID(USER_ID, "ohos.test.demo2", INST_INDEX);
200     SetSelfTokenID(tokenId);
201 }
202 
AddPrivilege(QueryOption & option)203 void UdmfClientTest::AddPrivilege(QueryOption &option)
204 {
205     Privilege privilege;
206     privilege.tokenId = AccessTokenKit::GetHapTokenID(USER_ID, "ohos.test.demo2", INST_INDEX);
207     privilege.readPermission = "readPermission";
208     privilege.writePermission = "writePermission";
209     SetNativeToken("msdp_sa");
210     auto status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
211     ASSERT_EQ(status, E_OK);
212 }
213 
AddPrivilege1(QueryOption & option)214 void UdmfClientTest::AddPrivilege1(QueryOption &option)
215 {
216     Privilege privilege;
217     privilege.tokenId = AccessTokenKit::GetHapTokenID(USER_ID, "ohos.test.demo1", INST_INDEX);
218     privilege.readPermission = "readPermission";
219     privilege.writePermission = "writePermission";
220     SetNativeToken("msdp_sa");
221     auto status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
222     ASSERT_EQ(status, E_OK);
223 }
224 
CompareDetails(const UDDetails & details)225 void UdmfClientTest::CompareDetails(const UDDetails &details)
226 {
227     for (const auto &detail : details) {
228         auto key = detail.first;
229         EXPECT_EQ(key, "udmf_key");
230         auto value = detail.second;
231         auto str = std::get<std::string>(value);
232         EXPECT_EQ(str, "udmf_value");
233     }
234 }
235 
ComparePixelMap(const UDDetails details,std::shared_ptr<OHOS::Media::PixelMap> pixelMapIn)236 void UdmfClientTest::ComparePixelMap(const UDDetails details, std::shared_ptr<OHOS::Media::PixelMap> pixelMapIn)
237 {
238     auto width = details.find("width");
239     if (width != details.end()) {
240         EXPECT_EQ(std::get<int32_t>(width->second), pixelMapIn->GetWidth());
241     }
242     auto height = details.find("height");
243     if (height != details.end()) {
244         EXPECT_EQ(std::get<int32_t>(height->second), pixelMapIn->GetHeight());
245     }
246     auto pixel_format = details.find("pixel-format");
247     if (pixel_format != details.end()) {
248         EXPECT_EQ(std::get<int32_t>(pixel_format->second), static_cast<int32_t>(pixelMapIn->GetPixelFormat()));
249     }
250     auto alpha_type = details.find("alpha-type");
251     if (alpha_type != details.end()) {
252         EXPECT_EQ(std::get<int32_t>(alpha_type->second), static_cast<int32_t>(pixelMapIn->GetAlphaType()));
253     }
254     auto udmf_key = details.find("udmf_key");
255     if (udmf_key != details.end()) {
256         EXPECT_EQ(std::get<std::string>(udmf_key->second), "udmf_value");
257     }
258 }
259 
GetEmptyData(QueryOption & option)260 void UdmfClientTest::GetEmptyData(QueryOption &option)
261 {
262     UnifiedData data;
263     std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME));
264     auto status = UdmfClient::GetInstance().GetData(option, data);
265     EXPECT_EQ(status, E_NOT_FOUND);
266 }
267 
GetFileUriUnifiedData(UnifiedData & data)268 void UdmfClientTest::GetFileUriUnifiedData(UnifiedData &data)
269 {
270     std::shared_ptr<Object> obj = std::make_shared<Object>();
271     obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
272     obj->value_[FILE_URI_PARAM] = "http://demo.com";
273     obj->value_[FILE_TYPE] = "abcdefg";
274     auto record = std::make_shared<UnifiedRecord>(FILE_URI, obj);
275 
276     std::shared_ptr<Object> obj1 = std::make_shared<Object>();
277     obj1->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
278     obj1->value_[FILE_URI_PARAM] = "http://demo.com";
279     obj1->value_[FILE_TYPE] = "general.image";
280     auto record1 = std::make_shared<UnifiedRecord>(FILE_URI, obj1);
281 
282     std::shared_ptr<Object> obj2 = std::make_shared<Object>();
283     obj2->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
284     obj2->value_[FILE_URI_PARAM] = "http://demo.com";
285     obj2->value_[FILE_TYPE] = "general.audio";
286     auto record2 = std::make_shared<UnifiedRecord>(FILE_URI, obj2);
287     data.AddRecord(record);
288     data.AddRecord(record1);
289     data.AddRecord(record2);
290 }
291 
292 /**
293 * @tc.name: SetData001
294 * @tc.desc: Set data with invalid params
295 * @tc.type: FUNC
296 */
297 HWTEST_F(UdmfClientTest, SetData001, TestSize.Level1)
298 {
299     LOG_INFO(UDMF_TEST, "SetData001 begin.");
300 
301     CustomOption option = { .intention = Intention::UD_INTENTION_DRAG };
302     UnifiedData data;
303     std::string key;
304     auto status = UdmfClient::GetInstance().SetData(option, data, key);
305     EXPECT_EQ(status, E_INVALID_PARAMETERS);
306 
307     option = { .intention = Intention::UD_INTENTION_BUTT };
308     auto text = std::make_shared<Text>();
309     UDDetails details;
310     details.insert({ "udmf_key", "udmf_value" });
311     text->SetDetails(details);
312     data.AddRecord(text);
313     status = UdmfClient::GetInstance().SetData(option, data, key);
314     EXPECT_EQ(status, E_INVALID_PARAMETERS);
315 
316     option = {};
317     status = UdmfClient::GetInstance().SetData(option, data, key);
318     EXPECT_EQ(status, E_INVALID_PARAMETERS);
319 
320     option = { .intention = Intention::UD_INTENTION_BASE };
321     status = UdmfClient::GetInstance().SetData(option, data, key);
322     EXPECT_EQ(status, E_INVALID_PARAMETERS);
323     LOG_INFO(UDMF_TEST, "SetData001 end.");
324 }
325 
326 /**
327 * @tc.name: SetData002
328 * @tc.desc: Set Text record with valid params and get data
329 * @tc.type: FUNC
330 */
331 HWTEST_F(UdmfClientTest, SetData002, TestSize.Level1)
332 {
333     LOG_INFO(UDMF_TEST, "SetData002 begin.");
334 
335     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
336     UnifiedData data1;
337     auto text1 = std::make_shared<Text>();
338     UDDetails details1;
339     details1.insert({ "udmf_key", "udmf_value" });
340     text1->SetDetails(details1);
341     data1.AddRecord(text1);
342     std::string key;
343     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
344     ASSERT_EQ(status, E_OK);
345 
346     QueryOption option2 = { .key = key };
347     AddPrivilege(option2);
348     SetHapToken2();
349     UnifiedData data2;
350     status = UdmfClient::GetInstance().GetData(option2, data2);
351     ASSERT_EQ(status, E_OK);
352 
353     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
354     ASSERT_NE(record2, nullptr);
355     auto type = record2->GetType();
356     EXPECT_EQ(type, UDType::TEXT);
357 
358     auto text2 = static_cast<Text *>(record2.get());
359     ASSERT_NE(text2, nullptr);
360     CompareDetails(text2->GetDetails());
361 
362     GetEmptyData(option2);
363 
364     LOG_INFO(UDMF_TEST, "SetData002 end.");
365 }
366 
367 /**
368 * @tc.name: SetData003
369 * @tc.desc: Set PlainText record with valid params and get data
370 * @tc.type: FUNC
371 */
372 HWTEST_F(UdmfClientTest, SetData003, TestSize.Level1)
373 {
374     LOG_INFO(UDMF_TEST, "SetData003 begin.");
375 
376     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
377     UnifiedData data1;
378     auto plainText1 = std::make_shared<PlainText>();
379     UDDetails details1;
380     details1.insert({ "udmf_key", "udmf_value" });
381     plainText1->SetDetails(details1);
382     plainText1->SetContent("content");
383     plainText1->SetAbstract("abstract");
384     data1.AddRecord(plainText1);
385     std::string key;
386     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
387     ASSERT_EQ(status, E_OK);
388 
389     QueryOption option2 = { .key = key };
390     AddPrivilege(option2);
391     SetHapToken2();
392     UnifiedData data2;
393     status = UdmfClient::GetInstance().GetData(option2, data2);
394     ASSERT_EQ(status, E_OK);
395 
396     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
397     ASSERT_NE(record2, nullptr);
398     auto type = record2->GetType();
399     ASSERT_EQ(type, UDType::PLAIN_TEXT);
400 
401     auto text2 = static_cast<Text *>(record2.get());
402     ASSERT_NE(text2, nullptr);
403     CompareDetails(text2->GetDetails());
404 
405     auto plainText2 = static_cast<PlainText *>(record2.get());
406     ASSERT_NE(plainText2, nullptr);
407     EXPECT_EQ(plainText1->GetContent(), plainText2->GetContent());
408     EXPECT_EQ(plainText1->GetAbstract(), plainText2->GetAbstract());
409 
410     GetEmptyData(option2);
411 
412     LOG_INFO(UDMF_TEST, "SetData003 end.");
413 }
414 
415 /**
416 * @tc.name: SetData004
417 * @tc.desc: Set Html record with valid params and get data
418 * @tc.type: FUNC
419 */
420 HWTEST_F(UdmfClientTest, SetData004, TestSize.Level1)
421 {
422     LOG_INFO(UDMF_TEST, "SetData004 begin.");
423 
424     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
425     UnifiedData data1;
426     std::string key;
427     auto html1 = std::make_shared<Html>();
428     UDDetails details1;
429     details1.insert({ "udmf_key", "udmf_value" });
430     html1->SetDetails(details1);
431     html1->SetHtmlContent("htmlcontent");
432     html1->SetPlainContent("plainContent");
433     data1.AddRecord(html1);
434     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
435     ASSERT_EQ(status, E_OK);
436 
437     QueryOption option2 = { .key = key };
438     AddPrivilege(option2);
439     SetHapToken2();
440     UnifiedData data2;
441     status = UdmfClient::GetInstance().GetData(option2, data2);
442     ASSERT_EQ(status, E_OK);
443 
444     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
445     ASSERT_NE(record2, nullptr);
446     auto type = record2->GetType();
447     ASSERT_EQ(type, UDType::HTML);
448 
449     auto text2 = static_cast<Text *>(record2.get());
450     ASSERT_NE(text2, nullptr);
451     CompareDetails(text2->GetDetails());
452 
453     auto html2 = static_cast<Html *>(record2.get());
454     ASSERT_NE(html2, nullptr);
455     EXPECT_EQ(html1->GetHtmlContent(), html2->GetHtmlContent());
456     EXPECT_EQ(html1->GetPlainContent(), html2->GetPlainContent());
457 
458     GetEmptyData(option2);
459 
460     LOG_INFO(UDMF_TEST, "SetData004 end.");
461 }
462 
463 /**
464 * @tc.name: SetData005
465 * @tc.desc: Set Link record with valid params and get data
466 * @tc.type: FUNC
467 */
468 HWTEST_F(UdmfClientTest, SetData005, TestSize.Level1)
469 {
470     LOG_INFO(UDMF_TEST, "SetData005 begin.");
471 
472     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
473     UnifiedData data1;
474     std::string key;
475     auto link1 = std::make_shared<Link>();
476     UDDetails details1;
477     details1.insert({ "udmf_key", "udmf_value" });
478     link1->SetDetails(details1);
479     link1->SetUrl("url");
480     link1->SetDescription("description");
481     data1.AddRecord(link1);
482     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
483     ASSERT_EQ(status, E_OK);
484 
485     QueryOption option2 = { .key = key };
486     AddPrivilege(option2);
487     SetHapToken2();
488     UnifiedData data2;
489     status = UdmfClient::GetInstance().GetData(option2, data2);
490     ASSERT_EQ(status, E_OK);
491 
492     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
493     ASSERT_NE(record2, nullptr);
494     auto type = record2->GetType();
495     ASSERT_EQ(type, UDType::HYPERLINK);
496 
497     auto text2 = static_cast<Text *>(record2.get());
498     ASSERT_NE(text2, nullptr);
499     CompareDetails(text2->GetDetails());
500 
501     auto link2 = static_cast<Link *>(record2.get());
502     ASSERT_NE(link2, nullptr);
503     EXPECT_EQ(link1->GetUrl(), link2->GetUrl());
504     EXPECT_EQ(link1->GetDescription(), link2->GetDescription());
505 
506     GetEmptyData(option2);
507 
508     LOG_INFO(UDMF_TEST, "SetData005 end.");
509 }
510 
511 /**
512 * @tc.name: SetData006
513 * @tc.desc: Set File record with valid params and get data
514 * @tc.type: FUNC
515 */
516 HWTEST_F(UdmfClientTest, SetData006, TestSize.Level1)
517 {
518     LOG_INFO(UDMF_TEST, "SetData006 begin.");
519 
520     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
521     UnifiedData data1;
522     std::string key;
523     auto file1 = std::make_shared<File>();
524     file1->SetRemoteUri("remoteUri");
525     UDDetails details1;
526     details1.insert({ "udmf_key", "udmf_value" });
527     file1->SetDetails(details1);
528     data1.AddRecord(file1);
529     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
530     ASSERT_EQ(status, E_OK);
531 
532     QueryOption option2 = { .key = key };
533     AddPrivilege(option2);
534     SetHapToken2();
535     UnifiedData data2;
536     status = UdmfClient::GetInstance().GetData(option2, data2);
537     ASSERT_EQ(status, E_OK);
538 
539     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
540     ASSERT_NE(record2, nullptr);
541     auto type = record2->GetType();
542     ASSERT_EQ(type, UDType::FILE);
543 
544     auto file2 = static_cast<File *>(record2.get());
545     ASSERT_NE(file2, nullptr);
546     EXPECT_EQ(file1->GetRemoteUri(), file2->GetRemoteUri());
547     CompareDetails(file2->GetDetails());
548 
549     GetEmptyData(option2);
550 
551     LOG_INFO(UDMF_TEST, "SetData006 end.");
552 }
553 
554 /**
555 * @tc.name: SetData007
556 * @tc.desc: Set Image record with valid params and get data
557 * @tc.type: FUNC
558 */
559 HWTEST_F(UdmfClientTest, SetData007, TestSize.Level1)
560 {
561     LOG_INFO(UDMF_TEST, "SetData007 begin.");
562 
563     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
564     UnifiedData data1;
565     std::string key;
566     auto image1 = std::make_shared<Image>();
567     UDDetails details1;
568     details1.insert({ "udmf_key", "udmf_value" });
569     image1->SetDetails(details1);
570     image1->SetRemoteUri("remoteUri");
571     data1.AddRecord(image1);
572     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
573     ASSERT_EQ(status, E_OK);
574 
575     QueryOption option2 = { .key = key };
576     AddPrivilege(option2);
577     SetHapToken2();
578     UnifiedData data2;
579     status = UdmfClient::GetInstance().GetData(option2, data2);
580     ASSERT_EQ(status, E_OK);
581 
582     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
583     ASSERT_NE(record2, nullptr);
584     auto type = record2->GetType();
585     ASSERT_EQ(type, UDType::IMAGE);
586 
587     auto file2 = static_cast<File *>(record2.get());
588     ASSERT_NE(file2, nullptr);
589     CompareDetails(file2->GetDetails());
590 
591     auto image2 = static_cast<Image *>(record2.get());
592     ASSERT_NE(image2, nullptr);
593     EXPECT_EQ(image1->GetRemoteUri(), image2->GetRemoteUri());
594 
595     GetEmptyData(option2);
596 
597     LOG_INFO(UDMF_TEST, "SetData007 end.");
598 }
599 
600 /**
601 * @tc.name: SetData008
602 * @tc.desc: Set Video record with valid params and get data
603 * @tc.type: FUNC
604 */
605 HWTEST_F(UdmfClientTest, SetData008, TestSize.Level1)
606 {
607     LOG_INFO(UDMF_TEST, "SetData008 begin.");
608 
609     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
610     UnifiedData data1;
611     std::string key;
612     auto video1 = std::make_shared<Video>();
613     UDDetails details1;
614     details1.insert({ "udmf_key", "udmf_value" });
615     video1->SetDetails(details1);
616     video1->SetRemoteUri("remoteUri");
617     data1.AddRecord(video1);
618     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
619     ASSERT_EQ(status, E_OK);
620 
621     QueryOption option2 = { .key = key };
622     AddPrivilege(option2);
623     SetHapToken2();
624     UnifiedData data2;
625     status = UdmfClient::GetInstance().GetData(option2, data2);
626     ASSERT_EQ(status, E_OK);
627 
628     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
629     ASSERT_NE(record2, nullptr);
630     auto type = record2->GetType();
631     EXPECT_EQ(type, UDType::VIDEO);
632 
633     auto file2 = static_cast<File *>(record2.get());
634     ASSERT_NE(file2, nullptr);
635     CompareDetails(file2->GetDetails());
636 
637     auto video2 = static_cast<Video *>(record2.get());
638     ASSERT_NE(video2, nullptr);
639     EXPECT_EQ(video1->GetRemoteUri(), video2->GetRemoteUri());
640 
641     GetEmptyData(option2);
642 
643     LOG_INFO(UDMF_TEST, "SetData008 end.");
644 }
645 
646 /**
647 * @tc.name: SetData009
648 * @tc.desc: Set Audio record with valid params and get data
649 * @tc.type: FUNC
650 */
651 HWTEST_F(UdmfClientTest, SetData009, TestSize.Level1)
652 {
653     LOG_INFO(UDMF_TEST, "SetData009 begin.");
654 
655     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
656     UnifiedData data1;
657     std::string key;
658     auto audio1 = std::make_shared<Audio>();
659     UDDetails details1;
660     details1.insert({ "udmf_key", "udmf_value" });
661     audio1->SetDetails(details1);
662     audio1->SetRemoteUri("remoteUri");
663     data1.AddRecord(audio1);
664     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
665     ASSERT_EQ(status, E_OK);
666 
667     QueryOption option2 = { .key = key };
668     AddPrivilege(option2);
669     SetHapToken2();
670     UnifiedData data2;
671     status = UdmfClient::GetInstance().GetData(option2, data2);
672     ASSERT_EQ(status, E_OK);
673 
674     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
675     ASSERT_NE(record2, nullptr);
676     auto type = record2->GetType();
677     EXPECT_EQ(type, UDType::AUDIO);
678 
679     auto file2 = static_cast<File *>(record2.get());
680     ASSERT_NE(file2, nullptr);
681     CompareDetails(file2->GetDetails());
682 
683     auto audio2 = static_cast<Audio *>(record2.get());
684     ASSERT_NE(audio2, nullptr);
685     EXPECT_EQ(audio1->GetRemoteUri(), audio2->GetRemoteUri());
686 
687     GetEmptyData(option2);
688 
689     LOG_INFO(UDMF_TEST, "SetData009 end.");
690 }
691 
692 /**
693 * @tc.name: SetData010
694 * @tc.desc: Set Folder record with valid params and get data
695 * @tc.type: FUNC
696 */
697 HWTEST_F(UdmfClientTest, SetData010, TestSize.Level1)
698 {
699     LOG_INFO(UDMF_TEST, "SetData010 begin.");
700 
701     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
702     UnifiedData data1;
703     std::string key;
704     auto folder1 = std::make_shared<Folder>();
705     UDDetails details1;
706     details1.insert({ "udmf_key", "udmf_value" });
707     folder1->SetDetails(details1);
708     folder1->SetRemoteUri("remoteUri");
709     data1.AddRecord(folder1);
710     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
711     ASSERT_EQ(status, E_OK);
712 
713     QueryOption option2 = { .key = key };
714     AddPrivilege(option2);
715     SetHapToken2();
716     UnifiedData data2;
717     status = UdmfClient::GetInstance().GetData(option2, data2);
718     ASSERT_EQ(status, E_OK);
719 
720     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
721     ASSERT_NE(record2, nullptr);
722     auto type = record2->GetType();
723     EXPECT_EQ(type, UDType::FOLDER);
724 
725     auto file2 = static_cast<File *>(record2.get());
726     ASSERT_NE(file2, nullptr);
727     CompareDetails(file2->GetDetails());
728 
729     auto folder2 = static_cast<Folder *>(record2.get());
730     ASSERT_NE(folder2, nullptr);
731     EXPECT_EQ(folder1->GetRemoteUri(), folder2->GetRemoteUri());
732 
733     GetEmptyData(option2);
734 
735     LOG_INFO(UDMF_TEST, "SetData010 end.");
736 }
737 
738 /**
739 * @tc.name: SetData011
740 * @tc.desc: Set SystemDefined record with valid params and get data
741 * @tc.type: FUNC
742 */
743 HWTEST_F(UdmfClientTest, SetData011, TestSize.Level1)
744 {
745     LOG_INFO(UDMF_TEST, "SetData011 begin.");
746 
747     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
748     UnifiedData data1;
749     std::string key;
750     auto systemDefinedRecord1 = std::make_shared<SystemDefinedRecord>();
751     UDDetails details1;
752     details1.insert({ "udmf_key", "udmf_value" });
753     systemDefinedRecord1->SetDetails(details1);
754     data1.AddRecord(systemDefinedRecord1);
755     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
756     ASSERT_EQ(status, E_OK);
757 
758     QueryOption option2 = { .key = key };
759     AddPrivilege(option2);
760     SetHapToken2();
761     UnifiedData data2;
762     status = UdmfClient::GetInstance().GetData(option2, data2);
763     ASSERT_EQ(status, E_OK);
764 
765     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
766     ASSERT_NE(record2, nullptr);
767     auto type = record2->GetType();
768     ASSERT_EQ(type, UDType::SYSTEM_DEFINED_RECORD);
769 
770     auto systemDefinedRecord2 = static_cast<SystemDefinedRecord *>(record2.get());
771     ASSERT_NE(systemDefinedRecord2, nullptr);
772     CompareDetails(systemDefinedRecord2->GetDetails());
773 
774     GetEmptyData(option2);
775 
776     LOG_INFO(UDMF_TEST, "SetData011 end.");
777 }
778 
779 /**
780 * @tc.name: SetData012
781 * @tc.desc: Set Form record with valid params and get data
782 * @tc.type: FUNC
783 */
784 HWTEST_F(UdmfClientTest, SetData012, TestSize.Level1)
785 {
786     LOG_INFO(UDMF_TEST, "SetData012 begin.");
787 
788     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
789     UnifiedData data1;
790     std::string key;
791     auto systemDefinedForm1 = std::make_shared<SystemDefinedForm>();
792     UDDetails details1;
793     details1.insert({ "udmf_key", "udmf_value" });
794     systemDefinedForm1->SetDetails(details1);
795     systemDefinedForm1->SetFormId(123);
796     systemDefinedForm1->SetFormName("formName");
797     systemDefinedForm1->SetModule("module");
798     systemDefinedForm1->SetAbilityName("abilityName");
799     systemDefinedForm1->SetBundleName("bundleName");
800     data1.AddRecord(systemDefinedForm1);
801     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
802     ASSERT_EQ(status, E_OK);
803 
804     QueryOption option2 = { .key = key };
805     AddPrivilege(option2);
806     SetHapToken2();
807     UnifiedData data2;
808     status = UdmfClient::GetInstance().GetData(option2, data2);
809     ASSERT_EQ(status, E_OK);
810 
811     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
812     ASSERT_NE(record2, nullptr);
813     auto type = record2->GetType();
814     ASSERT_EQ(type, UDType::SYSTEM_DEFINED_FORM);
815 
816     auto systemDefinedRecord2 = static_cast<SystemDefinedRecord *>(record2.get());
817     ASSERT_NE(systemDefinedRecord2, nullptr);
818     CompareDetails(systemDefinedRecord2->GetDetails());
819 
820     auto systemDefinedForm2 = static_cast<SystemDefinedForm *>(record2.get());
821     ASSERT_NE(systemDefinedForm2, nullptr);
822     EXPECT_EQ(systemDefinedForm1->GetFormId(), systemDefinedForm2->GetFormId());
823     EXPECT_EQ(systemDefinedForm1->GetFormName(), systemDefinedForm2->GetFormName());
824     EXPECT_EQ(systemDefinedForm1->GetBundleName(), systemDefinedForm2->GetBundleName());
825     EXPECT_EQ(systemDefinedForm1->GetAbilityName(), systemDefinedForm2->GetAbilityName());
826     EXPECT_EQ(systemDefinedForm1->GetModule(), systemDefinedForm2->GetModule());
827 
828     GetEmptyData(option2);
829 
830     LOG_INFO(UDMF_TEST, "SetData012 end.");
831 }
832 
833 /**
834 * @tc.name: SetData013
835 * @tc.desc: Set AppItem record with valid params and get data
836 * @tc.type: FUNC
837 */
838 HWTEST_F(UdmfClientTest, SetData013, TestSize.Level1)
839 {
840     LOG_INFO(UDMF_TEST, "SetData013 begin.");
841 
842     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
843     UnifiedData data1;
844     std::string key;
845     auto systemDefinedAppItem1 = std::make_shared<SystemDefinedAppItem>();
846     UDDetails details1;
847     details1.insert({ "udmf_key", "udmf_value" });
848     systemDefinedAppItem1->SetDetails(details1);
849     systemDefinedAppItem1->SetAppId("appId");
850     systemDefinedAppItem1->SetAppName("appName");
851     systemDefinedAppItem1->SetAppIconId("appIconId");
852     systemDefinedAppItem1->SetAppLabelId("appLabelId");
853     systemDefinedAppItem1->SetBundleName("bundleName");
854     systemDefinedAppItem1->SetAbilityName("abilityName");
855     data1.AddRecord(systemDefinedAppItem1);
856     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
857     ASSERT_EQ(status, E_OK);
858 
859     QueryOption option2 = { .key = key };
860     AddPrivilege(option2);
861     SetHapToken2();
862     UnifiedData data2;
863     status = UdmfClient::GetInstance().GetData(option2, data2);
864     ASSERT_EQ(status, E_OK);
865 
866     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
867     ASSERT_NE(record2, nullptr);
868     auto type = record2->GetType();
869     ASSERT_EQ(type, UDType::SYSTEM_DEFINED_APP_ITEM);
870 
871     auto systemDefinedRecord2 = static_cast<SystemDefinedRecord *>(record2.get());
872     ASSERT_NE(systemDefinedRecord2, nullptr);
873     CompareDetails(systemDefinedRecord2->GetDetails());
874 
875     auto systemDefinedAppItem2 = static_cast<SystemDefinedAppItem *>(record2.get());
876     ASSERT_NE(systemDefinedAppItem2, nullptr);
877     EXPECT_EQ(systemDefinedAppItem1->GetAppId(), systemDefinedAppItem2->GetAppId());
878     EXPECT_EQ(systemDefinedAppItem1->GetAppName(), systemDefinedAppItem2->GetAppName());
879     EXPECT_EQ(systemDefinedAppItem1->GetBundleName(), systemDefinedAppItem2->GetBundleName());
880     EXPECT_EQ(systemDefinedAppItem1->GetAbilityName(), systemDefinedAppItem2->GetAbilityName());
881     EXPECT_EQ(systemDefinedAppItem1->GetAppIconId(), systemDefinedAppItem2->GetAppIconId());
882     EXPECT_EQ(systemDefinedAppItem1->GetAppLabelId(), systemDefinedAppItem2->GetAppLabelId());
883 
884     GetEmptyData(option2);
885 
886     LOG_INFO(UDMF_TEST, "SetData013 end.");
887 }
888 
889 /**
890 * @tc.name: SetData014
891 * @tc.desc: Set PixelMap record with valid params and get data
892 * @tc.type: FUNC
893 */
894 HWTEST_F(UdmfClientTest, SetData014, TestSize.Level1)
895 {
896     LOG_INFO(UDMF_TEST, "SetData014 begin.");
897 
898     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
899     UnifiedData data1;
900     std::string key;
901     auto systemDefinedPixelMap1 = std::make_shared<SystemDefinedPixelMap>();
902     UDDetails details1;
903     details1.insert({ "udmf_key", "udmf_value" });
904     systemDefinedPixelMap1->SetDetails(details1);
905     std::vector<uint8_t> rawData1;
906 
907     uint32_t color[100] = { 3, 7, 9, 9, 7, 6 };
908     OHOS::Media::InitializationOptions opts = { { 5, 7 },
909         Media::PixelFormat::ARGB_8888,
910         Media::PixelFormat::ARGB_8888 };
911     std::unique_ptr<OHOS::Media::PixelMap> pixelMap =
912         OHOS::Media::PixelMap::Create(color, sizeof(color) / sizeof(color[0]), opts);
913     std::shared_ptr<OHOS::Media::PixelMap> pixelMapIn = move(pixelMap);
914     pixelMapIn->EncodeTlv(rawData1);
915 
916     systemDefinedPixelMap1->SetRawData(rawData1);
917     data1.AddRecord(systemDefinedPixelMap1);
918     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
919     ASSERT_EQ(status, E_OK);
920 
921     QueryOption option2 = { .key = key };
922     AddPrivilege(option2);
923     SetHapToken2();
924     UnifiedData data2;
925     status = UdmfClient::GetInstance().GetData(option2, data2);
926     ASSERT_EQ(status, E_OK);
927 
928     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
929     ASSERT_NE(record2, nullptr);
930     auto type = record2->GetType();
931     ASSERT_EQ(type, UDType::SYSTEM_DEFINED_PIXEL_MAP);
932 
933     auto systemDefinedRecord2 = static_cast<SystemDefinedRecord *>(record2.get());
934     ASSERT_NE(systemDefinedRecord2, nullptr);
935     ComparePixelMap(systemDefinedRecord2->GetDetails(), pixelMapIn);
936 
937     auto systemDefinedPixelMap2 = static_cast<SystemDefinedPixelMap *>(record2.get());
938     ASSERT_NE(systemDefinedPixelMap2, nullptr);
939     auto rawData2 = systemDefinedPixelMap2->GetRawData();
940     EXPECT_EQ(rawData1.size(), rawData2.size());
941     for (uint32_t i = 0; i < rawData1.size(); ++i) {
942         EXPECT_EQ(rawData1[i], rawData2[i]);
943     }
944 
945     GetEmptyData(option2);
946 
947     LOG_INFO(UDMF_TEST, "SetData014 end.");
948 }
949 
950 /**
951 * @tc.name: SetData015
952 * @tc.desc: Set Application Defined record with valid params and get data
953 * @tc.type: FUNC
954 */
955 HWTEST_F(UdmfClientTest, SetData015, TestSize.Level1)
956 {
957     LOG_INFO(UDMF_TEST, "SetData015 begin.");
958 
959     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
960     UnifiedData data1;
961     std::string key;
962     auto applicationDefinedRecord1 = std::make_shared<ApplicationDefinedRecord>();
963     applicationDefinedRecord1->SetApplicationDefinedType("applicationDefinedType");
964     std::vector<uint8_t> rawData1 = { 1, 2, 3, 4, 5 };
965     applicationDefinedRecord1->SetRawData(rawData1);
966     data1.AddRecord(applicationDefinedRecord1);
967     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
968     ASSERT_EQ(status, E_OK);
969 
970     QueryOption option2 = { .key = key };
971     AddPrivilege(option2);
972     SetHapToken2();
973     UnifiedData data2;
974     status = UdmfClient::GetInstance().GetData(option2, data2);
975     ASSERT_EQ(status, E_OK);
976 
977     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
978     ASSERT_NE(record2, nullptr);
979     auto type = record2->GetType();
980     ASSERT_EQ(type, UDType::APPLICATION_DEFINED_RECORD);
981 
982     auto applicationDefinedRecord2 = static_cast<ApplicationDefinedRecord *>(record2.get());
983     ASSERT_NE(applicationDefinedRecord2, nullptr);
984     EXPECT_EQ(applicationDefinedRecord1->GetApplicationDefinedType(),
985               applicationDefinedRecord2->GetApplicationDefinedType());
986     auto rawData2 = applicationDefinedRecord2->GetRawData();
987     EXPECT_EQ(rawData1.size(), rawData2.size());
988     for (uint32_t i = 0; i < rawData1.size(); ++i) {
989         EXPECT_EQ(rawData1[i], rawData2[i]);
990     }
991 
992     GetEmptyData(option2);
993 
994     LOG_INFO(UDMF_TEST, "SetData015 end.");
995 }
996 
997 /**
998 * @tc.name: SetData016
999 * @tc.desc: Set multiple record with valid params and get data
1000 * @tc.type: FUNC
1001 */
1002 HWTEST_F(UdmfClientTest, SetData016, TestSize.Level1)
1003 {
1004     LOG_INFO(UDMF_TEST, "SetData016 begin.");
1005 
1006     CustomOption customOption = {.intention = Intention::UD_INTENTION_DRAG};
1007     std::string key;
1008     UnifiedData inputData;
1009     std::vector<std::shared_ptr<UnifiedRecord>> inputRecords = {
1010         std::make_shared<Text>(),
1011         std::make_shared<PlainText>(),
1012         std::make_shared<File>(),
1013         std::make_shared<Image>(),
1014         std::make_shared<SystemDefinedRecord>(),
1015         std::make_shared<SystemDefinedForm>(),
1016         std::make_shared<ApplicationDefinedRecord>()
1017     };
1018     inputData.SetRecords(inputRecords);
1019 
1020     auto status = UdmfClient::GetInstance().SetData(customOption, inputData, key);
1021     ASSERT_EQ(status, E_OK);
1022 
1023     QueryOption queryOption = { .key = key };
1024     UnifiedData outputData;
1025     status = UdmfClient::GetInstance().GetData(queryOption, outputData);
1026     ASSERT_EQ(status, E_OK);
1027     auto outputRecords = outputData.GetRecords();
1028     ASSERT_EQ(inputRecords.size(), outputRecords.size());
1029     for (size_t i = 0; i < outputRecords.size(); ++i) {
1030         ASSERT_EQ(outputRecords[i]->GetType(), inputRecords[i]->GetType());
1031     }
1032 
1033     LOG_INFO(UDMF_TEST, "SetData016 end.");
1034 }
1035 
1036 /**
1037 * @tc.name: SetData017
1038 * @tc.desc: Set 512 records with valid params and get data
1039 * @tc.type: FUNC
1040 */
1041 HWTEST_F(UdmfClientTest, SetData017, TestSize.Level1)
1042 {
1043     LOG_INFO(UDMF_TEST, "SetData017 begin.");
1044 
1045     CustomOption customOption = {.intention = Intention::UD_INTENTION_DRAG};
1046     std::string key;
1047     UnifiedData inputData;
1048     std::vector<std::shared_ptr<UnifiedRecord>> inputRecords;
1049     for (int32_t i = 0; i < 512; ++i) {
1050         inputRecords.emplace_back(std::make_shared<Text>());
1051     }
1052     inputData.SetRecords(inputRecords);
1053 
1054     auto status = UdmfClient::GetInstance().SetData(customOption, inputData, key);
1055     ASSERT_EQ(status, E_OK);
1056 
1057     QueryOption queryOption = { .key = key };
1058     UnifiedData outputData;
1059     status = UdmfClient::GetInstance().GetData(queryOption, outputData);
1060     ASSERT_EQ(status, E_OK);
1061     auto outputRecords = outputData.GetRecords();
1062     ASSERT_EQ(inputRecords.size(), outputRecords.size());
1063 
1064     LOG_INFO(UDMF_TEST, "SetData017 end.");
1065 }
1066 
1067 /**
1068 * @tc.name: SetData018
1069 * @tc.desc: Set one 2MB record of data with valid params and get data
1070 * @tc.type: FUNC
1071 */
1072 HWTEST_F(UdmfClientTest, SetData018, TestSize.Level1)
1073 {
1074     LOG_INFO(UDMF_TEST, "SetData018 begin.");
1075 
1076     CustomOption customOption = { .intention = Intention::UD_INTENTION_DRAG };
1077     UnifiedData inputData;
1078     std::string key;
1079     UDDetails details;
1080     std::string value;
1081     int64_t maxSize = 512 * 1024;
1082     for (int64_t i = 0; i < maxSize; ++i) {
1083         value += "11";
1084     }
1085     details.insert({ value, value });
1086     auto text = std::make_shared<Text>();
1087     text->SetDetails(details);
1088     inputData.AddRecord(text);
1089 
1090     auto status = UdmfClient::GetInstance().SetData(customOption, inputData, key);
1091     ASSERT_EQ(status, E_OK);
1092 
1093     QueryOption queryOption = { .key = key };
1094     UnifiedData outputData;
1095     status = UdmfClient::GetInstance().GetData(queryOption, outputData);
1096     ASSERT_EQ(status, E_OK);
1097 
1098     LOG_INFO(UDMF_TEST, "SetData018 end.");
1099 }
1100 
1101 /**
1102 * @tc.name: SetData019
1103 * @tc.desc: Set one over 2MB record of data with valid params and get data
1104 * @tc.type: FUNC
1105 */
1106 HWTEST_F(UdmfClientTest, SetData019, TestSize.Level1)
1107 {
1108     LOG_INFO(UDMF_TEST, "SetData019 begin.");
1109 
1110     CustomOption customOption = { .intention = Intention::UD_INTENTION_DRAG };
1111     UnifiedData inputData;
1112     std::string key;
1113     UDDetails details;
1114     std::string value;
1115     int64_t maxSize = 512 * 1024;
1116     for (int64_t i = 0; i < maxSize; ++i) {
1117         value += "11";
1118     }
1119     details.insert({ value, value });
1120     details.insert({ "udmf_key", "udmf_value" });
1121     auto text = std::make_shared<Text>();
1122     text->SetDetails(details);
1123     inputData.AddRecord(text);
1124 
1125     UnifiedDataHelper::SetRootPath("/data/udmf_test/");
1126     auto status = UdmfClient::GetInstance().SetData(customOption, inputData, key);
1127     ASSERT_EQ(status, E_OK);
1128 
1129     QueryOption queryOption = { .key = key };
1130     UnifiedData outputData;
1131     status = UdmfClient::GetInstance().GetData(queryOption, outputData);
1132     ASSERT_EQ(status, E_OK);
1133     UnifiedDataHelper::SetRootPath("");
1134 
1135     LOG_INFO(UDMF_TEST, "SetData019 end.");
1136 }
1137 
1138 /**
1139 * @tc.name: SetData020
1140 * @tc.desc: Set two 2MB record of data with valid params and get data
1141 * @tc.type: FUNC
1142 */
1143 HWTEST_F(UdmfClientTest, SetData020, TestSize.Level1)
1144 {
1145     LOG_INFO(UDMF_TEST, "SetData020 begin.");
1146 
1147     CustomOption customOption = { .intention = Intention::UD_INTENTION_DRAG };
1148     UnifiedData inputData;
1149     std::string key;
1150     UDDetails details;
1151     std::string value;
1152     int64_t maxSize = 512 * 1024;
1153     for (int64_t i = 0; i < maxSize; ++i) {
1154         value += "11";
1155     }
1156     details.insert({ value, value });
1157     auto text = std::make_shared<Text>();
1158     text->SetDetails(details);
1159     for (int i = 0; i < 2; ++i) {
1160         inputData.AddRecord(text);
1161     }
1162     auto status = UdmfClient::GetInstance().SetData(customOption, inputData, key);
1163     ASSERT_EQ(status, E_OK);
1164 
1165     QueryOption queryOption = { .key = key };
1166     UnifiedData outputData;
1167     status = UdmfClient::GetInstance().GetData(queryOption, outputData);
1168     ASSERT_EQ(status, E_OK);
1169 
1170     LOG_INFO(UDMF_TEST, "SetData020 end.");
1171 }
1172 
1173 /**
1174 * @tc.name: GetData001
1175 * @tc.desc: Get data with invalid key
1176 * @tc.type: FUNC
1177 */
1178 HWTEST_F(UdmfClientTest, GetData001, TestSize.Level1)
1179 {
1180     LOG_INFO(UDMF_TEST, "GetData001 begin.");
1181 
1182     QueryOption option;
1183     UnifiedData data;
1184     auto status = UdmfClient::GetInstance().GetData(option, data);
1185     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1186 
1187     option.key = "udmf";
1188     status = UdmfClient::GetInstance().GetData(option, data);
1189     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1190 
1191     option.key = "odmf://";
1192     status = UdmfClient::GetInstance().GetData(option, data);
1193     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1194 
1195     option.key = "udmf://drag";
1196     status = UdmfClient::GetInstance().GetData(option, data);
1197     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1198 
1199     option.key = "udmf://123/bundle/group";
1200     status = UdmfClient::GetInstance().GetData(option, data);
1201     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1202 
1203     option.key = "udmf://drag/bundle";
1204     status = UdmfClient::GetInstance().GetData(option, data);
1205     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1206 
1207     option.key = "udmf://drag/bundle***/group";
1208     status = UdmfClient::GetInstance().GetData(option, data);
1209     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1210 
1211     option.key = "udmf://drag/bundle/";
1212     status = UdmfClient::GetInstance().GetData(option, data);
1213     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1214 
1215     option.key = "udmf://drag/bundle/group###";
1216     status = UdmfClient::GetInstance().GetData(option, data);
1217     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1218 
1219     LOG_INFO(UDMF_TEST, "GetData001 end.");
1220 }
1221 
1222 /**
1223 * @tc.name: GetSummary001
1224 * @tc.desc: Get summary data
1225 * @tc.type: FUNC
1226 */
1227 HWTEST_F(UdmfClientTest, GetSummary001, TestSize.Level1)
1228 {
1229     LOG_INFO(UDMF_TEST, "GetSummary001 begin.");
1230 
1231     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
1232     UnifiedData data;
1233     std::string key;
1234 
1235     UDDetails details;
1236     details.insert({ "udmf_key", "udmf_value" });
1237 
1238     auto text = std::make_shared<Text>();
1239     text->SetDetails(details);
1240     data.AddRecord(text);
1241 
1242     auto plainText = std::make_shared<PlainText>();
1243     plainText->SetDetails(details);
1244     plainText->SetContent("content");
1245     plainText->SetAbstract("abstract");
1246     data.AddRecord(plainText);
1247 
1248     auto file = std::make_shared<File>();
1249     file->SetDetails(details);
1250     file->SetUri("uri");
1251     file->SetRemoteUri("remoteUri");
1252     data.AddRecord(file);
1253 
1254     auto image = std::make_shared<Image>();
1255     file->SetDetails(details);
1256     image->SetUri("uri");
1257     image->SetRemoteUri("remoteUri");
1258     data.AddRecord(image);
1259 
1260     auto systemDefinedRecord = std::make_shared<SystemDefinedRecord>();
1261     systemDefinedRecord->SetDetails(details);
1262     data.AddRecord(systemDefinedRecord);
1263 
1264     auto systemDefinedForm = std::make_shared<SystemDefinedForm>();
1265     systemDefinedForm->SetDetails(details);
1266     systemDefinedForm->SetFormId(123);
1267     systemDefinedForm->SetFormName("formName");
1268     systemDefinedForm->SetModule("module");
1269     systemDefinedForm->SetAbilityName("abilityName");
1270     systemDefinedForm->SetBundleName("bundleName");
1271     data.AddRecord(systemDefinedForm);
1272 
1273     auto applicationDefinedRecord = std::make_shared<ApplicationDefinedRecord>();
1274     applicationDefinedRecord->SetApplicationDefinedType("applicationDefinedType");
1275     std::vector<uint8_t> rawData = { 1, 2, 3, 4, 5 };
1276     applicationDefinedRecord->SetRawData(rawData);
1277     data.AddRecord(applicationDefinedRecord);
1278 
1279     std::shared_ptr<Object> obj = std::make_shared<Object>();
1280     obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
1281     obj->value_[FILE_URI_PARAM] = "http://demo.com";
1282     obj->value_[FILE_TYPE] = "abcdefg";
1283     auto record8 = std::make_shared<UnifiedRecord>(FILE_URI, obj);
1284     data.AddRecord(record8);
1285 
1286     auto record9 = std::make_shared<UnifiedRecord>(PNG, "http://demo.com");
1287     data.AddRecord(record9);
1288 
1289     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
1290     ASSERT_EQ(status, E_OK);
1291 
1292     QueryOption option2 = { .key = key };
1293     Summary summary;
1294     status = UdmfClient::GetInstance().GetSummary(option2, summary);
1295 
1296     auto size = text->GetSize();
1297     size += plainText->GetSize();
1298     size += file->GetSize();
1299     size += image->GetSize();
1300     size += systemDefinedRecord->GetSize();
1301     size += systemDefinedForm->GetSize();
1302     size += applicationDefinedRecord->GetSize();
1303     size += record8->GetSize();
1304     size += record9->GetSize();
1305 
1306     EXPECT_EQ(status, E_OK);
1307     EXPECT_EQ(summary.totalSize, size);
1308     EXPECT_EQ(summary.summary["general.text"], text->GetSize());
1309     EXPECT_EQ(summary.summary["general.plain-text"], plainText->GetSize());
1310     EXPECT_EQ(summary.summary["general.file"], file->GetSize() + record8->GetSize());
1311     EXPECT_EQ(summary.summary["general.image"], image->GetSize());
1312     EXPECT_EQ(summary.summary["SystemDefinedType"], systemDefinedRecord->GetSize());
1313     EXPECT_EQ(summary.summary["openharmony.form"], systemDefinedForm->GetSize());
1314     EXPECT_EQ(summary.summary["ApplicationDefinedType"], applicationDefinedRecord->GetSize());
1315     EXPECT_EQ(summary.summary["abcdefg"], 0);
1316     EXPECT_EQ(summary.summary["general.png"], record9->GetSize());
1317 
1318     LOG_INFO(UDMF_TEST, "GetSummary001 end.");
1319 }
1320 
1321 
1322 /**
1323 * @tc.name: GetSummary002
1324 * @tc.desc: Get summary with invalid key
1325 * @tc.type: FUNC
1326 */
1327 HWTEST_F(UdmfClientTest, GetSummary002, TestSize.Level1)
1328 {
1329     LOG_INFO(UDMF_FRAMEWORK, "GetSummary002 begin.");
1330 
1331     QueryOption option;
1332     Summary summary;
1333     auto status = UdmfClient::GetInstance().GetSummary(option, summary);
1334     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1335 
1336     option.key = "udmf";
1337     status = UdmfClient::GetInstance().GetSummary(option, summary);
1338     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1339 
1340     option.key = "odmf://";
1341     status = UdmfClient::GetInstance().GetSummary(option, summary);
1342     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1343 
1344     option.key = "udmf://drag";
1345     status = UdmfClient::GetInstance().GetSummary(option, summary);
1346     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1347 
1348     option.key = "udmf://123/bundle/group";
1349     status = UdmfClient::GetInstance().GetSummary(option, summary);
1350     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1351 
1352     option.key = "udmf://drag/bundle";
1353     status = UdmfClient::GetInstance().GetSummary(option, summary);
1354     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1355 
1356     option.key = "udmf://drag/bundle***/group";
1357     status = UdmfClient::GetInstance().GetSummary(option, summary);
1358     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1359 
1360     option.key = "udmf://drag/bundle/";
1361     status = UdmfClient::GetInstance().GetSummary(option, summary);
1362     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1363 
1364     option.key = "udmf://drag/bundle/group###";
1365     status = UdmfClient::GetInstance().GetSummary(option, summary);
1366     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1367 
1368     LOG_INFO(UDMF_FRAMEWORK, "GetSummary002 end.");
1369 }
1370 
1371 /**
1372 * @tc.name: AddPrivilege001
1373 * @tc.desc: Add privilege with valid params
1374 * @tc.type: FUNC
1375 */
1376 HWTEST_F(UdmfClientTest, AddPrivilege001, TestSize.Level1)
1377 {
1378     LOG_INFO(UDMF_TEST, "AddPrivilege001 begin.");
1379 
1380     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
1381     UnifiedData data;
1382     auto text = std::make_shared<Text>();
1383     UDDetails details;
1384     details.insert({ "udmf_key", "udmf_value" });
1385     text->SetDetails(details);
1386     data.AddRecord(text);
1387     std::string key;
1388     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
1389     ASSERT_EQ(status, E_OK);
1390 
1391     QueryOption option2 = { .key = key };
1392     Privilege privilege;
1393     SetHapToken2();
1394     privilege.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo2", 0);
1395     privilege.readPermission = "readPermission";
1396     privilege.writePermission = "writePermission";
1397     SetNativeToken("msdp_sa");
1398     status = UdmfClient::GetInstance().AddPrivilege(option2, privilege);
1399     ASSERT_EQ(status, E_OK);
1400 
1401     LOG_INFO(UDMF_TEST, "AddPrivilege001 end.");
1402 }
1403 
1404 /**
1405 * @tc.name: AddPrivilege002
1406 * @tc.desc: Add Privilege with invalid params
1407 * @tc.type: FUNC
1408 */
1409 HWTEST_F(UdmfClientTest, AddPrivilege002, TestSize.Level1)
1410 {
1411     LOG_INFO(UDMF_FRAMEWORK, "AddPrivilege002 begin.");
1412 
1413     QueryOption option;
1414     Privilege privilege;
1415     auto status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
1416     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1417 
1418     option.key = "udmf";
1419     status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
1420     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1421 
1422     option.key = "odmf://";
1423     status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
1424     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1425 
1426     option.key = "udmf://drag";
1427     status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
1428     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1429 
1430     option.key = "udmf://123/bundle/group";
1431     status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
1432     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1433 
1434     option.key = "udmf://drag/bundle";
1435     status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
1436     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1437 
1438     option.key = "udmf://drag/bundle***/group";
1439     status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
1440     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1441 
1442     option.key = "udmf://drag/bundle/";
1443     status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
1444     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1445 
1446     option.key = "udmf://drag/bundle/group###";
1447     status = UdmfClient::GetInstance().AddPrivilege(option, privilege);
1448     EXPECT_EQ(status, E_INVALID_PARAMETERS);
1449 
1450     LOG_INFO(UDMF_FRAMEWORK, "AddPrivilege002 end.");
1451 }
1452 
1453 /**
1454 * @tc.name: AddPrivilege003
1455 * @tc.desc: Add privilege with invalid intention
1456 * @tc.type: FUNC
1457 */
1458 HWTEST_F(UdmfClientTest, AddPrivilege003, TestSize.Level1)
1459 {
1460     LOG_INFO(UDMF_TEST, "AddPrivilege003 begin.");
1461 
1462     CustomOption option1 = { .intention = Intention::UD_INTENTION_DATA_HUB };
1463     UnifiedData data;
1464     auto text = std::make_shared<Text>();
1465     UDDetails details;
1466     details.insert({ "udmf_key", "udmf_value" });
1467     text->SetDetails(details);
1468     data.AddRecord(text);
1469     std::string key;
1470     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
1471     ASSERT_EQ(status, E_OK);
1472 
1473     QueryOption option2 = { .key = key };
1474     Privilege privilege;
1475     SetHapToken2();
1476     privilege.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo2", 0);
1477     privilege.readPermission = "readPermission";
1478     privilege.writePermission = "writePermission";
1479     SetNativeToken("msdp_sa");
1480     status = UdmfClient::GetInstance().AddPrivilege(option2, privilege);
1481     ASSERT_EQ(status, E_NO_PERMISSION);
1482     LOG_INFO(UDMF_TEST, "AddPrivilege003 end.");
1483 }
1484 
1485 /**
1486 * @tc.name: AddPrivilege004
1487 * @tc.desc: Add privilege for unauthorized process with valid params
1488 * @tc.type: FUNC
1489 */
1490 HWTEST_F(UdmfClientTest, AddPrivilege004, TestSize.Level1)
1491 {
1492     LOG_INFO(UDMF_TEST, "AddPrivilege004 begin.");
1493 
1494     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
1495     UnifiedData data;
1496     auto text = std::make_shared<Text>();
1497     UDDetails details;
1498     details.insert({ "udmf_key", "udmf_value" });
1499     text->SetDetails(details);
1500     data.AddRecord(text);
1501     std::string key;
1502     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
1503     ASSERT_EQ(status, E_OK);
1504 
1505     QueryOption option2 = { .key = key };
1506     Privilege privilege;
1507     SetHapToken2();
1508     privilege.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo2", 0);
1509     privilege.readPermission = "readPermission";
1510     privilege.writePermission = "writePermission";
1511     SetNativeToken("foundation");
1512     status = UdmfClient::GetInstance().AddPrivilege(option2, privilege);
1513     ASSERT_EQ(status, E_NO_PERMISSION);
1514     LOG_INFO(UDMF_TEST, "AddPrivilege004 end.");
1515 }
1516 
1517 /**
1518 * @tc.name: AddPrivilege005
1519 * @tc.desc: Add privilege with valid params
1520 * @tc.type: FUNC
1521 */
1522 HWTEST_F(UdmfClientTest, AddPrivilege005, TestSize.Level1)
1523 {
1524     LOG_INFO(UDMF_TEST, "AddPrivilege005 begin.");
1525 
1526     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
1527     UnifiedData data;
1528     auto text = std::make_shared<Text>();
1529     UDDetails details;
1530     details.insert({ "udmf_key", "udmf_value" });
1531     text->SetDetails(details);
1532     data.AddRecord(text);
1533     std::string key;
1534     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
1535     ASSERT_EQ(status, E_OK);
1536 
1537     QueryOption option2 = { .key = key };
1538     Privilege privilege;
1539     SetHapToken2();
1540     privilege.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo2", 0);
1541     privilege.readPermission = "readAndKeep";
1542     privilege.writePermission = "writePermission";
1543     SetNativeToken("msdp_sa");
1544     status = UdmfClient::GetInstance().AddPrivilege(option2, privilege);
1545     ASSERT_EQ(status, E_OK);
1546 
1547     SetHapToken2();
1548     UnifiedData data1;
1549     status = UdmfClient::GetInstance().GetData(option2, data1);
1550     ASSERT_EQ(status, E_OK);
1551 
1552     std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME));
1553     UnifiedData data2;
1554     status = UdmfClient::GetInstance().GetData(option2, data2);
1555     ASSERT_EQ(status, E_OK);
1556     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
1557     ASSERT_NE(record2, nullptr);
1558     auto type = record2->GetType();
1559     ASSERT_EQ(type, UDType::TEXT);
1560     auto text2 = static_cast<Text *>(record2.get());
1561     ASSERT_NE(text2, nullptr);
1562     CompareDetails(text2->GetDetails());   // Can be read repeatedly.
1563     LOG_INFO(UDMF_TEST, "AddPrivilege005 end.");
1564 }
1565 
1566 /**
1567 * @tc.name: GetSelfData001
1568 * @tc.desc: Set File record with valid params and no add privilege and get data by self
1569 * @tc.type: FUNC
1570 */
1571 HWTEST_F(UdmfClientTest, GetSelfData001, TestSize.Level1)
1572 {
1573     LOG_INFO(UDMF_TEST, "GetSelfData001 begin.");
1574 
1575     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
1576     UnifiedData data1;
1577     std::string key;
1578     auto file1 = std::make_shared<File>();
1579     file1->SetRemoteUri("remoteUri");
1580     UDDetails details1;
1581     details1.insert({ "udmf_key", "udmf_value" });
1582     file1->SetDetails(details1);
1583     data1.AddRecord(file1);
1584     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
1585     ASSERT_EQ(status, E_OK);
1586 
1587     QueryOption option2 = { .key = key };
1588     UnifiedData data2;
1589     status = UdmfClient::GetInstance().GetData(option2, data2);
1590     ASSERT_EQ(status, E_OK);
1591 
1592     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
1593     ASSERT_NE(record2, nullptr);
1594     auto type = record2->GetType();
1595     ASSERT_EQ(type, UDType::FILE);
1596 
1597     auto file2 = static_cast<File *>(record2.get());
1598     ASSERT_NE(file2, nullptr);
1599     EXPECT_EQ(file1->GetRemoteUri(), file2->GetRemoteUri());
1600     CompareDetails(file2->GetDetails());
1601 
1602     GetEmptyData(option2);
1603 
1604     LOG_INFO(UDMF_TEST, "GetSelfData001 end.");
1605 }
1606 
1607 /**
1608 * @tc.name: GetSelfData002
1609 * @tc.desc: Set File record with valid params and add privilege and get data by self
1610 * @tc.type: FUNC
1611 */
1612 HWTEST_F(UdmfClientTest, GetSelfData002, TestSize.Level1)
1613 {
1614     LOG_INFO(UDMF_TEST, "GetSelfData002 begin.");
1615 
1616     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
1617     UnifiedData data1;
1618     std::string key;
1619     auto file1 = std::make_shared<File>();
1620     file1->SetRemoteUri("remoteUri");
1621     UDDetails details1;
1622     details1.insert({ "udmf_key", "udmf_value" });
1623     file1->SetDetails(details1);
1624     data1.AddRecord(file1);
1625     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
1626     ASSERT_EQ(status, E_OK);
1627 
1628     QueryOption option2 = { .key = key };
1629     AddPrivilege(option2);
1630     SetHapToken1();
1631     UnifiedData data2;
1632     status = UdmfClient::GetInstance().GetData(option2, data2);
1633     ASSERT_EQ(status, E_OK);
1634 
1635     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
1636     ASSERT_NE(record2, nullptr);
1637     auto type = record2->GetType();
1638     ASSERT_EQ(type, UDType::FILE);
1639 
1640     auto file2 = static_cast<File *>(record2.get());
1641     ASSERT_NE(file2, nullptr);
1642     EXPECT_EQ(file1->GetRemoteUri(), file2->GetRemoteUri());
1643     CompareDetails(file2->GetDetails());
1644 
1645     GetEmptyData(option2);
1646 
1647     LOG_INFO(UDMF_TEST, "GetSelfData002 end.");
1648 }
1649 
1650 /**
1651 * @tc.name: SetData021
1652 * @tc.desc: Set datas with intention ${UD_INTENTION_DATA_HUB} and manually check db is cleared before set or not
1653 * @tc.type: FUNC
1654 */
1655 HWTEST_F(UdmfClientTest, SetData021, TestSize.Level1)
1656 {
1657     LOG_INFO(UDMF_TEST, "SetData021 begin.");
1658     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
1659     std::vector<UnifiedData> unifiedDataSet;
1660     auto status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
1661     ASSERT_EQ(status, E_OK);
1662     unifiedDataSet.clear();
1663     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
1664     ASSERT_EQ(status, E_OK);
1665     auto originSize = unifiedDataSet.size();
1666     unifiedDataSet.clear();
1667 
1668     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
1669     UnifiedData data1;
1670     auto plainText1 = std::make_shared<PlainText>();
1671     plainText1->SetContent("content1");
1672     data1.AddRecord(plainText1);
1673     std::string key;
1674     status = UdmfClient::GetInstance().SetData(customOption, data1, key);
1675     ASSERT_EQ(status, E_OK);
1676     UnifiedData data2;
1677     plainText1->SetContent("content2");
1678     data2.AddRecord(plainText1);
1679     status = UdmfClient::GetInstance().SetData(customOption, data2, key);
1680     ASSERT_EQ(status, E_OK);
1681 
1682     SetHapToken2();
1683     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
1684     ASSERT_EQ(status, E_OK);
1685     ASSERT_EQ(unifiedDataSet.size(), originSize + 2);
1686     LOG_INFO(UDMF_TEST, "SetData021 end.");
1687 }
1688 
1689 /**
1690 * @tc.name: UpdateData001
1691 * @tc.desc: Update data with invalid params
1692 * @tc.type: FUNC
1693 */
1694 HWTEST_F(UdmfClientTest, UpdateData001, TestSize.Level1)
1695 {
1696     LOG_INFO(UDMF_TEST, "UpdateData001 begin.");
1697 
1698     UnifiedData data;
1699     QueryOption queryOption = { .key = "" };
1700     auto status = UdmfClient::GetInstance().UpdateData(queryOption, data);
1701     ASSERT_EQ(status, E_INVALID_PARAMETERS);
1702 
1703     queryOption = { .key = "udmf://drag/ohos.test.demo1/abcde" };
1704     status = UdmfClient::GetInstance().UpdateData(queryOption, data);
1705     ASSERT_EQ(status, E_INVALID_PARAMETERS);
1706 
1707     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
1708     UnifiedData data1;
1709     auto plainText1 = std::make_shared<PlainText>();
1710     plainText1->SetContent("content1");
1711     data1.AddRecord(plainText1);
1712     std::string key;
1713     status = UdmfClient::GetInstance().SetData(customOption, data1, key);
1714     ASSERT_EQ(status, E_OK);
1715 
1716     queryOption = { .key = key };
1717     SetHapToken2();
1718     status = UdmfClient::GetInstance().UpdateData(queryOption, data);
1719     ASSERT_EQ(status, E_INVALID_PARAMETERS);
1720     LOG_INFO(UDMF_TEST, "UpdateData001 end.");
1721 }
1722 
1723 /**
1724 * @tc.name: UpdateData002
1725 * @tc.desc: Update data with valid params
1726 * @tc.type: FUNC
1727 */
1728 HWTEST_F(UdmfClientTest, UpdateData002, TestSize.Level1)
1729 {
1730     LOG_INFO(UDMF_TEST, "UpdateData002 begin.");
1731 
1732     UnifiedData data;
1733     auto plainText = std::make_shared<PlainText>();
1734     plainText->SetContent("content");
1735     data.AddRecord(plainText);
1736 
1737     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
1738     UnifiedData data1;
1739     auto plainText1 = std::make_shared<PlainText>();
1740     plainText1->SetContent("content1");
1741     data1.AddRecord(plainText1);
1742     std::string key;
1743     auto status = UdmfClient::GetInstance().SetData(customOption, data1, key);
1744 
1745     ASSERT_EQ(status, E_OK);
1746     QueryOption queryOption = { .key = key };
1747     SetHapToken2();
1748     status = UdmfClient::GetInstance().UpdateData(queryOption, data);
1749     ASSERT_EQ(status, E_INVALID_PARAMETERS);
1750 
1751     SetHapToken1();
1752     status = UdmfClient::GetInstance().UpdateData(queryOption, data);
1753     ASSERT_EQ(status, E_OK);
1754 
1755     std::vector<UnifiedData> dataSet;
1756     status = UdmfClient::GetInstance().GetBatchData(queryOption, dataSet);
1757     std::shared_ptr<UnifiedRecord> record2 = dataSet[0].GetRecordAt(0);
1758     ASSERT_NE(record2, nullptr);
1759     auto type = record2->GetType();
1760     ASSERT_EQ(type, UDType::PLAIN_TEXT);
1761     auto plainText2 = static_cast<PlainText *>(record2.get());
1762     ASSERT_EQ(plainText2->GetContent(), "content");
1763 
1764     LOG_INFO(UDMF_TEST, "UpdateData002 end.");
1765 }
1766 
1767 /**
1768 * @tc.name: OH_Udmf_GetBatchData001
1769 * @tc.desc: GetBatchData data with valid params
1770 * @tc.type: FUNC
1771 */
1772 HWTEST_F(UdmfClientTest, OH_Udmf_GetBatchData001, TestSize.Level1)
1773 {
1774     LOG_INFO(UDMF_TEST, "OH_Udmf_GetBatchData001 begin.");
1775 
1776     UnifiedData data;
1777     auto plainText = std::make_shared<PlainText>();
1778     plainText->SetContent("content");
1779     data.AddRecord(plainText);
1780     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB,
1781         .visibility = Visibility::VISIBILITY_OWN_PROCESS };
1782     std::string key;
1783     auto status = UdmfClient::GetInstance().SetData(customOption, data, key);
1784     ASSERT_EQ(status, E_OK);
1785 
1786     QueryOption queryOption = { .key = key, .intention = UD_INTENTION_DATA_HUB };
1787     std::vector<UnifiedData> dataSet;
1788     status = UdmfClient::GetInstance().GetBatchData(queryOption, dataSet);
1789     std::shared_ptr<UnifiedRecord> record = dataSet[0].GetRecordAt(0);
1790     ASSERT_NE(record, nullptr);
1791     auto type = record->GetType();
1792     ASSERT_EQ(type, UDType::PLAIN_TEXT);
1793     auto plainText2 = static_cast<PlainText *>(record.get());
1794     ASSERT_EQ(plainText2->GetContent(), "content");
1795     std::vector<UnifiedData> dataDelete;
1796     status = UdmfClient::GetInstance().DeleteData(queryOption, dataDelete);
1797     ASSERT_EQ(status, E_OK);
1798     LOG_INFO(UDMF_TEST, "OH_Udmf_GetBatchData001 end.");
1799 }
1800 
1801 /**
1802 * @tc.name: OH_Udmf_GetBatchData002
1803 * @tc.desc: GetBatchData data with valid params
1804 * @tc.type: FUNC
1805 */
1806 HWTEST_F(UdmfClientTest, OH_Udmf_GetBatchData002, TestSize.Level1)
1807 {
1808     LOG_INFO(UDMF_TEST, "OH_Udmf_GetBatchData002 begin.");
1809     SetHapToken1();
1810     UnifiedData data;
1811     auto plainText = std::make_shared<PlainText>();
1812     plainText->SetContent("content");
1813     data.AddRecord(plainText);
1814     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB,
1815         .visibility = Visibility::VISIBILITY_OWN_PROCESS };
1816     std::string key;
1817     auto status = UdmfClient::GetInstance().SetData(customOption, data, key);
1818     ASSERT_EQ(status, E_OK);
1819 
1820     SetHapToken2();
1821     QueryOption queryOption = { .key = key, .intention = UD_INTENTION_DATA_HUB };
1822     std::vector<UnifiedData> dataSet;
1823     status = UdmfClient::GetInstance().GetBatchData(queryOption, dataSet);
1824     ASSERT_EQ(status, E_OK);
1825     ASSERT_EQ(dataSet.size(), 0);
1826     SetHapToken1();
1827     std::vector<UnifiedData> dataDelete;
1828     status = UdmfClient::GetInstance().DeleteData(queryOption, dataDelete);
1829     ASSERT_EQ(status, E_OK);
1830     ASSERT_EQ(dataDelete.size(), 1);
1831     LOG_INFO(UDMF_TEST, "OH_Udmf_GetBatchData002 end.");
1832 }
1833 
1834 /**
1835 * @tc.name: OH_Udmf_GetBatchData003
1836 * @tc.desc: GetBatchData data with valid params
1837 * @tc.type: FUNC
1838 */
1839 HWTEST_F(UdmfClientTest, OH_Udmf_GetBatchData003, TestSize.Level1)
1840 {
1841     LOG_INFO(UDMF_TEST, "OH_Udmf_GetBatchData003 begin.");
1842 
1843     UnifiedData data;
1844     auto plainText = std::make_shared<PlainText>();
1845     plainText->SetContent("content");
1846     data.AddRecord(plainText);
1847     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB,
1848         .visibility = Visibility::VISIBILITY_ALL };
1849     std::string key;
1850     auto status = UdmfClient::GetInstance().SetData(customOption, data, key);
1851     ASSERT_EQ(status, E_OK);
1852 
1853     QueryOption queryOption = { .key = key, .intention = UD_INTENTION_DATA_HUB };
1854     std::vector<UnifiedData> dataSet;
1855     status = UdmfClient::GetInstance().GetBatchData(queryOption, dataSet);
1856     std::shared_ptr<UnifiedRecord> record = dataSet[0].GetRecordAt(0);
1857     ASSERT_NE(record, nullptr);
1858     auto type = record->GetType();
1859     ASSERT_EQ(type, UDType::PLAIN_TEXT);
1860     auto plainText2 = static_cast<PlainText *>(record.get());
1861     ASSERT_EQ(plainText2->GetContent(), "content");
1862     std::vector<UnifiedData> dataDelete;
1863     status = UdmfClient::GetInstance().DeleteData(queryOption, dataDelete);
1864     ASSERT_EQ(status, E_OK);
1865     ASSERT_EQ(dataDelete.size(), 1);
1866     LOG_INFO(UDMF_TEST, "OH_Udmf_GetBatchData003 end.");
1867 }
1868 
1869 /**
1870 * @tc.name: OH_Udmf_GetBatchData004
1871 * @tc.desc: GetBatchData data with valid params
1872 * @tc.type: FUNC
1873 */
1874 HWTEST_F(UdmfClientTest, OH_Udmf_GetBatchData004, TestSize.Level1)
1875 {
1876     LOG_INFO(UDMF_TEST, "OH_Udmf_GetBatchData004 begin.");
1877     SetHapToken1();
1878     UnifiedData data;
1879     auto plainText = std::make_shared<PlainText>();
1880     plainText->SetContent("content");
1881     data.AddRecord(plainText);
1882     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB,
1883         .visibility = Visibility::VISIBILITY_ALL };
1884     std::string key;
1885     auto status = UdmfClient::GetInstance().SetData(customOption, data, key);
1886     ASSERT_EQ(status, E_OK);
1887 
1888     SetHapToken2();
1889     QueryOption queryOption = { .key = key, .intention = UD_INTENTION_DATA_HUB };
1890     std::vector<UnifiedData> dataSet;
1891     status = UdmfClient::GetInstance().GetBatchData(queryOption, dataSet);
1892     std::shared_ptr<UnifiedRecord> record = dataSet[0].GetRecordAt(0);
1893     ASSERT_NE(record, nullptr);
1894     auto type = record->GetType();
1895     ASSERT_EQ(type, UDType::PLAIN_TEXT);
1896     auto plainText2 = static_cast<PlainText *>(record.get());
1897     ASSERT_EQ(plainText2->GetContent(), "content");
1898     SetHapToken1();
1899     std::vector<UnifiedData> dataDelete;
1900     status = UdmfClient::GetInstance().DeleteData(queryOption, dataDelete);
1901     ASSERT_EQ(status, E_OK);
1902     ASSERT_EQ(dataDelete.size(), 1);
1903     LOG_INFO(UDMF_TEST, "OH_Udmf_GetBatchData004 end.");
1904 }
1905 
1906 /**
1907 * @tc.name: QueryData001
1908 * @tc.desc: Query data with invalid params
1909 * @tc.type: FUNC
1910 */
1911 HWTEST_F(UdmfClientTest, QueryData001, TestSize.Level1)
1912 {
1913     LOG_INFO(UDMF_TEST, "QueryData001 begin.");
1914     std::vector<UnifiedData> unifiedDataSet;
1915     QueryOption queryOption = {};
1916     auto status = UdmfClient::GetInstance().GetBatchData(queryOption, unifiedDataSet);
1917     ASSERT_EQ(status, E_INVALID_PARAMETERS);
1918 
1919     queryOption = { .key = "udmf://drag/ohos.test.demo1/abcde" };
1920     status = UdmfClient::GetInstance().GetBatchData(queryOption, unifiedDataSet);
1921     ASSERT_EQ(status, E_INVALID_PARAMETERS);
1922 
1923     queryOption = { .intention = UD_INTENTION_DRAG };
1924     status = UdmfClient::GetInstance().GetBatchData(queryOption, unifiedDataSet);
1925     ASSERT_EQ(status, E_INVALID_PARAMETERS);
1926 
1927     queryOption = { .key = "udmf://DataHub/ohos.test.demo1/abcde", .intention = UD_INTENTION_DRAG };
1928     status = UdmfClient::GetInstance().GetBatchData(queryOption, unifiedDataSet);
1929     ASSERT_EQ(status, E_INVALID_PARAMETERS);
1930 
1931     queryOption = { .key = "udmf://drag/ohos.test.demo1/abcde", .intention = UD_INTENTION_DATA_HUB };
1932     status = UdmfClient::GetInstance().GetBatchData(queryOption, unifiedDataSet);
1933     ASSERT_EQ(status, E_INVALID_PARAMETERS);
1934     LOG_INFO(UDMF_TEST, "QueryData001 end.");
1935 }
1936 
1937 /**
1938 * @tc.name: QueryData002
1939 * @tc.desc: Query data with valid params
1940 * @tc.type: FUNC
1941 */
1942 HWTEST_F(UdmfClientTest, QueryData002, TestSize.Level1)
1943 {
1944     LOG_INFO(UDMF_TEST, "QueryData002 begin.");
1945 
1946     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
1947     std::vector<UnifiedData> unifiedDataSet;
1948     auto status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
1949     ASSERT_EQ(status, E_OK);
1950     unifiedDataSet.clear();
1951     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
1952     ASSERT_EQ(status, E_OK);
1953     auto originSize = unifiedDataSet.size();
1954     unifiedDataSet.clear();
1955 
1956     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
1957     UnifiedData data;
1958     auto plainText = std::make_shared<PlainText>();
1959     plainText->SetContent("content1");
1960     data.AddRecord(plainText);
1961     std::string key;
1962     status = UdmfClient::GetInstance().SetData(customOption, data, key);
1963     ASSERT_EQ(status, E_OK);
1964 
1965     query = { .key = key };
1966     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
1967     ASSERT_EQ(status, E_OK);
1968     auto size = static_cast<int32_t>(unifiedDataSet.size());
1969     ASSERT_EQ(size, 1);
1970     std::shared_ptr<UnifiedRecord> record2 = unifiedDataSet[0].GetRecordAt(0);
1971     ASSERT_NE(record2, nullptr);
1972     auto type = record2->GetType();
1973     ASSERT_EQ(type, UDType::PLAIN_TEXT);
1974     auto plainText2 = static_cast<PlainText *>(record2.get());
1975     ASSERT_EQ(plainText2->GetContent(), "content1");
1976 
1977     UnifiedData data2;
1978     plainText = std::make_shared<PlainText>();
1979     plainText->SetContent("content2");
1980     data2.AddRecord(plainText);
1981     status = UdmfClient::GetInstance().SetData(customOption, data2, key);
1982     ASSERT_EQ(status, E_OK);
1983 
1984     unifiedDataSet.clear();
1985     query = { .key = key, .intention = UD_INTENTION_DATA_HUB };
1986     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
1987     ASSERT_EQ(status, E_OK);
1988     size = static_cast<int32_t>(unifiedDataSet.size());
1989     ASSERT_EQ(size, 1);
1990     record2 = unifiedDataSet[0].GetRecordAt(0);
1991     ASSERT_NE(record2, nullptr);
1992     type = record2->GetType();
1993     ASSERT_EQ(type, UDType::PLAIN_TEXT);
1994     plainText2 = static_cast<PlainText *>(record2.get());
1995     ASSERT_EQ(plainText2->GetContent(), "content2");
1996 
1997     unifiedDataSet.clear();
1998     query = { .intention = UD_INTENTION_DATA_HUB };
1999     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
2000     ASSERT_EQ(status, E_OK);
2001     ASSERT_EQ(unifiedDataSet.size(), originSize + 2);
2002 
2003     LOG_INFO(UDMF_TEST, "QueryData002 end.");
2004 }
2005 
2006 /**
2007 * @tc.name: DeleteData001
2008 * @tc.desc: Delete data with invalid params
2009 * @tc.type: FUNC
2010 */
2011 HWTEST_F(UdmfClientTest, DeleteData001, TestSize.Level1)
2012 {
2013     LOG_INFO(UDMF_TEST, "DeleteData001 begin.");
2014     std::vector<UnifiedData> unifiedDataSet;
2015     QueryOption queryOption = {};
2016     auto status = UdmfClient::GetInstance().DeleteData(queryOption, unifiedDataSet);
2017     ASSERT_EQ(status, E_INVALID_PARAMETERS);
2018 
2019     queryOption = { .key = "udmf://drag/ohos.test.demo1/abcde" };
2020     status = UdmfClient::GetInstance().DeleteData(queryOption, unifiedDataSet);
2021     ASSERT_EQ(status, E_INVALID_PARAMETERS);
2022 
2023     queryOption = { .intention = UD_INTENTION_DRAG };
2024     status = UdmfClient::GetInstance().DeleteData(queryOption, unifiedDataSet);
2025     ASSERT_EQ(status, E_INVALID_PARAMETERS);
2026 
2027     queryOption = { .key = "udmf://DataHub/ohos.test.demo1/abcde", .intention = UD_INTENTION_DRAG };
2028     status = UdmfClient::GetInstance().DeleteData(queryOption, unifiedDataSet);
2029     ASSERT_EQ(status, E_INVALID_PARAMETERS);
2030 
2031     queryOption = { .key = "udmf://drag/ohos.test.demo1/abcde", .intention = UD_INTENTION_DATA_HUB };
2032     status = UdmfClient::GetInstance().DeleteData(queryOption, unifiedDataSet);
2033     ASSERT_EQ(status, E_INVALID_PARAMETERS);
2034     LOG_INFO(UDMF_TEST, "DeleteData001 end.");
2035 }
2036 
2037 /**
2038 * @tc.name: DeleteData002
2039 * @tc.desc: Delete data with valid params
2040 * @tc.type: FUNC
2041 */
2042 HWTEST_F(UdmfClientTest, DeleteData002, TestSize.Level1)
2043 {
2044     LOG_INFO(UDMF_TEST, "DeleteData002 begin.");
2045 
2046     CustomOption customOption = { .intention = UD_INTENTION_DATA_HUB };
2047     UnifiedData data;
2048     auto plainText = std::make_shared<PlainText>();
2049     plainText->SetContent("content1");
2050     data.AddRecord(plainText);
2051     std::string key;
2052     auto status = UdmfClient::GetInstance().SetData(customOption, data, key);
2053     ASSERT_EQ(status, E_OK);
2054     status = UdmfClient::GetInstance().SetData(customOption, data, key);
2055     ASSERT_EQ(status, E_OK);
2056     status = UdmfClient::GetInstance().SetData(customOption, data, key);
2057     ASSERT_EQ(status, E_OK);
2058 
2059     QueryOption queryOption = { .key = key };
2060     SetHapToken2();
2061 
2062     std::vector<UnifiedData> unifiedDataSet;
2063     status = UdmfClient::GetInstance().DeleteData(queryOption, unifiedDataSet);
2064     ASSERT_EQ(status, E_OK);
2065     ASSERT_EQ(0, unifiedDataSet.size());
2066 
2067     SetHapToken1();
2068     status = UdmfClient::GetInstance().DeleteData(queryOption, unifiedDataSet);
2069     ASSERT_EQ(status, E_OK);
2070     ASSERT_EQ(1, unifiedDataSet.size());
2071 
2072     unifiedDataSet.clear();
2073     status = UdmfClient::GetInstance().GetBatchData(queryOption, unifiedDataSet);
2074     ASSERT_TRUE(unifiedDataSet.empty());
2075 
2076     queryOption = { .intention = UD_INTENTION_DATA_HUB };
2077     unifiedDataSet.clear();
2078     status = UdmfClient::GetInstance().GetBatchData(queryOption, unifiedDataSet);
2079     ASSERT_TRUE(!unifiedDataSet.empty());
2080 
2081     status = UdmfClient::GetInstance().DeleteData(queryOption, unifiedDataSet);
2082     ASSERT_EQ(status, E_OK);
2083 
2084     unifiedDataSet.clear();
2085     queryOption = { .key = key };
2086     status = UdmfClient::GetInstance().GetBatchData(queryOption, unifiedDataSet);
2087     ASSERT_TRUE(unifiedDataSet.empty());
2088     LOG_INFO(UDMF_TEST, "DeleteData002 end.");
2089 }
2090 
2091 /**
2092 * @tc.name: SetData022
2093 * @tc.desc: Set two over 2MB record of data with valid params and get data
2094 * @tc.type: FUNC
2095 */
2096 HWTEST_F(UdmfClientTest, SetData022, TestSize.Level1)
2097 {
2098     LOG_INFO(UDMF_TEST, "SetData022 begin.");
2099 
2100     CustomOption customOption = { .intention = Intention::UD_INTENTION_DRAG };
2101     UnifiedData inputData;
2102     std::string key;
2103     UDDetails details;
2104     std::string value;
2105     int64_t maxSize = 512 * 1024;
2106     for (int64_t i = 0; i < maxSize; ++i) {
2107         value += "11";
2108     }
2109     details.insert({ value, value });
2110     details.insert({ "udmf_key", "udmf_value" });
2111     auto text = std::make_shared<Text>();
2112     text->SetDetails(details);
2113     for (int i = 0; i < 2; ++i) {
2114         inputData.AddRecord(text);
2115     }
2116     UnifiedDataHelper::SetRootPath("/data/udmf_test/");
2117     auto status = UdmfClient::GetInstance().SetData(customOption, inputData, key);
2118     ASSERT_EQ(status, E_OK);
2119 
2120     QueryOption queryOption = { .key = key };
2121     UnifiedData outputData;
2122     status = UdmfClient::GetInstance().GetData(queryOption, outputData);
2123     ASSERT_EQ(status, E_OK);
2124     UnifiedDataHelper::SetRootPath("");
2125 
2126     LOG_INFO(UDMF_TEST, "SetData022 end.");
2127 }
2128 
2129 /**
2130 * @tc.name: SetData023
2131 * @tc.desc: Set 200MB record of data with valid params and get data
2132 * @tc.type: FUNC
2133 */
2134 HWTEST_F(UdmfClientTest, SetData023, TestSize.Level1)
2135 {
2136     LOG_INFO(UDMF_TEST, "SetData023 begin.");
2137 
2138     CustomOption customOption = { .intention = Intention::UD_INTENTION_DRAG };
2139     UnifiedData inputData;
2140     std::string key;
2141     UDDetails details;
2142     std::string value;
2143     int64_t maxSize = 512 * 1024;
2144     for (int64_t i = 0; i < maxSize; ++i) {
2145         value += "11";
2146     }
2147     details.insert({ value, value });
2148     Text text;
2149     text.SetDetails(details);
2150     for (int64_t i = 0; i < 100; ++i) {
2151         auto record = std::make_shared<Text>();
2152         inputData.AddRecord(record);
2153     }
2154     auto records = inputData.GetRecords();
2155     LOG_INFO(UDMF_TEST, "SetData023 inputData.size() = %{public}zu", records.size());
2156     UnifiedDataHelper::SetRootPath("/data/udmf_test/");
2157     auto status = UdmfClient::GetInstance().SetData(customOption, inputData, key);
2158     ASSERT_EQ(status, E_OK);
2159 
2160     QueryOption queryOption = { .key = key };
2161     UnifiedData outputData;
2162     status = UdmfClient::GetInstance().GetData(queryOption, outputData);
2163     ASSERT_EQ(status, E_OK);
2164     UnifiedDataHelper::SetRootPath("");
2165 
2166     LOG_INFO(UDMF_TEST, "SetData023 end.");
2167 }
2168 
2169 /**
2170 * @tc.name: SetData024
2171 * @tc.desc: Set over 200MB record of data with valid params and get data
2172 * @tc.type: FUNC
2173 */
2174 HWTEST_F(UdmfClientTest, SetData024, TestSize.Level1)
2175 {
2176     LOG_INFO(UDMF_TEST, "SetData024 begin.");
2177 
2178     CustomOption customOption = { .intention = Intention::UD_INTENTION_DRAG };
2179     UnifiedData inputData;
2180     std::string key;
2181     UDDetails details;
2182     std::string value;
2183     int64_t maxSize = 512 * 1024;
2184     for (int64_t i = 0; i < maxSize; ++i) {
2185         value += "11";
2186     }
2187     details.insert({ value, value });
2188     auto text = std::make_shared<Text>();
2189     text->SetDetails(details);
2190     for (int64_t i = 0; i < 101; ++i) {
2191         inputData.AddRecord(text);
2192     }
2193     auto records = inputData.GetRecords();
2194     LOG_INFO(UDMF_TEST, "SetData024 inputData.size() = %{public}zu", records.size());
2195 
2196     UnifiedDataHelper::SetRootPath("/data/udmf_test/");
2197     auto status = UdmfClient::GetInstance().SetData(customOption, inputData, key);
2198     ASSERT_EQ(status, E_INVALID_PARAMETERS);
2199     UnifiedDataHelper::SetRootPath("");
2200 
2201     LOG_INFO(UDMF_TEST, "SetData024 end.");
2202 }
2203 
2204 /**
2205 * @tc.name: SetData025
2206 * @tc.desc: Set PixelMap record with valid params and get data
2207 * @tc.type: FUNC
2208 */
2209 HWTEST_F(UdmfClientTest, SetData025, TestSize.Level1)
2210 {
2211     LOG_INFO(UDMF_TEST, "SetData025 begin.");
2212 
2213     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2214     UnifiedData data1;
2215     std::string key;
2216     auto systemDefinedPixelMap1 = std::make_shared<SystemDefinedPixelMap>();
2217     UDDetails details1;
2218     details1.insert({ "udmf_key", "udmf_value" });
2219     systemDefinedPixelMap1->SetDetails(details1);
2220     std::vector<uint8_t> rawData1 = { 1, 2, 3, 4, 5 };
2221 
2222     systemDefinedPixelMap1->SetRawData(rawData1);
2223     data1.AddRecord(systemDefinedPixelMap1);
2224     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
2225     ASSERT_EQ(status, E_OK);
2226 
2227     QueryOption option2 = { .key = key };
2228     AddPrivilege(option2);
2229     SetHapToken2();
2230     UnifiedData data2;
2231     status = UdmfClient::GetInstance().GetData(option2, data2);
2232     ASSERT_EQ(status, E_OK);
2233 
2234     std::shared_ptr<UnifiedRecord> record2 = data2.GetRecordAt(0);
2235     ASSERT_NE(record2, nullptr);
2236     auto type = record2->GetType();
2237     ASSERT_EQ(type, UDType::SYSTEM_DEFINED_PIXEL_MAP);
2238 
2239     auto systemDefinedRecord2 = static_cast<SystemDefinedRecord *>(record2.get());
2240     ASSERT_NE(systemDefinedRecord2, nullptr);
2241     CompareDetails(systemDefinedRecord2->GetDetails());
2242 
2243     auto systemDefinedPixelMap2 = static_cast<SystemDefinedPixelMap *>(record2.get());
2244     ASSERT_NE(systemDefinedPixelMap2, nullptr);
2245     auto rawData2 = systemDefinedPixelMap2->GetRawData();
2246     EXPECT_EQ(rawData1.size(), rawData2.size());
2247     for (uint32_t i = 0; i < rawData1.size(); ++i) {
2248         EXPECT_EQ(rawData1[i], rawData2[i]);
2249     }
2250 
2251     LOG_INFO(UDMF_TEST, "SetData025 end.");
2252 }
2253 
2254 /**
2255 * @tc.name: SetData026
2256 * @tc.desc: Set more record with valid params and get data
2257 * @tc.type: FUNC
2258 */
2259 HWTEST_F(UdmfClientTest, SetData026, TestSize.Level1)
2260 {
2261     LOG_INFO(UDMF_TEST, "SetData026 begin.");
2262 
2263     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2264     UnifiedData data1;
2265     std::string key;
2266     auto systemDefinedPixelMap1 = std::make_shared<SystemDefinedPixelMap>();
2267     UDDetails details1;
2268     details1.insert({ "udmf_key", "udmf_value" });
2269     systemDefinedPixelMap1->SetDetails(details1);
2270     std::vector<uint8_t> rawData1 = { 1, 2, 3, 4, 5 };
2271 
2272     systemDefinedPixelMap1->SetRawData(rawData1);
2273     std::shared_ptr<UnifiedRecord> record2 = std::make_shared<PlainText>(UDType::PLAIN_TEXT, "this is a content");
2274     data1.AddRecord(systemDefinedPixelMap1);
2275     data1.AddRecord(record2);
2276     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
2277     ASSERT_EQ(status, E_OK);
2278 
2279     QueryOption option2 = { .key = key };
2280     AddPrivilege(option2);
2281     SetHapToken2();
2282     UnifiedData data2;
2283     status = UdmfClient::GetInstance().GetData(option2, data2);
2284     ASSERT_EQ(status, E_OK);
2285 
2286     std::shared_ptr<UnifiedRecord> record3 = data2.GetRecordAt(0);
2287     ASSERT_NE(record3, nullptr);
2288     auto type = record3->GetType();
2289     ASSERT_EQ(type, UDType::SYSTEM_DEFINED_PIXEL_MAP);
2290 
2291     auto systemDefinedRecord2 = static_cast<SystemDefinedRecord *>(record3.get());
2292     ASSERT_NE(systemDefinedRecord2, nullptr);
2293     CompareDetails(systemDefinedRecord2->GetDetails());
2294 
2295     auto systemDefinedPixelMap2 = static_cast<SystemDefinedPixelMap *>(record3.get());
2296     ASSERT_NE(systemDefinedPixelMap2, nullptr);
2297     auto rawData2 = systemDefinedPixelMap2->GetRawData();
2298     EXPECT_EQ(rawData1.size(), rawData2.size());
2299     for (uint32_t i = 0; i < rawData1.size(); ++i) {
2300         EXPECT_EQ(rawData1[i], rawData2[i]);
2301     }
2302 
2303     std::shared_ptr<UnifiedRecord> record4 = data2.GetRecordAt(1);
2304     auto plainText = static_cast<PlainText *>(record4.get());
2305     ASSERT_EQ(UDType::PLAIN_TEXT, plainText->GetType());
2306     ASSERT_EQ("this is a content", plainText->GetContent());
2307 
2308     LOG_INFO(UDMF_TEST, "SetData026 end.");
2309 }
2310 
2311 /**
2312 * @tc.name: SetData027
2313 * @tc.desc: Set Html record value is null str and get uris data
2314 * @tc.type: FUNC
2315 */
2316 HWTEST_F(UdmfClientTest, SetData027, TestSize.Level1)
2317 {
2318     LOG_INFO(UDMF_TEST, "SetData027 begin.");
2319 
2320     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2321     UnifiedData data;
2322     std::string key;
2323     std::string html = "";
2324     auto obj = std::make_shared<Object>();
2325     obj->value_["uniformDataType"] = "general.html";
2326     obj->value_["htmlContent"] = html;
2327     obj->value_["plainContent"] = "htmlPlainContent";
2328     auto obj2 = std::make_shared<Object>();
2329     obj2->value_["detail1"] = "detail1";
2330     obj2->value_["detail2"] = "detail2";
2331     obj->value_["details"] = obj2;
2332     auto htmlRecord = std::make_shared<Html>(UDType::HTML, obj);
2333     data.AddRecord(htmlRecord);
2334     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2335     ASSERT_EQ(status, E_OK);
2336 
2337     QueryOption option2 = { .key = key };
2338     AddPrivilege1(option2);
2339     SetHapToken1();
2340     UnifiedData readData;
2341     status = UdmfClient::GetInstance().GetData(option2, readData);
2342     ASSERT_EQ(status, E_OK);
2343 
2344     std::shared_ptr<UnifiedRecord> readRecord = readData.GetRecordAt(0);
2345     ASSERT_NE(readRecord, nullptr);
2346     auto readHtmlRecord = std::static_pointer_cast<Html>(readRecord);
2347     EXPECT_EQ(readHtmlRecord->GetHtmlContent(), html);
2348     auto uris = readRecord->GetUris();
2349     EXPECT_EQ(uris.size(), 0);
2350 
2351     LOG_INFO(UDMF_TEST, "SetData027 end.");
2352 }
2353 
2354 /**
2355 * @tc.name: SetData028
2356 * @tc.desc: Set Html record include invalid value and get uris data
2357 * @tc.type: FUNC
2358 */
2359 HWTEST_F(UdmfClientTest, SetData028, TestSize.Level1)
2360 {
2361     LOG_INFO(UDMF_TEST, "SetData028 begin.");
2362 
2363     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2364     UnifiedData data;
2365     std::string key;
2366     std::string html = "<img data-ohos='clipboard' src=>"
2367                         "<img data-ohos='clipboard' src='https://data/storage/el2/base/haps/102.png'>"
2368                         "<img data-ohos='clipboard' src='file://data/storage/el2/base/haps/103.png'>"
2369                         "<img data-ohos='clipboard' src='file://data/storage/el2/base/haps/104.png'>";
2370     auto obj = std::make_shared<Object>();
2371     obj->value_["uniformDataType"] = "general.html";
2372     obj->value_["htmlContent"] = html;
2373     obj->value_["plainContent"] = "htmlPlainContent";
2374     auto obj2 = std::make_shared<Object>();
2375     obj2->value_["detail1"] = "detail1";
2376     obj2->value_["detail2"] = "detail2";
2377     obj->value_["details"] = obj2;
2378     auto htmlRecord = std::make_shared<Html>(UDType::HTML, obj);
2379     data.AddRecord(htmlRecord);
2380     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2381     ASSERT_EQ(status, E_OK);
2382 
2383     QueryOption option2 = { .key = key };
2384     AddPrivilege1(option2);
2385     SetHapToken1();
2386     UnifiedData readData;
2387     status = UdmfClient::GetInstance().GetData(option2, readData);
2388     ASSERT_EQ(status, E_OK);
2389 
2390     std::shared_ptr<UnifiedRecord> readRecord = readData.GetRecordAt(0);
2391     ASSERT_NE(readRecord, nullptr);
2392     auto readHtmlRecord = std::static_pointer_cast<Html>(readRecord);
2393     EXPECT_EQ(readHtmlRecord->GetHtmlContent(), html);
2394     auto uris = readRecord->GetUris();
2395     EXPECT_EQ(uris.size(), 0);
2396 
2397     LOG_INFO(UDMF_TEST, "SetData028 end.");
2398 }
2399 
2400 /**
2401 * @tc.name: SetData029
2402 * @tc.desc: Set Html record include valid value and get uris data
2403 * @tc.type: FUNC
2404 */
2405 HWTEST_F(UdmfClientTest, SetData029, TestSize.Level1)
2406 {
2407     LOG_INFO(UDMF_TEST, "SetData029 begin.");
2408 
2409     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2410     UnifiedData data;
2411     std::string key;
2412     std::string html = "<img data-ohos='clipboard' src='file:///data/storage/el2/base/haps/101.png'>"
2413                         "<img data-ohos='clipboard' src=\"file:///data/storage/el2/base/haps/102.png\">";
2414     auto obj = std::make_shared<Object>();
2415     obj->value_["uniformDataType"] = "general.html";
2416     obj->value_["htmlContent"] = html;
2417     obj->value_["plainContent"] = "htmlPlainContent";
2418     auto obj2 = std::make_shared<Object>();
2419     obj2->value_["detail1"] = "detail1";
2420     obj2->value_["detail2"] = "detail2";
2421     obj->value_["details"] = obj2;
2422     auto htmlRecord = std::make_shared<Html>(UDType::HTML, obj);
2423     data.AddRecord(htmlRecord);
2424     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2425     ASSERT_EQ(status, E_OK);
2426 
2427     QueryOption option2 = { .key = key };
2428     AddPrivilege1(option2);
2429     SetHapToken1();
2430     UnifiedData readData;
2431     status = UdmfClient::GetInstance().GetData(option2, readData);
2432     ASSERT_EQ(status, E_OK);
2433     std::string tmpUri1 = "file://ohos.test.demo1/data/storage/el2/base/haps/101.png";
2434     std::string tmpUri2 = "file://ohos.test.demo1/data/storage/el2/base/haps/102.png";
2435     AppFileService::ModuleFileUri::FileUri fileUri1(tmpUri1);
2436     AppFileService::ModuleFileUri::FileUri fileUri2(tmpUri2);
2437     std::string readHtml = "<img data-ohos='clipboard' src='";
2438     readHtml += FILE_SCHEME_PREFIX + fileUri1.GetRealPath() + "'><img data-ohos='clipboard' src=\"";
2439     readHtml += FILE_SCHEME_PREFIX + fileUri2.GetRealPath() + "\">";
2440     std::shared_ptr<UnifiedRecord> readRecord = readData.GetRecordAt(0);
2441     ASSERT_NE(readRecord, nullptr);
2442     auto readHtmlRecord = std::static_pointer_cast<Html>(readRecord);
2443     EXPECT_EQ(readHtmlRecord->GetHtmlContent(), readHtml);
2444     auto uris = readRecord->GetUris();
2445     EXPECT_EQ(uris.size(), 2);
2446 
2447     LOG_INFO(UDMF_TEST, "SetData029 end.");
2448 }
2449 
2450 /**
2451 * @tc.name: SetData030
2452 * @tc.desc: Set Html record include valid value and get uris data
2453 * @tc.type: FUNC
2454 */
2455 HWTEST_F(UdmfClientTest, SetData030, TestSize.Level1)
2456 {
2457     LOG_INFO(UDMF_TEST, "SetData030 begin.");
2458 
2459     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2460     UnifiedData data;
2461     std::string key;
2462     std::string html = "<img data-ohos='clipboard' src='file:///data/storage/el2/base/haps/101.png'>"
2463                         "<img data-ohos='clipboard' src='https://data/storage/el2/base/haps/102.png'>"
2464                         "<img data-ohos='clipboard' src='file://data/storage/el2/base/haps/103.png'>";
2465     std::string uriSrc = "file:///data/storage/el2/base/haps/101.png";
2466     auto obj = std::make_shared<Object>();
2467     obj->value_["uniformDataType"] = "general.html";
2468     obj->value_["htmlContent"] = html;
2469     obj->value_["plainContent"] = "htmlPlainContent";
2470     auto obj2 = std::make_shared<Object>();
2471     obj2->value_["detail1"] = "detail1";
2472     obj2->value_["detail2"] = "detail2";
2473     obj->value_["details"] = obj2;
2474     auto htmlRecord = std::make_shared<Html>(UDType::HTML, obj);
2475     data.AddRecord(htmlRecord);
2476     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2477     ASSERT_EQ(status, E_OK);
2478 
2479     QueryOption option2 = { .key = key };
2480     AddPrivilege1(option2);
2481     SetHapToken1();
2482     UnifiedData readData;
2483     status = UdmfClient::GetInstance().GetData(option2, readData);
2484     ASSERT_EQ(status, E_OK);
2485     std::string tmpUri1 = "file://ohos.test.demo1/data/storage/el2/base/haps/101.png";
2486     AppFileService::ModuleFileUri::FileUri fileUri1(tmpUri1);
2487     std::string readHtml = "<img data-ohos='clipboard' src='";
2488     readHtml += FILE_SCHEME_PREFIX + fileUri1.GetRealPath() + "'>";
2489     readHtml += "<img data-ohos='clipboard' src='https://data/storage/el2/base/haps/102.png'>"
2490         "<img data-ohos='clipboard' src='file://data/storage/el2/base/haps/103.png'>";
2491     std::shared_ptr<UnifiedRecord> readRecord = readData.GetRecordAt(0);
2492     ASSERT_NE(readRecord, nullptr);
2493     auto readHtmlRecord = std::static_pointer_cast<Html>(readRecord);
2494     EXPECT_EQ(readHtmlRecord->GetHtmlContent(), readHtml);
2495     auto uris = readRecord->GetUris();
2496     EXPECT_EQ(uris.size(), 1);
2497     EXPECT_EQ(uris[0].oriUri, uriSrc);
2498     EXPECT_TRUE(uris[0].dfsUri.empty());
2499 
2500     LOG_INFO(UDMF_TEST, "SetData030 end.");
2501 }
2502 
2503 /**
2504 * @tc.name: SetData031
2505 * @tc.desc: Set Html entry is null str and get uris data
2506 * @tc.type: FUNC
2507 */
2508 HWTEST_F(UdmfClientTest, SetData031, TestSize.Level1)
2509 {
2510     LOG_INFO(UDMF_TEST, "SetData031 begin.");
2511 
2512     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2513     UnifiedData data;
2514     std::string key;
2515     std::shared_ptr<Object> obj = std::make_shared<Object>();
2516     obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
2517     obj->value_[FILE_URI_PARAM] = "http://demo.com";
2518     obj->value_[FILE_TYPE] = "abcdefg";
2519     auto record = std::make_shared<UnifiedRecord>(FILE_URI, obj);
2520     std::string html = "";
2521     auto htmlRecord = Html(html, "abstract");
2522     htmlRecord.InitObject();
2523     record->AddEntry(htmlRecord.GetUtdId(), htmlRecord.GetOriginValue());
2524     data.AddRecord(record);
2525     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2526     ASSERT_EQ(status, E_OK);
2527 
2528     QueryOption option2 = { .key = key };
2529     AddPrivilege1(option2);
2530     SetHapToken1();
2531     UnifiedData readData;
2532     status = UdmfClient::GetInstance().GetData(option2, readData);
2533     ASSERT_EQ(status, E_OK);
2534 
2535     std::shared_ptr<UnifiedRecord> readRecord = readData.GetRecordAt(0);
2536     ASSERT_NE(readRecord, nullptr);
2537     auto entryValue = readRecord->GetEntry(UtdUtils::GetUtdIdFromUtdEnum(UDType::HTML));
2538     auto object = std::get<std::shared_ptr<Object>>(entryValue);
2539     ASSERT_NE(object, nullptr);
2540     auto iter = object->value_.find(HTML_CONTENT);
2541     ASSERT_TRUE(iter != object->value_.end());
2542     EXPECT_TRUE(std::holds_alternative<std::string>(iter->second));
2543     auto content = std::get<std::string>(iter->second);
2544     EXPECT_EQ(content, html);
2545     auto uris = readRecord->GetUris();
2546     EXPECT_EQ(uris.size(), 0);
2547 
2548     LOG_INFO(UDMF_TEST, "SetData031 end.");
2549 }
2550 
2551 /**
2552 * @tc.name: SetData032
2553 * @tc.desc: Set Html entry include invalid value and get uris data
2554 * @tc.type: FUNC
2555 */
2556 HWTEST_F(UdmfClientTest, SetData032, TestSize.Level1)
2557 {
2558     LOG_INFO(UDMF_TEST, "SetData032 begin.");
2559 
2560     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2561     UnifiedData data;
2562     std::string key;
2563     std::shared_ptr<Object> obj = std::make_shared<Object>();
2564     obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
2565     obj->value_[FILE_URI_PARAM] = "http://demo.com";
2566     obj->value_[FILE_TYPE] = "abcdefg";
2567     auto record = std::make_shared<UnifiedRecord>(FILE_URI, obj);
2568     std::string html = "<img data-ohos='clipboard' src=>"
2569                         "<img data-ohos='clipboard' src='https://data/storage/el2/base/haps/102.png'>"
2570                         "<img data-ohos='clipboard' src='file://data/storage/el2/base/haps/103.png'>"
2571                         "<img data-ohos='clipboard' src='file://data/storage/el2/base/haps/104.png'>";
2572     auto htmlRecord = Html(html, "abstract");
2573     htmlRecord.InitObject();
2574     record->AddEntry(htmlRecord.GetUtdId(), htmlRecord.GetOriginValue());
2575     data.AddRecord(record);
2576     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2577     ASSERT_EQ(status, E_OK);
2578 
2579     QueryOption option2 = { .key = key };
2580     AddPrivilege1(option2);
2581     SetHapToken1();
2582     UnifiedData readData;
2583     status = UdmfClient::GetInstance().GetData(option2, readData);
2584     ASSERT_EQ(status, E_OK);
2585 
2586     std::shared_ptr<UnifiedRecord> readRecord = readData.GetRecordAt(0);
2587     ASSERT_NE(readRecord, nullptr);
2588     auto entryValue = readRecord->GetEntry(UtdUtils::GetUtdIdFromUtdEnum(UDType::HTML));
2589     auto object = std::get<std::shared_ptr<Object>>(entryValue);
2590     ASSERT_NE(object, nullptr);
2591     auto iter = object->value_.find(HTML_CONTENT);
2592     ASSERT_TRUE(iter != object->value_.end());
2593     EXPECT_TRUE(std::holds_alternative<std::string>(iter->second));
2594     auto content = std::get<std::string>(iter->second);
2595     EXPECT_EQ(content, html);
2596     auto uris = readRecord->GetUris();
2597     EXPECT_EQ(uris.size(), 0);
2598 
2599     LOG_INFO(UDMF_TEST, "SetData032 end.");
2600 }
2601 
2602 /**
2603 * @tc.name: SetData033
2604 * @tc.desc: Set Html entry include valid value and get uris data
2605 * @tc.type: FUNC
2606 */
2607 HWTEST_F(UdmfClientTest, SetData033, TestSize.Level1)
2608 {
2609     LOG_INFO(UDMF_TEST, "SetData033 begin.");
2610 
2611     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2612     UnifiedData data;
2613     std::string key;
2614     std::shared_ptr<Object> obj = std::make_shared<Object>();
2615     obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
2616     obj->value_[FILE_URI_PARAM] = "http://demo.com";
2617     auto record = std::make_shared<UnifiedRecord>(FILE_URI, obj);
2618     std::string html = "<img data-ohos='clipboard' src='file://data/storage/el2/base/haps/101.png'>"
2619                         "<img data-ohos='clipboard' src='https://data/storage/el2/base/haps/102.png'>"
2620                         "<img data-ohos='clipboard' src='file:///data/storage/el2/base/haps/103.png'>";
2621     std::string uriSrc = "file:///data/storage/el2/base/haps/103.png";
2622     auto htmlRecord = Html(html, "abstract");
2623     htmlRecord.InitObject();
2624     record->AddEntry(htmlRecord.GetUtdId(), htmlRecord.GetOriginValue());
2625     data.AddRecord(record);
2626     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2627     ASSERT_EQ(status, E_OK);
2628     QueryOption option2 = { .key = key };
2629     AddPrivilege1(option2);
2630     SetHapToken1();
2631     UnifiedData readData;
2632     status = UdmfClient::GetInstance().GetData(option2, readData);
2633     ASSERT_EQ(status, E_OK);
2634     std::string tmpUri1 = "file://ohos.test.demo1/data/storage/el2/base/haps/103.png";
2635     AppFileService::ModuleFileUri::FileUri fileUri1(tmpUri1);
2636     std::string readHtml = "<img data-ohos='clipboard' src='file://data/storage/el2/base/haps/101.png'>"
2637                             "<img data-ohos='clipboard' src='https://data/storage/el2/base/haps/102.png'>"
2638                             "<img data-ohos='clipboard' src='";
2639     readHtml += FILE_SCHEME_PREFIX + fileUri1.GetRealPath() + "'>";
2640     std::shared_ptr<UnifiedRecord> readRecord = readData.GetRecordAt(0);
2641     ASSERT_NE(readRecord, nullptr);
2642     auto entryValue = readRecord->GetEntry(UtdUtils::GetUtdIdFromUtdEnum(UDType::HTML));
2643     auto object = std::get<std::shared_ptr<Object>>(entryValue);
2644     ASSERT_NE(object, nullptr);
2645     auto iter = object->value_.find(HTML_CONTENT);
2646     ASSERT_TRUE(iter != object->value_.end());
2647     EXPECT_TRUE(std::holds_alternative<std::string>(iter->second));
2648     auto content = std::get<std::string>(iter->second);
2649     EXPECT_EQ(content, readHtml);
2650     auto uris = readRecord->GetUris();
2651     EXPECT_EQ(uris.size(), 1);
2652     EXPECT_EQ(uris[0].oriUri, uriSrc);
2653     EXPECT_TRUE(uris[0].dfsUri.empty());
2654 
2655     LOG_INFO(UDMF_TEST, "SetData033 end.");
2656 }
2657 
2658 /**
2659 * @tc.name: SetData034
2660 * @tc.desc: test html record process
2661 * @tc.type: FUNC
2662 */
2663 HWTEST_F(UdmfClientTest, SetData034, TestSize.Level1)
2664 {
2665     LOG_INFO(UDMF_TEST, "SetData034 begin.");
2666 
2667     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2668     UnifiedData data1;
2669     std::shared_ptr<UnifiedRecord> record = std::make_shared<UnifiedRecord>();
2670     data1.AddRecord(record);
2671     std::string key;
2672     UnifiedHtmlRecordProcess::RebuildHtmlRecord(data1);
2673     UnifiedHtmlRecordProcess::GetUriFromHtmlRecord(data1);
2674     UnifiedData data;
2675     auto plainText = std::make_shared<PlainText>();
2676     plainText->SetContent("plainContent");
2677     data.AddRecord(plainText);
2678     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2679     ASSERT_EQ(status, E_OK);
2680     std::shared_ptr<UnifiedRecord> record1 = std::make_shared<PlainText>(UDType::PLAIN_TEXT, "this is a content");
2681     record1->ClearUris();
2682     data.AddRecord(record1);
2683     auto file = std::make_shared<File>();
2684     file->SetRemoteUri("remoteUri");
2685     UDDetails details;
2686     details.insert({ "udmf_key", "udmf_value" });
2687     file->SetDetails(details);
2688     data.AddRecord(file);
2689     UnifiedHtmlRecordProcess::RebuildHtmlRecord(data);
2690 
2691     QueryOption option2 = { .key = key };
2692     AddPrivilege1(option2);
2693     SetHapToken1();
2694     UnifiedData readData;
2695     status = UdmfClient::GetInstance().GetData(option2, readData);
2696     ASSERT_EQ(status, E_OK);
2697 
2698     LOG_INFO(UDMF_TEST, "SetData034 end.");
2699 }
2700 
2701 /**
2702 * @tc.name: SetData035
2703 * @tc.desc: test html record process
2704 * @tc.type: FUNC
2705 */
2706 HWTEST_F(UdmfClientTest, SetData035, TestSize.Level1)
2707 {
2708     LOG_INFO(UDMF_TEST, "SetData035 begin.");
2709 
2710     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2711     UnifiedData data;
2712     auto text = std::make_shared<Text>();
2713     data.AddRecord(text);
2714     auto plainText = std::make_shared<PlainText>();
2715     plainText->SetContent("plainContent");
2716     data.AddRecord(plainText);
2717     auto html = std::make_shared<Html>();
2718     html->SetPlainContent("htmlContent");
2719     data.AddRecord(html);
2720     std::string key;
2721     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2722     ASSERT_EQ(status, E_OK);
2723 
2724     UnifiedData data1;
2725     std::shared_ptr<Object> obj = std::make_shared<Object>();
2726     obj->value_[PLAIN_CONTENT] = "http://demo.com";
2727     obj->value_[HTML_CONTENT] = 10;
2728     plainText->AddEntry("general.html", obj);
2729     data1.AddRecord(plainText);
2730     UnifiedHtmlRecordProcess::GetUriFromHtmlRecord(data1);
2731     UnifiedHtmlRecordProcess::RebuildHtmlRecord(data1);
2732     UnifiedData data2;
2733     text->AddEntry("general.html", "");
2734     data2.AddRecord(text);
2735     UnifiedHtmlRecordProcess::GetUriFromHtmlRecord(data2);
2736     UnifiedHtmlRecordProcess::RebuildHtmlRecord(data2);
2737     QueryOption option2 = { .key = key };
2738     AddPrivilege1(option2);
2739     SetHapToken1();
2740     UnifiedData readData;
2741     status = UdmfClient::GetInstance().GetData(option2, readData);
2742     ASSERT_EQ(status, E_OK);
2743 
2744     LOG_INFO(UDMF_TEST, "SetData035 end.");
2745 }
2746 
2747 /**
2748 * @tc.name: GetSummary003
2749 * @tc.desc: Get summary data
2750 * @tc.type: FUNC
2751 */
2752 HWTEST_F(UdmfClientTest, GetSummary003, TestSize.Level1)
2753 {
2754     LOG_INFO(UDMF_TEST, "GetSummary003 begin.");
2755 
2756     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2757     UnifiedData data;
2758     std::string key;
2759 
2760     UDDetails details;
2761     details.insert({ "udmf_key", "udmf_value" });
2762     std::string value;
2763     int64_t maxSize = 512 * 1024;
2764     for (int64_t i = 0; i < maxSize; ++i) {
2765         value += "11";
2766     }
2767     details.insert({ value, value });
2768 
2769     auto text = std::make_shared<Text>();
2770     text->SetDetails(details);
2771     data.AddRecord(text);
2772 
2773     auto plainText = std::make_shared<PlainText>();
2774     plainText->SetDetails(details);
2775     plainText->SetContent("content");
2776     plainText->SetAbstract("abstract");
2777     data.AddRecord(plainText);
2778 
2779     UnifiedDataHelper::SetRootPath("/data/udmf_test/");
2780     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2781     ASSERT_EQ(status, E_OK);
2782     UnifiedDataHelper::SetRootPath("");
2783 
2784     QueryOption option2 = { .key = key };
2785     Summary summary;
2786     status = UdmfClient::GetInstance().GetSummary(option2, summary);
2787 
2788     auto size = text->GetSize();
2789     size += plainText->GetSize();
2790 
2791     ASSERT_EQ(status, E_OK);
2792     ASSERT_EQ(summary.totalSize, size);
2793     ASSERT_EQ(summary.summary["general.text"], text->GetSize());
2794     ASSERT_EQ(summary.summary["general.plain-text"], plainText->GetSize());
2795 
2796     LOG_INFO(UDMF_TEST, "GetSummary003 end.");
2797 }
2798 
2799 /**
2800 * @tc.name: IsRemoteData
2801 * @tc.desc: is remote data, result false: not remote data, true: remote data.
2802 * @tc.type: FUNC
2803 */
2804 HWTEST_F(UdmfClientTest, IsRemoteData001, TestSize.Level1)
2805 {
2806     LOG_INFO(UDMF_TEST, "IsRemoteData001 begin.");
2807 
2808     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
2809     UnifiedData data;
2810     std::string key;
2811 
2812     UDDetails details;
2813     details.insert({ "udmf_key", "udmf_value" });
2814 
2815     auto text = std::make_shared<Text>();
2816     text->SetDetails(details);
2817     data.AddRecord(text);
2818 
2819     auto plainText = std::make_shared<PlainText>();
2820     plainText->SetDetails(details);
2821     plainText->SetContent("content");
2822     plainText->SetAbstract("abstract");
2823     data.AddRecord(plainText);
2824 
2825     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
2826     ASSERT_EQ(status, E_OK);
2827 
2828     QueryOption option2 = { .key = key };
2829     bool result = true;
2830     status = UdmfClient::GetInstance().IsRemoteData(option2, result);
2831 
2832     ASSERT_EQ(status, E_OK);
2833     ASSERT_EQ(result, false);
2834 
2835     LOG_INFO(UDMF_TEST, "IsRemoteData001 end.");
2836 }
2837 
2838 /**
2839 * @tc.name: GetTypesLabels001
2840 * @tc.desc: test GetTypesLabels
2841 * @tc.type: FUNC
2842 */
2843 HWTEST_F(UdmfClientTest, GetTypesLabels001, TestSize.Level1)
2844 {
2845     LOG_INFO(UDMF_TEST, "GetTypesLabels001 begin.");
2846     UnifiedData data;
2847     UDDetails details;
2848     details.insert({ "udmf_key", "udmf_value" });
2849     auto text = std::make_shared<Text>();
2850     text->SetDetails(details);
2851     auto plainText = std::make_shared<PlainText>();
2852     plainText->SetDetails(details);
2853     std::vector<std::shared_ptr<UnifiedRecord>> records = {text, plainText};
2854     data.AddRecords(records);
2855 
2856     std::vector<std::string> types = {"general.text", "general.plain-text"};
2857     ASSERT_EQ(data.GetTypesLabels(), types);
2858     ASSERT_EQ(data.HasType("general.text"), true);
2859     ASSERT_EQ(data.HasType("general.plain-text"), true);
2860     ASSERT_EQ(data.HasType("general.html"), false);
2861 }
2862 
2863 /**
2864 * @tc.name: QueryUDSData001
2865 * @tc.desc: QueryUDSData001
2866 * @tc.type: FUNC
2867 */
2868 HWTEST_F(UdmfClientTest, QueryUDSData001, TestSize.Level1)
2869 {
2870     LOG_INFO(UDMF_TEST, "QueryUDSData001 begin.");
2871 
2872     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
2873     std::vector<UnifiedData> unifiedDataSet;
2874     auto status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
2875     ASSERT_EQ(status, E_OK);
2876     unifiedDataSet.clear();
2877     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
2878     ASSERT_EQ(status, E_OK);
2879     unifiedDataSet.clear();
2880 
2881     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
2882     UnifiedData data;
2883     std::shared_ptr<UnifiedRecord> record1 = std::make_shared<PlainText>(UDType::PLAIN_TEXT, "plainTextContent");
2884     data.AddRecord(record1);
2885     std::string key;
2886     status = UdmfClient::GetInstance().SetData(customOption, data, key);
2887     ASSERT_EQ(status, E_OK);
2888 
2889     query = { .key = key };
2890     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
2891     ASSERT_EQ(status, E_OK);
2892     ASSERT_EQ(unifiedDataSet.size(), 1);
2893     std::shared_ptr<UnifiedRecord> record2 = unifiedDataSet[0].GetRecordAt(0);
2894     ASSERT_NE(record2, nullptr);
2895     ASSERT_EQ(record2->GetType(), UDType::PLAIN_TEXT);
2896     ValueType value = record2->GetValue();
2897     ASSERT_NE(std::get_if<std::string>(&value), nullptr);
2898     ASSERT_EQ(std::get<std::string>(value), "plainTextContent");
2899     LOG_INFO(UDMF_TEST, "QueryUDSData001 end.");
2900 }
2901 
2902 /**
2903 * @tc.name: QueryUDSData002
2904 * @tc.desc: QueryUDSData002
2905 * @tc.type: FUNC
2906 */
2907 HWTEST_F(UdmfClientTest, QueryUDSData002, TestSize.Level1)
2908 {
2909     LOG_INFO(UDMF_TEST, "QueryUDSData002 begin.");
2910 
2911     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
2912     std::vector<UnifiedData> unifiedDataSet;
2913     auto status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
2914     ASSERT_EQ(status, E_OK);
2915     unifiedDataSet.clear();
2916     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
2917     ASSERT_EQ(status, E_OK);
2918     unifiedDataSet.clear();
2919 
2920     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
2921     UnifiedData data;
2922     auto obj = std::make_shared<Object>();
2923     obj->value_["uniformDataType"] = "general.plain-text";
2924     obj->value_["textContent"] = "plainTextContent";
2925     obj->value_["abstract"] = "plainTextAbstract";
2926     auto obj2 = std::make_shared<Object>();
2927     obj2->value_["detail1"] = "detail1";
2928     obj2->value_["detail2"] = "detail2";
2929     obj->value_["details"] = obj2;
2930     auto record = std::make_shared<PlainText>(UDType::PLAIN_TEXT, obj);
2931     data.AddRecord(record);
2932     std::string key;
2933     status = UdmfClient::GetInstance().SetData(customOption, data, key);
2934     ASSERT_EQ(status, E_OK);
2935 
2936     unifiedDataSet.clear();
2937     query = { .key = key, .intention = UD_INTENTION_DATA_HUB };
2938     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
2939     ASSERT_EQ(status, E_OK);
2940     ASSERT_EQ(unifiedDataSet.size(), 1);
2941     auto record2 = unifiedDataSet[0].GetRecordAt(0);
2942     ASSERT_NE(record2, nullptr);
2943     ASSERT_EQ(record2->GetType(), UDType::PLAIN_TEXT);
2944     auto value = record2->GetValue();
2945 
2946     ASSERT_NE(std::get_if<std::shared_ptr<Object>>(&value), nullptr);
2947     obj = std::get<std::shared_ptr<Object>>(value);
2948 
2949     ASSERT_NE(std::get_if<std::string>(&obj->value_["uniformDataType"]), nullptr);
2950     ASSERT_EQ(std::get<std::string>(obj->value_["uniformDataType"]), "general.plain-text");
2951     ASSERT_NE(std::get_if<std::string>(&obj->value_["textContent"]), nullptr);
2952     ASSERT_EQ(std::get<std::string>(obj->value_["textContent"]), "plainTextContent");
2953     ASSERT_NE(std::get_if<std::string>(&obj->value_["abstract"]), nullptr);
2954     ASSERT_EQ(std::get<std::string>(obj->value_["abstract"]), "plainTextAbstract");
2955 
2956     ASSERT_NE(std::get_if<std::shared_ptr<Object>>(&obj->value_["details"]), nullptr);
2957     obj2 = std::get<std::shared_ptr<Object>>(obj->value_["details"]);
2958 
2959     ASSERT_NE(std::get_if<std::string>(&obj2->value_["detail1"]), nullptr);
2960     ASSERT_EQ(std::get<std::string>(obj2->value_["detail1"]), "detail1");
2961     ASSERT_NE(std::get_if<std::string>(&obj2->value_["detail2"]), nullptr);
2962     ASSERT_EQ(std::get<std::string>(obj2->value_["detail2"]), "detail2");
2963     LOG_INFO(UDMF_TEST, "QueryUDSData002 end.");
2964 }
2965 
2966 /**
2967 * @tc.name: QueryUDSData003
2968 * @tc.desc: QueryUDSData003
2969 * @tc.type: FUNC
2970 */
2971 HWTEST_F(UdmfClientTest, QueryUDSData003, TestSize.Level1)
2972 {
2973     LOG_INFO(UDMF_TEST, "QueryUDSData003 begin.");
2974 
2975     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
2976     std::vector<UnifiedData> unifiedDataSet;
2977     auto status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
2978     ASSERT_EQ(status, E_OK);
2979     unifiedDataSet.clear();
2980     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
2981     ASSERT_EQ(status, E_OK);
2982     unifiedDataSet.clear();
2983 
2984     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
2985     UnifiedData data;
2986     auto obj = std::make_shared<Object>();
2987     obj->value_["uniformDataType"] = "general.hyperlink";
2988     obj->value_["url"] = "www.xxx";
2989     obj->value_["description"] = "hyperlinkDescription";
2990     auto obj2 = std::make_shared<Object>();
2991     obj2->value_["detail1"] = "detail1";
2992     obj2->value_["detail2"] = "detail2";
2993     obj->value_["details"] = obj2;
2994     auto record = std::make_shared<Link>(UDType::HYPERLINK, obj);
2995     data.AddRecord(record);
2996     std::string key;
2997     status = UdmfClient::GetInstance().SetData(customOption, data, key);
2998     ASSERT_EQ(status, E_OK);
2999 
3000     unifiedDataSet.clear();
3001     query = { .key = key, .intention = UD_INTENTION_DATA_HUB };
3002     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3003     ASSERT_EQ(status, E_OK);
3004     ASSERT_EQ(unifiedDataSet.size(), 1);
3005     auto record2 = unifiedDataSet[0].GetRecordAt(0);
3006     ASSERT_NE(record2, nullptr);
3007     ASSERT_EQ(record2->GetType(), UDType::HYPERLINK);
3008     auto value = record2->GetValue();
3009 
3010     ASSERT_NE(std::get_if<std::shared_ptr<Object>>(&value), nullptr);
3011     obj = std::get<std::shared_ptr<Object>>(value);
3012 
3013     ASSERT_NE(std::get_if<std::string>(&obj->value_["uniformDataType"]), nullptr);
3014     ASSERT_EQ(std::get<std::string>(obj->value_["uniformDataType"]), "general.hyperlink");
3015     ASSERT_NE(std::get_if<std::string>(&obj->value_["url"]), nullptr);
3016     ASSERT_EQ(std::get<std::string>(obj->value_["url"]), "www.xxx");
3017     ASSERT_NE(std::get_if<std::string>(&obj->value_["description"]), nullptr);
3018     ASSERT_EQ(std::get<std::string>(obj->value_["description"]), "hyperlinkDescription");
3019 
3020     ASSERT_NE(std::get_if<std::shared_ptr<Object>>(&obj->value_["details"]), nullptr);
3021     obj2 = std::get<std::shared_ptr<Object>>(obj->value_["details"]);
3022 
3023     ASSERT_NE(std::get_if<std::string>(&obj2->value_["detail1"]), nullptr);
3024     ASSERT_EQ(std::get<std::string>(obj2->value_["detail1"]), "detail1");
3025     ASSERT_NE(std::get_if<std::string>(&obj2->value_["detail2"]), nullptr);
3026     ASSERT_EQ(std::get<std::string>(obj2->value_["detail2"]), "detail2");
3027     LOG_INFO(UDMF_TEST, "QueryUDSData003 end.");
3028 }
3029 
3030 /**
3031 * @tc.name: QueryUDSData004
3032 * @tc.desc: QueryUDSData004
3033 * @tc.type: FUNC
3034 */
3035 HWTEST_F(UdmfClientTest, QueryUDSData004, TestSize.Level1)
3036 {
3037     LOG_INFO(UDMF_TEST, "QueryUDSData004 begin.");
3038 
3039     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
3040     std::vector<UnifiedData> unifiedDataSet;
3041     auto status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
3042     ASSERT_EQ(status, E_OK);
3043     unifiedDataSet.clear();
3044     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3045     ASSERT_EQ(status, E_OK);
3046     unifiedDataSet.clear();
3047 
3048     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
3049     UnifiedData data;
3050     auto obj = std::make_shared<Object>();
3051     obj->value_["uniformDataType"] = "general.html";
3052     obj->value_["htmlContent"] = "www.xxx";
3053     obj->value_["plainContent"] = "htmlPlainContent";
3054     auto obj2 = std::make_shared<Object>();
3055     obj2->value_["detail1"] = "detail1";
3056     obj2->value_["detail2"] = "detail2";
3057     obj->value_["details"] = obj2;
3058     auto record = std::make_shared<Html>(UDType::HTML, obj);
3059     data.AddRecord(record);
3060     std::string key;
3061     status = UdmfClient::GetInstance().SetData(customOption, data, key);
3062     ASSERT_EQ(status, E_OK);
3063 
3064     unifiedDataSet.clear();
3065     query = { .key = key, .intention = UD_INTENTION_DATA_HUB };
3066     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3067     ASSERT_EQ(status, E_OK);
3068     ASSERT_EQ(unifiedDataSet.size(), 1);
3069     auto record2 = unifiedDataSet[0].GetRecordAt(0);
3070     ASSERT_NE(record2, nullptr);
3071     ASSERT_EQ(record2->GetType(), UDType::HTML);
3072     auto value = record2->GetValue();
3073 
3074     ASSERT_NE(std::get_if<std::shared_ptr<Object>>(&value), nullptr);
3075     obj = std::get<std::shared_ptr<Object>>(value);
3076 
3077     ASSERT_NE(std::get_if<std::string>(&obj->value_["uniformDataType"]), nullptr);
3078     ASSERT_EQ(std::get<std::string>(obj->value_["uniformDataType"]), "general.html");
3079     ASSERT_NE(std::get_if<std::string>(&obj->value_["htmlContent"]), nullptr);
3080     ASSERT_EQ(std::get<std::string>(obj->value_["htmlContent"]), "www.xxx");
3081     ASSERT_NE(std::get_if<std::string>(&obj->value_["plainContent"]), nullptr);
3082     ASSERT_EQ(std::get<std::string>(obj->value_["plainContent"]), "htmlPlainContent");
3083 
3084     ASSERT_NE(std::get_if<std::shared_ptr<Object>>(&obj->value_["details"]), nullptr);
3085     obj2 = std::get<std::shared_ptr<Object>>(obj->value_["details"]);
3086 
3087     ASSERT_NE(std::get_if<std::string>(&obj2->value_["detail1"]), nullptr);
3088     ASSERT_EQ(std::get<std::string>(obj2->value_["detail1"]), "detail1");
3089     ASSERT_NE(std::get_if<std::string>(&obj2->value_["detail2"]), nullptr);
3090     ASSERT_EQ(std::get<std::string>(obj2->value_["detail2"]), "detail2");
3091     LOG_INFO(UDMF_TEST, "QueryUDSData004 end.");
3092 }
3093 
3094 /**
3095 * @tc.name: QueryUDSData005
3096 * @tc.desc: QueryUDSData005
3097 * @tc.type: FUNC
3098 */
3099 HWTEST_F(UdmfClientTest, QueryUDSData005, TestSize.Level1)
3100 {
3101     LOG_INFO(UDMF_TEST, "QueryUDSData005 begin.");
3102 
3103     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
3104     std::vector<UnifiedData> unifiedDataSet;
3105     auto status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
3106     ASSERT_EQ(status, E_OK);
3107     unifiedDataSet.clear();
3108     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3109     ASSERT_EQ(status, E_OK);
3110     unifiedDataSet.clear();
3111 
3112     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
3113     UnifiedData data;
3114     auto obj = std::make_shared<Object>();
3115     obj->value_["uniformDataType"] = "openharmony.app-item";
3116     obj->value_["appId"] = "app-itemAppId";
3117     obj->value_["appName"] = "app-itemAppName";
3118     obj->value_["appIconId"] = "app-itemAppIconId";
3119     obj->value_["appLabelId"] = "app-itemAppLabelId";
3120     obj->value_["bundleName"] = "app-itemBundleName";
3121     obj->value_["abilityName"] = "app-itemAbilityName";
3122     auto obj2 = std::make_shared<Object>();
3123     obj2->value_["detail1"] = "detail1";
3124     obj2->value_["detail2"] = 1234;
3125     obj->value_["details"] = obj2;
3126     auto record = std::make_shared<SystemDefinedAppItem>(UDType::SYSTEM_DEFINED_APP_ITEM, obj);
3127     data.AddRecord(record);
3128     std::string key;
3129     status = UdmfClient::GetInstance().SetData(customOption, data, key);
3130     ASSERT_EQ(status, E_OK);
3131 
3132     unifiedDataSet.clear();
3133     query = { .key = key, .intention = UD_INTENTION_DATA_HUB };
3134     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3135     ASSERT_EQ(status, E_OK);
3136     ASSERT_EQ(unifiedDataSet.size(), 1);
3137     auto record2 = unifiedDataSet[0].GetRecordAt(0);
3138     ASSERT_NE(record2, nullptr);
3139     ASSERT_EQ(record2->GetType(), UDType::SYSTEM_DEFINED_APP_ITEM);
3140     auto value = record2->GetValue();
3141 
3142     ASSERT_NE(std::get_if<std::shared_ptr<Object>>(&value), nullptr);
3143     obj = std::get<std::shared_ptr<Object>>(value);
3144 
3145     ASSERT_NE(std::get_if<std::string>(&obj->value_["uniformDataType"]), nullptr);
3146     ASSERT_EQ(std::get<std::string>(obj->value_["uniformDataType"]), "openharmony.app-item");
3147     ASSERT_NE(std::get_if<std::string>(&obj->value_["appId"]), nullptr);
3148     ASSERT_EQ(std::get<std::string>(obj->value_["appId"]), "app-itemAppId");
3149     ASSERT_NE(std::get_if<std::string>(&obj->value_["appName"]), nullptr);
3150     ASSERT_EQ(std::get<std::string>(obj->value_["appName"]), "app-itemAppName");
3151     ASSERT_NE(std::get_if<std::string>(&obj->value_["appIconId"]), nullptr);
3152     ASSERT_EQ(std::get<std::string>(obj->value_["appIconId"]), "app-itemAppIconId");
3153     ASSERT_NE(std::get_if<std::string>(&obj->value_["appLabelId"]), nullptr);
3154     ASSERT_EQ(std::get<std::string>(obj->value_["appLabelId"]), "app-itemAppLabelId");
3155     ASSERT_NE(std::get_if<std::string>(&obj->value_["bundleName"]), nullptr);
3156     ASSERT_EQ(std::get<std::string>(obj->value_["bundleName"]), "app-itemBundleName");
3157     ASSERT_NE(std::get_if<std::string>(&obj->value_["abilityName"]), nullptr);
3158     ASSERT_EQ(std::get<std::string>(obj->value_["abilityName"]), "app-itemAbilityName");
3159 
3160     ASSERT_NE(std::get_if<std::shared_ptr<Object>>(&obj->value_["details"]), nullptr);
3161     obj2 = std::get<std::shared_ptr<Object>>(obj->value_["details"]);
3162 
3163     ASSERT_NE(std::get_if<std::string>(&obj2->value_["detail1"]), nullptr);
3164     ASSERT_EQ(std::get<std::string>(obj2->value_["detail1"]), "detail1");
3165     ASSERT_NE(std::get_if<int32_t>(&obj2->value_["detail2"]), nullptr);
3166     ASSERT_EQ(std::get<int32_t>(obj2->value_["detail2"]), 1234);
3167     LOG_INFO(UDMF_TEST, "QueryUDSData005 end.");
3168 }
3169 
3170 /**
3171 * @tc.name: GetSelfBundleName001
3172 * @tc.desc: Nrmal testcase of GetSelfBundleName
3173 * @tc.type: FUNC
3174 */
3175 HWTEST_F(UdmfClientTest, GetSelfBundleName001, TestSize.Level1)
3176 {
3177     LOG_INFO(UDMF_TEST, "GetSelfBundleName001 begin.");
3178     UdmfClient udmfClient;
3179     std::string ret = udmfClient.GetSelfBundleName();
3180     EXPECT_NE(ret, "");
3181     LOG_INFO(UDMF_TEST, "GetSelfBundleName001 end.");
3182 }
3183 
3184 /**
3185 * @tc.name: GetSummary004
3186 * @tc.desc: Get summary data for entries
3187 * @tc.type: FUNC
3188 */
3189 HWTEST_F(UdmfClientTest, GetSummary004, TestSize.Level1)
3190 {
3191     LOG_INFO(UDMF_TEST, "GetSummary004 begin.");
3192     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
3193     UnifiedData data;
3194     std::string key;
3195     UDDetails details;
3196     details.insert({ "udmf_key", "udmf_value" });
3197     std::shared_ptr<Object> obj = std::make_shared<Object>();
3198     obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
3199     obj->value_[FILE_URI_PARAM] = "http://demo.com";
3200     obj->value_[FILE_TYPE] = "abcdefg";
3201     auto record = std::make_shared<UnifiedRecord>(FILE_URI, obj);
3202     auto plainText = PlainText("content", "abstract");
3203     auto size1 = plainText.GetSize();
3204     plainText.InitObject();
3205     record->AddEntry(plainText.GetUtdId2(), plainText.GetOriginValue());
3206     auto image = Image("uri");
3207     image.SetDetails(details);
3208     auto size2 = image.GetSize();
3209     image.InitObject();
3210     record->AddEntry(image.GetUtdId2(), image.GetOriginValue());
3211     std::vector<uint8_t> raw = {1, 2, 3, 4, 5};
3212     SystemDefinedPixelMap pixelMap = SystemDefinedPixelMap(raw);
3213     pixelMap.SetDetails(details);
3214     auto size3 = pixelMap.GetSize();
3215     pixelMap.InitObject();
3216     record->AddEntry(pixelMap.GetUtdId2(), pixelMap.GetOriginValue());
3217     raw = {1, 2, 3, 4, 5};
3218     auto applicationDefinedRecord = ApplicationDefinedRecord("my.type", raw);
3219     auto size4 = applicationDefinedRecord.GetSize();
3220     applicationDefinedRecord.InitObject();
3221     record->AddEntry(applicationDefinedRecord.GetUtdId2(), applicationDefinedRecord.GetOriginValue());
3222     data.AddRecord(record);
3223     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
3224     ASSERT_EQ(status, E_OK);
3225     QueryOption option2 = { .key = key };
3226     Summary summary;
3227     status = UdmfClient::GetInstance().GetSummary(option2, summary);
3228     ASSERT_EQ(status, E_OK);
3229     EXPECT_EQ(summary.summary["general.plain-text"], size1);
3230     EXPECT_EQ(summary.summary["general.image"], size2);
3231     EXPECT_EQ(summary.summary["openharmony.pixel-map"], size3);
3232     EXPECT_EQ(summary.summary["ApplicationDefinedType"], size4);
3233     EXPECT_EQ(summary.totalSize, record->GetSize());
3234     UnifiedData readData;
3235     status = UdmfClient::GetInstance().GetData(option2, readData);
3236     ASSERT_EQ(E_OK, status);
3237     ASSERT_EQ(1, readData.GetRecords().size());
3238     auto readRecord = readData.GetRecordAt(0);
3239     auto entries = readRecord->GetEntries();
3240     ASSERT_EQ(4, entries->size());
3241     auto readFileUri = std::get<std::shared_ptr<Object>>(entries->at("general.file-uri"));
3242     EXPECT_EQ("general.image", std::get<std::string>(readFileUri->value_[FILE_TYPE]));
3243     EXPECT_EQ("uri", std::get<std::string>(readFileUri->value_[ORI_URI]));
3244     auto readPlainText = std::get<std::shared_ptr<Object>>(entries->at("general.plain-text"));
3245     EXPECT_EQ("abstract", std::get<std::string>(readPlainText->value_[ABSTRACT]));
3246     auto readPixelMap = std::get<std::shared_ptr<Object>>(entries->at("openharmony.pixel-map"));
3247     EXPECT_EQ(5, std::get<std::vector<uint8_t>>(readPixelMap->value_[PIXEL_MAP]).size());
3248     auto readDefinedRecord = std::get<std::shared_ptr<Object>>(entries->at("my.type"));
3249     EXPECT_EQ(5, std::get<std::vector<uint8_t>>(readDefinedRecord->value_[ARRAY_BUFFER]).size());
3250     auto valueType = readRecord->GetValue();
3251     EXPECT_TRUE(std::holds_alternative<std::monostate>(readRecord->GetValue()));
3252     LOG_INFO(UDMF_TEST, "GetSummary004 end.");
3253 }
3254 
3255 /**
3256 * @tc.name: GetSummary005
3257 * @tc.desc: Get summary data for entries
3258 * @tc.type: FUNC
3259 */
3260 HWTEST_F(UdmfClientTest, GetSummary005, TestSize.Level1)
3261 {
3262     LOG_INFO(UDMF_TEST, "GetSummary005 begin.");
3263 
3264     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
3265     UnifiedData data;
3266     std::string key;
3267 
3268     UDDetails details;
3269     details.insert({ "udmf_key", "udmf_value" });
3270 
3271     auto record = std::make_shared<Html>("content1", "content2");
3272     auto size0 = record->GetSize();
3273 
3274     auto link = Link("url", "descritpion");
3275     auto size1 = link.GetSize();
3276     link.InitObject();
3277     record->AddEntry(link.GetUtdId2(), link.GetOriginValue());
3278 
3279     auto folder = Folder("uri");
3280     folder.SetDetails(details);
3281     auto size2 = folder.GetSize();
3282     folder.InitObject();
3283     record->AddEntry(folder.GetUtdId2(), folder.GetOriginValue());
3284 
3285     std::vector<uint8_t> raw = {1, 2, 3, 4, 5};
3286     auto applicationDefinedRecord1 = ApplicationDefinedRecord("your.type", raw);
3287     auto size3 = applicationDefinedRecord1.GetSize();
3288     applicationDefinedRecord1.InitObject();
3289     record->AddEntry(applicationDefinedRecord1.GetUtdId2(), applicationDefinedRecord1.GetOriginValue());
3290 
3291     raw = {1, 2, 3, 4, 5};
3292     auto applicationDefinedRecord2 = ApplicationDefinedRecord("my.type", raw);
3293     auto size4 = applicationDefinedRecord2.GetSize();
3294     applicationDefinedRecord2.InitObject();
3295     record->AddEntry(applicationDefinedRecord2.GetUtdId2(), applicationDefinedRecord2.GetOriginValue());
3296 
3297     auto form = SystemDefinedForm();
3298     form.SetDetails(details);
3299     form.SetDetails(details);
3300     form.SetFormId(123);
3301     form.SetFormName("formName");
3302     form.SetModule("module");
3303     form.SetAbilityName("abilityName");
3304     form.SetBundleName("bundleName");
3305     auto size5 = form.GetSize();
3306     form.InitObject();
3307     record->AddEntry(form.GetUtdId2(), form.GetOriginValue());
3308 
3309     raw = {1, 2, 3, 4, 5};
3310     std::shared_ptr<Object> obj = std::make_shared<Object>();
3311     obj->value_[UNIFORM_DATA_TYPE] = "general.content-form";
3312     obj->value_[THUMB_DATA] = raw;
3313     obj->value_[THUMB_DATA_LENGTH] = 5;
3314     obj->value_[DESCRIPTION] = "descritpion";
3315     obj->value_[TITLE] = "title";
3316     obj->value_[APP_ICON] = raw;
3317     obj->value_[APP_ICON_LENGTH] = 5;
3318     obj->value_[APP_NAME] = "appName";
3319     obj->value_[LINK_URL] = "linkUri";
3320     auto contentForm = UnifiedRecord(CONTENT_FORM, obj);
3321     auto size6 = contentForm.GetSize();
3322     record->AddEntry(contentForm.GetUtdId(), contentForm.GetOriginValue());
3323 
3324     data.AddRecord(record);
3325 
3326     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
3327     ASSERT_EQ(status, E_OK);
3328 
3329     QueryOption option2 = { .key = key };
3330     Summary summary;
3331     status = UdmfClient::GetInstance().GetSummary(option2, summary);
3332 
3333     LOG_INFO(UDMF_TEST, "GetSummary005 GetSummary.");
3334 
3335     ASSERT_EQ(status, E_OK);
3336     EXPECT_EQ(summary.summary["general.html"], size0);
3337     EXPECT_EQ(summary.summary["general.hyperlink"], size1);
3338     EXPECT_EQ(summary.summary["general.folder"], size2);
3339     EXPECT_EQ(summary.summary["ApplicationDefinedType"], size3 + size4);
3340     EXPECT_EQ(summary.summary["openharmony.form"], size5);
3341     EXPECT_EQ(summary.summary["general.content-form"], size6);
3342 
3343     EXPECT_EQ(summary.totalSize, record->GetSize());
3344 
3345     UnifiedData readData;
3346     status = UdmfClient::GetInstance().GetData(option2, readData);
3347     LOG_INFO(UDMF_TEST, "GetSummary005 GetSummary1.");
3348     ASSERT_EQ(E_OK, status);
3349     ASSERT_EQ(1, readData.GetRecords().size());
3350     auto readRecord = readData.GetRecordAt(0);
3351     ValueType recordVal = readRecord->GetValue();
3352     auto entries = readRecord->GetEntries();
3353     ASSERT_EQ(7, entries->size());
3354     auto readHtml = std::get<std::shared_ptr<Object>>(entries->at("general.html"));
3355     EXPECT_EQ("content1", std::get<std::string>(readHtml->value_[HTML_CONTENT]));
3356     auto readHyperlink = std::get<std::shared_ptr<Object>>(entries->at("general.hyperlink"));
3357     EXPECT_EQ("descritpion", std::get<std::string>(readHyperlink->value_[DESCRIPTION]));
3358     auto readFolder = std::get<std::shared_ptr<Object>>(entries->at("general.file-uri"));
3359     EXPECT_EQ("uri", std::get<std::string>(readFolder->value_[ORI_URI]));
3360     auto readDefinedRecord = std::get<std::shared_ptr<Object>>(entries->at("your.type"));
3361     EXPECT_EQ(5, std::get<std::vector<uint8_t>>(readDefinedRecord->value_[ARRAY_BUFFER]).size());
3362     auto readDefinedRecord2 = std::get<std::shared_ptr<Object>>(entries->at("my.type"));
3363     EXPECT_EQ(5, std::get<std::vector<uint8_t>>(readDefinedRecord2->value_[ARRAY_BUFFER]).size());
3364     auto readForm = std::get<std::shared_ptr<Object>>(entries->at("openharmony.form"));
3365     EXPECT_EQ("module", std::get<std::string>(readForm->value_[MODULE]));
3366     auto readCotentForm = std::get<std::shared_ptr<Object>>(entries->at("general.content-form"));
3367     EXPECT_EQ("title", std::get<std::string>(readCotentForm->value_[TITLE]));
3368     LOG_INFO(UDMF_TEST, "GetSummary005 end.");
3369 }
3370 
3371 
3372 /**
3373 * @tc.name: FileUriCastTest001
3374 * @tc.desc: Cast file uri type record to verify works well
3375 * @tc.type: FUNC
3376 */
3377 HWTEST_F(UdmfClientTest, FileUriCastTest001, TestSize.Level1)
3378 {
3379     LOG_INFO(UDMF_TEST, "FileUriCastTest001 begin.");
3380     UnifiedData data;
3381     GetFileUriUnifiedData(data);
3382     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
3383     std::string key;
3384     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
3385     ASSERT_EQ(status, E_OK);
3386     QueryOption option2 = { .key = key };
3387     UnifiedData readData;
3388     status = UdmfClient::GetInstance().GetData(option2, readData);
3389     auto record0 = readData.GetRecordAt(0);
3390     auto fileValue = record0->GetValue();
3391     std::shared_ptr<Object> fileObj = std::get<std::shared_ptr<Object>>(fileValue);
3392     EXPECT_EQ(std::get<std::string>(fileObj->value_[FILE_URI_PARAM]), "http://demo.com");
3393     EXPECT_EQ(std::get<std::string>(fileObj->value_[FILE_TYPE]), "abcdefg");
3394     File *file = reinterpret_cast<File *>(record0.get());
3395     EXPECT_EQ(file->GetUri(), "http://demo.com");
3396     auto record1 = readData.GetRecordAt(1);
3397     auto imageValue = record1->GetValue();
3398     std::shared_ptr<Object> imageObj = std::get<std::shared_ptr<Object>>(imageValue);
3399     EXPECT_EQ(std::get<std::string>(imageObj->value_[FILE_URI_PARAM]), "http://demo.com");
3400     EXPECT_EQ(std::get<std::string>(imageObj->value_[FILE_TYPE]), "general.image");
3401     File *image = reinterpret_cast<Image *>(record1.get());
3402     EXPECT_EQ(image->GetUri(), "http://demo.com");
3403     auto record2 = readData.GetRecordAt(2);
3404     File *audio = reinterpret_cast<Audio *>(record2.get());
3405     EXPECT_EQ(audio->GetUri(), "http://demo.com");
3406     LOG_INFO(UDMF_TEST, "FileUriCastTest001 end.");
3407 }
3408 
3409 /**
3410 * @tc.name: SetBatchData001
3411 * @tc.desc: Set 2k record and get data
3412 * @tc.type: FUNC
3413 */
3414 HWTEST_F(UdmfClientTest, SetBatchData001, TestSize.Level1)
3415 {
3416     LOG_INFO(UDMF_TEST, "SetBatchData001 begin.");
3417     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
3418     UnifiedData data1;
3419     std::string key;
3420     for (int32_t i = 0; i < BATCH_SIZE_2K; ++i) {
3421         auto file1 = std::make_shared<File>();
3422         file1->SetRemoteUri("remoteUri");
3423         UDDetails details1;
3424         details1.insert({ "udmf_key", "udmf_value" });
3425         file1->SetDetails(details1);
3426         data1.AddRecord(file1);
3427     }
3428     auto start = std::chrono::high_resolution_clock::now();
3429     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
3430     ASSERT_EQ(status, E_OK);
3431     auto end = std::chrono::high_resolution_clock::now();
3432     std::chrono::duration<double> du = end - start;
3433     double duration = BASE_CONVERSION * du.count();
3434     LOG_INFO(UDMF_TEST, "setDataDuration = %{public}.1f ms.", duration);
3435 
3436     QueryOption option2 = { .key = key };
3437     Summary summary;
3438     start = std::chrono::high_resolution_clock::now();
3439     status = UdmfClient::GetInstance().GetSummary(option2, summary);
3440     end = std::chrono::high_resolution_clock::now();
3441     du = end - start;
3442     duration = BASE_CONVERSION * du.count();
3443     LOG_INFO(UDMF_TEST, "getSummaryDuration = %{public}.1f ms.", duration);
3444 
3445     start = std::chrono::high_resolution_clock::now();
3446     AddPrivilege(option2);
3447     end = std::chrono::high_resolution_clock::now();
3448     du = end - start;
3449     duration = BASE_CONVERSION * du.count();
3450     LOG_INFO(UDMF_TEST, "addPrivilegeDuration = %{public}.1f ms.", duration);
3451 
3452     SetHapToken2();
3453     UnifiedData data2;
3454     start = std::chrono::high_resolution_clock::now();
3455     status = UdmfClient::GetInstance().GetData(option2, data2);
3456     ASSERT_EQ(status, E_OK);
3457     end = std::chrono::high_resolution_clock::now();
3458     du = end - start;
3459     duration = BASE_CONVERSION * du.count();
3460     LOG_INFO(UDMF_TEST, "getDataDuration = %{public}.1f ms.", duration);
3461 
3462     ASSERT_EQ(data2.GetRecords().size(), BATCH_SIZE_2K);
3463     for (auto record : data2.GetRecords()) {
3464         ASSERT_NE(record, nullptr);
3465         EXPECT_EQ(record->GetType(), UDType::FILE);
3466     }
3467     LOG_INFO(UDMF_TEST, "SetBatchData001 end.");
3468 }
3469 
3470 /**
3471 * @tc.name: SetBatchData002
3472 * @tc.desc: Set 5k record and get data
3473 * @tc.type: FUNC
3474 */
3475 HWTEST_F(UdmfClientTest, SetBatchData002, TestSize.Level1)
3476 {
3477     LOG_INFO(UDMF_TEST, "SetBatchData002 begin.");
3478     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
3479     UnifiedData data1;
3480     std::string key;
3481     for (int32_t i = 0; i < BATCH_SIZE_5K; ++i) {
3482         auto file1 = std::make_shared<File>();
3483         file1->SetRemoteUri("remoteUri");
3484         UDDetails details1;
3485         details1.insert({ "udmf_key", "udmf_value" });
3486         file1->SetDetails(details1);
3487         data1.AddRecord(file1);
3488     }
3489     auto start = std::chrono::high_resolution_clock::now();
3490     auto status = UdmfClient::GetInstance().SetData(option1, data1, key);
3491     ASSERT_EQ(status, E_OK);
3492     auto end = std::chrono::high_resolution_clock::now();
3493     std::chrono::duration<double> du = end - start;
3494     double duration = BASE_CONVERSION * du.count();
3495     LOG_INFO(UDMF_TEST, "setDataDuration = %{public}.1f ms.", duration);
3496 
3497     QueryOption option2 = { .key = key };
3498     Summary summary;
3499     start = std::chrono::high_resolution_clock::now();
3500     status = UdmfClient::GetInstance().GetSummary(option2, summary);
3501     end = std::chrono::high_resolution_clock::now();
3502     du = end - start;
3503     duration = BASE_CONVERSION * du.count();
3504     LOG_INFO(UDMF_TEST, "getSummaryDuration = %{public}.1f ms.", duration);
3505 
3506     start = std::chrono::high_resolution_clock::now();
3507     AddPrivilege(option2);
3508     end = std::chrono::high_resolution_clock::now();
3509     du = end - start;
3510     duration = BASE_CONVERSION * du.count();
3511     LOG_INFO(UDMF_TEST, "addPrivilegeDuration = %{public}.1f ms.", duration);
3512 
3513     SetHapToken2();
3514     UnifiedData data2;
3515     start = std::chrono::high_resolution_clock::now();
3516     status = UdmfClient::GetInstance().GetData(option2, data2);
3517     ASSERT_EQ(status, E_OK);
3518     end = std::chrono::high_resolution_clock::now();
3519     du = end - start;
3520     duration = BASE_CONVERSION * du.count();
3521     LOG_INFO(UDMF_TEST, "getDataDuration = %{public}.1f ms.", duration);
3522 
3523     ASSERT_EQ(data2.GetRecords().size(), BATCH_SIZE_5K);
3524     for (auto record : data2.GetRecords()) {
3525         ASSERT_NE(record, nullptr);
3526         EXPECT_EQ(record->GetType(), UDType::FILE);
3527     }
3528     LOG_INFO(UDMF_TEST, "SetBatchData002 end.");
3529 }
3530 
3531 /**
3532 * @tc.name: GetData002
3533 * @tc.desc: test Marshalling and Unmarshalling properties drag
3534 * @tc.type: FUNC
3535 */
3536 HWTEST_F(UdmfClientTest, GetData002, TestSize.Level1)
3537 {
3538     LOG_INFO(UDMF_TEST, "GetData002 begin.");
3539 
3540     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
3541     UnifiedData data;
3542     std::string key;
3543     auto record = std::make_shared<Html>("htmlContent", "plainContent");
3544     auto link = Link("url", "descritpion");
3545     link.InitObject();
3546     record->AddEntry(link.GetUtdId(), link.GetOriginValue());
3547     data.AddRecord(record);
3548     std::shared_ptr<UnifiedDataProperties> properties = std::make_shared<UnifiedDataProperties>();
3549     std::string tag = "this is a tag of test GetData002";
3550     properties->tag = tag;
3551     properties->shareOptions = CROSS_APP;
3552     data.SetProperties(std::move(properties));
3553     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
3554     ASSERT_EQ(status, E_OK);
3555 
3556     QueryOption option2 = { .key = key };
3557     UnifiedData readData;
3558     status = UdmfClient::GetInstance().GetData(option2, readData);
3559     ASSERT_EQ(status, E_OK);
3560     ASSERT_EQ(readData.GetRecords().size(), 1);
3561     auto readRecord = readData.GetRecordAt(0);
3562     ASSERT_NE(readRecord, nullptr);
3563     auto entries = readRecord->GetEntries();
3564     auto readHtml = std::get<std::shared_ptr<Object>>(entries->at("general.html"));
3565     EXPECT_EQ("htmlContent", std::get<std::string>(readHtml->value_[HTML_CONTENT]));
3566     auto readHyperlink = std::get<std::shared_ptr<Object>>(entries->at("general.hyperlink"));
3567     EXPECT_EQ("descritpion", std::get<std::string>(readHyperlink->value_[DESCRIPTION]));
3568     auto readProperties = readData.GetProperties();
3569     ASSERT_NE(readProperties, nullptr);
3570     EXPECT_EQ(readProperties->tag, tag);
3571     EXPECT_EQ(readProperties->shareOptions, CROSS_APP);
3572 
3573     LOG_INFO(UDMF_TEST, "GetData002 end.");
3574 }
3575 
3576 /**
3577 * @tc.name: GetBatchData001
3578 * @tc.desc: test Marshalling and Unmarshalling properties datahub
3579 * @tc.type: FUNC
3580 */
3581 HWTEST_F(UdmfClientTest, GetBatchData001, TestSize.Level1)
3582 {
3583     LOG_INFO(UDMF_TEST, "GetBatchData001 begin.");
3584 
3585     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
3586     std::vector<UnifiedData> unifiedDataSet;
3587     auto status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
3588     ASSERT_EQ(status, E_OK);
3589     unifiedDataSet.clear();
3590     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3591     ASSERT_EQ(status, E_OK);
3592     unifiedDataSet.clear();
3593 
3594     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
3595     UnifiedData data;
3596     std::shared_ptr<UnifiedRecord> record = std::make_shared<PlainText>(UDType::PLAIN_TEXT, "plainTextContent");
3597     data.AddRecord(record);
3598     std::shared_ptr<UnifiedDataProperties> properties = std::make_shared<UnifiedDataProperties>();
3599     std::string tag = "this is a tag of test GetBatchData001";
3600     properties->tag = tag;
3601     properties->shareOptions = CROSS_APP;
3602     data.SetProperties(std::move(properties));
3603     std::string key;
3604     status = UdmfClient::GetInstance().SetData(customOption, data, key);
3605     ASSERT_EQ(status, E_OK);
3606     query = { .key = key, .intention = Intention::UD_INTENTION_DATA_HUB };
3607     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3608     ASSERT_EQ(status, E_OK);
3609     ASSERT_EQ(unifiedDataSet.size(), 1);
3610     auto record2 = unifiedDataSet[0].GetRecordAt(0);
3611     ValueType value = record2->GetValue();
3612     ASSERT_NE(std::get_if<std::string>(&value), nullptr);
3613     EXPECT_EQ(std::get<std::string>(value), "plainTextContent");
3614     auto readProperties = unifiedDataSet[0].GetProperties();
3615     ASSERT_NE(readProperties, nullptr);
3616     EXPECT_EQ(readProperties->tag, tag);
3617     EXPECT_EQ(readProperties->shareOptions, CROSS_APP);
3618 
3619     LOG_INFO(UDMF_TEST, "GetBatchData001 end.");
3620 }
3621 
3622 /**
3623 * @tc.name: UpdateData003
3624 * @tc.desc: test update data properties
3625 * @tc.type: FUNC
3626 */
3627 HWTEST_F(UdmfClientTest, UpdateData003, TestSize.Level1)
3628 {
3629     LOG_INFO(UDMF_TEST, "UpdateData003 begin.");
3630     QueryOption query = { .intention = Intention::UD_INTENTION_DATA_HUB };
3631     std::vector<UnifiedData> unifiedDataSet;
3632     auto status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
3633     ASSERT_EQ(status, E_OK);
3634     unifiedDataSet.clear();
3635     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3636     ASSERT_EQ(status, E_OK);
3637     unifiedDataSet.clear();
3638     CustomOption customOption = { .intention = Intention::UD_INTENTION_DATA_HUB };
3639     UnifiedData data;
3640     std::shared_ptr<UnifiedRecord> record = std::make_shared<PlainText>(UDType::PLAIN_TEXT, "plainTextContent");
3641     data.AddRecord(record);
3642     std::shared_ptr<UnifiedDataProperties> properties = std::make_shared<UnifiedDataProperties>();
3643     std::string tag = "this is a tag of test UpdateData003";
3644     properties->tag = tag;
3645     data.SetProperties(std::move(properties));
3646     std::string key;
3647     status = UdmfClient::GetInstance().SetData(customOption, data, key);
3648     ASSERT_EQ(status, E_OK);
3649     query = { .key = key, .intention = Intention::UD_INTENTION_DATA_HUB };
3650     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3651     ASSERT_EQ(status, E_OK);
3652     ASSERT_EQ(unifiedDataSet.size(), 1);
3653     auto readProperties = unifiedDataSet[0].GetProperties();
3654     ASSERT_NE(readProperties, nullptr);
3655     EXPECT_EQ(readProperties->tag, tag);
3656     std::shared_ptr<UnifiedDataProperties> properties1 = std::make_shared<UnifiedDataProperties>();
3657     std::string tag1 = "this is a tag of test UpdateData003test";
3658     properties1->tag = tag1;
3659     data.SetProperties(std::move(properties1));
3660     status = UdmfClient::GetInstance().UpdateData(query, data);
3661     ASSERT_EQ(status, E_OK);
3662     unifiedDataSet.clear();
3663     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3664     ASSERT_EQ(status, E_OK);
3665     ASSERT_EQ(unifiedDataSet.size(), 1);
3666     auto readProperties1 = unifiedDataSet[0].GetProperties();
3667     ASSERT_NE(readProperties1, nullptr);
3668     EXPECT_EQ(readProperties1->tag, tag1);
3669     status = UdmfClient::GetInstance().DeleteData(query, unifiedDataSet);
3670     ASSERT_EQ(status, E_OK);
3671     unifiedDataSet.clear();
3672     status = UdmfClient::GetInstance().GetBatchData(query, unifiedDataSet);
3673     ASSERT_EQ(status, E_OK);
3674     ASSERT_TRUE(unifiedDataSet.empty());
3675     LOG_INFO(UDMF_TEST, "UpdateData003 end.");
3676 }
3677 
3678 /**
3679 * @tc.name: SetData036
3680 * @tc.desc: test set html type data image src is base64 format
3681 * @tc.type: FUNC
3682 */
3683 HWTEST_F(UdmfClientTest, SetData036, TestSize.Level1)
3684 {
3685     LOG_INFO(UDMF_TEST, "SetData036 begin.");
3686 
3687     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
3688     UnifiedData data;
3689     std::string key;
3690     std::shared_ptr<Object> obj = std::make_shared<Object>();
3691     obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
3692     obj->value_[FILE_URI_PARAM] = "http://demo.com";
3693     auto record = std::make_shared<UnifiedRecord>(FILE_URI, obj);
3694     std::string html = "<img data-ohos='clipboard' src='data:image/png;base64,IVBORw0KGgoAAAANSUhEUgAAAF'>";
3695     auto htmlRecord = Html(html, "abstract");
3696     htmlRecord.InitObject();
3697     record->AddEntry(htmlRecord.GetUtdId(), htmlRecord.GetOriginValue());
3698     data.AddRecord(record);
3699     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
3700     ASSERT_EQ(status, E_OK);
3701     QueryOption option2 = { .key = key };
3702     AddPrivilege1(option2);
3703     SetHapToken1();
3704     UnifiedData readData;
3705     status = UdmfClient::GetInstance().GetData(option2, readData);
3706     ASSERT_EQ(status, E_OK);
3707     std::shared_ptr<UnifiedRecord> readRecord = readData.GetRecordAt(0);
3708     ASSERT_NE(readRecord, nullptr);
3709     auto uris = readRecord->GetUris();
3710     EXPECT_EQ(uris.size(), 0);
3711 
3712     LOG_INFO(UDMF_TEST, "SetData036 end.");
3713 }
3714 
3715 /**
3716 * @tc.name: GetParentType001
3717 * @tc.desc: test Summary fileType
3718 * @tc.type: FUNC
3719 */
3720 HWTEST_F(UdmfClientTest, GetParentType001, TestSize.Level1)
3721 {
3722     LOG_INFO(UDMF_TEST, "GetParentType001 begin.");
3723     Summary oldSummary;
3724     std::map<std::string, int64_t> sumMap = {
3725         { "general.file", 10 },
3726         { "general.png", 10 },
3727         { "general.html", 10 },
3728         { "general.jpeg", 10 },
3729         { "general.avi", 10 },
3730         { "com.adobe.pdf", 10 },
3731         { "general.text", 10 },
3732         { "aabbcc", 10 }
3733     };
3734     oldSummary.summary = std::move(sumMap);
3735     oldSummary.totalSize = 80;
3736     Summary newSummary;
3737     auto ret = UdmfClient::GetInstance().GetParentType(oldSummary, newSummary);
3738     ASSERT_EQ(ret, E_OK);
3739     EXPECT_EQ(newSummary.totalSize, 80);
3740     EXPECT_EQ(newSummary.summary["general.file"], 20);
3741     EXPECT_EQ(newSummary.summary["general.image"], 20);
3742     EXPECT_EQ(newSummary.summary["general.html"], 10);
3743     EXPECT_EQ(newSummary.summary["general.video"], 10);
3744     EXPECT_EQ(newSummary.summary["aabbcc"], 10);
3745     EXPECT_EQ(newSummary.summary["general.text"], 10);
3746 }
3747 
3748 /**
3749  * @tc.name: GetBundleNameByUdKey001
3750  * @tc.desc: test GetBundleNameByUdKey with valid UD key
3751  * @tc.type: FUNC
3752  */
3753 HWTEST_F(UdmfClientTest, GetBundleNameByUdKey001, TestSize.Level1)
3754 {
3755     std::string key = "udmf://drag/com.example.app/N]2fIEMbrJj@<hH7zpXzzQ>wp:jMuPa7";
3756     std::string expectedBundle = "com.example.app";
3757 
3758     std::string actualBundle = UdmfClient::GetInstance().GetBundleNameByUdKey(key);
3759     EXPECT_EQ(actualBundle, expectedBundle);
3760 }
3761 
3762 /**
3763  * @tc.name: GetBundleNameByUdKey002
3764  * @tc.desc: test GetBundleNameByUdKey with invalid UD key (missing schema)
3765  * @tc.type: FUNC
3766  */
3767 HWTEST_F(UdmfClientTest, GetBundleNameByUdKey002, TestSize.Level1)
3768 {
3769     std::string key = "invalid://share/com.example.app/123";
3770     std::string actualBundle = UdmfClient::GetInstance().GetBundleNameByUdKey(key);
3771     EXPECT_EQ(actualBundle, "");
3772 }
3773 
3774 /**
3775  * @tc.name: GetBundleNameByUdKey003
3776  * @tc.desc: test GetBundleNameByUdKey with incomplete key (missing parts)
3777  * @tc.type: FUNC
3778  */
3779 HWTEST_F(UdmfClientTest, GetBundleNameByUdKey003, TestSize.Level1)
3780 {
3781     std::string key = "udmf://share/com.example.app";
3782     std::string actualBundle = UdmfClient::GetInstance().GetBundleNameByUdKey(key);
3783     EXPECT_EQ(actualBundle, "");
3784 }
3785 
3786 /**
3787  * @tc.name: GetBundleNameByUdKey004
3788  * @tc.desc: test GetBundleNameByUdKey with empty key
3789  * @tc.type: FUNC
3790  */
3791 HWTEST_F(UdmfClientTest, GetBundleNameByUdKey004, TestSize.Level1)
3792 {
3793     std::string key = "";
3794     std::string actualBundle = UdmfClient::GetInstance().GetBundleNameByUdKey(key);
3795     EXPECT_EQ(actualBundle, "");
3796 }
3797 
3798 /**
3799  * @tc.name: GetBundleNameByUdKey005
3800  * @tc.desc: test GetBundleNameByUdKey with valid UD key
3801  * @tc.type: FUNC
3802  */
3803 HWTEST_F(UdmfClientTest, GetBundleNameByUdKey005, TestSize.Level1)
3804 {
3805     std::string key = "udmf://drag/+clone-1+com.example.app/N]2fIEMbrJj@<hH7zpXzzQ>wp:jMuPa7";
3806     std::string expectedBundle = "+clone-1+com.example.app";
3807 
3808     std::string actualBundle = UdmfClient::GetInstance().GetBundleNameByUdKey(key);
3809     EXPECT_EQ(actualBundle, expectedBundle);
3810 }
3811 
3812 /**
3813  * @tc.name: GetBundleNameByUdKey006
3814  * @tc.desc: test GetBundleNameByUdKey with valid UD key
3815  * @tc.type: FUNC
3816  */
3817 HWTEST_F(UdmfClientTest, GetBundleNameByUdKey006, TestSize.Level1)
3818 {
3819     std::string key = "udmf://drag/+clone-5+com.example.app/N]2fIEMbrJj@<hH7zpXzzQ>wp:jMuPa7";
3820     std::string expectedBundle = "+clone-5+com.example.app";
3821 
3822     std::string actualBundle = UdmfClient::GetInstance().GetBundleNameByUdKey(key);
3823     EXPECT_EQ(actualBundle, expectedBundle);
3824 }
3825 
3826 /**
3827  * @tc.name: ProcessDragIfInApp001
3828  * @tc.desc: test ProcessDragIfInApp with valid shareOption
3829  * @tc.type: FUNC
3830  */
3831 HWTEST_F(UdmfClientTest, ProcessDragIfInApp001, TestSize.Level1)
3832 {
3833     UnifiedData unifiedData;
3834     std::string intentionDrag = "drag";
3835     std::string key = "test";
3836 
3837     EXPECT_NO_FATAL_FAILURE(UdmfClient::GetInstance().ProcessDragIfInApp(unifiedData, intentionDrag, key));
3838 }
3839 
3840 /**
3841  * @tc.name: SetData0024
3842  * @tc.desc: test SetData with invalid intention
3843  * @tc.type: FUNC
3844  */
3845 HWTEST_F(UdmfClientTest, SetData0024, TestSize.Level1)
3846 {
3847     CustomOption option;
3848     UnifiedData unifiedData;
3849     std::string key = "test";
3850 
3851     auto ret = UdmfClient::GetInstance().SetData(option, unifiedData, key);
3852     EXPECT_EQ(ret, Status::E_INVALID_PARAMETERS);
3853 }
3854 
3855 /**
3856  * @tc.name: IsAppropriateType001
3857  * @tc.desc: test SetData with invalid intention
3858  * @tc.type: FUNC
3859  */
3860 HWTEST_F(UdmfClientTest, IsAppropriateType001, TestSize.Level1)
3861 {
3862     Summary totalSummary;
3863     std::map<std::string, int64_t> specificSummary = {
3864         { "general.png", 10 },
3865         { "general.jpg", 10 },
3866         { "general.html", 10 }
3867     };
3868     std::map<std::string, int64_t> summary = {
3869         { "general.image", 20 },
3870         { "general.html", 10 }
3871     };
3872     std::map<std::string, std::vector<int32_t>> summaryFormat = {
3873         { "general.png", { Uds_Type::UDS_FILE_URI } },
3874         { "general.jpg", { Uds_Type::UDS_FILE_URI } },
3875         { "general.html", { Uds_Type::UDS_HTML } }
3876     };
3877     totalSummary.summary = summary;
3878     totalSummary.specificSummary = specificSummary;
3879     totalSummary.summaryFormat = summaryFormat;
3880     totalSummary.version = 1;
3881     totalSummary.totalSize = 30;
3882 
3883     std::vector<std::string> allowTypes = { "general.image" };
3884     bool isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3885     EXPECT_TRUE(isAppropriate);
3886 
3887     allowTypes = { "general.hyperlink" };
3888     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3889     EXPECT_FALSE(isAppropriate);
3890 
3891     allowTypes = { "general.html" };
3892     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3893     EXPECT_TRUE(isAppropriate);
3894 }
3895 
3896 /**
3897  * @tc.name: IsAppropriateType002
3898  * @tc.desc: test SetData with invalid intention
3899  * @tc.type: FUNC
3900  */
3901 HWTEST_F(UdmfClientTest, IsAppropriateType002, TestSize.Level1)
3902 {
3903     Summary totalSummary;
3904     std::map<std::string, int64_t> specificSummary = {
3905         { "general.html", 10 }
3906     };
3907     std::map<std::string, int64_t> summary = {
3908         { "general.html", 10 }
3909     };
3910     std::map<std::string, std::vector<int32_t>> summaryFormat = {
3911         { "general.html", { Uds_Type::UDS_FILE_URI } }
3912     };
3913     totalSummary.summary = summary;
3914     totalSummary.specificSummary = specificSummary;
3915     totalSummary.summaryFormat = summaryFormat;
3916     totalSummary.version = 1;
3917     totalSummary.totalSize = 30;
3918 
3919     std::vector<std::string> allowTypes = { "general.html" };
3920     bool isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3921     EXPECT_TRUE(isAppropriate);
3922 
3923     allowTypes = { "general.file" };
3924     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3925     EXPECT_TRUE(isAppropriate);
3926 
3927     allowTypes = { "general.file-uri" };
3928     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3929     EXPECT_TRUE(isAppropriate);
3930 
3931     allowTypes = { "general.image" };
3932     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3933     EXPECT_FALSE(isAppropriate);
3934 
3935     totalSummary.version = 0;
3936     allowTypes = { "general.html" };
3937     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3938     EXPECT_TRUE(isAppropriate);
3939 
3940     allowTypes = { "general.file-uri" };
3941     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3942     EXPECT_FALSE(isAppropriate);
3943 
3944     allowTypes = { "general.image" };
3945     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3946     EXPECT_FALSE(isAppropriate);
3947 }
3948 
3949 /**
3950  * @tc.name: IsAppropriateType002
3951  * @tc.desc: test SetData with invalid intention
3952  * @tc.type: FUNC
3953  */
3954 HWTEST_F(UdmfClientTest, IsAppropriateType003, TestSize.Level1)
3955 {
3956     Summary totalSummary;
3957     std::map<std::string, int64_t> specificSummary = {
3958         { "general.html", 10 }
3959     };
3960     std::map<std::string, int64_t> summary = {
3961         { "general.html", 10 }
3962     };
3963     std::map<std::string, std::vector<int32_t>> summaryFormat = {
3964         { "general.html", { Uds_Type::UDS_HTML } }
3965     };
3966     totalSummary.summary = summary;
3967     totalSummary.specificSummary = specificSummary;
3968     totalSummary.summaryFormat = summaryFormat;
3969     totalSummary.version = 1;
3970     totalSummary.totalSize = 30;
3971 
3972     std::vector<std::string> allowTypes = { "general.html" };
3973     bool isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3974     EXPECT_TRUE(isAppropriate);
3975 
3976     allowTypes = { "general.file" };
3977     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3978     EXPECT_FALSE(isAppropriate);
3979 
3980     allowTypes = { "general.file-uri" };
3981     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3982     EXPECT_FALSE(isAppropriate);
3983 
3984     allowTypes = { "general.image" };
3985     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3986     EXPECT_FALSE(isAppropriate);
3987 
3988     totalSummary.version = 0;
3989     allowTypes = { "general.html" };
3990     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3991     EXPECT_TRUE(isAppropriate);
3992 
3993     allowTypes = { "general.file-uri" };
3994     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3995     EXPECT_FALSE(isAppropriate);
3996 
3997     allowTypes = { "general.image" };
3998     isAppropriate = UdmfClient::GetInstance().IsAppropriateType(totalSummary, allowTypes);
3999     EXPECT_FALSE(isAppropriate);
4000 }
4001 
4002 /**
4003 * @tc.name: GetSummary006
4004 * @tc.desc: Get summary data for entries
4005 * @tc.type: FUNC
4006 */
4007 HWTEST_F(UdmfClientTest, GetSummary006, TestSize.Level1)
4008 {
4009     LOG_INFO(UDMF_TEST, "GetSummary006 begin.");
4010     CustomOption option1 = { .intention = Intention::UD_INTENTION_DRAG };
4011     UnifiedData data;
4012     std::string key;
4013 
4014     UDDetails details;
4015     details.insert({ "udmf_key", "udmf_value" });
4016 
4017     auto record = std::make_shared<Html>("content1", "content2");
4018     auto size0 = record->GetSize();
4019 
4020     auto folder = Folder("uri");
4021     folder.SetDetails(details);
4022     folder.InitObject();
4023     record->AddEntry(folder.GetUtdId2(), folder.GetOriginValue());
4024 
4025     std::shared_ptr<Object> obj = std::make_shared<Object>();
4026     obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
4027     obj->value_[FILE_URI_PARAM] = "http://demo.com";
4028     obj->value_[FILE_TYPE] = "general.html";
4029     auto size3 = ObjectUtils::GetValueSize(obj, false);
4030     record->AddEntry("general.file-uri", obj);
4031 
4032     data.AddRecord(record);
4033 
4034     std::shared_ptr<Object> obj1 = std::make_shared<Object>();
4035     obj1->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
4036     obj1->value_[FILE_URI_PARAM] = "http://demo.com";
4037     obj1->value_[FILE_TYPE] = "general.plain-text";
4038     auto size4 = ObjectUtils::GetValueSize(obj1, false);
4039     auto record1 = std::make_shared<UnifiedRecord>(FILE_URI, obj1);
4040     data.AddRecord(record1);
4041 
4042     std::shared_ptr<Object> obj2 = std::make_shared<Object>();
4043     obj2->value_[UNIFORM_DATA_TYPE] = "general.file-uri";
4044     obj2->value_[FILE_URI_PARAM] = "http://demo.com";
4045     obj2->value_[FILE_TYPE] = "general.png";
4046     auto size5 = ObjectUtils::GetValueSize(obj2, false);
4047     auto record2 = std::make_shared<UnifiedRecord>(FILE_URI, obj2);
4048     data.AddRecord(record2);
4049 
4050     auto status = UdmfClient::GetInstance().SetData(option1, data, key);
4051     ASSERT_EQ(status, E_OK);
4052 
4053     QueryOption option2 = { .key = key };
4054     Summary summary;
4055     status = UdmfClient::GetInstance().GetSummary(option2, summary);
4056 
4057     ASSERT_EQ(status, E_OK);
4058     EXPECT_EQ(summary.summary["general.html"], size0);
4059     EXPECT_EQ(summary.summary["general.folder"], 0);
4060     EXPECT_EQ(summary.summary["general.file"], size3 + size4);
4061     EXPECT_EQ(summary.summary["general.image"], size5);
4062 
4063     EXPECT_EQ(summary.specificSummary["general.html"], size0 + size3);
4064     EXPECT_EQ(summary.specificSummary["general.folder"], 0);
4065     EXPECT_EQ(summary.specificSummary["general.plain-text"], size4);
4066     EXPECT_EQ(summary.specificSummary["general.png"], size5);
4067     EXPECT_EQ(summary.totalSize, record->GetSize() + record1->GetSize() + record2->GetSize());
4068 
4069     EXPECT_EQ(summary.version, 1);
4070     auto htmlFormat = summary.summaryFormat["general.html"];
4071     EXPECT_TRUE(std::find(htmlFormat.begin(), htmlFormat.end(), Uds_Type::UDS_FILE_URI) != htmlFormat.end());
4072     EXPECT_TRUE(std::find(htmlFormat.begin(), htmlFormat.end(), Uds_Type::UDS_HTML) != htmlFormat.end());
4073 
4074     auto textFormat = summary.summaryFormat["general.plain-text"];
4075     EXPECT_TRUE(std::find(textFormat.begin(), textFormat.end(), Uds_Type::UDS_FILE_URI) != textFormat.end());
4076 
4077     auto pngFormat = summary.summaryFormat["general.png"];
4078     EXPECT_TRUE(std::find(pngFormat.begin(), pngFormat.end(), Uds_Type::UDS_FILE_URI) != pngFormat.end());
4079     LOG_INFO(UDMF_TEST, "GetSummary006 end.");
4080 }
4081 } // OHOS::Test