1 /*
2 * Copyright (c) 2025 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 <gtest/gtest.h>
17
18 #include "session/host/include/session_change_recorder.h"
19
20 using namespace testing;
21 using namespace testing::ext;
22
23 namespace OHOS::Rosen {
24 constexpr uint32_t MAX_RECORD_TYPE_SIZE = 10;
25
26 class SessionChangeRecorderTest : public testing::Test {
27 public:
28 static void SetUpTestCase();
29 static void TearDownTestCase();
30 void SetUp() override;
31 void TearDown() override;
32 private:
33 static constexpr uint32_t WAIT_SYNC_IN_NS = 500000;
34 };
35
SetUpTestCase()36 void SessionChangeRecorderTest::SetUpTestCase() {}
37
TearDownTestCase()38 void SessionChangeRecorderTest::TearDownTestCase() {}
39
SetUp()40 void SessionChangeRecorderTest::SetUp() {}
41
TearDown()42 void SessionChangeRecorderTest::TearDown()
43 {
44 usleep(WAIT_SYNC_IN_NS);
45 }
46
47 namespace {
48 /**
49 * @tc.name: RecordSceneSessionChange
50 * @tc.desc: RecordSceneSessionChange
51 * @tc.type: FUNC
52 */
53 HWTEST_F(SessionChangeRecorderTest, RecordSceneSessionChange, TestSize.Level1)
54 {
55 SceneSessionChangeInfo changeInfo;
56 auto result1 = SessionChangeRecorder::GetInstance().RecordSceneSessionChange(
57 RecordType::RECORD_TYPE_BEGIN, changeInfo);
58 EXPECT_EQ(result1, WSError::WS_ERROR_INVALID_PARAM);
59
60 changeInfo.logTag_ = WmsLogTag::END;
61 auto result2 = SessionChangeRecorder::GetInstance().RecordSceneSessionChange(
62 RecordType::RECORD_TYPE_BEGIN, changeInfo);
63 EXPECT_EQ(result2, WSError::WS_ERROR_INVALID_PARAM);
64
65 changeInfo.logTag_ = WmsLogTag::WMS_MAIN;
66 auto result3 = SessionChangeRecorder::GetInstance().RecordSceneSessionChange(
67 RecordType::RECORD_TYPE_BEGIN, changeInfo);
68 EXPECT_EQ(result3, WSError::WS_ERROR_INVALID_PARAM);
69
70 changeInfo.changeInfo_ = "Record Scene Session Change Test1";
71 auto result4 = SessionChangeRecorder::GetInstance().RecordSceneSessionChange(
72 RecordType::RECORD_TYPE_BEGIN, changeInfo);
73 EXPECT_EQ(result4, WSError::WS_OK);
74
75 changeInfo.changeInfo_ = "Record Scene Session Change Test2";
76 changeInfo.time_ = "04-28 12:27:00.791";
77 auto result5 = SessionChangeRecorder::GetInstance().RecordSceneSessionChange(
78 RecordType::RECORD_TYPE_BEGIN, changeInfo);
79 EXPECT_EQ(result5, WSError::WS_OK);
80 }
81
82 /**
83 * @tc.name: SetRecordSize
84 * @tc.desc: SetRecordSize
85 * @tc.type: FUNC
86 */
87 HWTEST_F(SessionChangeRecorderTest, SetRecordSize, TestSize.Level1)
88 {
89 auto result1 = SessionChangeRecorder::GetInstance().SetRecordSize(
90 RecordType::RECORD_TYPE_BEGIN, 0);
91 EXPECT_EQ(result1, WSError::WS_ERROR_INVALID_PARAM);
92
93 auto result2 = SessionChangeRecorder::GetInstance().SetRecordSize(
94 RecordType::RECORD_TYPE_BEGIN, MAX_RECORD_TYPE_SIZE + 1);
95 EXPECT_EQ(result2, WSError::WS_ERROR_INVALID_PARAM);
96
97 auto result3 = SessionChangeRecorder::GetInstance().SetRecordSize(
98 RecordType::RECORD_TYPE_BEGIN, MAX_RECORD_TYPE_SIZE);
99 EXPECT_EQ(result3, WSError::WS_OK);
100 }
101
102 /**
103 * @tc.name: GetSceneSessionNeedDumpInfo
104 * @tc.desc: GetSceneSessionNeedDumpInfo
105 * @tc.type: FUNC
106 */
107 HWTEST_F(SessionChangeRecorderTest, GetSceneSessionNeedDumpInfo, TestSize.Level1)
108 {
109 SessionChangeRecorder::GetInstance().sceneSessionChangeNeedLogMap_.clear();
110 SessionChangeRecorder::GetInstance().sceneSessionChangeNeedDumpMap_.clear();
111
112 std::vector<std::string> params;
113 std::string dumpInfo;
114 SessionChangeRecorder::GetInstance().GetSceneSessionNeedDumpInfo(params, dumpInfo);
115 auto result1 = dumpInfo.find("Available args") != std::string::npos;
116 EXPECT_TRUE(result1);
117
118 SceneSessionChangeInfo changeInfo1 {
119 .persistentId_ = 123,
120 .changeInfo_ = "changeInfo1",
121 .logTag_ = WmsLogTag::WMS_MAIN,
122 };
123
124 SceneSessionChangeInfo changeInfo2 {
125 .persistentId_ = 124,
126 .changeInfo_ = "changeInfo2",
127 .logTag_ = WmsLogTag::WMS_MAIN,
128 };
129
130 SceneSessionChangeInfo changeInfo3 {
131 .persistentId_ = 125,
132 .changeInfo_ = "changeInfo3",
133 .logTag_ = WmsLogTag::WMS_MAIN,
134 };
135
136 SessionChangeRecorder::GetInstance().RecordSceneSessionChange(RecordType::SESSION_STATE_RECORD, changeInfo1);
137 SessionChangeRecorder::GetInstance().RecordSceneSessionChange(RecordType::SESSION_STATE_RECORD, changeInfo2);
138 SessionChangeRecorder::GetInstance().RecordSceneSessionChange(RecordType::RECORD_TYPE_END, changeInfo3);
139
140 params.push_back("all");
141 SessionChangeRecorder::GetInstance().GetSceneSessionNeedDumpInfo(params, dumpInfo);
142 auto result2 = (dumpInfo.find("123") != std::string::npos) && (dumpInfo.find("124") != std::string::npos) &&
143 (dumpInfo.find("125") != std::string::npos);
144 dumpInfo.clear();
145 EXPECT_TRUE(result2);
146
147 params.push_back("1");
148 SessionChangeRecorder::GetInstance().GetSceneSessionNeedDumpInfo(params, dumpInfo);
149 auto result3 = (dumpInfo.find("123") != std::string::npos) && (dumpInfo.find("124") != std::string::npos) &&
150 (dumpInfo.find("125") == std::string::npos);
151 dumpInfo.clear();
152 EXPECT_TRUE(result3);
153
154 params.pop_back();
155 params[0] = "123";
156 SessionChangeRecorder::GetInstance().GetSceneSessionNeedDumpInfo(params, dumpInfo);
157 auto result4 = (dumpInfo.find("123") != std::string::npos) && (dumpInfo.find("124") == std::string::npos) &&
158 (dumpInfo.find("125") == std::string::npos);
159 dumpInfo.clear();
160 EXPECT_TRUE(result4);
161 }
162
163 /**
164 * @tc.name: RecordDump
165 * @tc.desc: RecordDump
166 * @tc.type: FUNC
167 */
168 HWTEST_F(SessionChangeRecorderTest, RecordDump, TestSize.Level1)
169 {
170 SessionChangeRecorder::GetInstance().sceneSessionChangeNeedDumpMap_.clear();
171 SceneSessionChangeInfo changeInfo1 {
172 .persistentId_ = 123,
173 .changeInfo_ = "changeInfo1",
174 .logTag_ = WmsLogTag::WMS_MAIN,
175 };
176 SessionChangeRecorder::GetInstance().RecordDump(RecordType::RECORD_TYPE_BEGIN, changeInfo1);
177 auto result1 = SessionChangeRecorder::GetInstance().sceneSessionChangeNeedDumpMap_;
178 EXPECT_EQ(result1[RecordType::RECORD_TYPE_BEGIN].size(), 1);
179
180 SceneSessionChangeInfo changeInfo2 {
181 .persistentId_ = 123,
182 .changeInfo_ = "changeInfo2",
183 .logTag_ = WmsLogTag::WMS_MAIN,
184 };
185 SessionChangeRecorder::GetInstance().RecordDump(RecordType::RECORD_TYPE_BEGIN, changeInfo2);
186 auto result2 = SessionChangeRecorder::GetInstance().sceneSessionChangeNeedDumpMap_;
187 EXPECT_EQ(result2[RecordType::RECORD_TYPE_BEGIN].size(), 2);
188
189 SceneSessionChangeInfo changeInfo3 {
190 .persistentId_ = 123,
191 .changeInfo_ = "changeInfo3",
192 .logTag_ = WmsLogTag::WMS_MAIN,
193 };
194 SessionChangeRecorder::GetInstance().SetRecordSize(RecordType::RECORD_TYPE_BEGIN, 2);
195 SessionChangeRecorder::GetInstance().RecordDump(RecordType::RECORD_TYPE_BEGIN, changeInfo3);
196 auto result3 = SessionChangeRecorder::GetInstance().sceneSessionChangeNeedDumpMap_;
197 EXPECT_EQ(result3[RecordType::RECORD_TYPE_BEGIN].size(), 2);
198 SessionChangeRecorder::GetInstance().SetRecordSize(RecordType::RECORD_TYPE_BEGIN, MAX_RECORD_TYPE_SIZE);
199 }
200
201 /**
202 * @tc.name: RecordLog
203 * @tc.desc: RecordLog
204 * @tc.type: FUNC
205 */
206 HWTEST_F(SessionChangeRecorderTest, RecordLog, TestSize.Level1)
207 {
208 SessionChangeRecorder::GetInstance().sceneSessionChangeNeedLogMap_.clear();
209 SceneSessionChangeInfo changeInfo1 {
210 .persistentId_ = 123,
211 .changeInfo_ = "changeInfo1",
212 .logTag_ = WmsLogTag::WMS_MAIN,
213 };
214 SessionChangeRecorder::GetInstance().RecordLog(RecordType::RECORD_TYPE_BEGIN, changeInfo1);
215 auto result1 = SessionChangeRecorder::GetInstance().sceneSessionChangeNeedLogMap_;
216 EXPECT_EQ(result1[RecordType::RECORD_TYPE_BEGIN].size(), 1);
217
218 SceneSessionChangeInfo changeInfo2 {
219 .persistentId_ = 123,
220 .changeInfo_ = "changeInfo2",
221 .logTag_ = WmsLogTag::WMS_MAIN,
222 };
223 SessionChangeRecorder::GetInstance().RecordLog(RecordType::RECORD_TYPE_BEGIN, changeInfo2);
224 auto result2 = SessionChangeRecorder::GetInstance().sceneSessionChangeNeedLogMap_;
225 EXPECT_EQ(result2[RecordType::RECORD_TYPE_BEGIN].size(), 2);
226
227 SceneSessionChangeInfo changeInfo3 {
228 .persistentId_ = 123,
229 .changeInfo_ = "changeInfo3",
230 .logTag_ = WmsLogTag::WMS_MAIN,
231 };
232 SessionChangeRecorder::GetInstance().SetRecordSize(RecordType::RECORD_TYPE_BEGIN, 2);
233 SessionChangeRecorder::GetInstance().RecordLog(RecordType::RECORD_TYPE_BEGIN, changeInfo3);
234 auto result3 = SessionChangeRecorder::GetInstance().sceneSessionChangeNeedLogMap_;
235 EXPECT_EQ(result3[RecordType::RECORD_TYPE_BEGIN].size(), 0);
236 SessionChangeRecorder::GetInstance().SetRecordSize(RecordType::RECORD_TYPE_BEGIN, MAX_RECORD_TYPE_SIZE);
237 }
238
239 /**
240 * @tc.name: SimplifyDumpInfo
241 * @tc.desc: SimplifyDumpInfo
242 * @tc.type: FUNC
243 */
244 HWTEST_F(SessionChangeRecorderTest, SimplifyDumpInfo, TestSize.Level1)
245 {
246 std::string dumpInfo = "";
247 SessionChangeRecorder::GetInstance().SimplifyDumpInfo(dumpInfo, "TestSimplifyDumpInfo");
248 EXPECT_NE(dumpInfo.size(), 0);
249 }
250 }
251 } // namespace OHOS::Rosen