summaryrefslogtreecommitdiffstats
path: root/vbench/src/tests/app_vbench/app_vbench_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vbench/src/tests/app_vbench/app_vbench_test.cpp')
-rw-r--r--vbench/src/tests/app_vbench/app_vbench_test.cpp88
1 files changed, 53 insertions, 35 deletions
diff --git a/vbench/src/tests/app_vbench/app_vbench_test.cpp b/vbench/src/tests/app_vbench/app_vbench_test.cpp
index 00645045fb3..6e396caa2e5 100644
--- a/vbench/src/tests/app_vbench/app_vbench_test.cpp
+++ b/vbench/src/tests/app_vbench/app_vbench_test.cpp
@@ -3,30 +3,31 @@
#include <vbench/test/all.h>
#include <vespa/vespalib/util/slaveproc.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>
+#include <vespa/vespalib/portal/portal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
using namespace vbench;
using vespalib::SlaveProc;
using InputReader = vespalib::InputReader;
using OutputWriter = vespalib::OutputWriter;
+using Portal = vespalib::Portal;
auto null_crypto = std::make_shared<vespalib::NullCryptoEngine>();
+auto tls_opts = vespalib::test::make_tls_options_for_testing();
+auto tls_crypto = std::make_shared<vespalib::TlsCryptoEngine>(tls_opts);
-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);
-}
-
-void readUntil(Input &input, SimpleBuffer &buffer, const string &end) {
- InputReader in(input);
- while (!endsWith(buffer.get(), end)) {
- char c = in.read();
- if (in.failed()) {
- return;
- }
- buffer.reserve(1).data[0] = c;
- buffer.commit(1);
- }
+void write_file(const vespalib::string &file_name, const vespalib::string &content) {
+ int fd = creat(file_name.c_str(), 0600);
+ ASSERT_TRUE(fd >= 0);
+ ssize_t res = write(fd, content.data(), content.size());
+ ASSERT_EQUAL(res, ssize_t(content.size()));
+ int res2 = close(fd);
+ ASSERT_EQUAL(res2, 0);
}
TEST("vbench usage") {
@@ -35,29 +36,46 @@ TEST("vbench usage") {
fprintf(stderr, "%s\n", out.c_str());
}
-TEST_MT_F("run vbench", 2, ServerSocket()) {
+struct MyGet : vespalib::Portal::GetHandler {
+ std::atomic<size_t> cnt;
+ void get(vespalib::Portal::GetRequest request) override {
+ ++cnt;
+ request.respond_with_content("text/plain", "data");
+ };
+};
+
+struct Servers {
+ MyGet my_get;
+ MyGet my_tls_get;
+ Portal::SP portal;
+ Portal::SP tls_portal;
+ Portal::Token::UP root;
+ Portal::Token::UP tls_root;
+ Servers() : my_get(), my_tls_get(),
+ portal(Portal::create(null_crypto, 0)),
+ tls_portal(Portal::create(tls_crypto, 0)),
+ root(portal->bind("/", my_get)),
+ tls_root(tls_portal->bind("/", my_tls_get))
+ {
+ write_file("ca_certs.pem", tls_opts.ca_certs_pem());
+ write_file("certs.pem", tls_opts.cert_chain_pem());
+ write_file("test.key", tls_opts.private_key_pem());
+ }
+};
+
+TEST_MT_F("run vbench", 2, Servers()) {
if (thread_id == 0) {
- for (;;) {
- Stream::UP stream = f1.accept(*null_crypto);
- if (stream.get() == 0) {
- break;
- }
- SimpleBuffer ignore;
- readUntil(*stream, ignore, "\r\n\r\n");
- OutputWriter out(*stream, 256);
- out.write("HTTP/1.1 200\r\n");
- out.write("content-length: 4\r\n");
- out.write("X-Yahoo-Vespa-NumHits 10\r\n");
- out.write("X-Yahoo-Vespa-TotalHitCount 100\r\n");
- out.write("\r\n");
- out.write("data");
- }
- } else {
std::string out;
- EXPECT_TRUE(SlaveProc::run(strfmt("sed 's/_LOCAL_PORT_/%d/' vbench.cfg.template > vbench.cfg", f1.port()).c_str()));
+ EXPECT_TRUE(SlaveProc::run(strfmt("sed 's/_LOCAL_PORT_/%d/' vbench.cfg.template > vbench.cfg", f1.portal->listen_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();
+ fprintf(stderr, "null crypto: %s\n", out.c_str());
+ EXPECT_EQUAL(f1.my_get.cnt, 144u);
+ } else {
+ std::string tls_out;
+ EXPECT_TRUE(SlaveProc::run(strfmt("sed 's/_LOCAL_PORT_/%d/' vbench.tls.cfg.template > vbench.tls.cfg", f1.tls_portal->listen_port()).c_str()));
+ EXPECT_TRUE(SlaveProc::run("../../apps/vbench/vbench_app run vbench.tls.cfg 2> vbench.tls.out", tls_out));
+ fprintf(stderr, "tls crypto: %s\n", tls_out.c_str());
+ EXPECT_EQUAL(f1.my_tls_get.cnt, 144u);
}
}