forked from IronsDu/brynet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_sync_connect.cpp
More file actions
175 lines (151 loc) · 6.04 KB
/
test_sync_connect.cpp
File metadata and controls
175 lines (151 loc) · 6.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one cpp file
#include "catch.hpp"
#include <brynet/net/Wrapper.h>
#include <brynet/net/ListenThread.h>
TEST_CASE("SyncConnector are computed", "[sync_connect]") {
using namespace brynet::net;
const std::string ip = "127.0.0.1";
const auto port = 9999;
// 监听服务未开启
{
{
auto connector = AsyncConnector::Create();
connector->startWorkerThread();
wrapper::SocketConnectBuilder connectBuilder;
auto socket = connectBuilder
.configureConnector(connector)
.configureConnectOptions({
AsyncConnector::ConnectOptions::WithTimeout(std::chrono::seconds(2)),
AsyncConnector::ConnectOptions::WithAddr(ip, port)
})
.syncConnect();
REQUIRE(socket == nullptr);
}
{
auto connector = AsyncConnector::Create();
connector->startWorkerThread();
auto service = TcpService::Create();
service->startWorkerThread(1);
wrapper::ConnectionBuilder connectionBuilder;
auto session = connectionBuilder
.configureService(service)
.configureConnector(connector)
.configureConnectOptions({
AsyncConnector::ConnectOptions::WithTimeout(std::chrono::seconds(2)),
AsyncConnector::ConnectOptions::WithAddr(ip, port)
})
.syncConnect();
REQUIRE(session == nullptr);
}
}
// 使用ListenerBuilder开启监听
{
auto service = TcpService::Create();
service->startWorkerThread(1);
wrapper::ListenerBuilder listenerBuilder;
listenerBuilder.configureService(service)
.configureConnectionOptions({
TcpService::AddSocketOption::WithMaxRecvBufferSize(10)
})
.configureSocketOptions({})
.configureListen([=](wrapper::BuildListenConfig config) {
config.setAddr(false, ip, port);
})
.asyncRun();
{
auto connector = AsyncConnector::Create();
connector->startWorkerThread();
wrapper::SocketConnectBuilder connectBuilder;
auto socket = connectBuilder
.configureConnector(connector)
.configureConnectOptions({
AsyncConnector::ConnectOptions::WithTimeout(std::chrono::seconds(2)),
AsyncConnector::ConnectOptions::WithAddr(ip, port)
})
.syncConnect();
REQUIRE(socket != nullptr);
}
}
{
auto connector = AsyncConnector::Create();
connector->startWorkerThread();
wrapper::SocketConnectBuilder connectBuilder;
auto socket = connectBuilder
.configureConnector(connector)
.configureConnectOptions({
AsyncConnector::ConnectOptions::WithTimeout(std::chrono::seconds(2)),
AsyncConnector::ConnectOptions::WithAddr(ip, port)
})
.syncConnect();
REQUIRE(socket == nullptr);
}
// 开启监听服务
{
auto listenThread = brynet::net::ListenThread::Create(false,
ip,
port,
[](brynet::net::TcpSocket::Ptr) {
});
listenThread->startListen();
{
auto connector = AsyncConnector::Create();
connector->startWorkerThread();
wrapper::SocketConnectBuilder connectBuilder;
auto socket = connectBuilder
.configureConnector(connector)
.configureConnectOptions({
AsyncConnector::ConnectOptions::WithTimeout(std::chrono::seconds(2)),
AsyncConnector::ConnectOptions::WithAddr(ip, port)
})
.syncConnect();
REQUIRE(socket != nullptr);
}
// Tcp Service 开启工作线程
{
auto connector = AsyncConnector::Create();
connector->startWorkerThread();
auto service = TcpService::Create();
service->startWorkerThread(1);
wrapper::ConnectionBuilder connectionBuilder;
auto session = connectionBuilder
.configureService(service)
.configureConnector(connector)
.configureConnectOptions({
AsyncConnector::ConnectOptions::WithTimeout(std::chrono::seconds(2)),
AsyncConnector::ConnectOptions::WithAddr(ip, port)
})
.syncConnect();
REQUIRE(session != nullptr);
}
// Tcp Service 没开启工作线程
{
auto connector = AsyncConnector::Create();
connector->startWorkerThread();
auto service = TcpService::Create();
wrapper::ConnectionBuilder connectionBuilder;
auto session = connectionBuilder
.configureService(service)
.configureConnector(connector)
.configureConnectOptions({
AsyncConnector::ConnectOptions::WithTimeout(std::chrono::seconds(2)),
AsyncConnector::ConnectOptions::WithAddr(ip, port)
})
.syncConnect();
REQUIRE(session == nullptr);
}
}
// 上个语句块的监听线程结束
{
auto connector = AsyncConnector::Create();
connector->startWorkerThread();
wrapper::SocketConnectBuilder connectBuilder;
auto socket = connectBuilder
.configureConnector(connector)
.configureConnectOptions({
AsyncConnector::ConnectOptions::WithTimeout(std::chrono::seconds(2)),
AsyncConnector::ConnectOptions::WithAddr(ip, port)
})
.syncConnect();
REQUIRE(socket == nullptr);
}
}