• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 <gtest/gtest.h>
16 #include "forward.h"
17 #include "task.h"
18 
19 using namespace testing::ext;
20 using namespace testing;
21 
22 namespace Hdc {
23 class HdcForwardBaseTest : public ::testing::Test {
24 public:
25     static void SetUpTestCase(void);
26     static void TearDownTestCase(void);
27     void SetUp();
28     void TearDown();
29 };
30 
SetUpTestCase()31 void HdcForwardBaseTest::SetUpTestCase() {}
TearDownTestCase()32 void HdcForwardBaseTest::TearDownTestCase() {}
SetUp()33 void HdcForwardBaseTest::SetUp() {}
TearDown()34 void HdcForwardBaseTest::TearDown() {}
35 
36 HWTEST_F(HdcForwardBaseTest, HdcForwardBase_ConstructorInitializesFdsToMinusOne, TestSize.Level0)
37 {
38     HTaskInfo info = new TaskInformation();
39     HdcForwardBase forward(info);
40     EXPECT_EQ(forward.fds[0], -1);
41     EXPECT_EQ(forward.fds[1], -1);
42 
43     delete info;
44 }
45 
46 HWTEST_F(HdcForwardBaseTest, StopTask_WithTwoEntries, TestSize.Level0)
47 {
48     auto* ctx1 = new HdcForwardBase::ContextForward();
49     auto* ctx2 = new HdcForwardBase::ContextForward();
50     HTaskInfo info = new TaskInformation();
51     HdcForwardBase forward(info);
52 
53     ctx1->id = 1;
54     ctx1->type = HdcForwardBase::FORWARD_TCP;
55     ctx1->thisClass = &forward;
56     ctx1->localArgs[0] = "tcp";
57     ctx1->localArgs[1] = "8080";
58     ctx1->remoteArgs[0] = "tcp";
59     ctx1->remoteArgs[1] = "remote:9090";
60     ctx1->tcp.data = ctx1;  // 设置 data 为自身,供 uv_close 使用
61     ctx1->finish = true;
62 
63     ctx2->id = 2;
64     ctx2->type = HdcForwardBase::FORWARD_ABSTRACT;
65     ctx2->thisClass = &forward;
66     ctx2->localArgs[0] = "localabstract";
67     ctx2->localArgs[1] = "sockname";
68     ctx2->pipe.data = ctx2;
69     ctx2->finish = true;
70 
71     forward.mapCtxPoint[1] = ctx1;
72     forward.mapCtxPoint[2] = ctx2;
73 
74     EXPECT_FALSE(forward.mapCtxPoint.empty());
75     forward.StopTask();
76     EXPECT_TRUE(forward.mapCtxPoint.empty());
77 
78     delete ctx1;
79     delete ctx2;
80     delete info;
81 }
82 
83 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_ValidTcp, TestSize.Level0)
84 {
85     std::string as[2];
86     HTaskInfo info = new TaskInformation();
87     HdcForwardBase forward(info);
88     EXPECT_TRUE(forward.CheckNodeInfo("tcp:1234", as));
89     EXPECT_EQ(as[0], "tcp");
90     EXPECT_EQ(as[1], "1234");
91 
92     delete info;
93 }
94 
95 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_InvalidFormat, TestSize.Level0)
96 {
97     std::string as[2];
98     HTaskInfo info = new TaskInformation();
99     HdcForwardBase forward(info);
100     EXPECT_FALSE(forward.CheckNodeInfo("tcp:", as));
101     EXPECT_FALSE(forward.CheckNodeInfo(":1234", as));
102     EXPECT_FALSE(forward.CheckNodeInfo("tcp", as));
103     EXPECT_FALSE(forward.CheckNodeInfo("", as));
104 
105     delete info;
106 }
107 
108 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_InvalidPort, TestSize.Level0)
109 {
110     std::string as[2];
111     HTaskInfo info = new TaskInformation();
112     HdcForwardBase forward(info);
113     EXPECT_FALSE(forward.CheckNodeInfo("tcp:0", as));
114     EXPECT_FALSE(forward.CheckNodeInfo("tcp:999999", as));
115 
116     delete info;
117 }
118 
119 HWTEST_F(HdcForwardBaseTest, AllocForwardBuf_SizeExceedsMaxBulk, TestSize.Level0)
120 {
121     size_t sizeSuggested = MAX_USBFFS_BULK + 1024;
122     uv_handle_t dummyHandle;
123     uv_buf_t buf;
124     HTaskInfo info = new TaskInformation();
125     HdcForwardBase forward(info);
126 
127     forward.AllocForwardBuf(&dummyHandle, sizeSuggested, &buf);
128 
129     ASSERT_NE(buf.base, nullptr);
130     EXPECT_EQ(buf.len, MAX_USBFFS_BULK - 1);
131 
132     delete info;
133     delete[] buf.base;
134 }
135 
136 HWTEST_F(HdcForwardBaseTest, AllocForwardBuf_NormalSize, TestSize.Level0)
137 {
138     size_t sizeSuggested = 1024;
139     uv_handle_t dummyHandle;
140     uv_buf_t buf;
141     HTaskInfo info = new TaskInformation();
142     HdcForwardBase forward(info);
143 
144     forward.AllocForwardBuf(&dummyHandle, sizeSuggested, &buf);
145 
146     ASSERT_NE(buf.base, nullptr);
147     EXPECT_EQ(buf.len, sizeSuggested - 1);
148 
149     delete info;
150     delete[] buf.base;
151 }
152 
153 HWTEST_F(HdcForwardBaseTest, AllocForwardBuf_ZeroSize, TestSize.Level0)
154 {
155     size_t sizeSuggested = 0;
156     uv_handle_t dummyHandle;
157     uv_buf_t buf;
158     HTaskInfo info = new TaskInformation();
159     HdcForwardBase forward(info);
160 
161     forward.AllocForwardBuf(&dummyHandle, sizeSuggested, &buf);
162 
163     ASSERT_NE(buf.base, nullptr);
164     EXPECT_EQ(buf.len, 0);
165 
166     delete info;
167     delete[] buf.base;
168 }
169 
170 HWTEST_F(HdcForwardBaseTest, AllocForwardBuf_ExactMaxBulkSize, TestSize.Level0)
171 {
172     size_t sizeSuggested = MAX_USBFFS_BULK;
173     uv_handle_t dummyHandle;
174     uv_buf_t buf;
175     HTaskInfo info = new TaskInformation();
176     HdcForwardBase forward(info);
177 
178     forward.AllocForwardBuf(&dummyHandle, sizeSuggested, &buf);
179 
180     ASSERT_NE(buf.base, nullptr);
181     EXPECT_EQ(buf.len, MAX_USBFFS_BULK - 1);
182 
183     delete info;
184     delete[] buf.base;
185 }
186 
187 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_NullInput, TestSize.Level0)
188 {
189     string result[2];
190     HTaskInfo info = new TaskInformation();
191     HdcForwardBase forward(info);
192     EXPECT_FALSE(forward.CheckNodeInfo(nullptr, result));
193 
194     delete info;
195 }
196 
197 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_EmptyString, TestSize.Level0)
198 {
199     string result[2];
200     HTaskInfo info = new TaskInformation();
201     HdcForwardBase forward(info);
202     EXPECT_FALSE(forward.CheckNodeInfo("", result));
203 
204     delete info;
205 }
206 
207 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_ColonAtStart, TestSize.Level0)
208 {
209     string result[2];
210     HTaskInfo info = new TaskInformation();
211     HdcForwardBase forward(info);
212     EXPECT_FALSE(forward.CheckNodeInfo(":8080", result));
213 
214     delete info;
215 }
216 
217 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_ColonAtEnd, TestSize.Level0)
218 {
219     string result[2];
220     HTaskInfo info = new TaskInformation();
221     HdcForwardBase forward(info);
222     EXPECT_FALSE(forward.CheckNodeInfo("tcp:", result));
223 
224     delete info;
225 }
226 
227 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_NoColon, TestSize.Level0)
228 {
229     string result[2];
230     HTaskInfo info = new TaskInformation();
231     HdcForwardBase forward(info);
232     EXPECT_FALSE(forward.CheckNodeInfo("tcp", result));
233 
234     delete info;
235 }
236 
237 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_TcpWithInvalidPortText, TestSize.Level0)
238 {
239     string result[2];
240     HTaskInfo info = new TaskInformation();
241     HdcForwardBase forward(info);
242     EXPECT_FALSE(forward.CheckNodeInfo("tcp:abc", result));
243 
244     delete info;
245 }
246 
247 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_TcpWithZeroPort, TestSize.Level0)
248 {
249     string result[2];
250     HTaskInfo info = new TaskInformation();
251     HdcForwardBase forward(info);
252     EXPECT_FALSE(forward.CheckNodeInfo("tcp:0", result));
253 
254     delete info;
255 }
256 
257 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_TcpWithPortExceedingMax, TestSize.Level0)
258 {
259     string result[2];
260     HTaskInfo info = new TaskInformation();
261     HdcForwardBase forward(info);
262     EXPECT_FALSE(forward.CheckNodeInfo("tcp:65536", result)); // MAX_IP_PORT = 65535
263 
264     delete info;
265 }
266 
267 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_TcpWithValidPort, TestSize.Level0)
268 {
269     string result[2];
270     HTaskInfo info = new TaskInformation();
271     HdcForwardBase forward(info);
272     EXPECT_TRUE(forward.CheckNodeInfo("tcp:8080", result));
273     EXPECT_EQ(result[0], "tcp");
274     EXPECT_EQ(result[1], "8080");
275 
276     delete info;
277 }
278 
279 HWTEST_F(HdcForwardBaseTest, CheckNodeInfo_NonTcpWithValidFormat, TestSize.Level0)
280 {
281     string result[2];
282     HTaskInfo info = new TaskInformation();
283     HdcForwardBase forward(info);
284     EXPECT_TRUE(forward.CheckNodeInfo("udp:192.168.1.1", result));
285     EXPECT_EQ(result[0], "udp");
286     EXPECT_EQ(result[1], "192.168.1.1");
287 
288     delete info;
289 }
290 
291 HWTEST_F(HdcForwardBaseTest, DetechForwardType_TC01_TCP, TestSize.Level0)
292 {
293     auto* ctx = new HdcForwardBase::ContextForward();
294     ctx->localArgs[0] = "tcp";
295     ctx->localArgs[1] = "any";
296     HTaskInfo info = new TaskInformation();
297     HdcForwardBase forward(info);
298     EXPECT_TRUE(forward.DetechForwardType(ctx));
299     EXPECT_EQ(ctx->type, HdcForwardBase::FORWARD_TCP);
300 
301     delete info;
302     delete ctx;
303 }
304 
305 HWTEST_F(HdcForwardBaseTest, DetectForwardType_TC02_DEV, TestSize.Level0)
306 {
307     auto* ctx = new HdcForwardBase::ContextForward();
308     ctx->localArgs[0] = "dev";
309     ctx->localArgs[1] = "any";
310     HTaskInfo info = new TaskInformation();
311     HdcForwardBase forward(info);
312     EXPECT_TRUE(forward.DetechForwardType(ctx));
313     EXPECT_EQ(ctx->type, HdcForwardBase::FORWARD_DEVICE);
314 
315     delete info;
316     delete ctx;
317 }
318 
319 HWTEST_F(HdcForwardBaseTest, DetectForwardType_TC03_LOCALABSTRACT, TestSize.Level0)
320 {
321     auto* ctx = new HdcForwardBase::ContextForward();
322     ctx->localArgs[0] = "localabstract";
323     ctx->localArgs[1] = "any";
324     HTaskInfo info = new TaskInformation();
325     HdcForwardBase forward(info);
326     EXPECT_TRUE(forward.DetechForwardType(ctx));
327     EXPECT_EQ(ctx->type, HdcForwardBase::FORWARD_ABSTRACT);
328 
329     delete info;
330     delete ctx;
331 }
332 
333 HWTEST_F(HdcForwardBaseTest, DetectForwardType_TC04_LOCALRESERVED, TestSize.Level0)
334 {
335     auto* ctx = new HdcForwardBase::ContextForward();
336     ctx->localArgs[0] = "localreserved";
337     ctx->localArgs[1] = "sockname";
338     HTaskInfo info = new TaskInformation();
339     HdcForwardBase forward(info);
340     EXPECT_TRUE(forward.DetechForwardType(ctx));
341     EXPECT_EQ(ctx->type, HdcForwardBase::FORWARD_RESERVED);
342     EXPECT_EQ(ctx->localArgs[1], "/dev/socket/sockname");
343 
344     delete info;
345     delete ctx;
346 }
347 
348 HWTEST_F(HdcForwardBaseTest, DetectForwardType_TC05_LOCALFILESYSTEM, TestSize.Level0)
349 {
350     auto* ctx = new HdcForwardBase::ContextForward();
351     ctx->localArgs[0] = "localfilesystem";
352     ctx->localArgs[1] = "path";
353     HTaskInfo info = new TaskInformation();
354     HdcForwardBase forward(info);
355     EXPECT_TRUE(forward.DetechForwardType(ctx));
356     EXPECT_EQ(ctx->type, HdcForwardBase::FORWARD_FILESYSTEM);
357     EXPECT_EQ(ctx->localArgs[1], "/tmp/path");
358 
359     delete info;
360     delete ctx;
361 }
362 
363 HWTEST_F(HdcForwardBaseTest, DetectForwardType_TC06_JDWP, TestSize.Level0)
364 {
365     auto* ctx = new HdcForwardBase::ContextForward();
366     ctx->localArgs[0] = "jdwp";
367     ctx->localArgs[1] = "any";
368     HTaskInfo info = new TaskInformation();
369     HdcForwardBase forward(info);
370     EXPECT_TRUE(forward.DetechForwardType(ctx));
371     EXPECT_EQ(ctx->type, HdcForwardBase::FORWARD_JDWP);
372 
373     delete info;
374     delete ctx;
375 }
376 
377 HWTEST_F(HdcForwardBaseTest, DetectForwardType_TC07_ARK, TestSize.Level0)
378 {
379     auto* ctx = new HdcForwardBase::ContextForward();
380     ctx->localArgs[0] = "ark";
381     ctx->localArgs[1] = "any";
382     HTaskInfo info = new TaskInformation();
383     HdcForwardBase forward(info);
384     EXPECT_TRUE(forward.DetechForwardType(ctx));
385     EXPECT_EQ(ctx->type, HdcForwardBase::FORWARD_ARK);
386 
387     delete info;
388     delete ctx;
389 }
390 
391 HWTEST_F(HdcForwardBaseTest, DetectForwardType_TC08_INVALID, TestSize.Level0)
392 {
393     auto* ctx = new HdcForwardBase::ContextForward();
394     ctx->localArgs[0] = "invalid";
395     ctx->localArgs[1] = "any";
396     HTaskInfo info = new TaskInformation();
397     HdcForwardBase forward(info);
398     EXPECT_FALSE(forward.DetechForwardType(ctx));
399 
400     delete info;
401     delete ctx;
402 }
403 
404 } // namespace Hdc