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 
16 #include <memory>
17 #include <iostream>
18 #include "gtest/gtest.h"
19 #include "avcodec_dump_utils.h"
20 #include "avcodec_errors.h"
21 
22 using namespace testing::ext;
23 using namespace OHOS::Media;
24 
25 namespace {
26 constexpr uint32_t DUMP_INVALID_INDEX = 0x00'00'00'00;
27 constexpr uint32_t DUMP_VALID_INDEX_LEVEL_1   = 0x01'00'00'00;
28 constexpr uint32_t DUMP_VALID_INDEX_LEVEL_2   = 0x01'01'00'00;
29 constexpr uint32_t DUMP_VALID_INDEX_LEVEL_3   = 0x01'01'01'00;
30 constexpr uint32_t DUMP_VALID_INDEX_LEVEL_4   = 0x01'01'01'01;
31 constexpr char     DUMP_INT32_KEY[]           = "Int32_key";
32 constexpr char     DUMP_INT64_KEY[]           = "Int64_key";
33 constexpr char     DUMP_FLOAT_KEY[]           = "Float_key";
34 constexpr char     DUMP_DOUBLE_KEY[]          = "Double_key";
35 constexpr char     DUMP_STRING_KEY[]          = "String_key";
36 constexpr char     DUMP_ADDR_KEY[]            = "Addr_key";
37 constexpr char     DUMP_UNEXIST_KEY[]         = "Unexist_key";
38 }
39 
40 namespace OHOS::MediaAVCodec {
41 class DumpUtilsTestSuilt : public testing::Test {
42 public:
SetUpTestCase(void)43     static void SetUpTestCase(void) {};
TearDownTestCase(void)44     static void TearDownTestCase(void) {};
SetUp(void)45     void SetUp(void) {};
TearDown(void)46     void TearDown(void) {};
47 };
48 
DumpString(AVCodecDumpControler & controler)49 int32_t DumpString(AVCodecDumpControler &controler)
50 {
51     std::string dumpString;
52     int32_t ret = controler.GetDumpString(dumpString);
53     std::cout << dumpString;
54     return ret;
55 }
56 
57 HWTEST_F(DumpUtilsTestSuilt, ADD_INFO_TEST, TestSize.Level1)
58 {
59     AVCodecDumpControler controler;
60 
61     // Test for normal usage
62     int32_t ret = controler.AddInfo(DUMP_VALID_INDEX_LEVEL_1, "Name", "Value");
63     ASSERT_EQ(ret, AVCS_ERR_OK);
64 
65     // Test for invalid dump index
66     ret = controler.AddInfo(DUMP_INVALID_INDEX, "Name", "Value");
67     ASSERT_EQ(ret, AVCS_ERR_INVALID_VAL);
68 
69     // Test for invalid dump name
70     ret = controler.AddInfo(DUMP_VALID_INDEX_LEVEL_1, "", "Value");
71     ASSERT_EQ(ret, AVCS_ERR_INVALID_VAL);
72 
73     // Test for reset a same index to controler
74     ret = controler.AddInfo(DUMP_VALID_INDEX_LEVEL_1, "Name", "Value");
75     ASSERT_EQ(ret, AVCS_ERR_OK);
76 
77     ret = DumpString(controler);
78     ASSERT_EQ(ret, AVCS_ERR_OK);
79 }
80 
81 HWTEST_F(DumpUtilsTestSuilt, ADD_INFO_FROM_FORMAT_TEST, TestSize.Level1)
82 {
83     AVCodecDumpControler controler;
84     Format format;
85     format.PutIntValue(DUMP_INT32_KEY, 0);
86     format.PutLongValue(DUMP_INT64_KEY, 0);
87     format.PutFloatValue(DUMP_FLOAT_KEY, 0);
88     format.PutDoubleValue(DUMP_DOUBLE_KEY, 0);
89     format.PutStringValue(DUMP_STRING_KEY, "Value");
90     format.PutBuffer(DUMP_ADDR_KEY, reinterpret_cast<uint8_t *>(&controler), sizeof(AVCodecDumpControler));
91 
92     // Test for set invalid key
93     int32_t ret = controler.AddInfoFromFormat(DUMP_VALID_INDEX_LEVEL_2, format, "", "Name");
94     ASSERT_EQ(ret, AVCS_ERR_INVALID_VAL);
95 
96     // Test for set int32 value
97     ret = controler.AddInfoFromFormat(DUMP_VALID_INDEX_LEVEL_2, format, DUMP_INT32_KEY, "Name");
98     ASSERT_EQ(ret, AVCS_ERR_OK);
99 
100     // Test for set int64 value
101     ret = controler.AddInfoFromFormat(DUMP_VALID_INDEX_LEVEL_2, format, DUMP_INT64_KEY, "Name");
102     ASSERT_EQ(ret, AVCS_ERR_OK);
103 
104     // Test for set float value
105     ret = controler.AddInfoFromFormat(DUMP_VALID_INDEX_LEVEL_2, format, DUMP_FLOAT_KEY, "Name");
106     ASSERT_EQ(ret, AVCS_ERR_OK);
107 
108     // Test for set double value
109     ret = controler.AddInfoFromFormat(DUMP_VALID_INDEX_LEVEL_2, format, DUMP_DOUBLE_KEY, "Name");
110     ASSERT_EQ(ret, AVCS_ERR_OK);
111 
112     // Test for set string value
113     ret = controler.AddInfoFromFormat(DUMP_VALID_INDEX_LEVEL_2, format, DUMP_STRING_KEY, "Name");
114     ASSERT_EQ(ret, AVCS_ERR_OK);
115 
116     // Test for set Addr value
117     ret = controler.AddInfoFromFormat(DUMP_VALID_INDEX_LEVEL_2, format, DUMP_ADDR_KEY, "Name");
118     ASSERT_EQ(ret, AVCS_ERR_INVALID_VAL);
119 
120     // Test for set unexist key
121     ret = controler.AddInfoFromFormat(DUMP_VALID_INDEX_LEVEL_2, format, DUMP_UNEXIST_KEY, "Name");
122     ASSERT_EQ(ret, AVCS_ERR_INVALID_VAL);
123 
124     ret = DumpString(controler);
125     ASSERT_EQ(ret, AVCS_ERR_OK);
126 }
127 
128 HWTEST_F(DumpUtilsTestSuilt, ADD_INFO_FROM_FORMAT_WITH_MAPPING_TEST, TestSize.Level1)
129 {
130     AVCodecDumpControler controler;
131     Format format;
132     format.PutIntValue(DUMP_INT32_KEY, 0);
133     std::map<int32_t, const std::string> valueMap = {
134         {0, "Value"}
135     };
136 
137     // Test for set normal usage
138     int32_t ret =
139         controler.AddInfoFromFormatWithMapping(DUMP_VALID_INDEX_LEVEL_3, format, DUMP_INT32_KEY, "Name", valueMap);
140     ASSERT_EQ(ret, AVCS_ERR_OK);
141 
142     // Test for set unexist value
143     ret = controler.AddInfoFromFormatWithMapping(DUMP_VALID_INDEX_LEVEL_3, format, DUMP_INT32_KEY, "Name", valueMap);
144     ASSERT_EQ(ret, AVCS_ERR_OK);
145 
146     // Test for set unexist key
147     ret = controler.AddInfoFromFormatWithMapping(DUMP_VALID_INDEX_LEVEL_3, format, DUMP_UNEXIST_KEY, "Name", valueMap);
148     ASSERT_EQ(ret, AVCS_ERR_INVALID_VAL);
149 
150     ret = DumpString(controler);
151     ASSERT_EQ(ret, AVCS_ERR_OK);
152 }
153 
154 HWTEST_F(DumpUtilsTestSuilt, GET_DUMP_STRING_TEST, TestSize.Level1)
155 {
156     AVCodecDumpControler controler;
157 
158     int32_t ret = controler.AddInfo(DUMP_VALID_INDEX_LEVEL_4, "Name", "Value");
159     ASSERT_EQ(ret, AVCS_ERR_OK);
160 
161     ret = DumpString(controler);
162     ASSERT_EQ(ret, AVCS_ERR_OK);
163 }
164 }