• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2024 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 <csignal>
17 #include <cstring>
18 #include <functional>
19 #include <iostream>
20 
21 #include "netstack_log.h"
22 #include "gtest/gtest.h"
23 #ifdef GTEST_API_
24 #define private public
25 #endif
26 #include "websocket_client_innerapi.h"
27 
28 class WebSocketTest : public testing::Test {
29 public:
SetUpTestCase()30     static void SetUpTestCase() {}
31 
TearDownTestCase()32     static void TearDownTestCase() {}
33 
SetUp()34     virtual void SetUp() {}
35 
TearDown()36     virtual void TearDown() {}
37 };
38 
39 namespace {
40 using namespace testing::ext;
41 using namespace OHOS::NetStack::WebSocketClient;
42 static constexpr const size_t TEST_MAX_DATA_LENGTH = 5 * 1024 * 1024;
43 static constexpr const size_t TEST_LENGTH = 1;
44 
45 OpenOptions openOptions;
46 
47 CloseOption closeOptions;
48 
OnMessage(WebSocketClient * client,const std::string & data,size_t length)49 static void OnMessage(WebSocketClient *client, const std::string &data, size_t length) {}
50 
OnOpen(WebSocketClient * client,OpenResult openResult)51 static void OnOpen(WebSocketClient *client, OpenResult openResult) {}
52 
OnError(WebSocketClient * client,ErrorResult error)53 static void OnError(WebSocketClient *client, ErrorResult error) {}
54 
OnClose(WebSocketClient * client,CloseResult closeResult)55 static void OnClose(WebSocketClient *client, CloseResult closeResult) {}
56 
57 WebSocketClient *client = new WebSocketClient();
58 
59 HWTEST_F(WebSocketTest, WebSocketRegistcallback001, TestSize.Level1)
60 {
61     openOptions.headers["Content-Type"] = "application/json";
62     openOptions.headers["Authorization"] = "Bearer your_token_here";
63     closeOptions.code = LWS_CLOSE_STATUS_NORMAL;
64     closeOptions.reason = "";
65     client->Registcallback(OnOpen, OnMessage, OnError, OnClose);
66     int32_t ret = client->Connect("www.baidu.com", openOptions);
67     EXPECT_TRUE(ret == WebSocketErrorCode::WEBSOCKET_CONNECTION_TO_SERVER_FAIL ||
68                 ret == WebSocketErrorCode::WEBSOCKET_NONE_ERR);
69 }
70 
71 HWTEST_F(WebSocketTest, WebSocketConnect002, TestSize.Level1)
72 {
73     int32_t ret = 0;
74     openOptions.headers["Content-Type"] = "application/json";
75     openOptions.headers["Authorization"] = "Bearer your_token_here";
76     client->Registcallback(OnOpen, OnMessage, OnError, OnClose);
77     ret = client->Connect("www.baidu.com", openOptions);
78     EXPECT_TRUE(ret == WebSocketErrorCode::WEBSOCKET_CONNECTION_TO_SERVER_FAIL ||
79                 ret == WebSocketErrorCode::WEBSOCKET_NONE_ERR);
80 }
81 
82 HWTEST_F(WebSocketTest, WebSocketSend003, TestSize.Level1)
83 {
84     int32_t ret;
85     const char *data = "Hello, world!";
86     int32_t length = std::strlen(data);
87     client->Connect("www.baidu.com", openOptions);
88     ret = client->Send(const_cast<char *>(data), length);
89     EXPECT_EQ(ret, WebSocketErrorCode::WEBSOCKET_NONE_ERR);
90 }
91 
92 HWTEST_F(WebSocketTest, WebSocketClose004, TestSize.Level1)
93 {
94     const int32_t WEBSOCKET_NO_CONNECTION = 1017;
95     CloseOption CloseOptions;
96     CloseOptions.code = LWS_CLOSE_STATUS_NORMAL;
97     CloseOptions.reason = "";
98     int32_t ret = client->Close(CloseOptions);
99     EXPECT_EQ(ret, WEBSOCKET_NO_CONNECTION);
100 }
101 
102 HWTEST_F(WebSocketTest, WebSocketDestroy005, TestSize.Level1)
103 {
104     int32_t ret;
105     WebSocketClient *client = new WebSocketClient();
106     ret = client->Destroy();
107     delete client;
108     EXPECT_EQ(ret, WebSocketErrorCode::WEBSOCKET_ERROR_HAVE_NO_CONNECT_CONTEXT);
109 }
110 
111 HWTEST_F(WebSocketTest, WebSocketBranchTest001, TestSize.Level1)
112 {
113     const char *data = "test data";
114     char *testData = nullptr;
115     size_t length = 0;
116     int32_t ret = client->Send(testData, length);
117     EXPECT_EQ(ret, WebSocketErrorCode::WEBSOCKET_SEND_DATA_NULL);
118 
119     ret = client->Send(const_cast<char *>(data), TEST_MAX_DATA_LENGTH);
120     EXPECT_EQ(ret, WebSocketErrorCode::WEBSOCKET_DATA_LENGTH_EXCEEDS);
121 
122     CloseOption options;
123     options.reason = "";
124     options.code = 0;
125     EXPECT_TRUE(client->GetClientContext() != nullptr);
126     client->GetClientContext()->openStatus = TEST_LENGTH;
127     ret = client->Close(options);
128     EXPECT_EQ(ret, WebSocketErrorCode::WEBSOCKET_NONE_ERR);
129     client->GetClientContext()->openStatus = 0;
130     ret = client->Close(options);
131     EXPECT_EQ(ret, WebSocketErrorCode::WEBSOCKET_ERROR_HAVE_NO_CONNECT);
132 }
133 
134 HWTEST_F(WebSocketTest, WebSocketBranchTest002, TestSize.Level1)
135 {
136     client->clientContext = nullptr;
137     const char *data = "test data";
138     size_t length = 0;
139     int32_t ret = client->Send(const_cast<char *>(data), length);
140     EXPECT_EQ(ret, WebSocketErrorCode::WEBSOCKET_NONE_ERR);
141 
142     CloseOption options;
143     ret = client->Close(options);
144     EXPECT_EQ(ret, WebSocketErrorCode::WEBSOCKET_ERROR_NO_CLIENTCONTEX);
145 }
146 
147 HWTEST_F(WebSocketTest, WebSocketBranchTest003, TestSize.Level1)
148 {
149     client->clientContext = nullptr;
150     char str[] = "test";
151     char* data = str;
152     size_t length = 0;
153     client->AppendData(data, length);
154     std::string dataStr = client->GetData();
155     client->ClearData();
156     EXPECT_TRUE(dataStr.empty());
157 }
158 } // namespace