Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb80ab15

Browse files
committed
Little hack to make async connection test pass (it's actually synchronous).
1 parent3442d76 commitb80ab15

File tree

6 files changed

+51
-26
lines changed

6 files changed

+51
-26
lines changed

‎http/src/network/http/v2/client/connection/async_resolver_delegate.hpp‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,14 @@ namespace network {
5252
/**
5353
* \brief Resolves a host asynchronously.
5454
*/
55-
virtual std::future<resolver_iterator_range>
55+
virtual std::future<std::pair<boost::system::error_code,
56+
resolver_iterator_range>>
5657
resolve(const std::string &host, std::uint16_t port) {
5758
if (cache_resolved_) {
5859
endpoint_cache::iterator it = endpoint_cache_.find(boost::to_lower_copy(host));
5960
if (it != endpoint_cache_.end()) {
60-
boost::system::error_codeignored;
61-
promise_.set_value(it->second);
61+
boost::system::error_codeec;
62+
promise_.set_value(std::make_pair(ec,it->second));
6263
return promise_.get_future();
6364
}
6465
}
@@ -69,14 +70,15 @@ namespace network {
6970
[&host,this](const boost::system::error_code &ec,
7071
resolver_iterator endpoint_iterator) {
7172
if (ec) {
72-
promise_.set_value(std::make_pair(resolver_iterator(),resolver_iterator()));
73+
auto resolvers =std::make_pair(resolver_iterator(),resolver_iterator());
74+
promise_.set_value(std::make_pair(ec, resolvers));
7375
}
7476
else {
7577
auto resolvers =std::make_pair(endpoint_iterator,resolver_iterator());
7678
if (cache_resolved_) {
7779
endpoint_cache_.insert(std::make_pair(host, resolvers));
7880
}
79-
promise_.set_value(resolvers);
81+
promise_.set_value(std::make_pair(ec,resolvers));
8082
}
8183
}));
8284

@@ -94,7 +96,7 @@ namespace network {
9496

9597
typedef boost::asio::io_service::strand strand;
9698
typedef std::unordered_map<std::string, resolver_iterator_range> endpoint_cache;
97-
std::promise<resolver_iterator_range> promise_;
99+
std::promise<std::pair<boost::system::error_code,resolver_iterator_range>> promise_;
98100

99101
resolver resolver_;
100102
std::unique_ptr<strand> resolver_strand_;

‎http/src/network/http/v2/client/connection/connection_delegate.hpp‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include<functional>
1010
#include<string>
11+
#include<future>
1112
#include<boost/asio/ip/tcp.hpp>
1213
#include<boost/asio/streambuf.hpp>
1314

@@ -25,9 +26,9 @@ namespace network {
2526

2627
virtual~connection_delegate()noexcept { }
2728

28-
virtualvoidconnect(boost::asio::ip::tcp::endpoint &endpoint,
29-
const std::string &host,
30-
std::function<void (const boost::system::error_code &)> handler) = 0;
29+
virtualstd::future<boost::system::error_code>
30+
connect(boost::asio::ip::tcp::endpoint &endpoint,
31+
conststd::string &host) =0;
3132

3233
virtualvoidwrite(boost::asio::streambuf &command_streambuf,
3334
std::function<void (const boost::system::error_code &,size_t)> handler) = 0;

‎http/src/network/http/v2/client/connection/normal_connection_delegate.hpp‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,19 @@ namespace network {
2929

3030
}
3131

32-
virtualvoidconnect(boost::asio::ip::tcp::endpoint &endpoint,
33-
const std::string &host,
34-
std::function<void (const boost::system::error_code &)> handler) {
32+
virtualstd::future<boost::system::error_code>
33+
connect(boost::asio::ip::tcp::endpoint &endpoint,
34+
conststd::string &host) {
3535
socket_.reset(newboost::asio::ip::tcp::socket(io_service_));
36-
socket_->async_connect(endpoint, handler);
36+
// socket_->async_connect(endpoint,
37+
// [this](const boost::system::error_code &ec) {
38+
// std::cout << "oh" << std::endl;
39+
// promise_.set_value(ec);
40+
// });
41+
boost::system::error_code ec;
42+
socket_->connect(endpoint, ec);
43+
promise_.set_value(ec);
44+
return promise_.get_future();
3745
}
3846

3947
virtualvoidwrite(boost::asio::streambuf &command_streambuf,
@@ -50,6 +58,7 @@ namespace network {
5058

5159
boost::asio::io_service &io_service_;
5260
std::unique_ptr<boost::asio::ip::tcp::socket> socket_;
61+
std::promise<boost::system::error_code> promise_;
5362

5463
};
5564
}// namespace v2

‎http/src/network/http/v2/client/connection/resolver_delegate.hpp‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,15 @@ namespace network {
2929
public:
3030

3131
typedef boost::asio::ip::tcp::resolver resolver;
32-
typedef boost::asio::ip::tcp::endpoint endpoint;
3332
typedef resolver::iterator resolver_iterator;
3433
typedef boost::iterator_range<resolver_iterator> resolver_iterator_range;
35-
typedef std::function<void (const boost::system::error_code &,
36-
boost::iterator_range<resolver_iterator>)> on_resolved_fn;
3734

3835
resolver_delegate() =default;
3936

4037
virtual~resolver_delegate()noexcept { }
4138

42-
virtual std::future<resolver_iterator_range>
39+
virtual std::future<std::pair<boost::system::error_code,
40+
resolver_iterator_range>>
4341
resolve(const std::string &host, std::uint16_t port) =0;
4442

4543
virtualvoidclear_resolved_cache() = 0;

‎http/test/v2/features/client/async_resolver_test.cpp‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include<iostream>
77
#include<igloo/igloo_alt.h>
88
#include<boost/asio.hpp>
9+
#include<boost/range/empty.hpp>
910
#include"network/http/v2/client/connection/async_resolver_delegate.hpp"
1011

1112
usingnamespaceigloo;
@@ -24,7 +25,9 @@ Describe(async_resolver) {
2425

2526
auto endpoints = resolver_->resolve("127.0.0.1",80);
2627
io_service_->run_one();
27-
for (auto endpoint : endpoints.get()) {
28+
auto result = endpoints.get();
29+
Assert::That(result.first,Equals(boost::system::error_code()));
30+
for (auto endpoint : result.second) {
2831
Assert::That(endpoint.endpoint().address().to_string(),Equals("127.0.0.1"));
2932
Assert::That(endpoint.endpoint().port(),Equals(80));
3033
}

‎http/test/v2/features/client/normal_connection_test.cpp‎

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include<memory>
77
#include<igloo/igloo_alt.h>
88
#include<boost/asio.hpp>
9+
#include"network/http/v2/client/connection/async_resolver_delegate.hpp"
910
#include"network/http/v2/client/connection/normal_connection_delegate.hpp"
1011

1112
usingnamespaceigloo;
@@ -14,19 +15,30 @@ namespace http = network::http::v2;
1415

1516
Describe(normal_http_connection) {
1617

17-
//void SetUp() {
18-
// io_service_.reset(new boost::asio::io_service);
19-
// connection_.reset(new normal_http_connection(io_service));
20-
//
21-
// // resolve endpoints
22-
//}
18+
voidSetUp() {
19+
io_service_.reset(new boost::asio::io_service);
20+
resolver_.reset(newhttp::async_resolver_delegate(*io_service_));
21+
connection_.reset(newhttp::normal_connection_delegate(*io_service_));
22+
23+
// resolve endpoints
24+
auto endpoints = resolver_->resolve("127.0.0.1",80);
25+
io_service_->run_one();
26+
endpoints_ = endpoints.get();
27+
}
2328

2429
It(connects_to_localhost) {
25-
//auto ec = connection_.connect(endpoint_, "127.0.0.1");
26-
// ec
30+
auto it =std::begin(endpoints_.second);
31+
tcp::endpointendpoint(it->endpoint().address(),80);
32+
auto connected = connection_->connect(endpoint,"127.0.0.1");
33+
io_service_->run_one();
34+
auto connected_ = connected.get();
35+
Assert::That(connected_,Equals(boost::system::error_code()));
2736
}
2837

2938
std::unique_ptr<boost::asio::io_service> io_service_;
39+
std::unique_ptr<http::async_resolver_delegate> resolver_;
40+
std::pair<boost::system::error_code,
41+
http::async_resolver_delegate::resolver_iterator_range> endpoints_;
3042
std::unique_ptr<http::connection_delegate> connection_;
3143

3244
};

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp