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 "media_dfx.cpp" 20 #include "common/media_core.h" 21 #include "meta/meta.h" 22 23 using namespace testing::ext; 24 using namespace OHOS::Media; 25 26 namespace { 27 constexpr uint32_t TEST_UID_ID_1 = 1; 28 constexpr int32_t ERROR_CODE = 5; 29 } 30 31 namespace OHOS { 32 namespace Media { 33 class MediaDfxTest : public testing::Test { 34 public: SetUpTestCase(void)35 static void SetUpTestCase(void) {}; TearDownTestCase(void)36 static void TearDownTestCase(void) {}; SetUp(void)37 void SetUp(void) 38 { 39 mediaEvent_ = std::make_shared<MediaEvent>(); 40 }; TearDown(void)41 void TearDown(void) 42 { 43 mediaEvent_ = nullptr; 44 }; 45 46 std::shared_ptr<MediaEvent> mediaEvent_ = nullptr; 47 }; 48 49 HWTEST_F(MediaDfxTest, CREATE_MEDIA_INFO, TestSize.Level1) 50 { 51 uint64_t instanceId = 1; 52 int32_t ret = CreateMediaInfo(CallType::AVPLAYER, TEST_UID_ID_1, instanceId); 53 ASSERT_EQ(ret, MSERR_OK); 54 55 std::shared_ptr<Meta> meta = std::make_shared<Meta>(); 56 meta->SetData(Tag::SCREEN_CAPTURE_ERR_MSG, "SCREEN_CAPTURE_ERR_MSG"); 57 meta->SetData(Tag::SCREEN_CAPTURE_ERR_CODE, ERROR_CODE); 58 ret = AppendMediaInfo(meta, instanceId); 59 ASSERT_EQ(ret, MSERR_OK); 60 61 ret = ReportMediaInfo(instanceId); 62 ASSERT_EQ(ret, MSERR_OK); 63 } 64 65 HWTEST_F(MediaDfxTest, CREATE_MEDIA_INFO_1, TestSize.Level1) 66 { 67 uint64_t instanceId = 1; 68 int32_t ret = CreateMediaInfo(CallType::AVPLAYER, TEST_UID_ID_1, instanceId); 69 ASSERT_EQ(ret, MSERR_OK); 70 71 std::shared_ptr<Meta> meta = std::make_shared<Meta>(); 72 meta->SetData(Tag::SCREEN_CAPTURE_ERR_MSG, "SCREEN_CAPTURE_ERR_MSG"); 73 meta->SetData(Tag::SCREEN_CAPTURE_ERR_CODE, ERROR_CODE); 74 ret = AppendMediaInfo(meta, instanceId); 75 ASSERT_EQ(ret, MSERR_OK); 76 77 std::shared_ptr<Meta> meta1 = std::make_shared<Meta>(); 78 ret = AppendMediaInfo(meta1, instanceId); 79 ASSERT_NE(ret, MSERR_OK); 80 ASSERT_EQ(ret, MSERR_INVALID_OPERATION); 81 82 ret = ReportMediaInfo(instanceId); 83 ASSERT_EQ(ret, MSERR_OK); 84 } 85 86 HWTEST_F(MediaDfxTest, CREATE_MEDIA_INFO_2, TestSize.Level1) 87 { 88 uint64_t instanceId = 1; 89 int32_t ret = CreateMediaInfo(CallType::AVPLAYER, TEST_UID_ID_1, instanceId); 90 ASSERT_EQ(ret, MSERR_OK); 91 92 std::shared_ptr<Meta> meta = std::make_shared<Meta>(); 93 meta->SetData(Tag::SCREEN_CAPTURE_ERR_MSG, "SCREEN_CAPTURE_ERR_MSG"); 94 meta->SetData(Tag::SCREEN_CAPTURE_ERR_CODE, ERROR_CODE); 95 ret = AppendMediaInfo(meta, instanceId); 96 ASSERT_EQ(ret, MSERR_OK); 97 98 ret = ReportMediaInfo(instanceId); 99 ASSERT_EQ(ret, MSERR_OK); 100 ret = ReportMediaInfo(instanceId); 101 ASSERT_NE(ret, MSERR_OK); 102 ASSERT_EQ(ret, MSERR_INVALID_OPERATION); 103 } 104 105 HWTEST_F(MediaDfxTest, StatisticsEventReport_ShouldReturnError_WhenMapIsEmpty, TestSize.Level0) 106 { 107 reportMediaInfoMap_.clear(); 108 int32_t result = StatisticsEventReport(); 109 ASSERT_EQ(result, OHOS::Media::MSERR_INVALID_OPERATION); 110 } 111 112 // Test when reportMediaInfoMap_ is not empty, StatisticsEventReport should return MSERR_OK 113 HWTEST_F(MediaDfxTest, StatisticsEventReport_ShouldReturnSuccess_WhenMapIsNotEmpty_001, TestSize.Level0) 114 { 115 reportMediaInfoMap_[OHOS::Media::CallType::AVPLAYER] = {}; 116 int32_t result = StatisticsEventReport(); 117 ASSERT_EQ(result, OHOS::Media::MSERR_OK); 118 reportMediaInfoMap_.clear(); 119 } 120 121 // Test when reportMediaInfoMap_ is not empty, StatisticsEventReport should return MSERR_OK 122 HWTEST_F(MediaDfxTest, StatisticsEventReport_ShouldReturnSuccess_WhenMapIsNotEmpty_002, TestSize.Level0) 123 { 124 int32_t uid = 123; 125 reportMediaInfoMap_[OHOS::Media::CallType::AVPLAYER][uid] = {}; 126 int32_t result = StatisticsEventReport(); 127 ASSERT_EQ(result, OHOS::Media::MSERR_OK); 128 reportMediaInfoMap_.clear(); 129 } 130 131 #ifndef CROSS_PLATFORM 132 // Scenario1: Test case for int32_t type 133 HWTEST_F(MediaDfxTest, ParseOneEvent_ShouldParseInt32_WhenInt32Type, TestSize.Level0) { 134 std::pair<uint64_t, std::shared_ptr<Meta>> listPair; 135 listPair.first = 1; 136 listPair.second = std::make_shared<Meta>(); 137 listPair.second->SetData(Tag::APP_UID, 123); 138 json metaInfoJson; 139 140 mediaEvent_->ParseOneEvent(listPair, metaInfoJson); 141 142 EXPECT_EQ(metaInfoJson[Tag::APP_UID], "123"); 143 } 144 145 // Scenario2: Test case for uint32_t type 146 HWTEST_F(MediaDfxTest, ParseOneEvent_ShouldParseUint32_WhenUint32Type, TestSize.Level0) { 147 std::pair<uint64_t, std::shared_ptr<Meta>> listPair; 148 listPair.first = 1; 149 listPair.second = std::make_shared<Meta>(); 150 listPair.second->SetData(Tag::DRM_DECRYPT_AVG_SIZE, 456u); 151 json metaInfoJson; 152 153 mediaEvent_->ParseOneEvent(listPair, metaInfoJson); 154 155 EXPECT_EQ(metaInfoJson[Tag::DRM_DECRYPT_AVG_SIZE], "456"); 156 } 157 158 // Scenario3: Test case for uint64_t type 159 HWTEST_F(MediaDfxTest, ParseOneEvent_ShouldParseUint64_WhenUint64Type, TestSize.Level0) { 160 std::pair<uint64_t, std::shared_ptr<Meta>> listPair; 161 listPair.first = 1; 162 listPair.second = std::make_shared<Meta>(); 163 listPair.second->SetData(Tag::AV_PLAYER_DOWNLOAD_TOTAL_BITS, 789u); 164 json metaInfoJson; 165 166 mediaEvent_->ParseOneEvent(listPair, metaInfoJson); 167 Any valueType = OHOS::Media::GetDefaultAnyValue(Tag::AV_PLAYER_DOWNLOAD_TOTAL_BITS); 168 EXPECT_EQ(Any::IsSameTypeWith<uint64_t>(valueType), true); 169 } 170 171 // Scenario4: Test case for string type 172 HWTEST_F(MediaDfxTest, ParseOneEvent_ShouldParseString_WhenStringType, TestSize.Level0) { 173 std::pair<uint64_t, std::shared_ptr<Meta>> listPair; 174 listPair.first = 1; 175 listPair.second = std::make_shared<Meta>(); 176 listPair.second->SetData(Tag::MIME_TYPE, "test"); 177 json metaInfoJson; 178 179 mediaEvent_->ParseOneEvent(listPair, metaInfoJson); 180 181 EXPECT_EQ(metaInfoJson[Tag::MIME_TYPE], "test"); 182 } 183 184 // Scenario5: Test case for int8_t type 185 HWTEST_F(MediaDfxTest, ParseOneEvent_ShouldParseInt8_WhenInt8Type, TestSize.Level0) { 186 std::pair<uint64_t, std::shared_ptr<Meta>> listPair; 187 listPair.first = 1; 188 listPair.second = std::make_shared<Meta>(); 189 int8_t value = 100; 190 listPair.second->SetData(Tag::AV_PLAYER_HDR_TYPE, value); 191 json metaInfoJson; 192 193 mediaEvent_->ParseOneEvent(listPair, metaInfoJson); 194 Any valueType = OHOS::Media::GetDefaultAnyValue(Tag::AV_PLAYER_HDR_TYPE); 195 EXPECT_EQ(Any::IsSameTypeWith<int8_t>(valueType), true); 196 } 197 198 // Scenario6: Test case for bool type 199 HWTEST_F(MediaDfxTest, ParseOneEvent_ShouldParseBool_WhenBoolType, TestSize.Level0) { 200 201 // test StatisicsHiSysEventWrite 202 std::vector<std::string> infoArr = {"test for tdd", "test for tdd"}; 203 mediaEvent_->StatisicsHiSysEventWrite(CallType::AVPLAYER, OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, infoArr); 204 mediaEvent_->StatisicsHiSysEventWrite(CallType::AVRECORDER, OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, infoArr); 205 mediaEvent_->StatisicsHiSysEventWrite(CallType::SCREEN_CAPTRUER, 206 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, infoArr); 207 mediaEvent_->StatisicsHiSysEventWrite(CallType::AVTRANSCODER, 208 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, infoArr); 209 mediaEvent_->StatisicsHiSysEventWrite(CallType::METADATA_RETRIEVER, 210 OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, infoArr); 211 212 std::pair<uint64_t, std::shared_ptr<Meta>> listPair; 213 listPair.first = 1; 214 listPair.second = std::make_shared<Meta>(); 215 listPair.second->SetData(Tag::MEDIA_HAS_VIDEO, true); 216 json metaInfoJson; 217 218 mediaEvent_->ParseOneEvent(listPair, metaInfoJson); 219 220 EXPECT_EQ(metaInfoJson[Tag::MEDIA_HAS_VIDEO], "true"); 221 } 222 223 // Scenario7: Test case for float type 224 HWTEST_F(MediaDfxTest, ParseOneEvent_ShouldParseFloat_WhenFloatType, TestSize.Level0) { 225 std::pair<uint64_t, std::shared_ptr<Meta>> listPair; 226 listPair.first = 1; 227 listPair.second = std::make_shared<Meta>(); 228 float value = 0.5f; 229 listPair.second->SetData(Tag::MEDIA_LATITUDE, value); 230 json metaInfoJson; 231 232 mediaEvent_->ParseOneEvent(listPair, metaInfoJson); 233 Any valueType = OHOS::Media::GetDefaultAnyValue(Tag::MEDIA_LATITUDE); 234 EXPECT_EQ(Any::IsSameTypeWith<float>(valueType), true); 235 EXPECT_EQ(metaInfoJson[Tag::MEDIA_LATITUDE], "0.50"); 236 } 237 238 // Scenario8: Test case for default type 239 HWTEST_F(MediaDfxTest, ParseOneEvent_ShouldParsedefault_WhendefaultType, TestSize.Level0) { 240 std::pair<uint64_t, std::shared_ptr<Meta>> listPair; 241 listPair.first = 1; 242 listPair.second = std::make_shared<Meta>(); 243 float value = 0.5f; 244 listPair.second->SetData(Tag::VIDEO_BIT_STREAM_FORMAT, value); 245 json metaInfoJson; 246 247 mediaEvent_->ParseOneEvent(listPair, metaInfoJson); 248 Any valueType = OHOS::Media::GetDefaultAnyValue(Tag::VIDEO_BIT_STREAM_FORMAT); 249 EXPECT_EQ(Any::IsSameTypeWith<float>(valueType), false); 250 } 251 252 // Scenario9: Test case for uint64_t type repeat 253 HWTEST_F(MediaDfxTest, ParseOneEvent_ShouldParseUint64_WhenUint64Type_002, TestSize.Level0) { 254 std::pair<uint64_t, std::shared_ptr<Meta>> listPair; 255 listPair.first = 1; 256 listPair.second = std::make_shared<Meta>(); 257 listPair.second->SetData(Tag::MEDIA_FILE_SIZE, 123u); 258 listPair.second->SetData(Tag::MEDIA_POSITION, 123u); 259 listPair.second->SetData(Tag::AV_PLAYER_DOWNLOAD_TOTAL_BITS, 123u); 260 json metaInfoJson; 261 262 mediaEvent_->ParseOneEvent(listPair, metaInfoJson); 263 Any valueType = OHOS::Media::GetDefaultAnyValue(Tag::MEDIA_FILE_SIZE); 264 EXPECT_EQ(Any::IsSameTypeWith<uint64_t>(valueType), true); 265 valueType = OHOS::Media::GetDefaultAnyValue(Tag::AV_PLAYER_DOWNLOAD_TOTAL_BITS); 266 EXPECT_EQ(Any::IsSameTypeWith<uint64_t>(valueType), true); 267 valueType = OHOS::Media::GetDefaultAnyValue(Tag::MEDIA_POSITION); 268 EXPECT_EQ(Any::IsSameTypeWith<uint64_t>(valueType), true); 269 } 270 #endif 271 272 // Scenario10: Test case for BehaviorEventWrite 273 HWTEST_F(MediaDfxTest, ParseOneEvent_BehaviorEventWrite, TestSize.Level0) { 274 std::string status = "testMeg1"; 275 std::string module = "testmodule"; 276 BehaviorEventWrite(status, module); 277 std::string testvalue = "state change, current state is: testMeg1"; 278 bool ret = mediaEvent_->CreateMsg("state change, current state is: testMeg1"); 279 EXPECT_NE(ret, false); 280 EXPECT_EQ(mediaEvent_->msg_, testvalue); 281 } 282 283 // Scenario11: Test case for BehaviorEventWriteForScreenCapture 284 HWTEST_F(MediaDfxTest, ParseOneEvent_BehaviorEventWriteForScreenCapture, TestSize.Level0) { 285 std::string status = "testMeg2"; 286 std::string module = "testmodule"; 287 int32_t appUid = 10; 288 int32_t appPid = 11; 289 BehaviorEventWriteForScreenCapture(status, module, appUid, appPid); 290 std::string testvalue = "state change, current state is: testMeg2"; 291 bool ret = mediaEvent_->CreateMsg("state change, current state is: testMeg2"); 292 EXPECT_NE(ret, false); 293 EXPECT_EQ(mediaEvent_->msg_, testvalue); 294 } 295 296 // Scenario12: Test case for StatisticEventWriteBundleName 297 HWTEST_F(MediaDfxTest, ParseOneEvent_StatisticEventWriteBundleName, TestSize.Level0) { 298 std::string status = "testMeg3"; 299 std::string module = "testmodule"; 300 std::string bundleName = ""; 301 StatisticEventWriteBundleName(status, module, bundleName); 302 std::string testvalue = "state change, current state is: testMeg3"; 303 bool ret = mediaEvent_->CreateMsg("state change, current state is: testMeg3"); 304 EXPECT_NE(ret, false); 305 EXPECT_EQ(mediaEvent_->msg_, testvalue); 306 } 307 } 308 }