• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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