1 /*
2  * Copyright (c) 2024 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 "UnifiedMetaTest"
16 
17 #include <unistd.h>
18 #include <gtest/gtest.h>
19 #include <string>
20 
21 #include "logger.h"
22 #include "udmf_capi_common.h"
23 #include "unified_meta.h"
24 
25 using namespace testing::ext;
26 using namespace OHOS::UDMF;
27 using namespace OHOS;
28 namespace OHOS::Test {
29 using namespace std;
30 
31 class UnifiedMetaTest : public testing::Test {
32 public:
33     static void SetUpTestCase();
34     static void TearDownTestCase();
35     void SetUp() override;
36     void TearDown() override;
37     static constexpr int INT32_SIZE = 4;
38     static constexpr int INT64_SIZE = 8;
39     static constexpr int BOOL_SIZE = 1;
40     static constexpr int DOUBLE_SIZE = 8;
41 };
42 
SetUpTestCase()43 void UnifiedMetaTest::SetUpTestCase()
44 {
45 }
46 
TearDownTestCase()47 void UnifiedMetaTest::TearDownTestCase()
48 {
49 }
50 
SetUp()51 void UnifiedMetaTest::SetUp()
52 {
53 }
54 
TearDown()55 void UnifiedMetaTest::TearDown()
56 {
57 }
58 
59 /**
60 * @tc.name: IsValidType001
61 * @tc.desc: Normal testcase of IsValidType
62 * @tc.type: FUNC
63 */
HWTEST_F(UnifiedMetaTest, IsValidType001, TestSize.Level1)64 HWTEST_F(UnifiedMetaTest, IsValidType001, TestSize.Level1)
65 {
66     LOG_INFO(UDMF_TEST, "IsValidType001 begin.");
67     int32_t value = 0;
68     bool ret = UnifiedDataUtils::IsValidType(value);
69     EXPECT_EQ(ret, value >= ENTITY && value < UD_BUTT);
70     LOG_INFO(UDMF_TEST, "IsValidType001 end.");
71 }
72 
73 /**
74 * @tc.name: GetEnumNum001
75 * @tc.desc: Normal testcase of GetEnumNum
76 * @tc.type: FUNC
77 */
HWTEST_F(UnifiedMetaTest, GetEnumNum001, TestSize.Level1)78 HWTEST_F(UnifiedMetaTest, GetEnumNum001, TestSize.Level1)
79 {
80     LOG_INFO(UDMF_TEST, "GetEnumNum001 begin.");
81     const std::string shareOption = "";
82     int32_t ret = ShareOptionsUtil::GetEnumNum(shareOption);
83     EXPECT_EQ(ret, ShareOptions::SHARE_OPTIONS_BUTT);
84     LOG_INFO(UDMF_TEST, "GetEnumNum001 end.");
85 }
86 
87 /**
88 * @tc.name: GetEnumNum002
89 * @tc.desc: Abnormal testcase of GetEnumNum, shareOption is APP_SHARE_OPTIONS.enumNum
90 * @tc.type: FUNC
91 */
HWTEST_F(UnifiedMetaTest, GetEnumNum002, TestSize.Level1)92 HWTEST_F(UnifiedMetaTest, GetEnumNum002, TestSize.Level1)
93 {
94     LOG_INFO(UDMF_TEST, "GetEnumNum002 begin.");
95     const std::string shareOption = "CROSS_APP";
96     int32_t ret = ShareOptionsUtil::GetEnumNum(shareOption);
97     EXPECT_EQ(ret, 1);
98     LOG_INFO(UDMF_TEST, "GetEnumNum002 end.");
99 }
100 
101 /**
102 * @tc.name: GetEnumStr001
103 * @tc.desc: Normal testcase of GetEnumStr
104 * @tc.type: FUNC
105 */
HWTEST_F(UnifiedMetaTest, GetEnumStr001, TestSize.Level1)106 HWTEST_F(UnifiedMetaTest, GetEnumStr001, TestSize.Level1)
107 {
108     LOG_INFO(UDMF_TEST, "GetEnumStr001 begin.");
109     int32_t shareOption = 4;
110     std::string ret = ShareOptionsUtil::GetEnumStr(shareOption);
111     EXPECT_EQ(ret, "");
112     LOG_INFO(UDMF_TEST, "GetEnumStr001 end.");
113 }
114 
115 /**
116 * @tc.name: GetEnumStr002
117 * @tc.desc: Abnormal testcase of GetEnumStr, shareOption is APP_SHARE_OPTIONS.enumStr
118 * @tc.type: FUNC
119 */
HWTEST_F(UnifiedMetaTest, GetEnumStr002, TestSize.Level1)120 HWTEST_F(UnifiedMetaTest, GetEnumStr002, TestSize.Level1)
121 {
122     LOG_INFO(UDMF_TEST, "GetEnumStr002 begin.");
123     int32_t shareOption = 1;
124     std::string ret = ShareOptionsUtil::GetEnumStr(shareOption);
125     EXPECT_NE(ret, "");
126     LOG_INFO(UDMF_TEST, "GetEnumStr002 end.");
127 }
128 
129 /**
130 * @tc.name: IsValidUtdId001
131 * @tc.desc: Normal testcase of IsValidUtdId
132 * @tc.type: FUNC
133 */
HWTEST_F(UnifiedMetaTest, IsValidUtdId001, TestSize.Level1)134 HWTEST_F(UnifiedMetaTest, IsValidUtdId001, TestSize.Level1)
135 {
136     std::string utdId = "general.text";
137     bool ret = UtdUtils::IsValidUtdId(utdId);
138     EXPECT_TRUE(ret);
139 }
140 
141 /**
142 * @tc.name: IsValidUtdId002
143 * @tc.desc: Abnormal testcase of IsValidUtdId
144 * @tc.type: FUNC
145 */
HWTEST_F(UnifiedMetaTest, IsValidUtdId002, TestSize.Level1)146 HWTEST_F(UnifiedMetaTest, IsValidUtdId002, TestSize.Level1)
147 {
148     std::string utdId = "general.ptp";
149     bool ret = UtdUtils::IsValidUtdId(utdId);
150     EXPECT_FALSE(ret);
151 }
152 
153 /**
154 * @tc.name: GetUtdEnumFromUtdId001
155 * @tc.desc: Normal testcase of GetUtdEnumFromUtdId
156 * @tc.type: FUNC
157 */
HWTEST_F(UnifiedMetaTest, GetUtdEnumFromUtdId001, TestSize.Level1)158 HWTEST_F(UnifiedMetaTest, GetUtdEnumFromUtdId001, TestSize.Level1)
159 {
160     std::string utdId = "general.text";
161     int32_t ret = UtdUtils::GetUtdEnumFromUtdId(utdId);
162     EXPECT_EQ(ret, UDType::TEXT);
163 }
164 
165 /**
166 * @tc.name: GetUtdEnumFromUtdId002
167 * @tc.desc: Abnormal testcase of GetUtdEnumFromUtdId
168 * @tc.type: FUNC
169 */
HWTEST_F(UnifiedMetaTest, GetUtdEnumFromUtdId002, TestSize.Level1)170 HWTEST_F(UnifiedMetaTest, GetUtdEnumFromUtdId002, TestSize.Level1)
171 {
172     std::string utdId = "general.ptp";
173     int32_t ret = UtdUtils::GetUtdEnumFromUtdId(utdId);
174     EXPECT_EQ(ret, UDType::UD_BUTT);
175 }
176 
177 /**
178 * @tc.name: GetUtdIdFromUtdEnum001
179 * @tc.desc: Normal testcase of GetUtdIdFromUtdEnum
180 * @tc.type: FUNC
181 */
HWTEST_F(UnifiedMetaTest, GetUtdIdFromUtdEnum001, TestSize.Level1)182 HWTEST_F(UnifiedMetaTest, GetUtdIdFromUtdEnum001, TestSize.Level1)
183 {
184     std::string ret = UtdUtils::GetUtdIdFromUtdEnum(UDType::TEXT);
185     EXPECT_EQ(ret, "general.text");
186 }
187 
188 /**
189 * @tc.name: GetUtdIdFromUtdEnum002
190 * @tc.desc: Abnormal testcase of GetUtdIdFromUtdEnum
191 * @tc.type: FUNC
192 */
HWTEST_F(UnifiedMetaTest, GetUtdIdFromUtdEnum002, TestSize.Level1)193 HWTEST_F(UnifiedMetaTest, GetUtdIdFromUtdEnum002, TestSize.Level1)
194 {
195     std::string ret = UtdUtils::GetUtdIdFromUtdEnum(UDType::UD_BUTT);
196     EXPECT_TRUE(ret.empty());
197 
198     std::string ret1 = UtdUtils::GetUtdIdFromUtdEnum(UDType::UD_BUTT + 1);
199     EXPECT_TRUE(ret1.empty());
200 }
201 
202 /**
203 * @tc.name: GetUtdTypes001
204 * @tc.desc: Normal testcase of GetUtdTypes
205 * @tc.type: FUNC
206 */
HWTEST_F(UnifiedMetaTest, GetUtdTypes001, TestSize.Level1)207 HWTEST_F(UnifiedMetaTest, GetUtdTypes001, TestSize.Level1)
208 {
209     std::vector<UtdType> ret = UtdUtils::GetUtdTypes();
210     EXPECT_TRUE(ret.size() > 0);
211 }
212 
213 /**
214 * @tc.name: UnifiedDataUtilsIsValidType001
215 * @tc.desc: Abnormal testcase of IsValidType
216 * @tc.type: FUNC
217 */
HWTEST_F(UnifiedMetaTest, UnifiedDataUtilsIsValidType001, TestSize.Level1)218 HWTEST_F(UnifiedMetaTest, UnifiedDataUtilsIsValidType001, TestSize.Level1)
219 {
220     bool ret = UnifiedDataUtils::IsValidType(UDType::UD_BUTT);
221     EXPECT_FALSE(ret);
222 
223     bool ret1 = UnifiedDataUtils::IsValidType(UDType::ENTITY - 1);
224     EXPECT_FALSE(ret1);
225 
226     bool ret2 = UnifiedDataUtils::IsValidType(UDType::UD_BUTT + 1);
227     EXPECT_FALSE(ret2);
228 }
229 
230 /**
231 * @tc.name: UnifiedDataUtilsIsValidType002
232 * @tc.desc: Normal testcase of IsValidType
233 * @tc.type: FUNC
234 */
HWTEST_F(UnifiedMetaTest, UnifiedDataUtilsIsValidType002, TestSize.Level1)235 HWTEST_F(UnifiedMetaTest, UnifiedDataUtilsIsValidType002, TestSize.Level1)
236 {
237     bool ret = UnifiedDataUtils::IsValidType(UDType::TEXT);
238     EXPECT_TRUE(ret);
239 
240     bool ret1 = UnifiedDataUtils::IsValidType(UDType::ENTITY);
241     EXPECT_TRUE(ret1);
242 }
243 
244 /**
245 * @tc.name: IsValidIntention001
246 * @tc.desc: Normal testcase of IsValidIntention
247 * @tc.type: FUNC
248 */
HWTEST_F(UnifiedMetaTest, IsValidIntention001, TestSize.Level1)249 HWTEST_F(UnifiedMetaTest, IsValidIntention001, TestSize.Level1)
250 {
251     bool ret = UnifiedDataUtils::IsValidIntention(Intention::UD_INTENTION_DRAG);
252     EXPECT_TRUE(ret);
253 
254     bool ret1 = UnifiedDataUtils::IsValidIntention(Intention::UD_INTENTION_DATA_HUB);
255     EXPECT_TRUE(ret1);
256 }
257 
258 /**
259 * @tc.name: IsValidIntention002
260 * @tc.desc: Abnormal testcase of IsValidIntention
261 * @tc.type: FUNC
262 */
HWTEST_F(UnifiedMetaTest, IsValidIntention002, TestSize.Level1)263 HWTEST_F(UnifiedMetaTest, IsValidIntention002, TestSize.Level1)
264 {
265     bool ret = UnifiedDataUtils::IsValidIntention(Intention::UD_INTENTION_BASE);
266     EXPECT_FALSE(ret);
267 
268     bool ret1 = UnifiedDataUtils::IsValidIntention(Intention::UD_INTENTION_BUTT);
269     EXPECT_FALSE(ret1);
270 
271     bool ret2 = UnifiedDataUtils::IsValidIntention(Intention::UD_INTENTION_BASE - 1);
272     EXPECT_FALSE(ret2);
273 
274     bool ret3 = UnifiedDataUtils::IsValidIntention(Intention::UD_INTENTION_BUTT + 1);
275     EXPECT_FALSE(ret3);
276 }
277 
278 /**
279 * @tc.name: ShareOptionsUtilIsValid001
280 * @tc.desc: Normal testcase of IsValid
281 * @tc.type: FUNC
282 */
HWTEST_F(UnifiedMetaTest, ShareOptionsUtilIsValid001, TestSize.Level1)283 HWTEST_F(UnifiedMetaTest, ShareOptionsUtilIsValid001, TestSize.Level1)
284 {
285     bool ret = ShareOptionsUtil::IsValid(ShareOptions::IN_APP);
286     EXPECT_TRUE(ret);
287 
288     bool ret1 = ShareOptionsUtil::IsValid(ShareOptions::CROSS_APP);
289     EXPECT_TRUE(ret1);
290 }
291 
292 /**
293 * @tc.name: ShareOptionsUtilIsValid002
294 * @tc.desc: Abnormal testcase of IsValid
295 * @tc.type: FUNC
296 */
HWTEST_F(UnifiedMetaTest, ShareOptionsUtilIsValid002, TestSize.Level1)297 HWTEST_F(UnifiedMetaTest, ShareOptionsUtilIsValid002, TestSize.Level1)
298 {
299     bool ret = ShareOptionsUtil::IsValid(ShareOptions::IN_APP - 1);
300     EXPECT_FALSE(ret);
301 
302     bool ret1 = ShareOptionsUtil::IsValid(ShareOptions::SHARE_OPTIONS_BUTT);
303     EXPECT_FALSE(ret1);
304 
305     bool ret2 = ShareOptionsUtil::IsValid(ShareOptions::SHARE_OPTIONS_BUTT + 1);
306     EXPECT_FALSE(ret2);
307 }
308 
309 /**
310 * @tc.name: GetVariantSize001
311 * @tc.desc: Normal testcase of GetVariantSize
312 * @tc.type: FUNC
313 */
HWTEST_F(UnifiedMetaTest, GetVariantSize001, TestSize.Level1)314 HWTEST_F(UnifiedMetaTest, GetVariantSize001, TestSize.Level1)
315 {
316     UDVariant variant;
317     // case int32_t
318     variant = (int32_t)100;
319     size_t int32tSize = UnifiedDataUtils::GetVariantSize(variant);
320     EXPECT_EQ(int32tSize, INT32_SIZE);
321 
322     variant = (int64_t)100;
323     size_t int64tSize = UnifiedDataUtils::GetVariantSize(variant);
324     EXPECT_EQ(int64tSize, INT64_SIZE);
325 
326     variant = true;
327     size_t boolSize = UnifiedDataUtils::GetVariantSize(variant);
328     EXPECT_EQ(boolSize, BOOL_SIZE);
329 
330     variant = 100.0001;
331     size_t doubleSize = UnifiedDataUtils::GetVariantSize(variant);
332     EXPECT_EQ(doubleSize, DOUBLE_SIZE);
333 
334     std::string str = "string size";
335     variant = str;
336     size_t strSize = UnifiedDataUtils::GetVariantSize(variant);
337     EXPECT_EQ(strSize, str.size());
338 
339     std::vector<uint8_t> uVecEmpty;
340     variant = uVecEmpty;
341     size_t vecEmpSize = UnifiedDataUtils::GetVariantSize(variant);
342     EXPECT_EQ(vecEmpSize, uVecEmpty.size());
343 
344     std::vector<uint8_t> uVec(100, 100);
345     variant = uVec;
346     size_t uVecSize = UnifiedDataUtils::GetVariantSize(variant);
347     EXPECT_EQ(uVecSize, uVec.size());
348 }
349 
350 /**
351 * @tc.name: GetDetailsSize001
352 * @tc.desc: Normal testcase of GetDetailsSize
353 * @tc.type: FUNC
354 */
HWTEST_F(UnifiedMetaTest, GetDetailsSize001, TestSize.Level1)355 HWTEST_F(UnifiedMetaTest, GetDetailsSize001, TestSize.Level1)
356 {
357     std::string int32Key = "int32Key";
358     std::string int64Key = "int64Key";
359     std::string strKey = "strKey";
360     std::string str = "string size";
361     UDDetails details = {
362         {int32Key, (int32_t)100},
363         {int64Key, (int64_t)100},
364         {strKey, str}
365     };
366     size_t ret = UnifiedDataUtils::GetDetailsSize(details);
367     EXPECT_EQ(ret, int32Key.size() + int64Key.size() + strKey.size() + INT32_SIZE + INT64_SIZE + str.size());
368 }
369 
370 /**
371 * @tc.name: IsPersistByIntention001
372 * @tc.desc: Normal testcase of IsPersist
373 * @tc.type: FUNC
374 */
HWTEST_F(UnifiedMetaTest, IsPersistByIntention001, TestSize.Level1)375 HWTEST_F(UnifiedMetaTest, IsPersistByIntention001, TestSize.Level1)
376 {
377     bool ret = UnifiedDataUtils::IsPersist(Intention::UD_INTENTION_DATA_HUB);
378     EXPECT_TRUE(ret);
379 
380     bool ret1 = UnifiedDataUtils::IsPersist(Intention::UD_INTENTION_BUTT);
381     EXPECT_FALSE(ret1);
382 
383     bool ret2 = UnifiedDataUtils::IsPersist(Intention::UD_INTENTION_DRAG);
384     EXPECT_FALSE(ret2);
385 
386     bool ret3 = UnifiedDataUtils::IsPersist(Intention::UD_INTENTION_BASE);
387     EXPECT_FALSE(ret3);
388 }
389 
390 /**
391 * @tc.name: IsPersistByStr001
392 * @tc.desc: Normal testcase of IsPersist
393 * @tc.type: FUNC
394 */
HWTEST_F(UnifiedMetaTest, IsPersistByStr001, TestSize.Level1)395 HWTEST_F(UnifiedMetaTest, IsPersistByStr001, TestSize.Level1)
396 {
397     bool ret = UnifiedDataUtils::IsPersist("DataHub");
398     EXPECT_TRUE(ret);
399 
400     bool ret1 = UnifiedDataUtils::IsPersist("drag");
401     EXPECT_FALSE(ret1);
402 
403     bool ret2 = UnifiedDataUtils::IsPersist("invalid param");
404     EXPECT_FALSE(ret2);
405 }
406 
407 /**
408 * @tc.name: GetIntentionByString001
409 * @tc.desc: Normal testcase of IsPersist
410 * @tc.type: FUNC
411 */
HWTEST_F(UnifiedMetaTest, GetIntentionByString001, TestSize.Level1)412 HWTEST_F(UnifiedMetaTest, GetIntentionByString001, TestSize.Level1)
413 {
414     Intention ret = UnifiedDataUtils::GetIntentionByString("DataHub");
415     EXPECT_EQ(ret, Intention::UD_INTENTION_DATA_HUB);
416 
417     Intention ret1 = UnifiedDataUtils::GetIntentionByString("drag");
418     EXPECT_EQ(ret1, Intention::UD_INTENTION_DRAG);
419 
420     Intention ret2 = UnifiedDataUtils::GetIntentionByString("invalid param");
421     EXPECT_EQ(ret2, UD_INTENTION_BUTT);
422 }
423 
424 /**
425 * @tc.name: IsValidOptions001
426 * @tc.desc: Normal testcase of IsPersist
427 * @tc.type: FUNC
428 */
HWTEST_F(UnifiedMetaTest, IsValidOptions001, TestSize.Level1)429 HWTEST_F(UnifiedMetaTest, IsValidOptions001, TestSize.Level1)
430 {
431     std::string keyDataHub = "udmf://DataHub/com.hmos.photos/CSl;cdcGFcmdkasaccCSCAAScscdc";
432     std::string keyDrag = "udmf://drag/com.hmos.photos/CSl;cdcGFcmdkasaccCSCAAScscdc";
433     std::string intentionDataHub = "DataHub";
434     std::string intentionDrag = "drag";
435     std::string intentionEmpty = "";
436 
437     bool ret = UnifiedDataUtils::IsValidOptions("", intentionDataHub);
438     EXPECT_TRUE(ret);
439 
440     bool ret1 = UnifiedDataUtils::IsValidOptions(keyDataHub, intentionEmpty);
441     EXPECT_TRUE(ret1);
442 
443     bool ret2 = UnifiedDataUtils::IsValidOptions(keyDataHub, intentionDataHub);
444     EXPECT_TRUE(ret2);
445 
446     bool ret3 = UnifiedDataUtils::IsValidOptions(keyDataHub, intentionDrag);
447     EXPECT_FALSE(ret3);
448 
449     bool ret4 = UnifiedDataUtils::IsValidOptions(keyDrag, intentionDrag);
450     EXPECT_FALSE(ret4);
451 }
452 
453 /**
454 * @tc.name: GetValue001
455 * @tc.desc: Normal testcase of IsPersist
456 * @tc.type: FUNC
457 */
HWTEST_F(UnifiedMetaTest, GetValue001, TestSize.Level1)458 HWTEST_F(UnifiedMetaTest, GetValue001, TestSize.Level1)
459 {
460     Object object;
461     std::string key = "key";
462     std::string content = "content";
463     object.value_ = {
464         {key, content}
465     };
466     std::string value;
467     bool ret = object.GetValue(key, value);
468     EXPECT_TRUE(ret);
469     EXPECT_EQ(value, content);
470 
471     std::string valueEmpty;
472     bool ret1 = object.GetValue("invalid key", valueEmpty);
473     EXPECT_FALSE(ret1);
474     EXPECT_TRUE(valueEmpty.empty());
475 }
476 
477 /**
478 * @tc.name: GetValue002
479 * @tc.desc: Normal testcase of IsPersist
480 * @tc.type: FUNC
481 */
HWTEST_F(UnifiedMetaTest, GetValue002, TestSize.Level1)482 HWTEST_F(UnifiedMetaTest, GetValue002, TestSize.Level1)
483 {
484     Object object;
485     std::shared_ptr<Object> objectInner = std::make_shared<Object>();
486     std::string key = "key";
487     std::string keyObj = "keyObj";
488     std::string content = "content";
489     objectInner->value_ = {
490         {key, content}
491     };
492     object.value_ = {
493         {key, content},
494         {keyObj, objectInner}
495     };
496     std::shared_ptr<Object> value = std::make_shared<Object>();
497     bool ret = object.GetValue(keyObj, value);
498     EXPECT_TRUE(ret);
499 
500     std::string innerValue;
501     bool ret1 = value->GetValue(key, innerValue);
502     EXPECT_TRUE(ret1);
503     EXPECT_EQ(innerValue, content);
504 
505     std::shared_ptr<Object> valueEmpty = std::make_shared<Object>();
506     bool ret2 = object.GetValue("invalid key", valueEmpty);
507     EXPECT_FALSE(ret2);
508 }
509 } // OHOS::Test