1/*
2 * Copyright (c) 2023 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 "netstack_log.h"
17#include "gtest/gtest.h"
18#include <csignal>
19#include <cstring>
20#include <functional>
21#include <iostream>
22
23#include "net_websocket.h"
24#include "net_websocket_type.h"
25
26class WebSocketTest : public testing::Test {
27public:
28    static void SetUpTestCase() {}
29
30    static void TearDownTestCase() {}
31
32    virtual void SetUp() {}
33
34    virtual void TearDown() {}
35};
36
37namespace {
38using namespace testing::ext;
39
40static void OnOpen(struct WebSocket *client, WebSocket_OpenResult openResult) {}
41
42static void OnMessage(struct WebSocket *client, char *data, uint32_t length) {}
43
44static void OnError(struct WebSocket *client, WebSocket_ErrorResult error) {}
45
46static void OnClose(struct WebSocket *client, WebSocket_CloseResult closeResult) {}
47
48HWTEST_F(WebSocketTest, WebSocketConstruct001, TestSize.Level1)
49{
50    int32_t ret;
51    struct WebSocket *client = new WebSocket();
52    const char *url1 = "www.baidu.com";
53    struct WebSocket_Header header1;
54    header1.fieldName = "Content-Type";
55    header1.fieldValue = "application/json";
56    header1.next = nullptr;
57    client = OH_WebSocketClient_Constructor(OnOpen, OnMessage, OnError, OnClose);
58    ret = OH_WebSocketClient_AddHeader(client, header1);
59    OH_WebSocketClient_Connect(client, url1, client->requestOptions);
60    OH_WebSocketClient_Destroy(client);
61    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
62}
63
64HWTEST_F(WebSocketTest, WebSocketAddHeader002, TestSize.Level1)
65{
66    int32_t ret;
67    struct WebSocket *client = nullptr;
68    struct WebSocket_Header header1;
69    header1.fieldName = "Content-Type";
70    header1.fieldValue = "application/json";
71    header1.next = nullptr;
72    ret = OH_WebSocketClient_AddHeader(client, header1);
73    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NULL);
74}
75
76HWTEST_F(WebSocketTest, WebSocketConnect003, TestSize.Level1)
77{
78    int32_t ret;
79    struct WebSocket *client = new WebSocket();
80    const char *url1 = "www.baidu.com";
81    ret = OH_WebSocketClient_Connect(client, url1, client->requestOptions);
82    OH_WebSocketClient_Destroy(client);
83    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NOT_CREATED);
84}
85
86HWTEST_F(WebSocketTest, WebSocketSend004, TestSize.Level1)
87{
88    int32_t ret;
89    struct WebSocket *client = nullptr;
90    const char *senddata = "Hello, I love China!";
91    int sendLength = std::strlen(senddata);
92    ret = OH_WebSocketClient_Send(client, const_cast<char *>(senddata), sendLength);
93    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NULL);
94}
95
96HWTEST_F(WebSocketTest, WebSocketClose005, TestSize.Level1)
97{
98    int32_t ret;
99    struct WebSocket *client = nullptr;
100    struct WebSocket_CloseOption CloseOption;
101    CloseOption.code = 1000;
102    CloseOption.reason = " ";
103    ret = OH_WebSocketClient_Close(client, CloseOption);
104    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NULL);
105}
106
107HWTEST_F(WebSocketTest, WebSocketDestroy006, TestSize.Level1)
108{
109    int32_t ret;
110    struct WebSocket *client = new WebSocket();
111    ret = OH_WebSocketClient_Destroy(client);
112    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_CLIENT_NOT_CREATED);
113}
114
115HWTEST_F(WebSocketTest, WebSocketSendTest007, TestSize.Level1)
116{
117    int32_t ret;
118    const char *url1 = "www.baidu.com";
119    struct WebSocket *client = new WebSocket();
120    struct WebSocket_Header header1;
121    const char *senddata = "Hello, world!";
122    int sendLength = std::strlen(senddata);
123    const char senddata2[10] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x00, 0x17, 0x19, 0x19};
124
125    header1.fieldName = "Content-Type";
126    header1.fieldValue = "application/json";
127    header1.next = nullptr;
128
129    client = OH_WebSocketClient_Constructor(OnOpen, OnMessage, OnError, OnClose);
130    ret = OH_WebSocketClient_AddHeader(client, header1);
131    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
132    OH_WebSocketClient_Connect(client, url1, client->requestOptions);
133    ret = OH_WebSocketClient_Send(client, nullptr, 0);
134    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_SEND_DATA_NULL);
135    ret = OH_WebSocketClient_Send(client, const_cast<char *>(senddata), 0);
136    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
137    ret = OH_WebSocketClient_Send(client, const_cast<char *>(senddata), sendLength);
138    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
139    ret = OH_WebSocketClient_Send(client, const_cast<char *>(senddata2), sizeof(senddata2));
140    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
141    ret = OH_WebSocketClient_Destroy(client);
142    EXPECT_EQ(ret, WebSocket_ErrCode::WEBSOCKET_OK);
143}
144
145} // namespace