1e509ee18Sopenharmony_ci/*
2e509ee18Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3e509ee18Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e509ee18Sopenharmony_ci * you may not use this file except in compliance with the License.
5e509ee18Sopenharmony_ci * You may obtain a copy of the License at
6e509ee18Sopenharmony_ci *
7e509ee18Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e509ee18Sopenharmony_ci *
9e509ee18Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e509ee18Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e509ee18Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e509ee18Sopenharmony_ci * See the License for the specific language governing permissions and
13e509ee18Sopenharmony_ci * limitations under the License.
14e509ee18Sopenharmony_ci */
15e509ee18Sopenharmony_ci
16e509ee18Sopenharmony_ci#include "agent/heapprofiler_impl.h"
17e509ee18Sopenharmony_ci#include "ecmascript/tests/test_helper.h"
18e509ee18Sopenharmony_ci
19e509ee18Sopenharmony_ciusing namespace panda::ecmascript;
20e509ee18Sopenharmony_ciusing namespace panda::ecmascript::tooling;
21e509ee18Sopenharmony_ci
22e509ee18Sopenharmony_cinamespace panda::ecmascript::tooling {
23e509ee18Sopenharmony_ciclass HeapProfilerImplFriendTest {
24e509ee18Sopenharmony_cipublic:
25e509ee18Sopenharmony_ci    explicit HeapProfilerImplFriendTest(std::unique_ptr<HeapProfilerImpl> &heapprofilerImpl)
26e509ee18Sopenharmony_ci    {
27e509ee18Sopenharmony_ci        heapprofilerImpl_ = std::move(heapprofilerImpl);
28e509ee18Sopenharmony_ci    }
29e509ee18Sopenharmony_ci
30e509ee18Sopenharmony_ci    void ResetProfiles()
31e509ee18Sopenharmony_ci    {
32e509ee18Sopenharmony_ci        heapprofilerImpl_->frontend_.ResetProfiles();
33e509ee18Sopenharmony_ci    }
34e509ee18Sopenharmony_ci
35e509ee18Sopenharmony_ci    void LastSeenObjectId(int32_t lastSeenObjectId, int64_t timeStampUs)
36e509ee18Sopenharmony_ci    {
37e509ee18Sopenharmony_ci        heapprofilerImpl_->frontend_.LastSeenObjectId(lastSeenObjectId, timeStampUs);
38e509ee18Sopenharmony_ci    }
39e509ee18Sopenharmony_ci
40e509ee18Sopenharmony_ci    void HeapStatsUpdate(HeapStat* updateData, int32_t count)
41e509ee18Sopenharmony_ci    {
42e509ee18Sopenharmony_ci        heapprofilerImpl_->frontend_.HeapStatsUpdate(updateData, count);
43e509ee18Sopenharmony_ci    }
44e509ee18Sopenharmony_ci
45e509ee18Sopenharmony_ci    void AddHeapSnapshotChunk(char *data, int32_t size)
46e509ee18Sopenharmony_ci    {
47e509ee18Sopenharmony_ci        heapprofilerImpl_->frontend_.AddHeapSnapshotChunk(data, size);
48e509ee18Sopenharmony_ci    }
49e509ee18Sopenharmony_ci
50e509ee18Sopenharmony_ci    void ReportHeapSnapshotProgress(int32_t done, int32_t total)
51e509ee18Sopenharmony_ci    {
52e509ee18Sopenharmony_ci        heapprofilerImpl_->frontend_.ReportHeapSnapshotProgress(done, total);
53e509ee18Sopenharmony_ci    }
54e509ee18Sopenharmony_ciprivate:
55e509ee18Sopenharmony_ci    std::unique_ptr<HeapProfilerImpl> heapprofilerImpl_;
56e509ee18Sopenharmony_ci};
57e509ee18Sopenharmony_ci}
58e509ee18Sopenharmony_ci
59e509ee18Sopenharmony_cinamespace panda::test {
60e509ee18Sopenharmony_ciclass HeapProfilerImplTest : public testing::Test {
61e509ee18Sopenharmony_cipublic:
62e509ee18Sopenharmony_ci    static void SetUpTestCase()
63e509ee18Sopenharmony_ci    {
64e509ee18Sopenharmony_ci        GTEST_LOG_(INFO) << "SetUpTestCase";
65e509ee18Sopenharmony_ci    }
66e509ee18Sopenharmony_ci
67e509ee18Sopenharmony_ci    static void TearDownTestCase()
68e509ee18Sopenharmony_ci    {
69e509ee18Sopenharmony_ci        GTEST_LOG_(INFO) << "TearDownCase";
70e509ee18Sopenharmony_ci    }
71e509ee18Sopenharmony_ci
72e509ee18Sopenharmony_ci    void SetUp() override
73e509ee18Sopenharmony_ci    {
74e509ee18Sopenharmony_ci        TestHelper::CreateEcmaVMWithScope(ecmaVm, thread, scope);
75e509ee18Sopenharmony_ci    }
76e509ee18Sopenharmony_ci
77e509ee18Sopenharmony_ci    void TearDown() override
78e509ee18Sopenharmony_ci    {
79e509ee18Sopenharmony_ci        TestHelper::DestroyEcmaVMWithScope(ecmaVm, scope);
80e509ee18Sopenharmony_ci    }
81e509ee18Sopenharmony_ci
82e509ee18Sopenharmony_ciprotected:
83e509ee18Sopenharmony_ci    EcmaVM *ecmaVm {nullptr};
84e509ee18Sopenharmony_ci    EcmaHandleScope *scope {nullptr};
85e509ee18Sopenharmony_ci    JSThread *thread {nullptr};
86e509ee18Sopenharmony_ci};
87e509ee18Sopenharmony_ci
88e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, AddInspectedHeapObject)
89e509ee18Sopenharmony_ci{
90e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
91e509ee18Sopenharmony_ci    AddInspectedHeapObjectParams param;
92e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
93e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->AddInspectedHeapObject(param);
94e509ee18Sopenharmony_ci    ASSERT_TRUE(response.GetMessage() == "AddInspectedHeapObject not support now");
95e509ee18Sopenharmony_ci    ASSERT_TRUE(!response.IsOk());
96e509ee18Sopenharmony_ci}
97e509ee18Sopenharmony_ci
98e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, CollectGarbage)
99e509ee18Sopenharmony_ci{
100e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
101e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
102e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->CollectGarbage();
103e509ee18Sopenharmony_ci    ASSERT_TRUE(response.GetMessage() == "");
104e509ee18Sopenharmony_ci    ASSERT_TRUE(response.IsOk());
105e509ee18Sopenharmony_ci}
106e509ee18Sopenharmony_ci
107e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, Enable)
108e509ee18Sopenharmony_ci{
109e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
110e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
111e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->Enable();
112e509ee18Sopenharmony_ci    ASSERT_TRUE(response.GetMessage() == "");
113e509ee18Sopenharmony_ci    ASSERT_TRUE(response.IsOk());
114e509ee18Sopenharmony_ci}
115e509ee18Sopenharmony_ci
116e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, Disable)
117e509ee18Sopenharmony_ci{
118e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
119e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
120e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->Disable();
121e509ee18Sopenharmony_ci    ASSERT_TRUE(response.GetMessage() == "");
122e509ee18Sopenharmony_ci    ASSERT_TRUE(response.IsOk());
123e509ee18Sopenharmony_ci}
124e509ee18Sopenharmony_ci
125e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, GetHeapObjectId)
126e509ee18Sopenharmony_ci{
127e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
128e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
129e509ee18Sopenharmony_ci    GetHeapObjectIdParams params;
130e509ee18Sopenharmony_ci    HeapSnapshotObjectId objectId;
131e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->GetHeapObjectId(params, &objectId);
132e509ee18Sopenharmony_ci    ASSERT_TRUE(response.GetMessage() == "GetHeapObjectId not support now");
133e509ee18Sopenharmony_ci    ASSERT_TRUE(!response.IsOk());
134e509ee18Sopenharmony_ci}
135e509ee18Sopenharmony_ci
136e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, GetObjectByHeapObjectId)
137e509ee18Sopenharmony_ci{
138e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
139e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
140e509ee18Sopenharmony_ci    std::unique_ptr<GetObjectByHeapObjectIdParams> params;
141e509ee18Sopenharmony_ci    std::unique_ptr<RemoteObject> remoteObjectResult;
142e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->GetObjectByHeapObjectId(*params, &remoteObjectResult);
143e509ee18Sopenharmony_ci    ASSERT_TRUE(response.GetMessage() == "GetObjectByHeapObjectId not support now");
144e509ee18Sopenharmony_ci    ASSERT_TRUE(!response.IsOk());
145e509ee18Sopenharmony_ci}
146e509ee18Sopenharmony_ci
147e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, GetSamplingProfile)
148e509ee18Sopenharmony_ci{
149e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
150e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
151e509ee18Sopenharmony_ci    std::unique_ptr<SamplingHeapProfile> profile;
152e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->GetSamplingProfile(&profile);
153e509ee18Sopenharmony_ci    ASSERT_TRUE(response.GetMessage() == "GetSamplingProfile fail");
154e509ee18Sopenharmony_ci    ASSERT_TRUE(!response.IsOk());
155e509ee18Sopenharmony_ci}
156e509ee18Sopenharmony_ci
157e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, StartSampling)
158e509ee18Sopenharmony_ci{
159e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
160e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
161e509ee18Sopenharmony_ci    StartSamplingParams params;
162e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->StartSampling(params);
163e509ee18Sopenharmony_ci    ASSERT_TRUE(response.IsOk());
164e509ee18Sopenharmony_ci}
165e509ee18Sopenharmony_ci
166e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, StopSampling)
167e509ee18Sopenharmony_ci{
168e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
169e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
170e509ee18Sopenharmony_ci    std::unique_ptr<SamplingHeapProfile> profile;
171e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->StopSampling(&profile);
172e509ee18Sopenharmony_ci    ASSERT_TRUE(response.GetMessage() == "StopSampling fail");
173e509ee18Sopenharmony_ci    ASSERT_TRUE(!response.IsOk());
174e509ee18Sopenharmony_ci}
175e509ee18Sopenharmony_ci
176e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, TakeHeapSnapshot)
177e509ee18Sopenharmony_ci{
178e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
179e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
180e509ee18Sopenharmony_ci    StopTrackingHeapObjectsParams params;
181e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->TakeHeapSnapshot(params);
182e509ee18Sopenharmony_ci    ASSERT_TRUE(response.GetMessage() == "");
183e509ee18Sopenharmony_ci    ASSERT_TRUE(response.IsOk());
184e509ee18Sopenharmony_ci}
185e509ee18Sopenharmony_ci
186e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplDispatch)
187e509ee18Sopenharmony_ci{
188e509ee18Sopenharmony_ci    std::string result = "";
189e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
190e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
191e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
192e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
193e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
194e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"Debugger.Test","params":{}})";
195e509ee18Sopenharmony_ci    DispatchRequest request(msg);
196e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
197e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("Unknown method: Test") != std::string::npos);
198e509ee18Sopenharmony_ci    msg = std::string() + R"({"id":0,"method":"Debugger.disable","params":{}})";
199e509ee18Sopenharmony_ci    DispatchRequest request1 = DispatchRequest(msg);
200e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request1);
201e509ee18Sopenharmony_ci    if (channel) {
202e509ee18Sopenharmony_ci        delete channel;
203e509ee18Sopenharmony_ci        channel = nullptr;
204e509ee18Sopenharmony_ci    }
205e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}");
206e509ee18Sopenharmony_ci}
207e509ee18Sopenharmony_ci
208e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplAddInspectedHeapObject)
209e509ee18Sopenharmony_ci{
210e509ee18Sopenharmony_ci    std::string result = "";
211e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
212e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
213e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
214e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
215e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
216e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.addInspectedHeapObject","params":{}})";
217e509ee18Sopenharmony_ci    DispatchRequest request(msg);
218e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
219e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("wrong params") != std::string::npos);
220e509ee18Sopenharmony_ci    msg = std::string() + R"({"id":0,"method":"HeapProfiler.addInspectedHeapObject","params":{"heapObjectId":"0"}})";
221e509ee18Sopenharmony_ci    DispatchRequest request1 = DispatchRequest(msg);
222e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request1);
223e509ee18Sopenharmony_ci    if (channel) {
224e509ee18Sopenharmony_ci        delete channel;
225e509ee18Sopenharmony_ci        channel = nullptr;
226e509ee18Sopenharmony_ci    }
227e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("AddInspectedHeapObject not support now") != std::string::npos);
228e509ee18Sopenharmony_ci}
229e509ee18Sopenharmony_ci
230e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplCollectGarbage)
231e509ee18Sopenharmony_ci{
232e509ee18Sopenharmony_ci    std::string result = "";
233e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
234e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
235e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
236e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
237e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
238e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.collectGarbage","params":{}})";
239e509ee18Sopenharmony_ci    DispatchRequest request(msg);
240e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
241e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}");
242e509ee18Sopenharmony_ci    if (channel) {
243e509ee18Sopenharmony_ci        delete channel;
244e509ee18Sopenharmony_ci        channel = nullptr;
245e509ee18Sopenharmony_ci    }
246e509ee18Sopenharmony_ci}
247e509ee18Sopenharmony_ci
248e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplEnable)
249e509ee18Sopenharmony_ci{
250e509ee18Sopenharmony_ci    std::string result = "";
251e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
252e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
253e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
254e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
255e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
256e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.enable","params":{}})";
257e509ee18Sopenharmony_ci    DispatchRequest request(msg);
258e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
259e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("protocols") != std::string::npos);
260e509ee18Sopenharmony_ci    if (channel) {
261e509ee18Sopenharmony_ci        delete channel;
262e509ee18Sopenharmony_ci        channel = nullptr;
263e509ee18Sopenharmony_ci    }
264e509ee18Sopenharmony_ci}
265e509ee18Sopenharmony_ci
266e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplDisable)
267e509ee18Sopenharmony_ci{
268e509ee18Sopenharmony_ci    std::string result = "";
269e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
270e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
271e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
272e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
273e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
274e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.disable","params":{}})";
275e509ee18Sopenharmony_ci    DispatchRequest request(msg);
276e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
277e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}");
278e509ee18Sopenharmony_ci    if (channel) {
279e509ee18Sopenharmony_ci        delete channel;
280e509ee18Sopenharmony_ci        channel = nullptr;
281e509ee18Sopenharmony_ci    }
282e509ee18Sopenharmony_ci}
283e509ee18Sopenharmony_ci
284e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplGetHeapObjectId)
285e509ee18Sopenharmony_ci{
286e509ee18Sopenharmony_ci    std::string result = "";
287e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
288e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
289e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
290e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
291e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
292e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.getHeapObjectId","params":{"objectId":true}})";
293e509ee18Sopenharmony_ci    DispatchRequest request(msg);
294e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
295e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("wrong params") != std::string::npos);
296e509ee18Sopenharmony_ci    msg = std::string() + R"({"id":0,"method":"HeapProfiler.getHeapObjectId","params":{"objectId":"0"}})";
297e509ee18Sopenharmony_ci    DispatchRequest request1(msg);
298e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request1);
299e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("GetHeapObjectId not support now") != std::string::npos);
300e509ee18Sopenharmony_ci    if (channel) {
301e509ee18Sopenharmony_ci        delete channel;
302e509ee18Sopenharmony_ci        channel = nullptr;
303e509ee18Sopenharmony_ci    }
304e509ee18Sopenharmony_ci}
305e509ee18Sopenharmony_ci
306e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplGetObjectByHeapObjectId)
307e509ee18Sopenharmony_ci{
308e509ee18Sopenharmony_ci    std::string result = "";
309e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
310e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
311e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
312e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
313e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
314e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.getObjectByHeapObjectId","params":{
315e509ee18Sopenharmony_ci        "objectId":001}})";
316e509ee18Sopenharmony_ci    DispatchRequest request(msg);
317e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
318e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("wrong params") != std::string::npos);
319e509ee18Sopenharmony_ci    msg = std::string() + R"({"id":0,"method":"HeapProfiler.getObjectByHeapObjectId","params":{"objectId":"001",
320e509ee18Sopenharmony_ci        "objectGroup":"000"}})";
321e509ee18Sopenharmony_ci    DispatchRequest request1(msg);
322e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request1);
323e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("GetObjectByHeapObjectId not support now") != std::string::npos);
324e509ee18Sopenharmony_ci    if (channel) {
325e509ee18Sopenharmony_ci        delete channel;
326e509ee18Sopenharmony_ci        channel = nullptr;
327e509ee18Sopenharmony_ci    }
328e509ee18Sopenharmony_ci}
329e509ee18Sopenharmony_ci
330e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplGetSamplingProfile)
331e509ee18Sopenharmony_ci{
332e509ee18Sopenharmony_ci    std::string result = "";
333e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
334e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
335e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
336e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
337e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
338e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.getSamplingProfile","params":{}})";
339e509ee18Sopenharmony_ci    DispatchRequest request(msg);
340e509ee18Sopenharmony_ci    dispatcherImpl->GetSamplingProfile(request);
341e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("GetSamplingProfile fail") != std::string::npos);
342e509ee18Sopenharmony_ci    if (channel) {
343e509ee18Sopenharmony_ci        delete channel;
344e509ee18Sopenharmony_ci        channel = nullptr;
345e509ee18Sopenharmony_ci    }
346e509ee18Sopenharmony_ci}
347e509ee18Sopenharmony_ci
348e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplStartSampling)
349e509ee18Sopenharmony_ci{
350e509ee18Sopenharmony_ci    std::string result = "";
351e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
352e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
353e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
354e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
355e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
356e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.startSampling","params":{
357e509ee18Sopenharmony_ci        "samplingInterval":"Test"}})";
358e509ee18Sopenharmony_ci    DispatchRequest request(msg);
359e509ee18Sopenharmony_ci    dispatcherImpl->StartSampling(request);
360e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("wrong params") != std::string::npos);
361e509ee18Sopenharmony_ci    msg = std::string() + R"({"id":0,"method":"HeapProfiler.startSampling","params":{"samplingInterval":1000}})";
362e509ee18Sopenharmony_ci    DispatchRequest request1(msg);
363e509ee18Sopenharmony_ci    dispatcherImpl->StartSampling(request1);
364e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}");
365e509ee18Sopenharmony_ci    if (channel) {
366e509ee18Sopenharmony_ci        delete channel;
367e509ee18Sopenharmony_ci        channel = nullptr;
368e509ee18Sopenharmony_ci    }
369e509ee18Sopenharmony_ci}
370e509ee18Sopenharmony_ci
371e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplStopSampling)
372e509ee18Sopenharmony_ci{
373e509ee18Sopenharmony_ci    std::string result = "";
374e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
375e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
376e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
377e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
378e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
379e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.stopSampling","params":{}})";
380e509ee18Sopenharmony_ci    DispatchRequest request(msg);
381e509ee18Sopenharmony_ci    dispatcherImpl->StopSampling(request);
382e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("StopSampling fail") != std::string::npos);
383e509ee18Sopenharmony_ci    if (channel) {
384e509ee18Sopenharmony_ci        delete channel;
385e509ee18Sopenharmony_ci        channel = nullptr;
386e509ee18Sopenharmony_ci    }
387e509ee18Sopenharmony_ci}
388e509ee18Sopenharmony_ci
389e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, DispatcherImplTakeHeapSnapshot)
390e509ee18Sopenharmony_ci{
391e509ee18Sopenharmony_ci    std::string result = "";
392e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
393e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
394e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
395e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
396e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
397e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"HeapProfiler.takeHeapSnapshot","params":{
398e509ee18Sopenharmony_ci        "reportProgress":10,
399e509ee18Sopenharmony_ci        "treatGlobalObjectsAsRoots":10,
400e509ee18Sopenharmony_ci        "captureNumericValue":10}})";
401e509ee18Sopenharmony_ci    DispatchRequest request(msg);
402e509ee18Sopenharmony_ci    dispatcherImpl->TakeHeapSnapshot(request);
403e509ee18Sopenharmony_ci    ASSERT_TRUE(result.find("wrong params") != std::string::npos);
404e509ee18Sopenharmony_ci    msg = std::string() + R"({"id":0,"method":"HeapProfiler.takeHeapSnapshot","params":{
405e509ee18Sopenharmony_ci        "reportProgress":true,
406e509ee18Sopenharmony_ci        "treatGlobalObjectsAsRoots":true,
407e509ee18Sopenharmony_ci        "captureNumericValue":true}})";
408e509ee18Sopenharmony_ci    DispatchRequest request1(msg);
409e509ee18Sopenharmony_ci    dispatcherImpl->TakeHeapSnapshot(request1);
410e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}");
411e509ee18Sopenharmony_ci    if (channel) {
412e509ee18Sopenharmony_ci        delete channel;
413e509ee18Sopenharmony_ci        channel = nullptr;
414e509ee18Sopenharmony_ci    }
415e509ee18Sopenharmony_ci}
416e509ee18Sopenharmony_ci
417e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, GetSamplingProfileSuccessful)
418e509ee18Sopenharmony_ci{
419e509ee18Sopenharmony_ci    StartSamplingParams params;
420e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
421e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
422e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->StartSampling(params);
423e509ee18Sopenharmony_ci    std::unique_ptr<SamplingHeapProfile> samplingHeapProfile = std::make_unique<SamplingHeapProfile>();
424e509ee18Sopenharmony_ci    DispatchResponse result = heapProfiler->GetSamplingProfile(&samplingHeapProfile);
425e509ee18Sopenharmony_ci    ASSERT_TRUE(result.IsOk());
426e509ee18Sopenharmony_ci}
427e509ee18Sopenharmony_ci
428e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, StartSamplingFail)
429e509ee18Sopenharmony_ci{
430e509ee18Sopenharmony_ci    StartSamplingParams params;
431e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
432e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
433e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->StartSampling(params);
434e509ee18Sopenharmony_ci    DispatchResponse result = heapProfiler->StartSampling(params);
435e509ee18Sopenharmony_ci    ASSERT_TRUE(!result.IsOk());
436e509ee18Sopenharmony_ci}
437e509ee18Sopenharmony_ci
438e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, StopSamplingSuccessful)
439e509ee18Sopenharmony_ci{
440e509ee18Sopenharmony_ci    StartSamplingParams params;
441e509ee18Sopenharmony_ci    ProtocolChannel *channel = nullptr;
442e509ee18Sopenharmony_ci    std::unique_ptr<SamplingHeapProfile> samplingHeapProfile = std::make_unique<SamplingHeapProfile>();
443e509ee18Sopenharmony_ci    auto heapProfiler = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
444e509ee18Sopenharmony_ci    DispatchResponse response = heapProfiler->StartSampling(params);
445e509ee18Sopenharmony_ci    DispatchResponse result = heapProfiler->StopSampling(&samplingHeapProfile);
446e509ee18Sopenharmony_ci    ASSERT_TRUE(result.IsOk());
447e509ee18Sopenharmony_ci}
448e509ee18Sopenharmony_ci
449e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, StartTrackingHeapObjects)
450e509ee18Sopenharmony_ci{
451e509ee18Sopenharmony_ci    std::string result = "";
452e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
453e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
454e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
455e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
456e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
457e509ee18Sopenharmony_ci    std::string msg = "";
458e509ee18Sopenharmony_ci    msg += R"({"id":0,"method":"HeapProfiler.StartTrackingHeapObjects","params":{"trackAllocations":0}})";
459e509ee18Sopenharmony_ci    DispatchRequest request1(msg);
460e509ee18Sopenharmony_ci    dispatcherImpl->StartTrackingHeapObjects(request1);
461e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "{\"id\":0,\"result\":{\"code\":1,\"message\":\"wrong params\"}}");
462e509ee18Sopenharmony_ci    if (channel) {
463e509ee18Sopenharmony_ci        delete channel;
464e509ee18Sopenharmony_ci        channel = nullptr;
465e509ee18Sopenharmony_ci    }
466e509ee18Sopenharmony_ci}
467e509ee18Sopenharmony_ci
468e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, StopTrackingHeapObjects)
469e509ee18Sopenharmony_ci{
470e509ee18Sopenharmony_ci    std::string result = "";
471e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
472e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
473e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
474e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
475e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<HeapProfilerImpl::DispatcherImpl>(channel, std::move(tracing));
476e509ee18Sopenharmony_ci    std::string msg = "";
477e509ee18Sopenharmony_ci    msg += R"({"id":0,"method":"HeapProfiler.StopTrackingHeapObjects","params":{"reportProgress":0}})";
478e509ee18Sopenharmony_ci    DispatchRequest request1(msg);
479e509ee18Sopenharmony_ci    dispatcherImpl->StopTrackingHeapObjects(request1);
480e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "{\"id\":0,\"result\":{\"code\":1,\"message\":\"wrong params\"}}");
481e509ee18Sopenharmony_ci    if (channel) {
482e509ee18Sopenharmony_ci        delete channel;
483e509ee18Sopenharmony_ci        channel = nullptr;
484e509ee18Sopenharmony_ci    }
485e509ee18Sopenharmony_ci}
486e509ee18Sopenharmony_ci
487e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, ResetProfiles)
488e509ee18Sopenharmony_ci{
489e509ee18Sopenharmony_ci    std::string result = "";
490e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
491e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
492e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
493e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, nullptr);
494e509ee18Sopenharmony_ci    auto heapprofiler = std::make_unique<HeapProfilerImplFriendTest>(tracing);
495e509ee18Sopenharmony_ci    heapprofiler->ResetProfiles();
496e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "");
497e509ee18Sopenharmony_ci    tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
498e509ee18Sopenharmony_ci    heapprofiler = std::make_unique<HeapProfilerImplFriendTest>(tracing);
499e509ee18Sopenharmony_ci    heapprofiler->ResetProfiles();
500e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "");
501e509ee18Sopenharmony_ci    if (channel) {
502e509ee18Sopenharmony_ci        delete channel;
503e509ee18Sopenharmony_ci        channel = nullptr;
504e509ee18Sopenharmony_ci    }
505e509ee18Sopenharmony_ci}
506e509ee18Sopenharmony_ci
507e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, LastSeenObjectId)
508e509ee18Sopenharmony_ci{
509e509ee18Sopenharmony_ci    std::string result = "";
510e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
511e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
512e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
513e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, nullptr);
514e509ee18Sopenharmony_ci    auto heapprofiler = std::make_unique<HeapProfilerImplFriendTest>(tracing);
515e509ee18Sopenharmony_ci    heapprofiler->LastSeenObjectId(0, 0);
516e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "");
517e509ee18Sopenharmony_ci    tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
518e509ee18Sopenharmony_ci    heapprofiler = std::make_unique<HeapProfilerImplFriendTest>(tracing);
519e509ee18Sopenharmony_ci    heapprofiler->LastSeenObjectId(0, 0);
520e509ee18Sopenharmony_ci    std::string msg = "{\"method\":\"HeapProfiler.lastSeenObjectId\",";
521e509ee18Sopenharmony_ci    msg += "\"params\":{\"lastSeenObjectId\":0,";
522e509ee18Sopenharmony_ci    msg += "\"timestamp\":0}}";
523e509ee18Sopenharmony_ci    ASSERT_TRUE(result == msg);
524e509ee18Sopenharmony_ci    if (channel) {
525e509ee18Sopenharmony_ci        delete channel;
526e509ee18Sopenharmony_ci        channel = nullptr;
527e509ee18Sopenharmony_ci    }
528e509ee18Sopenharmony_ci}
529e509ee18Sopenharmony_ci
530e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, HeapStatsUpdate)
531e509ee18Sopenharmony_ci{
532e509ee18Sopenharmony_ci    std::string result = "";
533e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
534e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
535e509ee18Sopenharmony_ci    ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm);
536e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, nullptr);
537e509ee18Sopenharmony_ci    auto heapprofiler = std::make_unique<HeapProfilerImplFriendTest>(tracing);
538e509ee18Sopenharmony_ci    heapprofiler->HeapStatsUpdate(nullptr, 0);
539e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "");
540e509ee18Sopenharmony_ci    tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, channel);
541e509ee18Sopenharmony_ci    heapprofiler = std::make_unique<HeapProfilerImplFriendTest>(tracing);
542e509ee18Sopenharmony_ci    heapprofiler->HeapStatsUpdate(nullptr, 0);
543e509ee18Sopenharmony_ci    std::string msg = "{\"method\":\"HeapProfiler.heapStatsUpdate\",";
544e509ee18Sopenharmony_ci    msg += "\"params\":{\"statsUpdate\":[]}}";
545e509ee18Sopenharmony_ci    ASSERT_TRUE(result == msg);
546e509ee18Sopenharmony_ci    if (channel) {
547e509ee18Sopenharmony_ci        delete channel;
548e509ee18Sopenharmony_ci        channel = nullptr;
549e509ee18Sopenharmony_ci    }
550e509ee18Sopenharmony_ci}
551e509ee18Sopenharmony_ci
552e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, AddHeapSnapshotChunk)
553e509ee18Sopenharmony_ci{
554e509ee18Sopenharmony_ci    std::string result = "";
555e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
556e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
557e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, nullptr);
558e509ee18Sopenharmony_ci    auto heapprofiler = std::make_unique<HeapProfilerImplFriendTest>(tracing);
559e509ee18Sopenharmony_ci    heapprofiler->AddHeapSnapshotChunk(nullptr, 0);
560e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "");
561e509ee18Sopenharmony_ci}
562e509ee18Sopenharmony_ci
563e509ee18Sopenharmony_ciHWTEST_F_L0(HeapProfilerImplTest, ReportHeapSnapshotProgress)
564e509ee18Sopenharmony_ci{
565e509ee18Sopenharmony_ci    std::string result = "";
566e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
567e509ee18Sopenharmony_ci        [&result]([[maybe_unused]] const void *ptr, const std::string &temp) {result = temp;};
568e509ee18Sopenharmony_ci    auto tracing = std::make_unique<HeapProfilerImpl>(ecmaVm, nullptr);
569e509ee18Sopenharmony_ci    auto heapprofiler = std::make_unique<HeapProfilerImplFriendTest>(tracing);
570e509ee18Sopenharmony_ci    heapprofiler->ReportHeapSnapshotProgress(0, 0);
571e509ee18Sopenharmony_ci    ASSERT_TRUE(result == "");
572e509ee18Sopenharmony_ci}
573e509ee18Sopenharmony_ci}  // namespace panda::test
574