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) {}; 44 static void TearDownTestCase(void) {}; 45 void SetUp(void) {}; 46 void TearDown(void) {}; 47 }; 48 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 }