• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-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 
16 #include "test_common.h"
17 
18 #include "context_key.h"
19 #include "event_list.h"
20 #include "net_address.h"
21 #include "securec.h"
22 #include "socket_module.h"
23 
24 #define TCP_COMMON_DEFINES                                                                                           \
25     auto env = (napi_env)engine_;                                                                                    \
26                                                                                                                      \
27     napi_value exports = NapiUtils::CreateObject(env);                                                               \
28                                                                                                                      \
29     SocketModuleExports::InitSocketModule(env, exports);                                                             \
30                                                                                                                      \
31     napi_value newTcp =                                                                                              \
32         NapiUtils::GetNamedProperty(env, exports, SocketModuleExports::FUNCTION_CONSTRUCTOR_TCP_SOCKET_INSTANCE);    \
33     ASSERT_CHECK_VALUE_TYPE(env, newTcp, napi_function);                                                             \
34                                                                                                                      \
35     napi_value tcpThis = NapiUtils::CallFunction(env, exports, newTcp, 0, nullptr);                                  \
36     ASSERT_CHECK_VALUE_TYPE(env, tcpThis, napi_object);                                                              \
37                                                                                                                      \
38     napi_value tcpBind = NapiUtils::GetNamedProperty(env, tcpThis, SocketModuleExports::TCPSocket::FUNCTION_BIND);   \
39     ASSERT_CHECK_VALUE_TYPE(env, tcpBind, napi_function);                                                            \
40                                                                                                                      \
41     napi_value tcpConnect =                                                                                          \
42         NapiUtils::GetNamedProperty(env, tcpThis, SocketModuleExports::TCPSocket::FUNCTION_CONNECT);                 \
43     ASSERT_CHECK_VALUE_TYPE(env, tcpConnect, napi_function);                                                         \
44                                                                                                                      \
45     napi_value tcpSend = NapiUtils::GetNamedProperty(env, tcpThis, SocketModuleExports::TCPSocket::FUNCTION_SEND);   \
46     ASSERT_CHECK_VALUE_TYPE(env, tcpSend, napi_function);                                                            \
47                                                                                                                      \
48     napi_value tcpClose = NapiUtils::GetNamedProperty(env, tcpThis, SocketModuleExports::TCPSocket::FUNCTION_CLOSE); \
49     ASSERT_CHECK_VALUE_TYPE(env, tcpClose, napi_function);                                                           \
50                                                                                                                      \
51     napi_value tcpGetRemoteAddress =                                                                                 \
52         NapiUtils::GetNamedProperty(env, tcpThis, SocketModuleExports::TCPSocket::FUNCTION_GET_REMOTE_ADDRESS);      \
53     ASSERT_CHECK_VALUE_TYPE(env, tcpGetRemoteAddress, napi_function);                                                \
54                                                                                                                      \
55     napi_value tcpGetState =                                                                                         \
56         NapiUtils::GetNamedProperty(env, tcpThis, SocketModuleExports::TCPSocket::FUNCTION_GET_STATE);               \
57     ASSERT_CHECK_VALUE_TYPE(env, tcpGetState, napi_function);                                                        \
58                                                                                                                      \
59     napi_value tcpSetExtraOptions =                                                                                  \
60         NapiUtils::GetNamedProperty(env, tcpThis, SocketModuleExports::TCPSocket::FUNCTION_SET_EXTRA_OPTIONS);       \
61     ASSERT_CHECK_VALUE_TYPE(env, tcpSetExtraOptions, napi_function);                                                 \
62                                                                                                                      \
63     napi_value tcpOn = NapiUtils::GetNamedProperty(env, tcpThis, SocketModuleExports::TCPSocket::FUNCTION_ON);       \
64     ASSERT_CHECK_VALUE_TYPE(env, tcpOn, napi_function);                                                              \
65                                                                                                                      \
66     napi_value tcpOff = NapiUtils::GetNamedProperty(env, tcpThis, SocketModuleExports::TCPSocket::FUNCTION_OFF);     \
67     ASSERT_CHECK_VALUE_TYPE(env, tcpOff, napi_function);
68 
69 #define UDP_COMMON_DEFINES                                                                                           \
70     auto env = (napi_env)engine_;                                                                                    \
71                                                                                                                      \
72     napi_value exports = NapiUtils::CreateObject(env);                                                               \
73                                                                                                                      \
74     SocketModuleExports::InitSocketModule(env, exports);                                                             \
75                                                                                                                      \
76     napi_value newUdp =                                                                                              \
77         NapiUtils::GetNamedProperty(env, exports, SocketModuleExports::FUNCTION_CONSTRUCTOR_UDP_SOCKET_INSTANCE);    \
78     ASSERT_CHECK_VALUE_TYPE(env, newUdp, napi_function);                                                             \
79                                                                                                                      \
80     napi_value udpThis = NapiUtils::CallFunction(env, exports, newUdp, 0, nullptr);                                  \
81     ASSERT_CHECK_VALUE_TYPE(env, udpThis, napi_object);                                                              \
82                                                                                                                      \
83     napi_value udpBind = NapiUtils::GetNamedProperty(env, udpThis, SocketModuleExports::UDPSocket::FUNCTION_BIND);   \
84     ASSERT_CHECK_VALUE_TYPE(env, udpBind, napi_function);                                                            \
85                                                                                                                      \
86     napi_value udpSend = NapiUtils::GetNamedProperty(env, udpThis, SocketModuleExports::UDPSocket::FUNCTION_SEND);   \
87     ASSERT_CHECK_VALUE_TYPE(env, udpSend, napi_function);                                                            \
88                                                                                                                      \
89     napi_value udpClose = NapiUtils::GetNamedProperty(env, udpThis, SocketModuleExports::UDPSocket::FUNCTION_CLOSE); \
90     ASSERT_CHECK_VALUE_TYPE(env, udpClose, napi_function);                                                           \
91                                                                                                                      \
92     napi_value udpGetState =                                                                                         \
93         NapiUtils::GetNamedProperty(env, udpThis, SocketModuleExports::UDPSocket::FUNCTION_GET_STATE);               \
94     ASSERT_CHECK_VALUE_TYPE(env, udpGetState, napi_function);                                                        \
95                                                                                                                      \
96     napi_value udpSetExtraOptions =                                                                                  \
97         NapiUtils::GetNamedProperty(env, udpThis, SocketModuleExports::UDPSocket::FUNCTION_SET_EXTRA_OPTIONS);       \
98     ASSERT_CHECK_VALUE_TYPE(env, udpSetExtraOptions, napi_function);                                                 \
99                                                                                                                      \
100     napi_value udpOn = NapiUtils::GetNamedProperty(env, udpThis, SocketModuleExports::UDPSocket::FUNCTION_ON);       \
101     ASSERT_CHECK_VALUE_TYPE(env, udpOn, napi_function);                                                              \
102                                                                                                                      \
103     napi_value udpOff = NapiUtils::GetNamedProperty(env, udpThis, SocketModuleExports::UDPSocket::FUNCTION_OFF);     \
104     ASSERT_CHECK_VALUE_TYPE(env, udpOff, napi_function);
105 
106 #define MAKE_ON_MESSAGE(FUNC_NAME)                                                                            \
107     [](napi_env env, napi_callback_info info) -> napi_value {                                                 \
108         NETSTACK_LOGI("%s", FUNC_NAME);                                                                       \
109                                                                                                               \
110         napi_value thisVal = nullptr;                                                                         \
111         size_t paramsCount = 1;                                                                               \
112         napi_value params[1] = {nullptr};                                                                     \
113         NAPI_CALL(env, napi_get_cb_info(env, info, &paramsCount, params, &thisVal, nullptr));                 \
114                                                                                                               \
115         napi_value remoteInfo = NapiUtils::GetNamedProperty(env, params[0], KEY_REMOTE_INFO);                 \
116         NETSTACK_LOGI("On recv message");                                                                     \
117         NETSTACK_LOGI("address: %s", NapiUtils::GetStringPropertyUtf8(env, remoteInfo, KEY_ADDRESS).c_str()); \
118         NETSTACK_LOGI("port: %u", NapiUtils::GetUint32Property(env, remoteInfo, KEY_PORT));                   \
119         NETSTACK_LOGI("size: %u", NapiUtils::GetUint32Property(env, remoteInfo, KEY_SIZE));                   \
120                                                                                                               \
121         napi_value msgBuffer = NapiUtils::GetNamedProperty(env, params[0], KEY_MESSAGE);                      \
122         size_t len = 0;                                                                                       \
123         void *data = NapiUtils::GetInfoFromArrayBufferValue(env, msgBuffer, &len);                            \
124         std::string s;                                                                                        \
125         s.append((char *)data, len);                                                                          \
126         NETSTACK_LOGI("data:\n%s", s.c_str());                                                                \
127                                                                                                               \
128         NETSTACK_LOGI("\n\n\n");                                                                              \
129         return NapiUtils::GetUndefined(env);                                                                  \
130     }
131 
132 #define TEST_TCP(TEST_NAME, LOCAL_IP, REMOTE_IP, FAMILY, MAKER, PNG)                                            \
133     [[maybe_unused]] HWTEST_F(NativeEngineTest, TEST_NAME, testing::ext::TestSize.Level0) /* NOLINT */          \
134     {                                                                                                           \
135         TCP_COMMON_DEFINES                                                                                      \
136                                                                                                                 \
137         napi_value tcpBindAddress = NapiUtils::CreateObject(env);                                               \
138         NapiUtils::SetStringPropertyUtf8(env, (napi_value)tcpBindAddress, KEY_ADDRESS, LOCAL_IP);               \
139         NapiUtils::SetUint32Property(env, tcpBindAddress, KEY_FAMILY, (uint32_t)NetAddress::Family::FAMILY);    \
140         NapiUtils::SetUint32Property(env, tcpBindAddress, KEY_PORT, 5126);                                      \
141                                                                                                                 \
142         napi_value tcpConnectAddress = NapiUtils::CreateObject(env);                                            \
143         NapiUtils::SetStringPropertyUtf8(env, (napi_value)tcpConnectAddress, KEY_ADDRESS, REMOTE_IP);           \
144         NapiUtils::SetUint32Property(env, tcpConnectAddress, KEY_FAMILY, (uint32_t)NetAddress::Family::FAMILY); \
145         NapiUtils::SetUint32Property(env, tcpConnectAddress, KEY_PORT, 1314);                                   \
146                                                                                                                 \
147         napi_value tcpConnectOptions = NapiUtils::CreateObject(env);                                            \
148         NapiUtils::SetNamedProperty(env, (napi_value)tcpConnectOptions, KEY_ADDRESS, tcpConnectAddress);        \
149                                                                                                                 \
150         const char *sendStr = nullptr;                                                                          \
151         size_t len = 0;                                                                                         \
152         if (!(PNG)) {                                                                                           \
153             sendStr = "Hello This is Tcp Test" #TEST_NAME;                                                      \
154             len = strlen(sendStr);                                                                              \
155         } else {                                                                                                \
156             FILE *fp = fopen("for-post.png", "rb");                                                             \
157             fseek(fp, 0L, SEEK_END);                                                                            \
158             long size = ftell(fp);                                                                              \
159             void *buffer = malloc(size);                                                                        \
160             fseek(fp, 0, SEEK_SET);                                                                             \
161             size_t readSize = fread((void *)buffer, 1, size, fp);                                               \
162             NETSTACK_LOGI("file size = %ld read size = %zu", size, readSize);                                   \
163                                                                                                                 \
164             sendStr = (const char *)buffer;                                                                     \
165             len = readSize;                                                                                     \
166         }                                                                                                       \
167                                                                                                                 \
168         void *data = nullptr;                                                                                   \
169         napi_value msgBuffer = NapiUtils::CreateArrayBuffer(env, len, &data);                                   \
170         memcpy_s(data, (size_t)len, sendStr, (size_t)len);                                                      \
171         napi_value tcpSendOptions = NapiUtils::CreateObject(env);                                               \
172         NapiUtils::SetNamedProperty(env, (napi_value)tcpSendOptions, KEY_DATA, msgBuffer);                      \
173                                                                                                                 \
174         napi_value event = NapiUtils::CreateStringUtf8(env, EVENT_MESSAGE);                                     \
175         napi_value eventCallback = NapiUtils::CreateFunction(env, #TEST_NAME, MAKER(#TEST_NAME), nullptr);      \
176         napi_value arg[2] = {event, eventCallback};                                                             \
177         NapiUtils::CallFunction(env, tcpThis, tcpOn, 2, arg);                                                   \
178                                                                                                                 \
179         NapiUtils::CallFunction(env, tcpThis, tcpBind, 1, &tcpBindAddress);                                     \
180                                                                                                                 \
181         NapiUtils::CallFunction(env, tcpThis, tcpConnect, 1, &tcpConnectOptions);                               \
182                                                                                                                 \
183         NapiUtils::CallFunction(env, tcpThis, tcpSend, 1, &tcpSendOptions);                                     \
184                                                                                                                 \
185         NapiUtils::CallFunction(env, tcpThis, tcpClose, 0, nullptr);                                            \
186     }
187 
188 #define TEST_UDP(TEST_NAME, LOCAL_IP, REMOTE_IP, FAMILY, MAKER, PNG)                                         \
189     [[maybe_unused]] HWTEST_F(NativeEngineTest, TEST_NAME, testing::ext::TestSize.Level0) /* NOLINT */       \
190     {                                                                                                        \
191         UDP_COMMON_DEFINES                                                                                   \
192                                                                                                              \
193         napi_value udpBindAddress = NapiUtils::CreateObject(env);                                            \
194         NapiUtils::SetStringPropertyUtf8(env, (napi_value)udpBindAddress, KEY_ADDRESS, LOCAL_IP);            \
195         NapiUtils::SetUint32Property(env, udpBindAddress, KEY_FAMILY, (uint32_t)NetAddress::Family::FAMILY); \
196         NapiUtils::SetUint32Property(env, udpBindAddress, KEY_PORT, 5126);                                   \
197                                                                                                              \
198         napi_value udpSendAddress = NapiUtils::CreateObject(env);                                            \
199         NapiUtils::SetStringPropertyUtf8(env, (napi_value)udpSendAddress, KEY_ADDRESS, REMOTE_IP);           \
200         NapiUtils::SetUint32Property(env, udpSendAddress, KEY_FAMILY, (uint32_t)NetAddress::Family::FAMILY); \
201         NapiUtils::SetUint32Property(env, udpSendAddress, KEY_PORT, 4556);                                   \
202                                                                                                              \
203         const char *sendStr = nullptr;                                                                       \
204         size_t len = 0;                                                                                      \
205         if (!(PNG)) {                                                                                        \
206             sendStr = "Hello UDP UDP Test" #TEST_NAME;                                                       \
207             len = strlen(sendStr);                                                                           \
208         } else {                                                                                             \
209             FILE *fp = fopen("for-post.png", "rb");                                                          \
210             fseek(fp, 0L, SEEK_END);                                                                         \
211             long size = ftell(fp);                                                                           \
212             void *buffer = malloc(size);                                                                     \
213             fseek(fp, 0, SEEK_SET);                                                                          \
214             size_t readSize = fread((void *)buffer, 1, size, fp);                                            \
215             NETSTACK_LOGI("file size = %ld read size = %zu", size, readSize);                                \
216                                                                                                              \
217             sendStr = (const char *)buffer;                                                                  \
218             len = readSize;                                                                                  \
219         }                                                                                                    \
220                                                                                                              \
221         void *data = nullptr;                                                                                \
222         napi_value msgBuffer = NapiUtils::CreateArrayBuffer(env, len, &data);                                \
223         memcpy_s(data, len, sendStr, len);                                                                   \
224                                                                                                              \
225         napi_value udpSendOptions = NapiUtils::CreateObject(env);                                            \
226         NapiUtils::SetNamedProperty(env, (napi_value)udpSendOptions, KEY_ADDRESS, udpSendAddress);           \
227         NapiUtils::SetNamedProperty(env, (napi_value)udpSendOptions, KEY_DATA, msgBuffer);                   \
228                                                                                                              \
229         napi_value event = NapiUtils::CreateStringUtf8(env, EVENT_MESSAGE);                                  \
230         napi_value eventCallback = NapiUtils::CreateFunction(env, #TEST_NAME, MAKER(#TEST_NAME), nullptr);   \
231         napi_value arg[2] = {event, eventCallback};                                                          \
232         NapiUtils::CallFunction(env, udpThis, udpOn, 2, arg);                                                \
233                                                                                                              \
234         NapiUtils::CallFunction(env, udpThis, udpBind, 1, &udpBindAddress);                                  \
235                                                                                                              \
236         napi_value extraOptions = NapiUtils::CreateObject(env);                                              \
237         NapiUtils::SetUint32Property(env, extraOptions, KEY_RECEIVE_BUFFER_SIZE, 1024);                      \
238         NapiUtils::SetUint32Property(env, extraOptions, KEY_SEND_BUFFER_SIZE, 1024);                         \
239         NapiUtils::CallFunction(env, udpThis, udpSetExtraOptions, 1, &extraOptions);                         \
240                                                                                                              \
241         NapiUtils::CallFunction(env, udpThis, udpSend, 1, &udpSendOptions);                                  \
242                                                                                                              \
243         NapiUtils::CallFunction(env, udpThis, udpClose, 0, nullptr);                                         \
244     }
245 
246 #define MAKE_PNG_ON_MESSAGE(FUNC_NAME)                                                                        \
247     [](napi_env env, napi_callback_info info) -> napi_value {                                                 \
248         NETSTACK_LOGI("%s", FUNC_NAME);                                                                       \
249                                                                                                               \
250         napi_value thisVal = nullptr;                                                                         \
251         size_t paramsCount = 1;                                                                               \
252         napi_value params[1] = {nullptr};                                                                     \
253         NAPI_CALL(env, napi_get_cb_info(env, info, &paramsCount, params, &thisVal, nullptr));                 \
254                                                                                                               \
255         napi_value remoteInfo = NapiUtils::GetNamedProperty(env, params[0], KEY_REMOTE_INFO);                 \
256         NETSTACK_LOGI("On recv message");                                                                     \
257         NETSTACK_LOGI("address: %s", NapiUtils::GetStringPropertyUtf8(env, remoteInfo, KEY_ADDRESS).c_str()); \
258         NETSTACK_LOGI("port: %u", NapiUtils::GetUint32Property(env, remoteInfo, KEY_PORT));                   \
259         NETSTACK_LOGI("size: %u", NapiUtils::GetUint32Property(env, remoteInfo, KEY_SIZE));                   \
260                                                                                                               \
261         napi_value msgBuffer = NapiUtils::GetNamedProperty(env, params[0], KEY_MESSAGE);                      \
262         size_t len = 0;                                                                                       \
263         void *data = NapiUtils::GetInfoFromArrayBufferValue(env, msgBuffer, &len);                            \
264         std::string s;                                                                                        \
265                                                                                                               \
266         FILE *fp = fopen(FUNC_NAME ".png", "ab");                                                             \
267         if (fp != nullptr) {                                                                                  \
268                                                                                                               \
269             fwrite(data, 1, len, fp);                                                                         \
270             fclose(fp);                                                                                       \
271         }                                                                                                     \
272                                                                                                               \
273         NETSTACK_LOGI("\n\n\n");                                                                              \
274         return NapiUtils::GetUndefined(env);                                                                  \
275     }
276 
277 namespace OHOS::NetStack {
278 TEST_TCP(TEST_TCP1, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_ON_MESSAGE, false)
279 TEST_TCP(TEST_TCP2, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_ON_MESSAGE, false)
280 TEST_TCP(TEST_TCP3, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_ON_MESSAGE, false)
281 TEST_TCP(TEST_TCP4, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_ON_MESSAGE, false)
282 TEST_UDP(TEST_UDP1, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_ON_MESSAGE, false)
283 TEST_UDP(TEST_UDP2, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_ON_MESSAGE, false)
284 TEST_UDP(TEST_UDP3, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_ON_MESSAGE, false)
285 TEST_UDP(TEST_UDP4, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_ON_MESSAGE, false)
286 
287 TEST_TCP(TEST_TCP1_IPv6, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_ON_MESSAGE, false)
288 TEST_TCP(TEST_TCP2_IPv6, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_ON_MESSAGE, false)
289 TEST_TCP(TEST_TCP3_IPv6, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_ON_MESSAGE, false)
290 TEST_TCP(TEST_TCP4_IPv6, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_ON_MESSAGE, false)
291 TEST_UDP(TEST_UDP1_IPv6, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_ON_MESSAGE, false)
292 TEST_UDP(TEST_UDP2_IPv6, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_ON_MESSAGE, false)
293 TEST_UDP(TEST_UDP3_IPv6, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_ON_MESSAGE, false)
294 TEST_UDP(TEST_UDP4_IPv6, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_ON_MESSAGE, false)
295 
296 TEST_TCP(TEST_TCP1_PNG, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_PNG_ON_MESSAGE, true)
297 TEST_TCP(TEST_TCP2_PNG, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_PNG_ON_MESSAGE, true)
298 TEST_TCP(TEST_TCP3_PNG, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_PNG_ON_MESSAGE, true)
299 TEST_TCP(TEST_TCP4_PNG, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_PNG_ON_MESSAGE, true)
300 TEST_UDP(TEST_UDP1_PNG, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_PNG_ON_MESSAGE, true)
301 TEST_UDP(TEST_UDP2_PNG, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_PNG_ON_MESSAGE, true)
302 TEST_UDP(TEST_UDP3_PNG, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_PNG_ON_MESSAGE, true)
303 TEST_UDP(TEST_UDP4_PNG, LOCAL_IPV4_IP, REMOTE_IPV4_IP, IPv4, MAKE_PNG_ON_MESSAGE, true)
304 
305 TEST_TCP(TEST_TCP1_IPv6_PNG, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_PNG_ON_MESSAGE, true)
306 TEST_TCP(TEST_TCP2_IPv6_PNG, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_PNG_ON_MESSAGE, true)
307 TEST_TCP(TEST_TCP3_IPv6_PNG, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_PNG_ON_MESSAGE, true)
308 TEST_TCP(TEST_TCP4_IPv6_PNG, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_PNG_ON_MESSAGE, true)
309 TEST_UDP(TEST_UDP1_IPv6_PNG, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_PNG_ON_MESSAGE, true)
310 TEST_UDP(TEST_UDP2_IPv6_PNG, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_PNG_ON_MESSAGE, true)
311 TEST_UDP(TEST_UDP3_IPv6_PNG, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_PNG_ON_MESSAGE, true)
312 TEST_UDP(TEST_UDP4_IPv6_PNG, LOCAL_IPV6_IP, REMOTE_IPV6_IP, IPv6, MAKE_PNG_ON_MESSAGE, true)
313 } // namespace OHOS::NetStack
314 
main(int argc,char ** argv)315 int main(int argc, char **argv)
316 {
317     testing::GTEST_FLAG(output) = "xml:./";
318     testing::InitGoogleTest(&argc, argv);
319 
320     JSRuntime *rt = JS_NewRuntime();
321 
322     if (rt == nullptr) {
323         return 0;
324     }
325 
326     JSContext *ctx = JS_NewContext(rt);
327     if (ctx == nullptr) {
328         return 0;
329     }
330 
331     js_std_add_helpers(ctx, 0, nullptr);
332 
333     g_nativeEngine = new QuickJSNativeEngine(rt, ctx, nullptr); // default instance id 0
334 
335     int ret = RUN_ALL_TESTS();
336     (void)ret;
337 
338     g_nativeEngine->Loop(LOOP_DEFAULT);
339 
340     return 0;
341 }