1 /*
2 * Copyright (c) 2021 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 "ecmascript/js_array.h"
17 #include "ecmascript/js_object-inl.h"
18 #include "ecmascript/js_tagged_value-inl.h"
19 #include "ecmascript/object_factory.h"
20 #include "ecmascript/tests/test_helper.h"
21 #include "ecmascript/tooling/base/pt_types.h"
22 #include "ecmascript/tooling/base/pt_params.h"
23 #include "ecmascript/tooling/dispatcher.h"
24
25 using namespace panda::ecmascript;
26 using namespace panda::ecmascript::tooling;
27
28 namespace panda::test {
29 // Duplicate name of panda::ecmascript::PropertyDescriptor in js_object-inl.h
30 using panda::ecmascript::tooling::PropertyDescriptor;
31
32 using ObjectType = RemoteObject::TypeName;
33 using ObjectSubType = RemoteObject::SubTypeName;
34 using ObjectClassName = RemoteObject::ClassName;
35
36 class DebuggerParamsTest : public testing::Test {
37 public:
SetUpTestCase()38 static void SetUpTestCase()
39 {
40 GTEST_LOG_(INFO) << "SetUpTestCase";
41 Logger::InitializeStdLogging(Logger::Level::FATAL, LoggerComponentMaskAll);
42 }
43
TearDownTestCase()44 static void TearDownTestCase()
45 {
46 Logger::InitializeStdLogging(Logger::Level::ERROR, LoggerComponentMaskAll);
47 GTEST_LOG_(INFO) << "TearDownCase";
48 }
49
SetUp()50 void SetUp() override
51 {
52 TestHelper::CreateEcmaVMWithScope(instance, thread, scope);
53 ecmaVm = EcmaVM::Cast(instance);
54 // Main logic is JSON parser, so not need trigger GC to decrease execute time
55 ecmaVm->SetEnableForceGC(false);
56 }
57
TearDown()58 void TearDown() override
59 {
60 TestHelper::DestroyEcmaVMWithScope(ecmaVm, scope);
61 }
62
63 protected:
64 EcmaVM *ecmaVm {nullptr};
65 PandaVM *instance {nullptr};
66 EcmaHandleScope *scope {nullptr};
67 JSThread *thread {nullptr};
68 };
69
HWTEST_F_L0(DebuggerParamsTest,EnableParamsCreateTest)70 HWTEST_F_L0(DebuggerParamsTest, EnableParamsCreateTest)
71 {
72 std::string msg;
73 std::unique_ptr<EnableParams> enableParams;
74
75 // abnormal
76 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{}})";
77 enableParams = EnableParams::Create(DispatchRequest(msg).GetParams());
78 ASSERT_NE(enableParams, nullptr);
79 EXPECT_FALSE(enableParams->HasMaxScriptsCacheSize());
80
81 // normal
82 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"maxScriptsCacheSize":100}})";
83 enableParams = EnableParams::Create(DispatchRequest(msg).GetParams());
84 ASSERT_NE(enableParams, nullptr);
85 EXPECT_EQ(enableParams->GetMaxScriptsCacheSize(), 100);
86 }
87
88
89 #ifdef SUPPORT_PROFILER_CDP
HWTEST_F_L0(DebuggerParamsTest,StartSamplingParamsCreateTest)90 HWTEST_F_L0(DebuggerParamsTest, StartSamplingParamsCreateTest)
91 {
92 std::string msg;
93 std::unique_ptr<StartSamplingParams> startSamplingData;
94
95 // abnormal params of null params.sub-key
96 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{}})";
97 startSamplingData = StartSamplingParams::Create(DispatchRequest(msg).GetParams());
98 ASSERT_NE(startSamplingData, nullptr);
99 EXPECT_EQ(startSamplingData->GetSamplingInterval(), 32768);
100
101 // abnormal params of unknown params.sub-key
102 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"unknownKey":100}})";
103 startSamplingData = StartSamplingParams::Create(DispatchRequest(msg).GetParams());
104 ASSERT_NE(startSamplingData, nullptr);
105 EXPECT_EQ(startSamplingData->GetSamplingInterval(), 32768);
106
107 // abnormal params of params.sub-key=["samplingInterval":true]
108 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"samplingInterval":true}})";
109 startSamplingData = StartSamplingParams::Create(DispatchRequest(msg).GetParams());
110 EXPECT_EQ(startSamplingData, nullptr);
111
112 // abnormal params of params.sub-key=["samplingInterval":true]
113 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"samplingInterval":"Test"}})";
114 startSamplingData = StartSamplingParams::Create(DispatchRequest(msg).GetParams());
115 EXPECT_EQ(startSamplingData, nullptr);
116
117 // abnormal params of params.sub-key = [ "size"=100,"nodeId"=1,"ordinal"=10]
118 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"samplingInterval":1000}})";
119 startSamplingData = StartSamplingParams::Create(DispatchRequest(msg).GetParams());
120 ASSERT_NE(startSamplingData, nullptr);
121 EXPECT_EQ(startSamplingData->GetSamplingInterval(), 1000);
122 }
123
HWTEST_F_L0(DebuggerParamsTest,StartTrackingHeapObjectsParamsCreateTest)124 HWTEST_F_L0(DebuggerParamsTest, StartTrackingHeapObjectsParamsCreateTest)
125 {
126 std::string msg;
127 std::unique_ptr<StartTrackingHeapObjectsParams> objectData;
128
129 // abnormal params of null params.sub-key
130 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{}})";
131 objectData = StartTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
132 ASSERT_NE(objectData, nullptr);
133 ASSERT_FALSE(objectData->GetTrackAllocations());
134
135 // abnormal params of unknown params.sub-key
136 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"unknownKey":100}})";
137 objectData = StartTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
138 ASSERT_NE(objectData, nullptr);
139 ASSERT_FALSE(objectData->GetTrackAllocations());
140
141 // abnormal params of params.sub-key=["trackAllocations":10]
142 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"trackAllocations":10}})";
143 objectData = StartTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
144 EXPECT_EQ(objectData, nullptr);
145
146 // abnormal params of params.sub-key=["trackAllocations":"Test"]
147 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"trackAllocations":"Test"}})";
148 objectData = StartTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
149 EXPECT_EQ(objectData, nullptr);
150
151 // abnormal params of params.sub-key=["trackAllocations":true]
152 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"trackAllocations":true}})";
153 objectData = StartTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
154 ASSERT_NE(objectData, nullptr);
155 ASSERT_TRUE(objectData->GetTrackAllocations());
156 }
157
HWTEST_F_L0(DebuggerParamsTest,StopTrackingHeapObjectsParamsCreateTest)158 HWTEST_F_L0(DebuggerParamsTest, StopTrackingHeapObjectsParamsCreateTest)
159 {
160 std::string msg;
161 std::unique_ptr<StopTrackingHeapObjectsParams> objectData;
162
163 // abnormal params of null params.sub-key
164 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{}})";
165 objectData = StopTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
166 ASSERT_NE(objectData, nullptr);
167 ASSERT_FALSE(objectData->GetReportProgress());
168 ASSERT_FALSE(objectData->GetTreatGlobalObjectsAsRoots());
169 ASSERT_FALSE(objectData->GetCaptureNumericValue());
170
171 // abnormal params of unknown params.sub-key
172 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"unknownKey":100}})";
173 objectData = StopTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
174 ASSERT_NE(objectData, nullptr);
175 ASSERT_FALSE(objectData->GetReportProgress());
176 ASSERT_FALSE(objectData->GetTreatGlobalObjectsAsRoots());
177 ASSERT_FALSE(objectData->GetCaptureNumericValue());
178
179 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{
180 "reportProgress":10,
181 "treatGlobalObjectsAsRoots":10,
182 "captureNumericValue":10}})";
183 objectData = StopTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
184 EXPECT_EQ(objectData, nullptr);
185
186 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{
187 "reportProgress":"Test",
188 "treatGlobalObjectsAsRoots":"Test",
189 "captureNumericValue":"Test"}})";
190 objectData = StopTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
191 EXPECT_EQ(objectData, nullptr);
192
193 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{
194 "reportProgress":true,
195 "treatGlobalObjectsAsRoots":true,
196 "captureNumericValue":true}})";
197 objectData = StopTrackingHeapObjectsParams::Create(DispatchRequest(msg).GetParams());
198 ASSERT_NE(objectData, nullptr);
199 ASSERT_TRUE(objectData->GetReportProgress());
200 ASSERT_TRUE(objectData->GetTreatGlobalObjectsAsRoots());
201 ASSERT_TRUE(objectData->GetCaptureNumericValue());
202 }
203
HWTEST_F_L0(DebuggerParamsTest,AddInspectedHeapObjectParamsCreateTest)204 HWTEST_F_L0(DebuggerParamsTest, AddInspectedHeapObjectParamsCreateTest)
205 {
206 std::string msg;
207 std::unique_ptr<AddInspectedHeapObjectParams> objectData;
208
209 // abnormal params of null msg
210 msg = std::string() + R"({})";
211 objectData = AddInspectedHeapObjectParams::Create(DispatchRequest(msg).GetParams());
212 EXPECT_EQ(objectData, nullptr);
213
214 // abnormal params of unexist key params
215 msg = std::string() + R"({"id":0,"method":"Debugger.Test"})";
216 objectData = AddInspectedHeapObjectParams::Create(DispatchRequest(msg).GetParams());
217 EXPECT_EQ(objectData, nullptr);
218
219 // abnormal params of null params.sub-key
220 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{}})";
221 objectData = AddInspectedHeapObjectParams::Create(DispatchRequest(msg).GetParams());
222 EXPECT_EQ(objectData, nullptr);
223
224 // abnormal params of unknown params.sub-key
225 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"unknownKey":100}})";
226 objectData = AddInspectedHeapObjectParams::Create(DispatchRequest(msg).GetParams());
227 EXPECT_EQ(objectData, nullptr);
228
229 // abnormal params of params.sub-key=["heapObjectId":10]
230 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"heapObjectId":10}})";
231 objectData = AddInspectedHeapObjectParams::Create(DispatchRequest(msg).GetParams());
232 EXPECT_EQ(objectData, nullptr);
233
234 // abnormal params of params.sub-key=["heapObjectId":true]
235 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"heapObjectId":true}})";
236 objectData = AddInspectedHeapObjectParams::Create(DispatchRequest(msg).GetParams());
237 EXPECT_EQ(objectData, nullptr);
238
239 // abnormal params of params.sub-key=["heapObjectId":“10”]
240 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"heapObjectId":"10"}})";
241 objectData = AddInspectedHeapObjectParams::Create(DispatchRequest(msg).GetParams());
242 ASSERT_NE(objectData, nullptr);
243 EXPECT_EQ(objectData->GetHeapObjectId(), 10);
244 }
245
HWTEST_F_L0(DebuggerParamsTest,GetHeapObjectIdParamsCreateTest)246 HWTEST_F_L0(DebuggerParamsTest, GetHeapObjectIdParamsCreateTest)
247 {
248 std::string msg;
249 std::unique_ptr<GetHeapObjectIdParams> objectData;
250
251 // abnormal params of params.sub-key=["objectId":10]
252 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"objectId":10}})";
253 objectData = GetHeapObjectIdParams::Create(DispatchRequest(msg).GetParams());
254 EXPECT_EQ(objectData, nullptr);
255
256 // abnormal params of params.sub-key=["objectId":true]
257 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"objectId":true}})";
258 objectData = GetHeapObjectIdParams::Create(DispatchRequest(msg).GetParams());
259 EXPECT_EQ(objectData, nullptr);
260
261 // abnormal params of params.sub-key=["objectId":“10”]
262 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"objectId":"10"}})";
263 objectData = GetHeapObjectIdParams::Create(DispatchRequest(msg).GetParams());
264 ASSERT_NE(objectData, nullptr);
265 EXPECT_EQ((int)objectData->GetObjectId(), 10);
266 }
267
HWTEST_F_L0(DebuggerParamsTest,GetObjectByHeapObjectIdParamsCreateTest)268 HWTEST_F_L0(DebuggerParamsTest, GetObjectByHeapObjectIdParamsCreateTest)
269 {
270 std::string msg;
271 std::unique_ptr<GetObjectByHeapObjectIdParams> objectData;
272
273 // abnormal params of params.sub-key=["objectId":10]
274 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"objectId":10}})";
275 objectData = GetObjectByHeapObjectIdParams::Create(DispatchRequest(msg).GetParams());
276 EXPECT_EQ(objectData, nullptr);
277
278 // abnormal params of params.sub-key=["objectId":true]
279 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"objectId":"10", "objectGroup":10}})";
280 objectData = GetObjectByHeapObjectIdParams::Create(DispatchRequest(msg).GetParams());
281 EXPECT_EQ(objectData, nullptr);
282
283 // abnormal params of params.sub-key=["objectId":“10”]
284 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"objectId":"10"}})";
285 objectData = GetObjectByHeapObjectIdParams::Create(DispatchRequest(msg).GetParams());
286 ASSERT_NE(objectData, nullptr);
287 EXPECT_EQ((int)objectData->GetObjectId(), 10);
288 ASSERT_FALSE(objectData->HasObjectGroup());
289
290 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"objectId":"10", "objectGroup":"groupname"}})";
291 objectData = GetObjectByHeapObjectIdParams::Create(DispatchRequest(msg).GetParams());
292 ASSERT_NE(objectData, nullptr);
293 EXPECT_EQ((int)objectData->GetObjectId(), 10);
294 EXPECT_EQ(objectData->GetObjectGroup(), "groupname");
295 }
296
HWTEST_F_L0(DebuggerParamsTest,StartPreciseCoverageParamCreateTest)297 HWTEST_F_L0(DebuggerParamsTest, StartPreciseCoverageParamCreateTest)
298 {
299 std::string msg;
300 std::unique_ptr<StartPreciseCoverageParams> objectData;
301
302 // abnormal params of null params.sub-key
303 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{}})";
304 objectData = StartPreciseCoverageParams::Create(DispatchRequest(msg).GetParams());
305 ASSERT_NE(objectData, nullptr);
306
307 // abnormal params of unknown params.sub-key
308 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"unknownKey":100}})";
309 objectData = StartPreciseCoverageParams::Create(DispatchRequest(msg).GetParams());
310 ASSERT_NE(objectData, nullptr);
311
312 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{
313 "callCount":8,
314 "detailed":8,
315 "allowTriggeredUpdates":8}})";
316 objectData = StartPreciseCoverageParams::Create(DispatchRequest(msg).GetParams());
317 EXPECT_EQ(objectData, nullptr);
318
319 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{
320 "callCount":"Test",
321 "detailed":"Test",
322 "allowTriggeredUpdates":"Test"}})";
323 objectData = StartPreciseCoverageParams::Create(DispatchRequest(msg).GetParams());
324 EXPECT_EQ(objectData, nullptr);
325
326 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{
327 "callCount":true,
328 "detailed":true,
329 "allowTriggeredUpdates":true}})";
330 objectData = StartPreciseCoverageParams::Create(DispatchRequest(msg).GetParams());
331 ASSERT_NE(objectData, nullptr);
332 ASSERT_TRUE(objectData->GetCallCount());
333 ASSERT_TRUE(objectData->GetDetailed());
334 ASSERT_TRUE(objectData->GetAllowTriggeredUpdates());
335 }
336
HWTEST_F_L0(DebuggerParamsTest,SetSamplingIntervalParamsCreateTest)337 HWTEST_F_L0(DebuggerParamsTest, SetSamplingIntervalParamsCreateTest)
338 {
339 std::string msg;
340 std::unique_ptr<SetSamplingIntervalParams> objectData;
341
342 // abnormal params of null msg
343 msg = std::string() + R"({})";
344 objectData = SetSamplingIntervalParams::Create(DispatchRequest(msg).GetParams());
345 EXPECT_EQ(objectData, nullptr);
346
347 // abnormal params of unexist key params
348 msg = std::string() + R"({"id":0,"method":"Debugger.Test"})";
349 objectData = SetSamplingIntervalParams::Create(DispatchRequest(msg).GetParams());
350 EXPECT_EQ(objectData, nullptr);
351
352 // abnormal params of null params.sub-key
353 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{}})";
354 objectData = SetSamplingIntervalParams::Create(DispatchRequest(msg).GetParams());
355 EXPECT_EQ(objectData, nullptr);
356
357 // abnormal params of unknown params.sub-key
358 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"unknownKey":100}})";
359 objectData = SetSamplingIntervalParams::Create(DispatchRequest(msg).GetParams());
360 EXPECT_EQ(objectData, nullptr);
361
362 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{
363 "interval":"500"}})";
364 objectData = SetSamplingIntervalParams::Create(DispatchRequest(msg).GetParams());
365 EXPECT_EQ(objectData, nullptr);
366
367 msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{"interval":500}})";
368 objectData = SetSamplingIntervalParams::Create(DispatchRequest(msg).GetParams());
369 ASSERT_NE(objectData, nullptr);
370 EXPECT_EQ(objectData->GetInterval(), 500);
371 }
372 #endif
373 } // namespace panda::test
374