Skip to content

Commit b80ab15

Browse files
committed
Little hack to make async connection test pass (it's actually synchronous).
1 parent 3442d76 commit b80ab15

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_code ignored;
61-
promise_.set_value(it->second);
61+
boost::system::error_code ec;
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-
virtual void connect(boost::asio::ip::tcp::endpoint &endpoint,
29-
const std::string &host,
30-
std::function<void (const boost::system::error_code &)> handler) = 0;
29+
virtual std::future<boost::system::error_code>
30+
connect(boost::asio::ip::tcp::endpoint &endpoint,
31+
const std::string &host) = 0;
3132

3233
virtual void write(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-
virtual void connect(boost::asio::ip::tcp::endpoint &endpoint,
33-
const std::string &host,
34-
std::function<void (const boost::system::error_code &)> handler) {
32+
virtual std::future<boost::system::error_code>
33+
connect(boost::asio::ip::tcp::endpoint &endpoint,
34+
const std::string &host) {
3535
socket_.reset(new boost::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
virtual void write(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
virtual void clear_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
using namespace igloo;
@@ -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
using namespace igloo;
@@ -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+
void SetUp() {
19+
io_service_.reset(new boost::asio::io_service);
20+
resolver_.reset(new http::async_resolver_delegate(*io_service_));
21+
connection_.reset(new http::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::endpoint endpoint(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)