You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by tn...@apache.org on 2015/07/29 19:49:06 UTC
mesos git commit: Added https support in libprocess.
Repository: mesos
Updated Branches:
refs/heads/master e6e7d732c -> 5b183ee21
Added https support in libprocess.
Current http implementation lacks a https interface. This change exposes
SSL socket for "https" URL scheme.
Review: https://reviews.apache.org/r/36757
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/5b183ee2
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/5b183ee2
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/5b183ee2
Branch: refs/heads/master
Commit: 5b183ee215847cdb4a5121bedf9af0952426cef7
Parents: e6e7d73
Author: Jojy Varghese <jo...@mesosphere.io>
Authored: Tue Jul 28 12:00:18 2015 -0700
Committer: Timothy Chen <tn...@apache.org>
Committed: Wed Jul 29 10:48:55 2015 -0700
----------------------------------------------------------------------
3rdparty/libprocess/src/http.cpp | 16 +++--
3rdparty/libprocess/src/tests/ssl_tests.cpp | 81 ++++++++++++++++++++++++
2 files changed, 93 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/5b183ee2/3rdparty/libprocess/src/http.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/http.cpp b/3rdparty/libprocess/src/http.cpp
index d168579..4dcbd74 100644
--- a/3rdparty/libprocess/src/http.cpp
+++ b/3rdparty/libprocess/src/http.cpp
@@ -703,11 +703,19 @@ Future<Response> request(
const Option<string>& body,
const Option<string>& contentType)
{
- if (url.scheme != "http") {
- return Failure("Unsupported URL scheme");
- }
+ auto create = [&url]() -> Try<Socket> {
+ if (url.scheme == "http") {
+ return Socket::create(Socket::POLL);
+ }
+
+#ifdef USE_SSL_SOCKET
+ if (url.scheme == "https") {
+ return Socket::create(Socket::SSL);
+ }
+#endif
- Try<Socket> create = Socket::create();
+ return Error("Unsupported URL scheme");
+ }();
if (create.isError()) {
return Failure("Failed to create socket: " + create.error());
http://git-wip-us.apache.org/repos/asf/mesos/blob/5b183ee2/3rdparty/libprocess/src/tests/ssl_tests.cpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/tests/ssl_tests.cpp b/3rdparty/libprocess/src/tests/ssl_tests.cpp
index a7173df..7a316bc 100644
--- a/3rdparty/libprocess/src/tests/ssl_tests.cpp
+++ b/3rdparty/libprocess/src/tests/ssl_tests.cpp
@@ -925,4 +925,85 @@ TEST_F(SSLTest, PeerAddress)
ASSERT_SOME_EQ(client.address().get(), socket.get().peer());
}
+
+// Basic Https GET test.
+TEST_F(SSLTest, HTTPSGet)
+{
+ Try<Socket> server = setup_server({
+ {"SSL_ENABLED", "true"},
+ {"SSL_KEY_FILE", key_path().value},
+ {"SSL_CERT_FILE", certificate_path().value}});
+
+ ASSERT_SOME(server);
+ ASSERT_SOME(server.get().address());
+ ASSERT_SOME(server.get().address().get().hostname());
+
+ Future<Socket> socket = server.get().accept();
+
+ // Create URL from server hostname and port.
+ const http::URL url(
+ "https",
+ server.get().address().get().hostname().get(),
+ server.get().address().get().port);
+
+ // Send GET request.
+ Future<http::Response> response = http::get(url);
+
+ AWAIT_ASSERT_READY(socket);
+
+ // Construct response and send(server side).
+ const string buffer =
+ string("HTTP/1.1 200 OK\r\n") +
+ "Content-Length : " +
+ stringify(data.length()) + "\r\n" +
+ "\r\n" +
+ data;
+ AWAIT_ASSERT_READY(Socket(socket.get()).send(buffer));
+
+ AWAIT_ASSERT_READY(response);
+ AWAIT_EXPECT_RESPONSE_STATUS_EQ(http::OK().status, response);
+ ASSERT_EQ(data, response.get().body);
+}
+
+
+// Basic Https POST test.
+TEST_F(SSLTest, HTTPSPost)
+{
+ Try<Socket> server = setup_server({
+ {"SSL_ENABLED", "true"},
+ {"SSL_KEY_FILE", key_path().value},
+ {"SSL_CERT_FILE", certificate_path().value}});
+
+ ASSERT_SOME(server);
+ ASSERT_SOME(server.get().address());
+ ASSERT_SOME(server.get().address().get().hostname());
+
+ Future<Socket> socket = server.get().accept();
+
+ // Create URL from server hostname and port.
+ const http::URL url(
+ "https",
+ server.get().address().get().hostname().get(),
+ server.get().address().get().port);
+
+ // Send POST request.
+ Future<http::Response> response =
+ http::post(url, None(), "payload", "text/plain");
+
+ AWAIT_ASSERT_READY(socket);
+
+ // Construct response and send(server side).
+ const string buffer =
+ string("HTTP/1.1 200 OK\r\n") +
+ "Content-Length : " +
+ stringify(data.length()) + "\r\n" +
+ "\r\n" +
+ data;
+ AWAIT_ASSERT_READY(Socket(socket.get()).send(buffer));
+
+ AWAIT_ASSERT_READY(response);
+ AWAIT_EXPECT_RESPONSE_STATUS_EQ(http::OK().status, response);
+ ASSERT_EQ(data, response.get().body);
+}
+
#endif // USE_SSL_SOCKET