summaryrefslogtreecommitdiffstats
path: root/src/lib/http
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/http')
-rw-r--r--src/lib/http/client.cc18
-rw-r--r--src/lib/http/client.h2
-rw-r--r--src/lib/http/connection.cc2
-rw-r--r--src/lib/http/connection.h2
-rw-r--r--src/lib/http/listener.cc2
-rw-r--r--src/lib/http/listener.h2
-rw-r--r--src/lib/http/listener_impl.cc2
-rw-r--r--src/lib/http/listener_impl.h6
-rw-r--r--src/lib/http/tests/client_mt_unittests.cc16
-rw-r--r--src/lib/http/tests/connection_pool_unittests.cc4
-rw-r--r--src/lib/http/tests/server_client_unittests.cc76
-rw-r--r--src/lib/http/tests/test_http_client.h16
-rw-r--r--src/lib/http/tests/tls_client_unittests.cc54
-rw-r--r--src/lib/http/tests/tls_server_unittests.cc57
14 files changed, 129 insertions, 130 deletions
diff --git a/src/lib/http/client.cc b/src/lib/http/client.cc
index 1f139a3cd9..66ab6490e0 100644
--- a/src/lib/http/client.cc
+++ b/src/lib/http/client.cc
@@ -118,7 +118,7 @@ public:
/// @param conn_pool Back pointer to the connection pool to which this
/// connection belongs.
/// @param url URL associated with this connection.
- explicit Connection(IOService& io_service,
+ explicit Connection(const IOServicePtr& io_service,
const TlsContextPtr& tls_context,
const ConnectionPoolPtr& conn_pool,
const Url& url);
@@ -482,7 +482,7 @@ public:
/// connections.
/// @param max_url_connections maximum number of concurrent
/// connections allowed per URL.
- explicit ConnectionPool(IOService& io_service, size_t max_url_connections)
+ explicit ConnectionPool(const IOServicePtr& io_service, size_t max_url_connections)
: io_service_(io_service), destinations_(), pool_mutex_(),
max_url_connections_(max_url_connections) {
}
@@ -515,8 +515,8 @@ public:
/// should be processed.
void postProcessNextRequest(const Url& url,
const TlsContextPtr& tls_context) {
- io_service_.post(std::bind(&ConnectionPool::processNextRequest,
- shared_from_this(), url, tls_context));
+ io_service_->post(std::bind(&ConnectionPool::processNextRequest,
+ shared_from_this(), url, tls_context));
}
/// @brief Queue next request for sending to the server.
@@ -1106,7 +1106,7 @@ private:
}
/// @brief A reference to the IOService that drives socket IO.
- IOService& io_service_;
+ IOServicePtr io_service_;
/// @brief Map of Destinations by URL and TLS context.
std::map<DestinationDescriptor, DestinationPtr> destinations_;
@@ -1118,7 +1118,7 @@ private:
size_t max_url_connections_;
};
-Connection::Connection(IOService& io_service,
+Connection::Connection(const IOServicePtr& io_service,
const TlsContextPtr& tls_context,
const ConnectionPoolPtr& conn_pool,
const Url& url)
@@ -1783,7 +1783,7 @@ public:
/// the thread pool threads will be created and started, with the
/// operational state being RUNNING. Applicable only when thread-pool size
/// is greater than zero.
- HttpClientImpl(IOService& io_service, size_t thread_pool_size = 0,
+ HttpClientImpl(const IOServicePtr& io_service, size_t thread_pool_size = 0,
bool defer_thread_start = false)
: thread_pool_size_(thread_pool_size), thread_pool_() {
if (thread_pool_size_ > 0) {
@@ -1792,7 +1792,7 @@ public:
// Create the connection pool. Note that we use the thread_pool_size
// as the maximum connections per URL value.
- conn_pool_.reset(new ConnectionPool(*thread_io_service_, thread_pool_size_));
+ conn_pool_.reset(new ConnectionPool(thread_io_service_, thread_pool_size_));
// Create the thread pool.
thread_pool_.reset(new IoServiceThreadPool(thread_io_service_, thread_pool_size_,
@@ -1947,7 +1947,7 @@ private:
IoServiceThreadPoolPtr thread_pool_;
};
-HttpClient::HttpClient(IOService& io_service, bool multi_threading_enabled,
+HttpClient::HttpClient(const IOServicePtr& io_service, bool multi_threading_enabled,
size_t thread_pool_size, bool defer_thread_start) {
if (!multi_threading_enabled && thread_pool_size) {
isc_throw(InvalidOperation,
diff --git a/src/lib/http/client.h b/src/lib/http/client.h
index bea90576b7..7215d44520 100644
--- a/src/lib/http/client.h
+++ b/src/lib/http/client.h
@@ -145,7 +145,7 @@ public:
/// the thread pool threads will be created and started, with the
/// operational state being RUNNING. Applicable only when thread-pool size
/// is greater than zero.
- explicit HttpClient(asiolink::IOService& io_service,
+ explicit HttpClient(const asiolink::IOServicePtr& io_service,
bool multi_threading_enabled,
size_t thread_pool_size = 0,
bool defer_thread_start = false);
diff --git a/src/lib/http/connection.cc b/src/lib/http/connection.cc
index b1e57bddbe..880d87df0c 100644
--- a/src/lib/http/connection.cc
+++ b/src/lib/http/connection.cc
@@ -62,7 +62,7 @@ SocketCallback::operator()(boost::system::error_code ec, size_t length) {
callback_(ec, length);
}
-HttpConnection::HttpConnection(asiolink::IOService& io_service,
+HttpConnection::HttpConnection(const asiolink::IOServicePtr& io_service,
const HttpAcceptorPtr& acceptor,
const TlsContextPtr& tls_context,
HttpConnectionPool& connection_pool,
diff --git a/src/lib/http/connection.h b/src/lib/http/connection.h
index 70109de660..4597ca4b48 100644
--- a/src/lib/http/connection.h
+++ b/src/lib/http/connection.h
@@ -241,7 +241,7 @@ public:
/// @param request_timeout Configured timeout for a HTTP request.
/// @param idle_timeout Timeout after which persistent HTTP connection is
/// closed by the server.
- HttpConnection(asiolink::IOService& io_service,
+ HttpConnection(const asiolink::IOServicePtr& io_service,
const HttpAcceptorPtr& acceptor,
const asiolink::TlsContextPtr& tls_context,
HttpConnectionPool& connection_pool,
diff --git a/src/lib/http/listener.cc b/src/lib/http/listener.cc
index 2e6d2e1c62..14103de588 100644
--- a/src/lib/http/listener.cc
+++ b/src/lib/http/listener.cc
@@ -15,7 +15,7 @@ using namespace isc::asiolink;
namespace isc {
namespace http {
-HttpListener::HttpListener(IOService& io_service,
+HttpListener::HttpListener(const IOServicePtr& io_service,
const asiolink::IOAddress& server_address,
const unsigned short server_port,
const TlsContextPtr& tls_context,
diff --git a/src/lib/http/listener.h b/src/lib/http/listener.h
index 8965f29f1c..b6f49f4c97 100644
--- a/src/lib/http/listener.h
+++ b/src/lib/http/listener.h
@@ -96,7 +96,7 @@ public:
///
/// @throw HttpListenerError when any of the specified parameters is
/// invalid.
- HttpListener(asiolink::IOService& io_service,
+ HttpListener(const asiolink::IOServicePtr& io_service,
const asiolink::IOAddress& server_address,
const unsigned short server_port,
const asiolink::TlsContextPtr& tls_context,
diff --git a/src/lib/http/listener_impl.cc b/src/lib/http/listener_impl.cc
index fdcbdd0c8b..80db799405 100644
--- a/src/lib/http/listener_impl.cc
+++ b/src/lib/http/listener_impl.cc
@@ -16,7 +16,7 @@ namespace ph = std::placeholders;
namespace isc {
namespace http {
-HttpListenerImpl::HttpListenerImpl(IOService& io_service,
+HttpListenerImpl::HttpListenerImpl(const IOServicePtr& io_service,
const asiolink::IOAddress& server_address,
const unsigned short server_port,
const TlsContextPtr& tls_context,
diff --git a/src/lib/http/listener_impl.h b/src/lib/http/listener_impl.h
index 4ad1960844..0ac3de7c14 100644
--- a/src/lib/http/listener_impl.h
+++ b/src/lib/http/listener_impl.h
@@ -44,7 +44,7 @@ public:
///
/// @throw HttpListenerError when any of the specified parameters is
/// invalid.
- HttpListenerImpl(asiolink::IOService& io_service,
+ HttpListenerImpl(const asiolink::IOServicePtr& io_service,
const asiolink::IOAddress& server_address,
const unsigned short server_port,
const asiolink::TlsContextPtr& tls_context,
@@ -102,8 +102,8 @@ protected:
virtual HttpConnectionPtr createConnection(const HttpResponseCreatorPtr& response_creator,
const HttpAcceptorCallback& callback);
- /// @brief Reference to the IO service.
- asiolink::IOService& io_service_;
+ /// @brief Pointer to the IO service.
+ asiolink::IOServicePtr io_service_;
/// @brief TLS context.
asiolink::TlsContextPtr tls_context_;
diff --git a/src/lib/http/tests/client_mt_unittests.cc b/src/lib/http/tests/client_mt_unittests.cc
index b68c88572b..bb39f68e14 100644
--- a/src/lib/http/tests/client_mt_unittests.cc
+++ b/src/lib/http/tests/client_mt_unittests.cc
@@ -196,7 +196,7 @@ public:
/// @brief Constructor.
MultiThreadingHttpClientTest()
- : io_service_(), client_(), listener_(), factory_(), listeners_(), factories_(),
+ : io_service_(new IOService()), client_(), listener_(), factory_(), listeners_(), factories_(),
test_timer_(io_service_), num_threads_(0), num_batches_(0), num_listeners_(0),
expected_requests_(0), num_in_progress_(0), num_finished_(0), paused_(false),
pause_cnt_(0) {
@@ -229,7 +229,7 @@ public:
if (fail_on_timeout) {
ADD_FAILURE() << "Timeout occurred while running the test!";
}
- io_service_.stop();
+ io_service_->stop();
}
/// @brief Runs the test's IOService until the desired number of requests
@@ -237,10 +237,10 @@ public:
void runIOService(size_t request_limit) {
while (getRRCount() < request_limit) {
// Always call reset() before we call run();
- io_service_.restart();
+ io_service_->restart();
// Run until a client stops the service.
- io_service_.run();
+ io_service_->run();
}
}
@@ -354,7 +354,7 @@ public:
num_in_progress_ = 0;
test_cv_.notify_all();
// Stop the test's IOService.
- io_service_.stop();
+ io_service_->stop();
} else {
// I'm done but others aren't wait here.
bool ret = test_cv_.wait_for(lck, std::chrono::seconds(10),
@@ -410,8 +410,8 @@ public:
std::unique_lock<std::mutex> lck(test_mutex_);
clientRRs_.push_back(clientRR);
++num_finished_;
- if ((num_finished_ >= expected_requests_) && !io_service_.stopped()) {
- io_service_.stop();
+ if ((num_finished_ >= expected_requests_) && !io_service_->stopped()) {
+ io_service_->stop();
}
}
@@ -773,7 +773,7 @@ public:
}
/// @brief IO service used in the tests.
- IOService io_service_;
+ IOServicePtr io_service_;
/// @brief Instance of the client used in the tests.
HttpClientPtr client_;
diff --git a/src/lib/http/tests/connection_pool_unittests.cc b/src/lib/http/tests/connection_pool_unittests.cc
index b8337c3d36..d6267a0e14 100644
--- a/src/lib/http/tests/connection_pool_unittests.cc
+++ b/src/lib/http/tests/connection_pool_unittests.cc
@@ -105,7 +105,7 @@ public:
/// @brief Constructor.
HttpConnectionPoolTest()
- : io_service_(),
+ : io_service_(new IOService()),
acceptor_(new HttpAcceptor(io_service_)),
connection_pool_(),
response_creator_(new TestHttpResponseCreator()) {
@@ -216,7 +216,7 @@ public:
ASSERT_EQ(1, pool.hasConnection(conn1));
}
- IOService io_service_; ///< IO service.
+ IOServicePtr io_service_; ///< IO service.
HttpAcceptorPtr acceptor_; ///< Test acceptor.
HttpConnectionPool connection_pool_; ///< Test connection pool.
HttpResponseCreatorPtr response_creator_; ///< Test response creator.
diff --git a/src/lib/http/tests/server_client_unittests.cc b/src/lib/http/tests/server_client_unittests.cc
index 47a23625db..6572e8381a 100644
--- a/src/lib/http/tests/server_client_unittests.cc
+++ b/src/lib/http/tests/server_client_unittests.cc
@@ -208,7 +208,7 @@ template<typename HttpConnectionType>
class HttpListenerImplCustom : public HttpListenerImpl {
public:
- HttpListenerImplCustom(IOService& io_service,
+ HttpListenerImplCustom(const IOServicePtr& io_service,
const IOAddress& server_address,
const unsigned short server_port,
const TlsContextPtr& tls_context,
@@ -270,7 +270,7 @@ public:
///
/// @throw HttpListenerError when any of the specified parameters is
/// invalid.
- HttpListenerCustom(IOService& io_service,
+ HttpListenerCustom(const IOServicePtr& io_service,
const IOAddress& server_address,
const unsigned short server_port,
const TlsContextPtr& tls_context,
@@ -308,7 +308,7 @@ public:
/// @param request_timeout Configured timeout for a HTTP request.
/// @param idle_timeout Timeout after which persistent HTTP connection is
/// closed by the server.
- HttpConnectionLongWriteBuffer(IOService& io_service,
+ HttpConnectionLongWriteBuffer(const IOServicePtr& io_service,
const HttpAcceptorPtr& acceptor,
const TlsContextPtr& tls_context,
HttpConnectionPool& connection_pool,
@@ -355,7 +355,7 @@ public:
/// @param request_timeout Configured timeout for a HTTP request.
/// @param idle_timeout Timeout after which persistent HTTP connection is
/// closed by the server.
- HttpConnectionTransactionChange(IOService& io_service,
+ HttpConnectionTransactionChange(const IOServicePtr& io_service,
const HttpAcceptorPtr& acceptor,
const TlsContextPtr& tls_context,
HttpConnectionPool& connection_pool,
@@ -399,7 +399,7 @@ public:
///
/// Starts test timer which detects timeouts.
HttpListenerTest()
- : io_service_(), factory_(new TestHttpResponseCreatorFactory()),
+ : io_service_(new IOService()), factory_(new TestHttpResponseCreatorFactory()),
test_timer_(io_service_), run_io_service_timer_(io_service_), clients_() {
test_timer_.setup(std::bind(&HttpListenerTest::timeoutHandler, this, true),
TEST_TIMEOUT, IntervalTimer::ONE_SHOT);
@@ -435,7 +435,7 @@ public:
if (fail_on_timeout) {
ADD_FAILURE() << "Timeout occurred while running the test!";
}
- io_service_.stop();
+ io_service_->stop();
}
/// @brief Runs IO service with optional timeout.
@@ -443,16 +443,16 @@ public:
/// @param timeout Optional value specifying for how long the io service
/// should be ran.
void runIOService(long timeout = 0) {
- io_service_.restart();
+ io_service_->restart();
if (timeout > 0) {
run_io_service_timer_.setup(std::bind(&HttpListenerTest::timeoutHandler,
this, false),
timeout, IntervalTimer::ONE_SHOT);
}
- io_service_.run();
- io_service_.restart();
- io_service_.poll();
+ io_service_->run();
+ io_service_->restart();
+ io_service_->poll();
}
/// @brief Returns HTTP OK response expected by unit tests.
@@ -554,7 +554,7 @@ public:
}
/// @brief IO service used in the tests.
- IOService io_service_;
+ IOServicePtr io_service_;
/// @brief Pointer to the response creator factory.
HttpResponseCreatorFactoryPtr factory_;
@@ -593,7 +593,7 @@ TEST_F(HttpListenerTest, listen) {
EXPECT_EQ(httpOk(HttpVersion::HTTP_11()), client->getResponse());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
@@ -645,7 +645,7 @@ TEST_F(HttpListenerTest, keepAlive) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that persistent HTTP connection is established by default
@@ -694,7 +694,7 @@ TEST_F(HttpListenerTest, persistentConnection) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that "keep-alive" connection is closed by the server after
@@ -753,7 +753,7 @@ TEST_F(HttpListenerTest, keepAliveTimeout) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that persistent connection is closed by the server after
@@ -810,7 +810,7 @@ TEST_F(HttpListenerTest, persistentConnectionTimeout) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that HTTP/1.1 connection remains open even if there is an
@@ -863,7 +863,7 @@ TEST_F(HttpListenerTest, persistentConnectionBadBody) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that the HTTP listener can't be started twice.
@@ -938,7 +938,7 @@ TEST_F(HttpListenerTest, invalidIdleTimeout) {
// This test verifies that listener can't be bound to the port to which
// other server is bound.
TEST_F(HttpListenerTest, addressInUse) {
- tcp::acceptor acceptor(io_service_.getInternalIOService());
+ tcp::acceptor acceptor(io_service_->getInternalIOService());
// Use other port than SERVER_PORT to make sure that this TCP connection
// doesn't affect subsequent tests.
tcp::endpoint endpoint(address::from_string(SERVER_ADDRESS),
@@ -1021,7 +1021,7 @@ public:
listener_.stop();
listener2_.stop();
listener3_.stop();
- io_service_.poll();
+ io_service_->poll();
MultiThreadingMgr::instance().setMode(false);
}
@@ -1076,7 +1076,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
EXPECT_FALSE(ec);
}));
@@ -1090,7 +1090,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
EXPECT_FALSE(ec);
}));
@@ -1137,7 +1137,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
EXPECT_FALSE(ec);
}));
@@ -1151,7 +1151,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
EXPECT_FALSE(ec);
}));
@@ -1193,7 +1193,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -1209,7 +1209,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -1250,7 +1250,7 @@ public:
request1, response1,
[this](const boost::system::error_code& ec, const HttpResponsePtr&,
const std::string&) {
- io_service_.stop();
+ io_service_->stop();
EXPECT_FALSE(ec);
}));
@@ -1273,7 +1273,7 @@ public:
request2, response2,
[this](const boost::system::error_code& ec, const HttpResponsePtr&,
const std::string&) {
- io_service_.stop();
+ io_service_->stop();
EXPECT_FALSE(ec);
}));
@@ -1306,7 +1306,7 @@ public:
[this](const boost::system::error_code& ec,
const HttpResponsePtr&,
const std::string&) {
- io_service_.stop();
+ io_service_->stop();
// The server should have returned an IO error.
EXPECT_TRUE(ec);
}));
@@ -1339,7 +1339,7 @@ public:
[this](const boost::system::error_code& ec,
const HttpResponsePtr& response,
const std::string& parsing_error) {
- io_service_.stop();
+ io_service_->stop();
// There should be no IO error (answer from the server is received).
EXPECT_FALSE(ec);
// The response object is NULL because it couldn't be finalized.
@@ -1380,7 +1380,7 @@ public:
const HttpResponsePtr& response,
const std::string&) {
if (++cb_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
// In this particular case we know exactly the type of the
// IO error returned, because the client explicitly sets this
@@ -1408,7 +1408,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++cb_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
}));
@@ -1439,7 +1439,7 @@ public:
const HttpResponsePtr& response,
const std::string&) {
if (++cb_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
// In this particular case we know exactly the type of the
// IO error returned, because the client explicitly sets this
@@ -1466,7 +1466,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++cb_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
}));
@@ -1560,7 +1560,7 @@ public:
[this](const boost::system::error_code& ec,
const HttpResponsePtr&,
const std::string&) {
- io_service_.stop();
+ io_service_->stop();
// Everything should be ok.
EXPECT_TRUE(ec.value() == 0);
@@ -1596,7 +1596,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
EXPECT_FALSE(ec);
@@ -1616,7 +1616,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
EXPECT_FALSE(ec);
},
@@ -1691,7 +1691,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num == 1) {
- io_service_.stop();
+ io_service_->stop();
}
EXPECT_EQ(1, monitor.connect_cnt_); // We should have 1 connect.
@@ -1751,7 +1751,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num == 1) {
- io_service_.stop();
+ io_service_->stop();
}
EXPECT_EQ(2, monitor.connect_cnt_); // We should have 1 connect.
diff --git a/src/lib/http/tests/test_http_client.h b/src/lib/http/tests/test_http_client.h
index 3b164756f1..55568a9ad9 100644
--- a/src/lib/http/tests/test_http_client.h
+++ b/src/lib/http/tests/test_http_client.h
@@ -31,10 +31,10 @@ public:
/// @param io_service IO service to be stopped on error or completion.
/// @param server_address string containing the IP address of the server.
/// @param port port number of the server.
- explicit TestHttpClient(IOService& io_service,
+ explicit TestHttpClient(const IOServicePtr& io_service,
const std::string& server_address = "127.0.0.1",
uint16_t port = 18123)
- : io_service_(io_service.getInternalIOService()), socket_(io_service_),
+ : io_service_(io_service), socket_(io_service_->getInternalIOService()),
buf_(), response_(), server_address_(server_address),
server_port_(port), receive_done_(false) {
}
@@ -65,7 +65,7 @@ public:
if (ec.value() != boost::asio::error::in_progress) {
ADD_FAILURE() << "error occurred while connecting: "
<< ec.message();
- io_service_.stop();
+ io_service_->stop();
return;
}
}
@@ -100,7 +100,7 @@ public:
} else {
ADD_FAILURE() << "error occurred while connecting: "
<< ec.message();
- io_service_.stop();
+ io_service_->stop();
return;
}
}
@@ -143,7 +143,7 @@ public:
// Error occurred, bail...
ADD_FAILURE() << "error occurred while receiving HTTP"
" response from the server: " << ec.message();
- io_service_.stop();
+ io_service_->stop();
}
}
@@ -156,7 +156,7 @@ public:
// expecting.
if (response_.find("\r\n\r\n", 0) != std::string::npos) {
receive_done_ = true;
- io_service_.stop();
+ io_service_->stop();
} else {
receivePartialResponse();
}
@@ -245,8 +245,8 @@ public:
private:
- /// @brief Holds reference to the IO service.
- boost::asio::io_service& io_service_;
+ /// @brief Holds pointer to the IO service.
+ isc::asiolink::IOServicePtr io_service_;
/// @brief A socket used for the connection.
boost::asio::ip::tcp::socket socket_;
diff --git a/src/lib/http/tests/tls_client_unittests.cc b/src/lib/http/tests/tls_client_unittests.cc
index 8874214421..4309a87456 100644
--- a/src/lib/http/tests/tls_client_unittests.cc
+++ b/src/lib/http/tests/tls_client_unittests.cc
@@ -227,7 +227,7 @@ public:
///
/// Starts test timer which detects timeouts.
HttpListenerTest()
- : io_service_(), factory_(new TestHttpResponseCreatorFactory()),
+ : io_service_(new IOService()), factory_(new TestHttpResponseCreatorFactory()),
test_timer_(io_service_), run_io_service_timer_(io_service_) {
test_timer_.setup(std::bind(&HttpListenerTest::timeoutHandler, this, true),
TEST_TIMEOUT, IntervalTimer::ONE_SHOT);
@@ -242,7 +242,7 @@ public:
if (fail_on_timeout) {
ADD_FAILURE() << "Timeout occurred while running the test!";
}
- io_service_.stop();
+ io_service_->stop();
}
/// @brief Runs IO service with optional timeout.
@@ -250,20 +250,20 @@ public:
/// @param timeout Optional value specifying for how long the io service
/// should be ran (ms).
void runIOService(long timeout = 0) {
- io_service_.restart();
+ io_service_->restart();
if (timeout > 0) {
run_io_service_timer_.setup(std::bind(&HttpListenerTest::timeoutHandler,
this, false),
timeout, IntervalTimer::ONE_SHOT);
}
- io_service_.run();
- io_service_.restart();
- io_service_.poll();
+ io_service_->run();
+ io_service_->restart();
+ io_service_->poll();
}
/// @brief IO service used in the tests.
- IOService io_service_;
+ IOServicePtr io_service_;
/// @brief Pointer to the response creator factory.
HttpResponseCreatorFactoryPtr factory_;
@@ -315,7 +315,7 @@ public:
listener_->stop();
listener2_->stop();
listener3_->stop();
- io_service_.poll();
+ io_service_->poll();
MultiThreadingMgr::instance().setMode(false);
HttpRequest::recordSubject_ = false;
HttpRequest::recordIssuer_ = false;
@@ -372,7 +372,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -388,7 +388,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -437,7 +437,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -453,7 +453,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -501,7 +501,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -517,7 +517,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -562,7 +562,7 @@ public:
request1, response1,
[this](const boost::system::error_code& ec, const HttpResponsePtr&,
const std::string&) {
- io_service_.stop();
+ io_service_->stop();
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
}
@@ -587,7 +587,7 @@ public:
request2, response2,
[this](const boost::system::error_code& ec, const HttpResponsePtr&,
const std::string&) {
- io_service_.stop();
+ io_service_->stop();
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
}
@@ -622,7 +622,7 @@ public:
[this](const boost::system::error_code& ec,
const HttpResponsePtr&,
const std::string&) {
- io_service_.stop();
+ io_service_->stop();
// The server should have returned an IO error.
if (!ec) {
ADD_FAILURE() << "asyncSendRequest didn't fail";
@@ -657,7 +657,7 @@ public:
[this](const boost::system::error_code& ec,
const HttpResponsePtr& response,
const std::string& parsing_error) {
- io_service_.stop();
+ io_service_->stop();
// There should be no IO error (answer from the server is received).
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -700,7 +700,7 @@ public:
const HttpResponsePtr& response,
const std::string&) {
if (++cb_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
// In this particular case we know exactly the type of the
// IO error returned, because the client explicitly sets this
@@ -728,7 +728,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++cb_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
}));
@@ -759,7 +759,7 @@ public:
const HttpResponsePtr& response,
const std::string&) {
if (++cb_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
// In this particular case we know exactly the type of the
// IO error returned, because the client explicitly sets this
@@ -786,7 +786,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++cb_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
}));
@@ -880,7 +880,7 @@ public:
[this](const boost::system::error_code& ec,
const HttpResponsePtr&,
const std::string&) {
- io_service_.stop();
+ io_service_->stop();
// Everything should be ok.
if (ec) {
@@ -918,7 +918,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
@@ -940,7 +940,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num > 1) {
- io_service_.stop();
+ io_service_->stop();
}
if (ec) {
ADD_FAILURE() << "asyncSendRequest failed: " << ec.message();
@@ -1017,7 +1017,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num == 1) {
- io_service_.stop();
+ io_service_->stop();
}
// We should have 1 connect.
@@ -1084,7 +1084,7 @@ public:
const HttpResponsePtr&,
const std::string&) {
if (++resp_num == 1) {
- io_service_.stop();
+ io_service_->stop();
}
// We should have 1 connect.
diff --git a/src/lib/http/tests/tls_server_unittests.cc b/src/lib/http/tests/tls_server_unittests.cc
index f5c592ce6b..db788ce56f 100644
--- a/src/lib/http/tests/tls_server_unittests.cc
+++ b/src/lib/http/tests/tls_server_unittests.cc
@@ -212,7 +212,7 @@ template<typename HttpConnectionType>
class HttpListenerImplCustom : public HttpListenerImpl {
public:
- HttpListenerImplCustom(IOService& io_service,
+ HttpListenerImplCustom(const IOServicePtr& io_service,
const IOAddress& server_address,
const unsigned short server_port,
const TlsContextPtr& tls_context,
@@ -276,7 +276,7 @@ public:
///
/// @throw HttpListenerError when any of the specified parameters is
/// invalid.
- HttpListenerCustom(IOService& io_service,
+ HttpListenerCustom(const IOServicePtr& io_service,
const IOAddress& server_address,
const unsigned short server_port,
const TlsContextPtr& tls_context,
@@ -314,7 +314,7 @@ public:
/// @param request_timeout Configured timeout for a HTTP request.
/// @param idle_timeout Timeout after which persistent HTTP connection is
/// closed by the server.
- HttpConnectionLongWriteBuffer(IOService& io_service,
+ HttpConnectionLongWriteBuffer(const IOServicePtr& io_service,
const HttpAcceptorPtr& acceptor,
const TlsContextPtr& tls_context,
HttpConnectionPool& connection_pool,
@@ -361,7 +361,7 @@ public:
/// @param request_timeout Configured timeout for a HTTP request.
/// @param idle_timeout Timeout after which persistent HTTP connection is
/// closed by the server.
- HttpConnectionTransactionChange(IOService& io_service,
+ HttpConnectionTransactionChange(const IOServicePtr& io_service,
const HttpAcceptorPtr& acceptor,
const TlsContextPtr& tls_context,
HttpConnectionPool& connection_pool,
@@ -406,10 +406,9 @@ public:
///
/// @param io_service IO service to be stopped on error.
/// @param tls_context TLS context.
- TestHttpClient(IOService& io_service, TlsContextPtr tls_context)
- : io_service_(io_service.getInternalIOService()),
- stream_(io_service_, tls_context->getContext()),
- buf_(), response_() {
+ TestHttpClient(const IOServicePtr& io_service, TlsContextPtr tls_context)
+ : io_service_(io_service), stream_(io_service_->getInternalIOService(),
+ tls_context->getContext()), buf_(), response_() {
}
/// @brief Destructor.
@@ -438,7 +437,7 @@ public:
if (ec.value() != boost::asio::error::in_progress) {
ADD_FAILURE() << "error occurred while connecting: "
<< ec.message();
- io_service_.stop();
+ io_service_->stop();
return;
}
}
@@ -447,7 +446,7 @@ public:
if (ec) {
ADD_FAILURE() << "error occurred during handshake: "
<< ec.message();
- io_service_.stop();
+ io_service_->stop();
return;
}
sendRequest(request);
@@ -483,7 +482,7 @@ public:
} else {
ADD_FAILURE() << "error occurred while connecting: "
<< ec.message();
- io_service_.stop();
+ io_service_->stop();
return;
}
}
@@ -526,7 +525,7 @@ public:
// Error occurred, bail...
ADD_FAILURE() << "error occurred while receiving HTTP"
" response from the server: " << ec.message();
- io_service_.stop();
+ io_service_->stop();
}
}
@@ -538,7 +537,7 @@ public:
// Two consecutive new lines end the part of the response we're
// expecting.
if (response_.find("\r\n\r\n", 0) != std::string::npos) {
- io_service_.stop();
+ io_service_->stop();
} else {
receivePartialResponse();
@@ -620,8 +619,8 @@ public:
private:
- /// @brief Holds reference to the IO service.
- boost::asio::io_service& io_service_;
+ /// @brief Holds pointer to the IO service.
+ isc::asiolink::IOServicePtr io_service_;
/// @brief A socket used for the connection.
TlsStreamImpl stream_;
@@ -644,7 +643,7 @@ public:
///
/// Starts test timer which detects timeouts.
HttpsListenerTest()
- : io_service_(), factory_(new TestHttpResponseCreatorFactory()),
+ : io_service_(new IOService()), factory_(new TestHttpResponseCreatorFactory()),
test_timer_(io_service_), run_io_service_timer_(io_service_),
clients_(), server_context_(), client_context_() {
configServer(server_context_);
@@ -684,7 +683,7 @@ public:
if (fail_on_timeout) {
ADD_FAILURE() << "Timeout occurred while running the test!";
}
- io_service_.stop();
+ io_service_->stop();
}
/// @brief Runs IO service with optional timeout.
@@ -692,16 +691,16 @@ public:
/// @param timeout Optional value specifying for how long the io service
/// should be ran.
void runIOService(long timeout = 0) {
- io_service_.restart();
+ io_service_->restart();
if (timeout > 0) {
run_io_service_timer_.setup(std::bind(&HttpsListenerTest::timeoutHandler,
this, false),
timeout, IntervalTimer::ONE_SHOT);
}
- io_service_.run();
- io_service_.restart();
- io_service_.poll();
+ io_service_->run();
+ io_service_->restart();
+ io_service_->poll();
}
/// @brief Returns HTTP OK response expected by unit tests.
@@ -803,7 +802,7 @@ public:
}
/// @brief IO service used in the tests.
- IOService io_service_;
+ IOServicePtr io_service_;
/// @brief Pointer to the response creator factory.
HttpResponseCreatorFactoryPtr factory_;
@@ -848,7 +847,7 @@ TEST_F(HttpsListenerTest, listen) {
EXPECT_EQ(httpOk(HttpVersion::HTTP_11()), client->getResponse());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
@@ -900,7 +899,7 @@ TEST_F(HttpsListenerTest, keepAlive) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that persistent HTTP connection is established by default
@@ -949,7 +948,7 @@ TEST_F(HttpsListenerTest, persistentConnection) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that "keep-alive" connection is closed by the server after
@@ -1008,7 +1007,7 @@ TEST_F(HttpsListenerTest, keepAliveTimeout) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that persistent connection is closed by the server after
@@ -1065,7 +1064,7 @@ TEST_F(HttpsListenerTest, persistentConnectionTimeout) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that HTTP/1.1 connection remains open even if there is an
@@ -1118,7 +1117,7 @@ TEST_F(HttpsListenerTest, persistentConnectionBadBody) {
EXPECT_TRUE(client->isConnectionClosed());
listener.stop();
- io_service_.poll();
+ io_service_->poll();
}
// This test verifies that the HTTP listener can't be started twice.
@@ -1193,7 +1192,7 @@ TEST_F(HttpsListenerTest, invalidIdleTimeout) {
// This test verifies that listener can't be bound to the port to which
// other server is bound.
TEST_F(HttpsListenerTest, addressInUse) {
- tcp::acceptor acceptor(io_service_.getInternalIOService());
+ tcp::acceptor acceptor(io_service_->getInternalIOService());
// Use other port than SERVER_PORT to make sure that this TCP connection
// doesn't affect subsequent tests.
tcp::endpoint endpoint(address::from_string(SERVER_ADDRESS),