diff options
author | Håvard Pettersen <havardpe@oath.com> | 2019-01-17 13:58:49 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2019-01-25 12:36:05 +0000 |
commit | 2ec8f7e3540b5dd4a5521b2f92c47de64ed01869 (patch) | |
tree | ea6d69d65ea79c2cc23c1f29cf91f8890a62dcc4 /vbench/src/tests | |
parent | 02d24b5d24d8c3c3e97dbca86357881a5282601c (diff) |
TLS support in vbench
- vbench/dumpurl applications explicitly run without encryption for
now (config file/command line options should be added).
- configstatus tool uses default encryption which will pick up local
settings via environment where applicable.
Diffstat (limited to 'vbench/src/tests')
-rw-r--r-- | vbench/src/tests/app_dumpurl/app_dumpurl_test.cpp | 5 | ||||
-rw-r--r-- | vbench/src/tests/app_vbench/.gitignore | 1 | ||||
-rw-r--r-- | vbench/src/tests/app_vbench/CMakeLists.txt | 2 | ||||
-rw-r--r-- | vbench/src/tests/app_vbench/app_vbench_test.cpp | 7 | ||||
-rw-r--r-- | vbench/src/tests/app_vbench/vbench.cfg.template.template (renamed from vbench/src/tests/app_vbench/vbench.cfg.template) | 0 | ||||
-rw-r--r-- | vbench/src/tests/http_client/http_client_test.cpp | 19 | ||||
-rw-r--r-- | vbench/src/tests/http_connection/http_connection_test.cpp | 7 | ||||
-rw-r--r-- | vbench/src/tests/http_connection_pool/http_connection_pool_test.cpp | 11 | ||||
-rw-r--r-- | vbench/src/tests/socket/socket_test.cpp | 55 |
9 files changed, 59 insertions, 48 deletions
diff --git a/vbench/src/tests/app_dumpurl/app_dumpurl_test.cpp b/vbench/src/tests/app_dumpurl/app_dumpurl_test.cpp index ae37aface73..15453078b35 100644 --- a/vbench/src/tests/app_dumpurl/app_dumpurl_test.cpp +++ b/vbench/src/tests/app_dumpurl/app_dumpurl_test.cpp @@ -2,6 +2,7 @@ #include <vespa/vespalib/testkit/testapp.h> #include <vbench/test/all.h> #include <vespa/vespalib/util/slaveproc.h> +#include <vespa/vespalib/net/crypto_engine.h> using namespace vbench; using vespalib::SlaveProc; @@ -9,6 +10,8 @@ using vespalib::SlaveProc; using InputReader = vespalib::InputReader; using OutputWriter = vespalib::OutputWriter; +auto null_crypto = std::make_shared<vespalib::NullCryptoEngine>(); + bool endsWith(const Memory &mem, const string &str) { return (mem.size < str.size()) ? false : (strncmp(mem.data + mem.size - str.size(), str.data(), str.size()) == 0); @@ -34,7 +37,7 @@ TEST("dumpurl usage") { TEST_MT_F("run dumpurl", 2, ServerSocket()) { if (thread_id == 0) { - Stream::UP stream = f1.accept(); + Stream::UP stream = f1.accept(*null_crypto); SimpleBuffer ignore; readUntil(*stream, ignore, "\r\n\r\n"); OutputWriter out(*stream, 256); diff --git a/vbench/src/tests/app_vbench/.gitignore b/vbench/src/tests/app_vbench/.gitignore index 0f290bb76ac..37e7b548d05 100644 --- a/vbench/src/tests/app_vbench/.gitignore +++ b/vbench/src/tests/app_vbench/.gitignore @@ -1,3 +1,4 @@ +/vbench.cfg.template /vbench.cfg /vbench.out vbench_app_vbench_test_app diff --git a/vbench/src/tests/app_vbench/CMakeLists.txt b/vbench/src/tests/app_vbench/CMakeLists.txt index b5ce997c31a..b246fd2f1fd 100644 --- a/vbench/src/tests/app_vbench/CMakeLists.txt +++ b/vbench/src/tests/app_vbench/CMakeLists.txt @@ -7,4 +7,4 @@ vespa_add_executable(vbench_app_vbench_test_app TEST vbench ) vespa_add_test(NAME vbench_app_vbench_test_app NO_VALGRIND COMMAND vbench_app_vbench_test_app) -configure_file(vbench.cfg.template vbench.cfg @ONLY) +configure_file(vbench.cfg.template.template vbench.cfg.template @ONLY) diff --git a/vbench/src/tests/app_vbench/app_vbench_test.cpp b/vbench/src/tests/app_vbench/app_vbench_test.cpp index 366fe4ce871..00645045fb3 100644 --- a/vbench/src/tests/app_vbench/app_vbench_test.cpp +++ b/vbench/src/tests/app_vbench/app_vbench_test.cpp @@ -2,6 +2,7 @@ #include <vespa/vespalib/testkit/testapp.h> #include <vbench/test/all.h> #include <vespa/vespalib/util/slaveproc.h> +#include <vespa/vespalib/net/crypto_engine.h> using namespace vbench; using vespalib::SlaveProc; @@ -9,6 +10,8 @@ using vespalib::SlaveProc; using InputReader = vespalib::InputReader; using OutputWriter = vespalib::OutputWriter; +auto null_crypto = std::make_shared<vespalib::NullCryptoEngine>(); + bool endsWith(const Memory &mem, const string &str) { return (mem.size < str.size()) ? false : (strncmp(mem.data + mem.size - str.size(), str.data(), str.size()) == 0); @@ -35,7 +38,7 @@ TEST("vbench usage") { TEST_MT_F("run vbench", 2, ServerSocket()) { if (thread_id == 0) { for (;;) { - Stream::UP stream = f1.accept(); + Stream::UP stream = f1.accept(*null_crypto); if (stream.get() == 0) { break; } @@ -51,7 +54,7 @@ TEST_MT_F("run vbench", 2, ServerSocket()) { } } else { std::string out; - EXPECT_TRUE(SlaveProc::run(strfmt("sed -i 's/_LOCAL_PORT_/%d/' vbench.cfg", f1.port()).c_str())); + EXPECT_TRUE(SlaveProc::run(strfmt("sed 's/_LOCAL_PORT_/%d/' vbench.cfg.template > vbench.cfg", f1.port()).c_str())); EXPECT_TRUE(SlaveProc::run("../../apps/vbench/vbench_app run vbench.cfg 2> vbench.out", out)); fprintf(stderr, "%s\n", out.c_str()); f1.close(); diff --git a/vbench/src/tests/app_vbench/vbench.cfg.template b/vbench/src/tests/app_vbench/vbench.cfg.template.template index 950d5151780..950d5151780 100644 --- a/vbench/src/tests/app_vbench/vbench.cfg.template +++ b/vbench/src/tests/app_vbench/vbench.cfg.template.template diff --git a/vbench/src/tests/http_client/http_client_test.cpp b/vbench/src/tests/http_client/http_client_test.cpp index 36e1ca12110..36e04e012a0 100644 --- a/vbench/src/tests/http_client/http_client_test.cpp +++ b/vbench/src/tests/http_client/http_client_test.cpp @@ -1,12 +1,15 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/vespalib/testkit/testapp.h> #include <vbench/test/all.h> +#include <vespa/vespalib/net/crypto_engine.h> using namespace vbench; using InputReader = vespalib::InputReader; using OutputWriter = vespalib::OutputWriter; +auto null_crypto = std::make_shared<vespalib::NullCryptoEngine>(); + void checkMemory(const string &expect, const Memory &mem) { EXPECT_EQUAL(expect, string(mem.data, mem.size)); } @@ -41,20 +44,20 @@ TEST_MT_F("verify request", 2, ServerSocket()) { out.write("\r\n"); } SimpleBuffer actual; - Stream::UP stream = f1.accept(); + Stream::UP stream = f1.accept(*null_crypto); ASSERT_TRUE(stream.get() != 0); readUntil(*stream, actual, "\r\n\r\n"); EXPECT_TRUE(expect == actual); } else { SimpleHttpResultHandler handler; - HttpClient::fetch(ServerSpec("localhost", f1.port()), + HttpClient::fetch(*null_crypto, ServerSpec("localhost", f1.port()), "/this/is/the/url", handler); } } TEST_MT_F("verify connection close", 2, ServerSocket()) { if (thread_id == 0) { - Stream::UP stream = f1.accept(); + Stream::UP stream = f1.accept(*null_crypto); SimpleBuffer ignore; readUntil(*stream, ignore, "\r\n\r\n"); OutputWriter out(*stream, 256); @@ -63,7 +66,7 @@ TEST_MT_F("verify connection close", 2, ServerSocket()) { out.write("data"); } else { SimpleHttpResultHandler handler; - HttpClient::fetch(ServerSpec("localhost", f1.port()), + HttpClient::fetch(*null_crypto, ServerSpec("localhost", f1.port()), "/foo", handler); EXPECT_EQUAL(0u, handler.failures().size()); EXPECT_EQUAL(0u, handler.headers().size()); @@ -73,7 +76,7 @@ TEST_MT_F("verify connection close", 2, ServerSocket()) { TEST_MT_F("verify content length", 2, ServerSocket()) { if (thread_id == 0) { - Stream::UP stream = f1.accept(); + Stream::UP stream = f1.accept(*null_crypto); SimpleBuffer ignore; readUntil(*stream, ignore, "\r\n\r\n"); OutputWriter out(*stream, 256); @@ -83,7 +86,7 @@ TEST_MT_F("verify content length", 2, ServerSocket()) { out.write("data"); } else { SimpleHttpResultHandler handler; - HttpClient::fetch(ServerSpec("localhost", f1.port()), + HttpClient::fetch(*null_crypto, ServerSpec("localhost", f1.port()), "/foo", handler); EXPECT_EQUAL(0u, handler.failures().size()); EXPECT_EQUAL(1u, handler.headers().size()); @@ -93,7 +96,7 @@ TEST_MT_F("verify content length", 2, ServerSocket()) { TEST_MT_F("verify chunked encoding", 2, ServerSocket()) { if (thread_id == 0) { - Stream::UP stream = f1.accept(); + Stream::UP stream = f1.accept(*null_crypto); SimpleBuffer ignore; readUntil(*stream, ignore, "\r\n\r\n"); OutputWriter out(*stream, 256); @@ -108,7 +111,7 @@ TEST_MT_F("verify chunked encoding", 2, ServerSocket()) { out.write("\r\n"); } else { SimpleHttpResultHandler handler; - HttpClient::fetch(ServerSpec("localhost", f1.port()), + HttpClient::fetch(*null_crypto, ServerSpec("localhost", f1.port()), "/foo", handler); if (handler.failures().size() > 0) { fprintf(stderr, "failure: %s\n", handler.failures()[0].c_str()); diff --git a/vbench/src/tests/http_connection/http_connection_test.cpp b/vbench/src/tests/http_connection/http_connection_test.cpp index 0776c5e212c..e3044978b2b 100644 --- a/vbench/src/tests/http_connection/http_connection_test.cpp +++ b/vbench/src/tests/http_connection/http_connection_test.cpp @@ -1,13 +1,16 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/vespalib/testkit/testapp.h> #include <vbench/test/all.h> +#include <vespa/vespalib/net/crypto_engine.h> using namespace vbench; +auto null_crypto = std::make_shared<vespalib::NullCryptoEngine>(); + TEST("http connection") { ServerSocket serverSocket; - HttpConnection client(ServerSpec("localhost", serverSocket.port())); - Stream::UP server = serverSocket.accept(); + HttpConnection client(*null_crypto, ServerSpec("localhost", serverSocket.port())); + Stream::UP server = serverSocket.accept(*null_crypto); EXPECT_TRUE(client.fresh()); EXPECT_EQUAL("localhost", client.server().host); EXPECT_FALSE(client.mayReuse(0.1)); // still fresh diff --git a/vbench/src/tests/http_connection_pool/http_connection_pool_test.cpp b/vbench/src/tests/http_connection_pool/http_connection_pool_test.cpp index 1c36cb6891f..c0c5982d22b 100644 --- a/vbench/src/tests/http_connection_pool/http_connection_pool_test.cpp +++ b/vbench/src/tests/http_connection_pool/http_connection_pool_test.cpp @@ -2,17 +2,20 @@ #include <vespa/vespalib/testkit/testapp.h> #include <vbench/test/all.h> #include <vespa/vespalib/util/sync.h> +#include <vespa/vespalib/net/crypto_engine.h> using namespace vbench; using vespalib::CountDownLatch; +auto null_crypto = std::make_shared<vespalib::NullCryptoEngine>(); + TEST_MT_F("http connection pool", 2, ServerSocket()) { if (thread_id == 0) { - for (; f1.accept().get() != 0; ) {} + for (; f1.accept(*null_crypto).get() != 0; ) {} } else { Timer timer; HttpConnection::UP conn; - HttpConnectionPool pool(timer); + HttpConnectionPool pool(null_crypto, timer); conn = pool.getConnection(ServerSpec("localhost", f1.port())); EXPECT_TRUE(conn.get() != 0); pool.putConnection(std::move(conn)); @@ -28,11 +31,11 @@ TEST_MT_F("http connection pool", 2, ServerSocket()) { } } -TEST_MT_FFFF("stress http connection pool", 256, ServerSocket(), Timer(), HttpConnectionPool(f2), +TEST_MT_FFFF("stress http connection pool", 256, ServerSocket(), Timer(), HttpConnectionPool(null_crypto, f2), CountDownLatch(num_threads-2)) { if (thread_id == 0) { - for (; f1.accept().get() != 0; ) {} + for (; f1.accept(*null_crypto).get() != 0; ) {} } else { while (f2.sample() < 5.0) { HttpConnection::UP conn = f3.getConnection(ServerSpec("localhost", f1.port())); diff --git a/vbench/src/tests/socket/socket_test.cpp b/vbench/src/tests/socket/socket_test.cpp index 609191fc596..8623c946c84 100644 --- a/vbench/src/tests/socket/socket_test.cpp +++ b/vbench/src/tests/socket/socket_test.cpp @@ -1,9 +1,15 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/vespalib/testkit/testapp.h> #include <vbench/test/all.h> +#include <vespa/vespalib/net/crypto_engine.h> +#include <vespa/vespalib/net/tls/tls_crypto_engine.h> +#include <vespa/vespalib/test/make_tls_options_for_testing.h> using namespace vbench; +auto null_crypto = std::make_shared<vespalib::NullCryptoEngine>(); +auto tls_crypto = std::make_shared<vespalib::TlsCryptoEngine>(vespalib::test::make_tls_options_for_testing()); + using OutputWriter = vespalib::OutputWriter; const size_t numLines = 100; @@ -32,43 +38,32 @@ struct Agent { } }; -struct Client : public Agent, public vespalib::Runnable { - Client(Stream::UP s) : Agent(std::move(s)) {} - void run() override { - TEST_THREAD("client"); - write("client-"); - read("server-"); - } -}; - -struct Server : public Agent, public vespalib::Runnable { - Server(Stream::UP s) : Agent(std::move(s)) {} - void run() override { - TEST_THREAD("server"); - read("client-"); - write("server-"); - } -}; - -TEST("socket") { - ServerSocket serverSocket; - Client client(Stream::UP(new Socket("localhost", serverSocket.port()))); - Server server(serverSocket.accept()); - vespalib::Thread clientThread(client); - vespalib::Thread serverThread(server); - clientThread.start(); - serverThread.start(); - clientThread.join(); - serverThread.join(); - { - server.socket.reset(); +void verify_socket(CryptoEngine &crypto, ServerSocket &server_socket, size_t thread_id) { + if (thread_id == 0) { // client + Agent client(std::make_unique<Socket>(crypto, "localhost", server_socket.port())); + client.write("client-"); + client.read("server-"); + TEST_BARRIER(); // #1 LineReader reader(*client.socket); string line; EXPECT_FALSE(reader.readLine(line)); EXPECT_TRUE(line.empty()); EXPECT_TRUE(client.socket->eof()); EXPECT_FALSE(client.socket->tainted()); + } else { // server + Agent server(server_socket.accept(crypto)); + server.read("client-"); + server.write("server-"); + TEST_BARRIER(); // #1 } } +TEST_MT_F("socket", 2, ServerSocket()) { + TEST_DO(verify_socket(*null_crypto, f1, thread_id)); +} + +TEST_MT_F("secure socket", 2, ServerSocket()) { + TEST_DO(verify_socket(*tls_crypto, f1, thread_id)); +} + TEST_MAIN() { TEST_RUN_ALL(); } |