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#include "dispatcher.h" 16e509ee18Sopenharmony_ci#include "ecmascript/tests/test_helper.h" 17e509ee18Sopenharmony_ci#include "protocol_handler.h" 18e509ee18Sopenharmony_ci 19e509ee18Sopenharmony_ciusing namespace panda::ecmascript; 20e509ee18Sopenharmony_ciusing namespace panda::ecmascript::tooling; 21e509ee18Sopenharmony_ci 22e509ee18Sopenharmony_cinamespace panda::test { 23e509ee18Sopenharmony_ciclass DispatcherTest : public testing::Test { 24e509ee18Sopenharmony_cipublic: 25e509ee18Sopenharmony_ci static void SetUpTestCase() 26e509ee18Sopenharmony_ci { 27e509ee18Sopenharmony_ci GTEST_LOG_(INFO) << "SetUpTestCase"; 28e509ee18Sopenharmony_ci } 29e509ee18Sopenharmony_ci 30e509ee18Sopenharmony_ci static void TearDownTestCase() 31e509ee18Sopenharmony_ci { 32e509ee18Sopenharmony_ci GTEST_LOG_(INFO) << "TearDownCase"; 33e509ee18Sopenharmony_ci } 34e509ee18Sopenharmony_ci 35e509ee18Sopenharmony_ci void SetUp() override 36e509ee18Sopenharmony_ci { 37e509ee18Sopenharmony_ci TestHelper::CreateEcmaVMWithScope(ecmaVm, thread, scope); 38e509ee18Sopenharmony_ci } 39e509ee18Sopenharmony_ci 40e509ee18Sopenharmony_ci void TearDown() override 41e509ee18Sopenharmony_ci { 42e509ee18Sopenharmony_ci TestHelper::DestroyEcmaVMWithScope(ecmaVm, scope); 43e509ee18Sopenharmony_ci } 44e509ee18Sopenharmony_ci 45e509ee18Sopenharmony_ciprotected: 46e509ee18Sopenharmony_ci EcmaVM *ecmaVm {nullptr}; 47e509ee18Sopenharmony_ci EcmaHandleScope *scope {nullptr}; 48e509ee18Sopenharmony_ci JSThread *thread {nullptr}; 49e509ee18Sopenharmony_ci}; 50e509ee18Sopenharmony_ci 51e509ee18Sopenharmony_ciHWTEST_F_L0(DispatcherTest, DispatchRequestTest) 52e509ee18Sopenharmony_ci{ 53e509ee18Sopenharmony_ci std::string msg = ""; 54e509ee18Sopenharmony_ci auto dispatchRequest = std::make_unique<DispatchRequest>(msg); 55e509ee18Sopenharmony_ci bool result = dispatchRequest->IsValid(); 56e509ee18Sopenharmony_ci ASSERT_TRUE(!result); 57e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Tracing.xxx","params":{}})"; 58e509ee18Sopenharmony_ci auto dispatchRequest1 = std::make_unique<DispatchRequest>(msg); 59e509ee18Sopenharmony_ci result = dispatchRequest1->IsValid(); 60e509ee18Sopenharmony_ci ASSERT_TRUE(result); 61e509ee18Sopenharmony_ci msg = std::string() + R"("":0)"; 62e509ee18Sopenharmony_ci auto dispatchRequest2 = std::make_unique<DispatchRequest>(msg); 63e509ee18Sopenharmony_ci result = dispatchRequest2->IsValid(); 64e509ee18Sopenharmony_ci ASSERT_TRUE(!result); 65e509ee18Sopenharmony_ci msg = std::string() + R"({"method":"Tracing","params":{}})"; 66e509ee18Sopenharmony_ci auto dispatchRequest3 = std::make_unique<DispatchRequest>(msg); 67e509ee18Sopenharmony_ci result = dispatchRequest3->IsValid(); 68e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"params":{}})"; 69e509ee18Sopenharmony_ci auto dispatchRequest9 = std::make_unique<DispatchRequest>(msg); 70e509ee18Sopenharmony_ci result = dispatchRequest9->IsValid(); 71e509ee18Sopenharmony_ci ASSERT_TRUE(!result); 72e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Tracing","params":{}})"; 73e509ee18Sopenharmony_ci auto dispatchRequest4 = std::make_unique<DispatchRequest>(msg); 74e509ee18Sopenharmony_ci result = dispatchRequest4->IsValid(); 75e509ee18Sopenharmony_ci ASSERT_TRUE(!result); 76e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":".Tracing","params":{}})"; 77e509ee18Sopenharmony_ci auto dispatchRequest5 = std::make_unique<DispatchRequest>(msg); 78e509ee18Sopenharmony_ci result = dispatchRequest5->IsValid(); 79e509ee18Sopenharmony_ci ASSERT_TRUE(!result); 80e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Tracing.","params":{}})"; 81e509ee18Sopenharmony_ci auto dispatchRequest6 = std::make_unique<DispatchRequest>(msg); 82e509ee18Sopenharmony_ci result = dispatchRequest6->IsValid(); 83e509ee18Sopenharmony_ci ASSERT_TRUE(!result); 84e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Tracing.end", "params":1})"; 85e509ee18Sopenharmony_ci auto dispatchRequest7 = std::make_unique<DispatchRequest>(msg); 86e509ee18Sopenharmony_ci result = dispatchRequest7->IsValid(); 87e509ee18Sopenharmony_ci ASSERT_TRUE(!result); 88e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Tracing.end"})"; 89e509ee18Sopenharmony_ci auto dispatchRequest8 = std::make_unique<DispatchRequest>(msg); 90e509ee18Sopenharmony_ci result = dispatchRequest8->IsValid(); 91e509ee18Sopenharmony_ci ASSERT_TRUE(result); 92e509ee18Sopenharmony_ci} 93e509ee18Sopenharmony_ci 94e509ee18Sopenharmony_ciHWTEST_F_L0(DispatcherTest, IsValidTest) 95e509ee18Sopenharmony_ci{ 96e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Tracing.end","params":{}})"; 97e509ee18Sopenharmony_ci auto dispatchRequest = std::make_unique<DispatchRequest>(msg); 98e509ee18Sopenharmony_ci bool result = dispatchRequest->IsValid(); 99e509ee18Sopenharmony_ci ASSERT_TRUE(result); 100e509ee18Sopenharmony_ci} 101e509ee18Sopenharmony_ci 102e509ee18Sopenharmony_ciHWTEST_F_L0(DispatcherTest, GetDomainTest) 103e509ee18Sopenharmony_ci{ 104e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Tracing.end","params":{}})"; 105e509ee18Sopenharmony_ci auto dispatchRequest = std::make_unique<DispatchRequest>(msg); 106e509ee18Sopenharmony_ci std::string result = dispatchRequest->GetDomain(); 107e509ee18Sopenharmony_ci ASSERT_TRUE(result == "Tracing"); 108e509ee18Sopenharmony_ci} 109e509ee18Sopenharmony_ci 110e509ee18Sopenharmony_ciHWTEST_F_L0(DispatcherTest, DispatchResponseCreateTest) 111e509ee18Sopenharmony_ci{ 112e509ee18Sopenharmony_ci ResponseCode code = ResponseCode::OK; 113e509ee18Sopenharmony_ci std::string msg = ""; 114e509ee18Sopenharmony_ci DispatchResponse response = DispatchResponse::Create(code, msg); 115e509ee18Sopenharmony_ci ASSERT_TRUE(response.IsOk()); 116e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == ""); 117e509ee18Sopenharmony_ci 118e509ee18Sopenharmony_ci msg = "msg"; 119e509ee18Sopenharmony_ci response = DispatchResponse::Create(msg); 120e509ee18Sopenharmony_ci ASSERT_TRUE(!response.IsOk()); 121e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == "msg"); 122e509ee18Sopenharmony_ci 123e509ee18Sopenharmony_ci std::optional<std::string> error; 124e509ee18Sopenharmony_ci response = DispatchResponse::Create(error); 125e509ee18Sopenharmony_ci ASSERT_TRUE(response.IsOk()); 126e509ee18Sopenharmony_ci ASSERT_TRUE(response.GetMessage() == ""); 127e509ee18Sopenharmony_ci} 128e509ee18Sopenharmony_ci 129e509ee18Sopenharmony_ciHWTEST_F_L0(DispatcherTest, DispatcherDispatchTest) 130e509ee18Sopenharmony_ci{ 131e509ee18Sopenharmony_ci std::string msg = ""; 132e509ee18Sopenharmony_ci DispatchRequest dispatchRequest(msg); 133e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Tracing.end","params":{}})"; 134e509ee18Sopenharmony_ci DispatchRequest dispatchRequest1(msg); 135e509ee18Sopenharmony_ci msg = std::string() + R"({"id":0,"method":"Test.end","params":{}})"; 136e509ee18Sopenharmony_ci DispatchRequest dispatchRequest2(msg); 137e509ee18Sopenharmony_ci std::string result = ""; 138e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 139e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 140e509ee18Sopenharmony_ci ProtocolChannel *channel = new ProtocolHandler(callback, ecmaVm); 141e509ee18Sopenharmony_ci auto dispatcher = std::make_unique<Dispatcher>(ecmaVm, channel); 142e509ee18Sopenharmony_ci dispatcher->Dispatch(dispatchRequest); 143e509ee18Sopenharmony_ci ASSERT_TRUE(result == ""); 144e509ee18Sopenharmony_ci result = ""; 145e509ee18Sopenharmony_ci dispatcher->Dispatch(dispatchRequest1); 146e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("\"id\":0,") != std::string::npos); 147e509ee18Sopenharmony_ci result = ""; 148e509ee18Sopenharmony_ci dispatcher->Dispatch(dispatchRequest2); 149e509ee18Sopenharmony_ci ASSERT_TRUE(result == ""); 150e509ee18Sopenharmony_ci} 151e509ee18Sopenharmony_ci} // namespace panda::test