11e934351Sopenharmony_ci/*
21e934351Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41e934351Sopenharmony_ci * you may not use this file except in compliance with the License.
51e934351Sopenharmony_ci * You may obtain a copy of the License at
61e934351Sopenharmony_ci *
71e934351Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81e934351Sopenharmony_ci *
91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121e934351Sopenharmony_ci * See the License for the specific language governing permissions and
131e934351Sopenharmony_ci * limitations under the License.
141e934351Sopenharmony_ci */
151e934351Sopenharmony_ci
161e934351Sopenharmony_ci#include "netstack_log.h"
171e934351Sopenharmony_ci#include "gtest/gtest.h"
181e934351Sopenharmony_ci#include <csignal>
191e934351Sopenharmony_ci#include <cstring>
201e934351Sopenharmony_ci#include <functional>
211e934351Sopenharmony_ci#include <iostream>
221e934351Sopenharmony_ci
231e934351Sopenharmony_ci#include "net_websocket.h"
241e934351Sopenharmony_ci#include "net_websocket_type.h"
251e934351Sopenharmony_ci
261e934351Sopenharmony_ciclass WebSocketTest : public testing::Test {
271e934351Sopenharmony_cipublic:
281e934351Sopenharmony_ci    static void SetUpTestCase() {}
291e934351Sopenharmony_ci
301e934351Sopenharmony_ci    static void TearDownTestCase() {}
311e934351Sopenharmony_ci
321e934351Sopenharmony_ci    virtual void SetUp() {}
331e934351Sopenharmony_ci
341e934351Sopenharmony_ci    virtual void TearDown() {}
351e934351Sopenharmony_ci};
361e934351Sopenharmony_ci
371e934351Sopenharmony_cinamespace {
381e934351Sopenharmony_ciusing namespace testing::ext;
391e934351Sopenharmony_ci
401e934351Sopenharmony_cistatic void OnOpen(struct WebSocket *client, WebSocket_OpenResult openResult) {}
411e934351Sopenharmony_ci
421e934351Sopenharmony_cistatic void OnMessage(struct WebSocket *client, char *data, uint32_t length) {}
431e934351Sopenharmony_ci
441e934351Sopenharmony_cistatic void OnError(struct WebSocket *client, WebSocket_ErrorResult error) {}
451e934351Sopenharmony_ci
461e934351Sopenharmony_cistatic void OnClose(struct WebSocket *client, WebSocket_CloseResult closeResult) {}
471e934351Sopenharmony_ci
481e934351Sopenharmony_ciHWTEST_F(WebSocketTest, WebSocketConstruct001, TestSize.Level1)
491e934351Sopenharmony_ci{
501e934351Sopenharmony_ci    int32_t ret;
511e934351Sopenharmony_ci    struct WebSocket *client = new WebSocket();
521e934351Sopenharmony_ci    const char *url1 = "www.baidu.com";
531e934351Sopenharmony_ci    struct WebSocket_Header header1;
541e934351Sopenharmony_ci    header1.fieldName = "Content-Type";
551e934351Sopenharmony_ci    header1.fieldValue = "application/json";
561e934351Sopenharmony_ci    header1.next = nullptr;
571e934351Sopenharmony_ci    client = OH_WebSocketClient_Constructor(OnOpen, OnMessage, OnError, OnClose);
581e934351Sopenharmony_ci    ret = OH_WebSocketClient_AddHeader(client, header1);
591e934351Sopenharmony_ci    OH_WebSocketClient_Connect(client, url1, client->requestOptions);
601e934351Sopenharmony_ci    OH_WebSocketClient_Destroy(client);
611e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
621e934351Sopenharmony_ci}
631e934351Sopenharmony_ci
641e934351Sopenharmony_ciHWTEST_F(WebSocketTest, WebSocketAddHeader002, TestSize.Level1)
651e934351Sopenharmony_ci{
661e934351Sopenharmony_ci    int32_t ret;
671e934351Sopenharmony_ci    struct WebSocket *client = nullptr;
681e934351Sopenharmony_ci    struct WebSocket_Header header1;
691e934351Sopenharmony_ci    header1.fieldName = "Content-Type";
701e934351Sopenharmony_ci    header1.fieldValue = "application/json";
711e934351Sopenharmony_ci    header1.next = nullptr;
721e934351Sopenharmony_ci    ret = OH_WebSocketClient_AddHeader(client, header1);
731e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NULL);
741e934351Sopenharmony_ci}
751e934351Sopenharmony_ci
761e934351Sopenharmony_ciHWTEST_F(WebSocketTest, WebSocketConnect003, TestSize.Level1)
771e934351Sopenharmony_ci{
781e934351Sopenharmony_ci    int32_t ret;
791e934351Sopenharmony_ci    struct WebSocket *client = new WebSocket();
801e934351Sopenharmony_ci    const char *url1 = "www.baidu.com";
811e934351Sopenharmony_ci    ret = OH_WebSocketClient_Connect(client, url1, client->requestOptions);
821e934351Sopenharmony_ci    OH_WebSocketClient_Destroy(client);
831e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NOT_CREATED);
841e934351Sopenharmony_ci}
851e934351Sopenharmony_ci
861e934351Sopenharmony_ciHWTEST_F(WebSocketTest, WebSocketSend004, TestSize.Level1)
871e934351Sopenharmony_ci{
881e934351Sopenharmony_ci    int32_t ret;
891e934351Sopenharmony_ci    struct WebSocket *client = nullptr;
901e934351Sopenharmony_ci    const char *senddata = "Hello, I love China!";
911e934351Sopenharmony_ci    int sendLength = std::strlen(senddata);
921e934351Sopenharmony_ci    ret = OH_WebSocketClient_Send(client, const_cast<char *>(senddata), sendLength);
931e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NULL);
941e934351Sopenharmony_ci}
951e934351Sopenharmony_ci
961e934351Sopenharmony_ciHWTEST_F(WebSocketTest, WebSocketClose005, TestSize.Level1)
971e934351Sopenharmony_ci{
981e934351Sopenharmony_ci    int32_t ret;
991e934351Sopenharmony_ci    struct WebSocket *client = nullptr;
1001e934351Sopenharmony_ci    struct WebSocket_CloseOption CloseOption;
1011e934351Sopenharmony_ci    CloseOption.code = 1000;
1021e934351Sopenharmony_ci    CloseOption.reason = " ";
1031e934351Sopenharmony_ci    ret = OH_WebSocketClient_Close(client, CloseOption);
1041e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NULL);
1051e934351Sopenharmony_ci}
1061e934351Sopenharmony_ci
1071e934351Sopenharmony_ciHWTEST_F(WebSocketTest, WebSocketDestroy006, TestSize.Level1)
1081e934351Sopenharmony_ci{
1091e934351Sopenharmony_ci    int32_t ret;
1101e934351Sopenharmony_ci    struct WebSocket *client = new WebSocket();
1111e934351Sopenharmony_ci    ret = OH_WebSocketClient_Destroy(client);
1121e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NOT_CREATED);
1131e934351Sopenharmony_ci}
1141e934351Sopenharmony_ci
1151e934351Sopenharmony_ciHWTEST_F(WebSocketTest, WebSocketSendTest007, TestSize.Level1)
1161e934351Sopenharmony_ci{
1171e934351Sopenharmony_ci    int32_t ret;
1181e934351Sopenharmony_ci    const char *url1 = "www.baidu.com";
1191e934351Sopenharmony_ci    struct WebSocket *client = new WebSocket();
1201e934351Sopenharmony_ci    struct WebSocket_Header header1;
1211e934351Sopenharmony_ci    const char *senddata = "Hello, world!";
1221e934351Sopenharmony_ci    int sendLength = std::strlen(senddata);
1231e934351Sopenharmony_ci    const char senddata2[10] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x00, 0x17, 0x19, 0x19};
1241e934351Sopenharmony_ci
1251e934351Sopenharmony_ci    header1.fieldName = "Content-Type";
1261e934351Sopenharmony_ci    header1.fieldValue = "application/json";
1271e934351Sopenharmony_ci    header1.next = nullptr;
1281e934351Sopenharmony_ci
1291e934351Sopenharmony_ci    client = OH_WebSocketClient_Constructor(OnOpen, OnMessage, OnError, OnClose);
1301e934351Sopenharmony_ci    ret = OH_WebSocketClient_AddHeader(client, header1);
1311e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
1321e934351Sopenharmony_ci    OH_WebSocketClient_Connect(client, url1, client->requestOptions);
1331e934351Sopenharmony_ci    ret = OH_WebSocketClient_Send(client, nullptr, 0);
1341e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_SEND_DATA_NULL);
1351e934351Sopenharmony_ci    ret = OH_WebSocketClient_Send(client, const_cast<char *>(senddata), 0);
1361e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
1371e934351Sopenharmony_ci    ret = OH_WebSocketClient_Send(client, const_cast<char *>(senddata), sendLength);
1381e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
1391e934351Sopenharmony_ci    ret = OH_WebSocketClient_Send(client, const_cast<char *>(senddata2), sizeof(senddata2));
1401e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
1411e934351Sopenharmony_ci    ret = OH_WebSocketClient_Destroy(client);
1421e934351Sopenharmony_ci    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
1431e934351Sopenharmony_ci}
1441e934351Sopenharmony_ci
1451e934351Sopenharmony_ci} // namespace