1a69a01cdSopenharmony_ci/* 2a69a01cdSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3a69a01cdSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4a69a01cdSopenharmony_ci * you may not use this file except in compliance with the License. 5a69a01cdSopenharmony_ci * You may obtain a copy of the License at 6a69a01cdSopenharmony_ci * 7a69a01cdSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8a69a01cdSopenharmony_ci * 9a69a01cdSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10a69a01cdSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11a69a01cdSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a69a01cdSopenharmony_ci * See the License for the specific language governing permissions and 13a69a01cdSopenharmony_ci * limitations under the License. 14a69a01cdSopenharmony_ci */ 15a69a01cdSopenharmony_ci 16a69a01cdSopenharmony_ci#ifndef TEST_WUKONG_REPORT_H 17a69a01cdSopenharmony_ci#define TEST_WUKONG_REPORT_H 18a69a01cdSopenharmony_ci 19a69a01cdSopenharmony_ci#include <map> 20a69a01cdSopenharmony_ci#include <memory> 21a69a01cdSopenharmony_ci#include <string> 22a69a01cdSopenharmony_ci#include <vector> 23a69a01cdSopenharmony_ci#include <mutex> 24a69a01cdSopenharmony_ci 25a69a01cdSopenharmony_ci#include "data_set.h" 26a69a01cdSopenharmony_ci#include "input_msg_object.h" 27a69a01cdSopenharmony_ci#include "singleton.h" 28a69a01cdSopenharmony_ci#include "sysevent_listener.h" 29a69a01cdSopenharmony_ci#include "wukong_define.h" 30a69a01cdSopenharmony_ci 31a69a01cdSopenharmony_cinamespace OHOS { 32a69a01cdSopenharmony_cinamespace WuKong { 33a69a01cdSopenharmony_cinamespace { 34a69a01cdSopenharmony_cistruct componmentRecord { 35a69a01cdSopenharmony_ci std::map<std::string, uint32_t> componmentTypeCount; 36a69a01cdSopenharmony_ci std::map<uint32_t, std::vector<std::string>> pageIdComponments; 37a69a01cdSopenharmony_ci}; 38a69a01cdSopenharmony_ci} // namespace 39a69a01cdSopenharmony_ciclass Report final : public DelayedSingleton<Report> { 40a69a01cdSopenharmony_ci DECLARE_DELAYED_SINGLETON(Report) 41a69a01cdSopenharmony_ci friend class SysEventListener; 42a69a01cdSopenharmony_ci 43a69a01cdSopenharmony_cipublic: 44a69a01cdSopenharmony_ci void Finish(); 45a69a01cdSopenharmony_ci void SetSeed(std::string seed); 46a69a01cdSopenharmony_ci /* 47a69a01cdSopenharmony_ci * @brief Synchronous inputted information 48a69a01cdSopenharmony_ci * @return void 49a69a01cdSopenharmony_ci */ 50a69a01cdSopenharmony_ci void SyncInputInfo(std::shared_ptr<InputedMsgObject> inputedMsgObject); 51a69a01cdSopenharmony_ci /* 52a69a01cdSopenharmony_ci * @brief deal data under different mode 53a69a01cdSopenharmony_ci * @return void 54a69a01cdSopenharmony_ci */ 55a69a01cdSopenharmony_ci void SplitInputMode(std::shared_ptr<InputedMsgObject> &inputedMsgObject, std::map<std::string, std::string> &data); 56a69a01cdSopenharmony_ci /* 57a69a01cdSopenharmony_ci * @brief group data, record them to temp container 58a69a01cdSopenharmony_ci * @return void 59a69a01cdSopenharmony_ci */ 60a69a01cdSopenharmony_ci void GroupFocusDataAndRecord(std::shared_ptr<InputedMsgObject> &inputedMsgObject, std::map<std::string, 61a69a01cdSopenharmony_ci std::string> &data); 62a69a01cdSopenharmony_ci 63a69a01cdSopenharmony_ci /* 64a69a01cdSopenharmony_ci * @brief Write the content of the test process segmented to the storage csvfile 65a69a01cdSopenharmony_ci * @return void 66a69a01cdSopenharmony_ci */ 67a69a01cdSopenharmony_ci void SegmentedWriteCSV(); 68a69a01cdSopenharmony_ci 69a69a01cdSopenharmony_ci /* 70a69a01cdSopenharmony_ci * @brief Write the content of the test process segmented to the storage jsonfile 71a69a01cdSopenharmony_ci * @return void 72a69a01cdSopenharmony_ci */ 73a69a01cdSopenharmony_ci void SegmentedWriteJson(); 74a69a01cdSopenharmony_ci 75a69a01cdSopenharmony_ci /* 76a69a01cdSopenharmony_ci * @brief recor screen path to report 77a69a01cdSopenharmony_ci * @return void 78a69a01cdSopenharmony_ci */ 79a69a01cdSopenharmony_ci void RecordScreenPath(const std::string &screenPath); 80a69a01cdSopenharmony_ci 81a69a01cdSopenharmony_ci /* 82a69a01cdSopenharmony_ci * @brief Write the content of the focus input segmented to the storage file 83a69a01cdSopenharmony_ci * @return void 84a69a01cdSopenharmony_ci */ 85a69a01cdSopenharmony_ci void SegmentedWriteForFocusInput(); 86a69a01cdSopenharmony_ci 87a69a01cdSopenharmony_ci /* 88a69a01cdSopenharmony_ci * @brief get report exception dir 89a69a01cdSopenharmony_ci * @return void 90a69a01cdSopenharmony_ci */ 91a69a01cdSopenharmony_ci std::string GetReportExceptionDir(); 92a69a01cdSopenharmony_ci 93a69a01cdSopenharmony_ci /* 94a69a01cdSopenharmony_ci * @brief find Exception Type by crash file name 95a69a01cdSopenharmony_ci * @param exceptionFilename 96a69a01cdSopenharmony_ci * @return void 97a69a01cdSopenharmony_ci */ 98a69a01cdSopenharmony_ci void ExceptionRecord(const std::string &exceptionFilename); 99a69a01cdSopenharmony_ci 100a69a01cdSopenharmony_ci void SetIsFocusTest(bool isFocus) 101a69a01cdSopenharmony_ci { 102a69a01cdSopenharmony_ci is_focus_ = isFocus; 103a69a01cdSopenharmony_ci } 104a69a01cdSopenharmony_ciprivate: 105a69a01cdSopenharmony_ci /* 106a69a01cdSopenharmony_ci * @brief dependent environment init, include create file,dir, setting start time 107a69a01cdSopenharmony_ci * @return void 108a69a01cdSopenharmony_ci */ 109a69a01cdSopenharmony_ci void EnvInit(); 110a69a01cdSopenharmony_ci 111a69a01cdSopenharmony_ci /* 112a69a01cdSopenharmony_ci * @brief dataSet init, include event input, componment input, ability, exception 113a69a01cdSopenharmony_ci * @return void 114a69a01cdSopenharmony_ci */ 115a69a01cdSopenharmony_ci void DataSetInit(); 116a69a01cdSopenharmony_ci 117a69a01cdSopenharmony_ci /* 118a69a01cdSopenharmony_ci * @brief When a crash occurs check /data/log/hilog/ dir is exist new hilog file then copy 119a69a01cdSopenharmony_ci * @return void 120a69a01cdSopenharmony_ci */ 121a69a01cdSopenharmony_ci void HilogFileRecord(); 122a69a01cdSopenharmony_ci 123a69a01cdSopenharmony_ci /* 124a69a01cdSopenharmony_ci * @brief componment information arrange 125a69a01cdSopenharmony_ci * @param bundle bundle name 126a69a01cdSopenharmony_ci * @param inputCompMsgPtr input componment msg ptr 127a69a01cdSopenharmony_ci * @param data out data 128a69a01cdSopenharmony_ci * @return void 129a69a01cdSopenharmony_ci */ 130a69a01cdSopenharmony_ci void ComponmentInfoArrange(const std::string &bundle, std::shared_ptr<ComponmentInputMsg> inputCompMsgPtr, 131a69a01cdSopenharmony_ci std::map<std::string, std::string> &data); 132a69a01cdSopenharmony_ci // csv filename 133a69a01cdSopenharmony_ci std::string reportCsvFileName_ = ""; 134a69a01cdSopenharmony_ci std::string reportJsonFileName_ = ""; 135a69a01cdSopenharmony_ci std::string reportFocusInputFileName_ = ""; 136a69a01cdSopenharmony_ci std::string reportExceptionDir_ = ""; 137a69a01cdSopenharmony_ci std::string currentTestDir_ = ""; 138a69a01cdSopenharmony_ci std::string startRunTime_ = ""; 139a69a01cdSopenharmony_ci std::string crashDir_ = "/data/log/faultlog/faultlogger/"; 140a69a01cdSopenharmony_ci std::vector<std::string> hilogFiles_; 141a69a01cdSopenharmony_ci std::string seed_ = ""; 142a69a01cdSopenharmony_ci int taskCount_ = 0; 143a69a01cdSopenharmony_ci bool isFirstAppSwitch_ = false; 144a69a01cdSopenharmony_ci time_t startTime_ = time(0); 145a69a01cdSopenharmony_ci std::mutex crashMtx_; 146a69a01cdSopenharmony_ci std::string hilogDirs_ = "/data/log/hilog/"; 147a69a01cdSopenharmony_ci // multimodal input data set 148a69a01cdSopenharmony_ci std::shared_ptr<DataSet> eventDataSet_ = std::make_shared<DataSet>(); 149a69a01cdSopenharmony_ci // componment input data set 150a69a01cdSopenharmony_ci std::shared_ptr<DataSet> componmentDataSet_ = std::make_shared<DataSet>(); 151a69a01cdSopenharmony_ci // ability data set 152a69a01cdSopenharmony_ci std::shared_ptr<DataSet> abilityDataSet_ = std::make_shared<DataSet>(); 153a69a01cdSopenharmony_ci // exception data set 154a69a01cdSopenharmony_ci std::shared_ptr<DataSet> exceptionDataSet_ = std::make_shared<DataSet>(); 155a69a01cdSopenharmony_ci // app set 156a69a01cdSopenharmony_ci std::vector<std::string> bundles_; 157a69a01cdSopenharmony_ci std::map<std::string, componmentRecord> bundleComponmentRecord_; 158a69a01cdSopenharmony_ci 159a69a01cdSopenharmony_ci // screen store path vector 160a69a01cdSopenharmony_ci std::vector<std::string> screenPaths_; 161a69a01cdSopenharmony_ci // focus_input output container 162a69a01cdSopenharmony_ci std::vector<std::string> focus_input_vec_; 163a69a01cdSopenharmony_ci // identify cur test is focus test 164a69a01cdSopenharmony_ci bool is_focus_ = false; 165a69a01cdSopenharmony_ci}; 166a69a01cdSopenharmony_ci} // namespace WuKong 167a69a01cdSopenharmony_ci} // namespace OHOS 168a69a01cdSopenharmony_ci 169a69a01cdSopenharmony_ci#endif 170