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/profiler_impl.h" 17e509ee18Sopenharmony_ci#include "ecmascript/tests/test_helper.h" 18e509ee18Sopenharmony_ci#include "protocol_handler.h" 19e509ee18Sopenharmony_ci 20e509ee18Sopenharmony_ciusing namespace panda::ecmascript; 21e509ee18Sopenharmony_ciusing namespace panda::ecmascript::tooling; 22e509ee18Sopenharmony_ci 23e509ee18Sopenharmony_cinamespace panda::test { 24e509ee18Sopenharmony_ciclass ProfilerImplTest : public testing::Test { 25e509ee18Sopenharmony_cipublic: 26e509ee18Sopenharmony_ci static void SetUpTestCase() 27e509ee18Sopenharmony_ci { 28e509ee18Sopenharmony_ci GTEST_LOG_(INFO) << "SetUpTestCase"; 29e509ee18Sopenharmony_ci } 30e509ee18Sopenharmony_ci 31e509ee18Sopenharmony_ci static void TearDownTestCase() 32e509ee18Sopenharmony_ci { 33e509ee18Sopenharmony_ci GTEST_LOG_(INFO) << "TearDownCase"; 34e509ee18Sopenharmony_ci } 35e509ee18Sopenharmony_ci 36e509ee18Sopenharmony_ci void SetUp() override 37e509ee18Sopenharmony_ci { 38e509ee18Sopenharmony_ci TestHelper::CreateEcmaVMWithScope(ecmaVm, thread, scope); 39e509ee18Sopenharmony_ci } 40e509ee18Sopenharmony_ci 41e509ee18Sopenharmony_ci void TearDown() override 42e509ee18Sopenharmony_ci { 43e509ee18Sopenharmony_ci TestHelper::DestroyEcmaVMWithScope(ecmaVm, scope); 44e509ee18Sopenharmony_ci } 45e509ee18Sopenharmony_ci 46e509ee18Sopenharmony_ciprotected: 47e509ee18Sopenharmony_ci EcmaVM *ecmaVm {nullptr}; 48e509ee18Sopenharmony_ci EcmaHandleScope *scope {nullptr}; 49e509ee18Sopenharmony_ci JSThread *thread {nullptr}; 50e509ee18Sopenharmony_ci}; 51e509ee18Sopenharmony_ci 52e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, Disable) 53e509ee18Sopenharmony_ci{ 54e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 55e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 56e509ee18Sopenharmony_ci DispatchResponse response = profiler->Disable(); 57e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == ""); 58e509ee18Sopenharmony_ci ASSERT_TRUE(response.IsOk()); 59e509ee18Sopenharmony_ci} 60e509ee18Sopenharmony_ci 61e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, Enable) 62e509ee18Sopenharmony_ci{ 63e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 64e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 65e509ee18Sopenharmony_ci DispatchResponse response = profiler->Enable(); 66e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == ""); 67e509ee18Sopenharmony_ci ASSERT_TRUE(response.IsOk()); 68e509ee18Sopenharmony_ci} 69e509ee18Sopenharmony_ci 70e509ee18Sopenharmony_ci 71e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, Start) 72e509ee18Sopenharmony_ci{ 73e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 74e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 75e509ee18Sopenharmony_ci DispatchResponse response = profiler->Start(); 76e509ee18Sopenharmony_ci std::unique_ptr<Profile> profile; 77e509ee18Sopenharmony_ci DispatchResponse response1 = profiler->Stop(&profile); 78e509ee18Sopenharmony_ci ASSERT_TRUE(response.IsOk()); 79e509ee18Sopenharmony_ci ASSERT_TRUE(response1.IsOk()); 80e509ee18Sopenharmony_ci ASSERT_TRUE(profile); 81e509ee18Sopenharmony_ci} 82e509ee18Sopenharmony_ci 83e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, Stop) 84e509ee18Sopenharmony_ci{ 85e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 86e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 87e509ee18Sopenharmony_ci std::unique_ptr<Profile> profile; 88e509ee18Sopenharmony_ci DispatchResponse response = profiler->Stop(&profile); 89e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage().find("Stop is failure") != std::string::npos); 90e509ee18Sopenharmony_ci ASSERT_TRUE(!response.IsOk()); 91e509ee18Sopenharmony_ci} 92e509ee18Sopenharmony_ci 93e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, SetSamplingInterval) 94e509ee18Sopenharmony_ci{ 95e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 96e509ee18Sopenharmony_ci SetSamplingIntervalParams params; 97e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 98e509ee18Sopenharmony_ci DispatchResponse response = profiler->SetSamplingInterval(params); 99e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == ""); 100e509ee18Sopenharmony_ci ASSERT_TRUE(response.IsOk()); 101e509ee18Sopenharmony_ci} 102e509ee18Sopenharmony_ci 103e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, EnableSerializationTimeoutCheck) 104e509ee18Sopenharmony_ci{ 105e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 106e509ee18Sopenharmony_ci SeriliazationTimeoutCheckEnableParams params; 107e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 108e509ee18Sopenharmony_ci DispatchResponse response = profiler->EnableSerializationTimeoutCheck(params); 109e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == ""); 110e509ee18Sopenharmony_ci ASSERT_TRUE(response.IsOk()); 111e509ee18Sopenharmony_ci} 112e509ee18Sopenharmony_ci 113e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DisableSerializationTimeoutCheck) 114e509ee18Sopenharmony_ci{ 115e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 116e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 117e509ee18Sopenharmony_ci DispatchResponse response = profiler->DisableSerializationTimeoutCheck(); 118e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == ""); 119e509ee18Sopenharmony_ci ASSERT_TRUE(response.IsOk()); 120e509ee18Sopenharmony_ci} 121e509ee18Sopenharmony_ci 122e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, GetBestEffortCoverage) 123e509ee18Sopenharmony_ci{ 124e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 125e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 126e509ee18Sopenharmony_ci DispatchResponse response = profiler->GetBestEffortCoverage(); 127e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == "GetBestEffortCoverage not support now"); 128e509ee18Sopenharmony_ci} 129e509ee18Sopenharmony_ci 130e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, StopPreciseCoverage) 131e509ee18Sopenharmony_ci{ 132e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 133e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 134e509ee18Sopenharmony_ci DispatchResponse response = profiler->StopPreciseCoverage(); 135e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == "StopPreciseCoverage not support now"); 136e509ee18Sopenharmony_ci} 137e509ee18Sopenharmony_ci 138e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, TakePreciseCoverage) 139e509ee18Sopenharmony_ci{ 140e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 141e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 142e509ee18Sopenharmony_ci DispatchResponse response = profiler->TakePreciseCoverage(); 143e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == "TakePreciseCoverage not support now"); 144e509ee18Sopenharmony_ci} 145e509ee18Sopenharmony_ci 146e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, StartPreciseCoverage) 147e509ee18Sopenharmony_ci{ 148e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 149e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 150e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Debugger.requestMemoryDump","params":{}})"; 151e509ee18Sopenharmony_ci DispatchRequest request = DispatchRequest(msg); 152e509ee18Sopenharmony_ci std::unique_ptr<StartPreciseCoverageParams> params = StartPreciseCoverageParams::Create(request.GetParams()); 153e509ee18Sopenharmony_ci DispatchResponse response = profiler->StartPreciseCoverage(*params); 154e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == "StartPreciseCoverage not support now"); 155e509ee18Sopenharmony_ci} 156e509ee18Sopenharmony_ci 157e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, StartTypeProfile) 158e509ee18Sopenharmony_ci{ 159e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 160e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 161e509ee18Sopenharmony_ci DispatchResponse response = profiler->StartTypeProfile(); 162e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == "StartTypeProfile not support now"); 163e509ee18Sopenharmony_ci} 164e509ee18Sopenharmony_ci 165e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, StopTypeProfile) 166e509ee18Sopenharmony_ci{ 167e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 168e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 169e509ee18Sopenharmony_ci DispatchResponse response = profiler->StopTypeProfile(); 170e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == "StopTypeProfile not support now"); 171e509ee18Sopenharmony_ci} 172e509ee18Sopenharmony_ci 173e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, TakeTypeProfile) 174e509ee18Sopenharmony_ci{ 175e509ee18Sopenharmony_ci ProtocolChannel *channel = nullptr; 176e509ee18Sopenharmony_ci auto profiler = std::make_unique<ProfilerImpl>(ecmaVm, channel); 177e509ee18Sopenharmony_ci DispatchResponse response = profiler->TakeTypeProfile(); 178e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == "TakeTypeProfile not support now"); 179e509ee18Sopenharmony_ci} 180e509ee18Sopenharmony_ci 181e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplDispatch) 182e509ee18Sopenharmony_ci{ 183e509ee18Sopenharmony_ci std::string result = ""; 184e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 185e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 186e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 187e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 188e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 189e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.Test","params":{}})"; 190e509ee18Sopenharmony_ci DispatchRequest request(msg); 191e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 192e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("Unknown method: Test") != std::string::npos); 193e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Profiler.disable","params":{}})"; 194e509ee18Sopenharmony_ci DispatchRequest request1 = DispatchRequest(msg); 195e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request1); 196e509ee18Sopenharmony_ci if (channel) { 197e509ee18Sopenharmony_ci delete channel; 198e509ee18Sopenharmony_ci channel = nullptr; 199e509ee18Sopenharmony_ci } 200e509ee18Sopenharmony_ci ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}"); 201e509ee18Sopenharmony_ci} 202e509ee18Sopenharmony_ci 203e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplEnable) 204e509ee18Sopenharmony_ci{ 205e509ee18Sopenharmony_ci std::string result = ""; 206e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 207e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 208e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 209e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 210e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 211e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.enable","params":{}})"; 212e509ee18Sopenharmony_ci DispatchRequest request(msg); 213e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 214e509ee18Sopenharmony_ci if (channel) { 215e509ee18Sopenharmony_ci delete channel; 216e509ee18Sopenharmony_ci channel = nullptr; 217e509ee18Sopenharmony_ci } 218e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("protocols") != std::string::npos); 219e509ee18Sopenharmony_ci} 220e509ee18Sopenharmony_ci 221e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplDisable) 222e509ee18Sopenharmony_ci{ 223e509ee18Sopenharmony_ci std::string result = ""; 224e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 225e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 226e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 227e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 228e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 229e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.disable","params":{}})"; 230e509ee18Sopenharmony_ci DispatchRequest request(msg); 231e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 232e509ee18Sopenharmony_ci if (channel) { 233e509ee18Sopenharmony_ci delete channel; 234e509ee18Sopenharmony_ci channel = nullptr; 235e509ee18Sopenharmony_ci } 236e509ee18Sopenharmony_ci ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}"); 237e509ee18Sopenharmony_ci} 238e509ee18Sopenharmony_ci 239e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplStart) 240e509ee18Sopenharmony_ci{ 241e509ee18Sopenharmony_ci std::string result = ""; 242e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 243e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 244e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 245e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 246e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 247e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.start","params":{}})"; 248e509ee18Sopenharmony_ci DispatchRequest request(msg); 249e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 250e509ee18Sopenharmony_ci ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}"); 251e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Profiler.stop","params":{}})"; 252e509ee18Sopenharmony_ci DispatchRequest request1 = DispatchRequest(msg); 253e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request1); 254e509ee18Sopenharmony_ci if (channel) { 255e509ee18Sopenharmony_ci delete channel; 256e509ee18Sopenharmony_ci channel = nullptr; 257e509ee18Sopenharmony_ci } 258e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("\"id\":0") != std::string::npos); 259e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("\"profile\"") != std::string::npos); 260e509ee18Sopenharmony_ci} 261e509ee18Sopenharmony_ci 262e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplStop) 263e509ee18Sopenharmony_ci{ 264e509ee18Sopenharmony_ci std::string result = ""; 265e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 266e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 267e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 268e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 269e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 270e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.stop","params":{}})"; 271e509ee18Sopenharmony_ci DispatchRequest request(msg); 272e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 273e509ee18Sopenharmony_ci if (channel) { 274e509ee18Sopenharmony_ci delete channel; 275e509ee18Sopenharmony_ci channel = nullptr; 276e509ee18Sopenharmony_ci } 277e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("Stop is failure") != std::string::npos); 278e509ee18Sopenharmony_ci} 279e509ee18Sopenharmony_ci 280e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplSetSamplingInterval) 281e509ee18Sopenharmony_ci{ 282e509ee18Sopenharmony_ci std::string result = ""; 283e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 284e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 285e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 286e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 287e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 288e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.setSamplingInterval","params":{}})"; 289e509ee18Sopenharmony_ci DispatchRequest request(msg); 290e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 291e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("wrong params") != std::string::npos); 292e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Profiler.setSamplingInterval","params":{"interval":24}})"; 293e509ee18Sopenharmony_ci DispatchRequest request1(msg); 294e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request1); 295e509ee18Sopenharmony_ci if (channel) { 296e509ee18Sopenharmony_ci delete channel; 297e509ee18Sopenharmony_ci channel = nullptr; 298e509ee18Sopenharmony_ci } 299e509ee18Sopenharmony_ci ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}"); 300e509ee18Sopenharmony_ci} 301e509ee18Sopenharmony_ci 302e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplGetBestEffortCoverage) 303e509ee18Sopenharmony_ci{ 304e509ee18Sopenharmony_ci std::string result = ""; 305e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 306e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 307e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 308e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 309e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 310e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.getBestEffortCoverage","params":{}})"; 311e509ee18Sopenharmony_ci DispatchRequest request(msg); 312e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 313e509ee18Sopenharmony_ci if (channel) { 314e509ee18Sopenharmony_ci delete channel; 315e509ee18Sopenharmony_ci channel = nullptr; 316e509ee18Sopenharmony_ci } 317e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("GetBestEffortCoverage not support now") != std::string::npos); 318e509ee18Sopenharmony_ci} 319e509ee18Sopenharmony_ci 320e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplStopPreciseCoverage) 321e509ee18Sopenharmony_ci{ 322e509ee18Sopenharmony_ci std::string result = ""; 323e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 324e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 325e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 326e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 327e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 328e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.stopPreciseCoverage","params":{}})"; 329e509ee18Sopenharmony_ci DispatchRequest request(msg); 330e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 331e509ee18Sopenharmony_ci if (channel) { 332e509ee18Sopenharmony_ci delete channel; 333e509ee18Sopenharmony_ci channel = nullptr; 334e509ee18Sopenharmony_ci } 335e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("StopPreciseCoverage not support now") != std::string::npos); 336e509ee18Sopenharmony_ci} 337e509ee18Sopenharmony_ci 338e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplTakePreciseCoverage) 339e509ee18Sopenharmony_ci{ 340e509ee18Sopenharmony_ci std::string result = ""; 341e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 342e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 343e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 344e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 345e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 346e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.takePreciseCoverage","params":{}})"; 347e509ee18Sopenharmony_ci DispatchRequest request(msg); 348e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 349e509ee18Sopenharmony_ci if (channel) { 350e509ee18Sopenharmony_ci delete channel; 351e509ee18Sopenharmony_ci channel = nullptr; 352e509ee18Sopenharmony_ci } 353e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("TakePreciseCoverage not support now") != std::string::npos); 354e509ee18Sopenharmony_ci} 355e509ee18Sopenharmony_ci 356e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplStartPreciseCoverage) 357e509ee18Sopenharmony_ci{ 358e509ee18Sopenharmony_ci std::string result = ""; 359e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 360e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 361e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 362e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 363e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 364e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.startPreciseCoverage","params":{}})"; 365e509ee18Sopenharmony_ci DispatchRequest request(msg); 366e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 367e509ee18Sopenharmony_ci if (channel) { 368e509ee18Sopenharmony_ci delete channel; 369e509ee18Sopenharmony_ci channel = nullptr; 370e509ee18Sopenharmony_ci } 371e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("StartPreciseCoverage not support now") != std::string::npos); 372e509ee18Sopenharmony_ci} 373e509ee18Sopenharmony_ci 374e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplStartTypeProfile) 375e509ee18Sopenharmony_ci{ 376e509ee18Sopenharmony_ci std::string result = ""; 377e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 378e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 379e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 380e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 381e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 382e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.startTypeProfile","params":{}})"; 383e509ee18Sopenharmony_ci DispatchRequest request(msg); 384e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 385e509ee18Sopenharmony_ci if (channel) { 386e509ee18Sopenharmony_ci delete channel; 387e509ee18Sopenharmony_ci channel = nullptr; 388e509ee18Sopenharmony_ci } 389e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("StartTypeProfile not support now") != std::string::npos); 390e509ee18Sopenharmony_ci} 391e509ee18Sopenharmony_ci 392e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplStopTypeProfile) 393e509ee18Sopenharmony_ci{ 394e509ee18Sopenharmony_ci std::string result = ""; 395e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 396e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 397e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 398e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 399e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 400e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.stopTypeProfile","params":{}})"; 401e509ee18Sopenharmony_ci DispatchRequest request(msg); 402e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 403e509ee18Sopenharmony_ci if (channel) { 404e509ee18Sopenharmony_ci delete channel; 405e509ee18Sopenharmony_ci channel = nullptr; 406e509ee18Sopenharmony_ci } 407e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("StopTypeProfile not support now") != std::string::npos); 408e509ee18Sopenharmony_ci} 409e509ee18Sopenharmony_ci 410e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplTakeTypeProfile) 411e509ee18Sopenharmony_ci{ 412e509ee18Sopenharmony_ci std::string result = ""; 413e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 414e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 415e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 416e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 417e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 418e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.takeTypeProfile","params":{}})"; 419e509ee18Sopenharmony_ci DispatchRequest request(msg); 420e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 421e509ee18Sopenharmony_ci if (channel) { 422e509ee18Sopenharmony_ci delete channel; 423e509ee18Sopenharmony_ci channel = nullptr; 424e509ee18Sopenharmony_ci } 425e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("TakeTypeProfile not support now") != std::string::npos); 426e509ee18Sopenharmony_ci} 427e509ee18Sopenharmony_ci 428e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplDisableSerializationTimeoutCheck) 429e509ee18Sopenharmony_ci{ 430e509ee18Sopenharmony_ci std::string result = ""; 431e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 432e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 433e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 434e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 435e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 436e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.disableSerializationTimeoutCheck","params":{}})"; 437e509ee18Sopenharmony_ci DispatchRequest request(msg); 438e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 439e509ee18Sopenharmony_ci if (channel) { 440e509ee18Sopenharmony_ci delete channel; 441e509ee18Sopenharmony_ci channel = nullptr; 442e509ee18Sopenharmony_ci } 443e509ee18Sopenharmony_ci ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}"); 444e509ee18Sopenharmony_ci} 445e509ee18Sopenharmony_ci 446e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, DispatcherImplEnableSerializationTimeoutCheck) 447e509ee18Sopenharmony_ci{ 448e509ee18Sopenharmony_ci std::string result = ""; 449e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 450e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 451e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 452e509ee18Sopenharmony_ci auto tracing = std::make_unique<ProfilerImpl>(ecmaVm, channel); 453e509ee18Sopenharmony_ci auto dispatcherImpl = std::make_unique<ProfilerImpl::DispatcherImpl>(channel, std::move(tracing)); 454e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Profiler.enableSerializationTimeoutCheck","params":{}})"; 455e509ee18Sopenharmony_ci DispatchRequest request(msg); 456e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request); 457e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("wrong params") != std::string::npos); 458e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Profiler.enableSerializationTimeoutCheck","params":{"threshold": 5}})"; 459e509ee18Sopenharmony_ci DispatchRequest request1(msg); 460e509ee18Sopenharmony_ci dispatcherImpl->Dispatch(request1); 461e509ee18Sopenharmony_ci if (channel) { 462e509ee18Sopenharmony_ci delete channel; 463e509ee18Sopenharmony_ci channel = nullptr; 464e509ee18Sopenharmony_ci } 465e509ee18Sopenharmony_ci ASSERT_TRUE(result == "{\"id\":0,\"result\":{}}"); 466e509ee18Sopenharmony_ci} 467e509ee18Sopenharmony_ci 468e509ee18Sopenharmony_ciHWTEST_F_L0(ProfilerImplTest, FrontendPreciseCoverageDeltaUpdate) 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 = nullptr; 474e509ee18Sopenharmony_ci auto frontend = std::make_unique<ProfilerImpl::Frontend>(channel); 475e509ee18Sopenharmony_ci frontend->PreciseCoverageDeltaUpdate(); 476e509ee18Sopenharmony_ci ASSERT_TRUE(result == ""); 477e509ee18Sopenharmony_ci if (!channel) { 478e509ee18Sopenharmony_ci channel = new ProtocolHandler(callback, ecmaVm); 479e509ee18Sopenharmony_ci } 480e509ee18Sopenharmony_ci auto frontend1 = std::make_unique<ProfilerImpl::Frontend>(channel); 481e509ee18Sopenharmony_ci frontend1->PreciseCoverageDeltaUpdate(); 482e509ee18Sopenharmony_ci if (channel) { 483e509ee18Sopenharmony_ci delete channel; 484e509ee18Sopenharmony_ci channel = nullptr; 485e509ee18Sopenharmony_ci } 486e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("Profile.PreciseCoverageDeltaUpdate") != std::string::npos); 487e509ee18Sopenharmony_ci} 488e509ee18Sopenharmony_ci} // namespace panda::test 489