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