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 }