diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /vbench/src/tests |
Publish
Diffstat (limited to 'vbench/src/tests')
136 files changed, 1732 insertions, 0 deletions
diff --git a/vbench/src/tests/.gitignore b/vbench/src/tests/.gitignore new file mode 100644 index 00000000000..a3e9c375723 --- /dev/null +++ b/vbench/src/tests/.gitignore @@ -0,0 +1,3 @@ +.depend +Makefile +*_test diff --git a/vbench/src/tests/app_dumpurl/.gitignore b/vbench/src/tests/app_dumpurl/.gitignore new file mode 100644 index 00000000000..6cf8101a380 --- /dev/null +++ b/vbench/src/tests/app_dumpurl/.gitignore @@ -0,0 +1 @@ +vbench_app_dumpurl_test_app diff --git a/vbench/src/tests/app_dumpurl/CMakeLists.txt b/vbench/src/tests/app_dumpurl/CMakeLists.txt new file mode 100644 index 00000000000..2ff66e4edcd --- /dev/null +++ b/vbench/src/tests/app_dumpurl/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_app_dumpurl_test_app + SOURCES + app_dumpurl_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_app_dumpurl_test_app NO_VALGRIND COMMAND vbench_app_dumpurl_test_app) diff --git a/vbench/src/tests/app_dumpurl/FILES b/vbench/src/tests/app_dumpurl/FILES new file mode 100644 index 00000000000..54382f23234 --- /dev/null +++ b/vbench/src/tests/app_dumpurl/FILES @@ -0,0 +1 @@ +app_dumpurl_test.cpp diff --git a/vbench/src/tests/app_dumpurl/app_dumpurl_test.cpp b/vbench/src/tests/app_dumpurl/app_dumpurl_test.cpp new file mode 100644 index 00000000000..48a8ce156f0 --- /dev/null +++ b/vbench/src/tests/app_dumpurl/app_dumpurl_test.cpp @@ -0,0 +1,50 @@ +// Copyright 2016 Yahoo Inc. 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/util/slaveproc.h> + +using namespace vbench; +using vespalib::SlaveProc; + +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) { + ByteInput in(input, 256); + while (!endsWith(buffer.get(), end)) { + int c = in.get(); + if (c < 0) { + return; + } + buffer.reserve(1).data[0] = c; + buffer.commit(1, 0); + } +} + +TEST("dumpurl usage") { + std::string out; + EXPECT_FALSE(SlaveProc::run("../../apps/dumpurl/vbench_dumpurl_app", out)); + fprintf(stderr, "%s\n", out.c_str()); +} + +TEST_MT_F("run dumpurl", 2, ServerSocket()) { + if (thread_id == 0) { + Stream::UP stream = f1.accept(); + SimpleBuffer ignore; + readUntil(*stream, ignore, "\r\n\r\n"); + BufferedOutput out(*stream, 256); + out.append("HTTP/1.1 200\r\n"); + out.append("content-length: 4\r\n"); + out.append("\r\n"); + out.append("data"); + } else { + std::string out; + EXPECT_TRUE(SlaveProc::run(strfmt("../../apps/dumpurl/vbench_dumpurl_app localhost %d /foo", + f1.port()).c_str(), out)); + fprintf(stderr, "%s\n", out.c_str()); + } +} + +TEST_MAIN_WITH_PROCESS_PROXY() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/app_vbench/.gitignore b/vbench/src/tests/app_vbench/.gitignore new file mode 100644 index 00000000000..0f290bb76ac --- /dev/null +++ b/vbench/src/tests/app_vbench/.gitignore @@ -0,0 +1,3 @@ +/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 new file mode 100644 index 00000000000..6295571cc09 --- /dev/null +++ b/vbench/src/tests/app_vbench/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_app_vbench_test_app + SOURCES + app_vbench_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_app_vbench_test_app NO_VALGRIND COMMAND vbench_app_vbench_test_app) diff --git a/vbench/src/tests/app_vbench/FILES b/vbench/src/tests/app_vbench/FILES new file mode 100644 index 00000000000..8a53b5dfde7 --- /dev/null +++ b/vbench/src/tests/app_vbench/FILES @@ -0,0 +1,3 @@ +app_vbench_test.cpp +vbench.cfg +vbench.out diff --git a/vbench/src/tests/app_vbench/app_vbench_test.cpp b/vbench/src/tests/app_vbench/app_vbench_test.cpp new file mode 100644 index 00000000000..87461702075 --- /dev/null +++ b/vbench/src/tests/app_vbench/app_vbench_test.cpp @@ -0,0 +1,59 @@ +// Copyright 2016 Yahoo Inc. 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/util/slaveproc.h> + +using namespace vbench; +using vespalib::SlaveProc; + +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) { + ByteInput in(input, 256); + while (!endsWith(buffer.get(), end)) { + int c = in.get(); + if (c < 0) { + return; + } + buffer.reserve(1).data[0] = c; + buffer.commit(1, 0); + } +} + +TEST("vbench usage") { + std::string out; + EXPECT_FALSE(SlaveProc::run("../../apps/vbench/vbench_app", out)); + fprintf(stderr, "%s\n", out.c_str()); +} + +TEST_MT_F("run vbench", 2, ServerSocket()) { + if (thread_id == 0) { + for (;;) { + Stream::UP stream = f1.accept(); + if (stream.get() == 0) { + break; + } + SimpleBuffer ignore; + readUntil(*stream, ignore, "\r\n\r\n"); + BufferedOutput out(*stream, 256); + out.append("HTTP/1.1 200\r\n"); + out.append("content-length: 4\r\n"); + out.append("X-Yahoo-Vespa-NumHits 10\r\n"); + out.append("X-Yahoo-Vespa-TotalHitCount 100\r\n"); + out.append("\r\n"); + out.append("data"); + } + } else { + std::string out; + EXPECT_TRUE(SlaveProc::run("cp vbench.cfg.template vbench.cfg")); + EXPECT_TRUE(SlaveProc::run(strfmt("sed -i 's/_LOCAL_PORT_/%d/' 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(); + } +} + +TEST_MAIN_WITH_PROCESS_PROXY() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/app_vbench/input.txt b/vbench/src/tests/app_vbench/input.txt new file mode 100644 index 00000000000..c9a57e7a555 --- /dev/null +++ b/vbench/src/tests/app_vbench/input.txt @@ -0,0 +1,72 @@ +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo +/foo diff --git a/vbench/src/tests/app_vbench/vbench.cfg.template b/vbench/src/tests/app_vbench/vbench.cfg.template new file mode 100644 index 00000000000..de8e30a7fbe --- /dev/null +++ b/vbench/src/tests/app_vbench/vbench.cfg.template @@ -0,0 +1,25 @@ +{ + http_threads: 32, + inputs: [ + { + source: { type: 'RequestGenerator', file: 'input.txt' }, + prepare: [ + { type: 'ServerTagger', host: 'localhost', port:_LOCAL_PORT_ }, + { type: 'QpsTagger', qps: 10 } + ] + }, + { + source: { type: 'RequestGenerator', file: 'input.txt' }, + prepare: [ + { type: 'ServerTagger', host: 'localhost', port:_LOCAL_PORT_ }, + { type: 'QpsTagger', qps: 10 } + ] + } + ], + analyze: [ + { type: 'IgnoreBefore', time: 1.0 }, + { type: 'QpsAnalyzer' }, + { type: 'LatencyAnalyzer' }, + { type: 'RequestDumper' } + ] +} diff --git a/vbench/src/tests/benchmark_headers/.gitignore b/vbench/src/tests/benchmark_headers/.gitignore new file mode 100644 index 00000000000..ca919fcf3e5 --- /dev/null +++ b/vbench/src/tests/benchmark_headers/.gitignore @@ -0,0 +1 @@ +vbench_benchmark_headers_test_app diff --git a/vbench/src/tests/benchmark_headers/CMakeLists.txt b/vbench/src/tests/benchmark_headers/CMakeLists.txt new file mode 100644 index 00000000000..ab8f0bce02e --- /dev/null +++ b/vbench/src/tests/benchmark_headers/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_benchmark_headers_test_app + SOURCES + benchmark_headers_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_benchmark_headers_test_app COMMAND vbench_benchmark_headers_test_app) diff --git a/vbench/src/tests/benchmark_headers/FILES b/vbench/src/tests/benchmark_headers/FILES new file mode 100644 index 00000000000..d2beb7f953f --- /dev/null +++ b/vbench/src/tests/benchmark_headers/FILES @@ -0,0 +1 @@ +benchmark_headers_test.cpp diff --git a/vbench/src/tests/benchmark_headers/benchmark_headers_test.cpp b/vbench/src/tests/benchmark_headers/benchmark_headers_test.cpp new file mode 100644 index 00000000000..9da9a100613 --- /dev/null +++ b/vbench/src/tests/benchmark_headers/benchmark_headers_test.cpp @@ -0,0 +1,79 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("require that benchmark headers can be set") { + vbench::BenchmarkHeaders headers; + EXPECT_FALSE(headers.num_hits.is_set); + EXPECT_FALSE(headers.num_fasthits.is_set); + EXPECT_FALSE(headers.num_grouphits.is_set); + EXPECT_FALSE(headers.num_errors.is_set); + EXPECT_FALSE(headers.total_hit_count.is_set); + EXPECT_FALSE(headers.num_docsums.is_set); + EXPECT_FALSE(headers.query_hits.is_set); + EXPECT_FALSE(headers.query_offset.is_set); + EXPECT_FALSE(headers.search_time.is_set); + EXPECT_FALSE(headers.attr_time.is_set); + EXPECT_FALSE(headers.fill_time.is_set); + EXPECT_FALSE(headers.docs_searched.is_set); + EXPECT_FALSE(headers.nodes_searched.is_set); + EXPECT_FALSE(headers.full_coverage.is_set); + + headers.handleHeader("X-Yahoo-Vespa-NumHits", "1"); + headers.handleHeader("X-Yahoo-Vespa-NumFastHits", "2"); + headers.handleHeader("X-Yahoo-Vespa-NumGroupHits", "3"); + headers.handleHeader("X-Yahoo-Vespa-NumErrors", "4"); + headers.handleHeader("X-Yahoo-Vespa-TotalHitCount", "5"); + headers.handleHeader("X-Yahoo-Vespa-NumDocsums", "6"); + headers.handleHeader("X-Yahoo-Vespa-QueryHits", "7"); + headers.handleHeader("X-Yahoo-Vespa-QueryOffset", "8"); + headers.handleHeader("X-Yahoo-Vespa-SearchTime", "9"); + headers.handleHeader("X-Yahoo-Vespa-AttributeFetchTime" , "10"); + headers.handleHeader("X-Yahoo-Vespa-FillTime", "11"); + headers.handleHeader("X-Yahoo-Vespa-DocsSearched", "12"); + headers.handleHeader("X-Yahoo-Vespa-NodesSearched", "13"); + headers.handleHeader("X-Yahoo-Vespa-FullCoverage", "14"); + + EXPECT_TRUE(headers.num_hits.is_set); + EXPECT_TRUE(headers.num_fasthits.is_set); + EXPECT_TRUE(headers.num_grouphits.is_set); + EXPECT_TRUE(headers.num_errors.is_set); + EXPECT_TRUE(headers.total_hit_count.is_set); + EXPECT_TRUE(headers.num_docsums.is_set); + EXPECT_TRUE(headers.query_hits.is_set); + EXPECT_TRUE(headers.query_offset.is_set); + EXPECT_TRUE(headers.search_time.is_set); + EXPECT_TRUE(headers.attr_time.is_set); + EXPECT_TRUE(headers.fill_time.is_set); + EXPECT_TRUE(headers.docs_searched.is_set); + EXPECT_TRUE(headers.nodes_searched.is_set); + EXPECT_TRUE(headers.full_coverage.is_set); + + EXPECT_EQUAL(headers.num_hits.value, 1.0); + EXPECT_EQUAL(headers.num_fasthits.value, 2.0); + EXPECT_EQUAL(headers.num_grouphits.value, 3.0); + EXPECT_EQUAL(headers.num_errors.value, 4.0); + EXPECT_EQUAL(headers.total_hit_count.value, 5.0); + EXPECT_EQUAL(headers.num_docsums.value, 6.0); + EXPECT_EQUAL(headers.query_hits.value, 7.0); + EXPECT_EQUAL(headers.query_offset.value, 8.0); + EXPECT_EQUAL(headers.search_time.value, 9.0); + EXPECT_EQUAL(headers.attr_time.value, 10.0); + EXPECT_EQUAL(headers.fill_time.value, 11.0); + EXPECT_EQUAL(headers.docs_searched.value, 12.0); + EXPECT_EQUAL(headers.nodes_searched.value, 13.0); + EXPECT_EQUAL(headers.full_coverage.value, 14.0); +} + +TEST("require that benchmark headers can be converted to string") { + vbench::BenchmarkHeaders headers; + headers.handleHeader("X-Yahoo-Vespa-NumErrors", "4"); + headers.handleHeader("X-Yahoo-Vespa-TotalHitCount", "5"); + headers.handleHeader("X-Yahoo-Vespa-NumDocsums", "6"); + vbench::string result = headers.toString(); + fprintf(stderr, "%s", result.c_str()); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/buffered_output/.gitignore b/vbench/src/tests/buffered_output/.gitignore new file mode 100644 index 00000000000..ba59218c6c5 --- /dev/null +++ b/vbench/src/tests/buffered_output/.gitignore @@ -0,0 +1 @@ +vbench_buffered_output_test_app diff --git a/vbench/src/tests/buffered_output/CMakeLists.txt b/vbench/src/tests/buffered_output/CMakeLists.txt new file mode 100644 index 00000000000..7dfc6c326a7 --- /dev/null +++ b/vbench/src/tests/buffered_output/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_buffered_output_test_app + SOURCES + buffered_output_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_buffered_output_test_app COMMAND vbench_buffered_output_test_app) diff --git a/vbench/src/tests/buffered_output/FILES b/vbench/src/tests/buffered_output/FILES new file mode 100644 index 00000000000..86ca0ac84c1 --- /dev/null +++ b/vbench/src/tests/buffered_output/FILES @@ -0,0 +1 @@ +buffered_output_test.cpp diff --git a/vbench/src/tests/buffered_output/buffered_output_test.cpp b/vbench/src/tests/buffered_output/buffered_output_test.cpp new file mode 100644 index 00000000000..79bd490c71c --- /dev/null +++ b/vbench/src/tests/buffered_output/buffered_output_test.cpp @@ -0,0 +1,32 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("buffered output") { + SimpleBuffer buffer; + { // produce data + BufferedOutput dst(buffer, 3); + dst.append('a').append('b').append('c').append('\n'); + dst.append("foo bar").append('\n'); + dst.append(string("str")).append('\n'); + dst.printf("%d + %d = %d\n", 2, 2, 4); + } + { // verify data + LineReader src(buffer, 3); + string str; + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("abc", str); + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("foo bar", str); + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("str", str); + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("2 + 2 = 4", str); + EXPECT_TRUE(!src.readLine(str)); + EXPECT_EQUAL("", str); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/byte_input/.gitignore b/vbench/src/tests/byte_input/.gitignore new file mode 100644 index 00000000000..350435ffda4 --- /dev/null +++ b/vbench/src/tests/byte_input/.gitignore @@ -0,0 +1 @@ +vbench_byte_input_test_app diff --git a/vbench/src/tests/byte_input/CMakeLists.txt b/vbench/src/tests/byte_input/CMakeLists.txt new file mode 100644 index 00000000000..5838ed58d76 --- /dev/null +++ b/vbench/src/tests/byte_input/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_byte_input_test_app + SOURCES + byte_input_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_byte_input_test_app COMMAND vbench_byte_input_test_app) diff --git a/vbench/src/tests/byte_input/FILES b/vbench/src/tests/byte_input/FILES new file mode 100644 index 00000000000..c625277f587 --- /dev/null +++ b/vbench/src/tests/byte_input/FILES @@ -0,0 +1 @@ +byte_input_test.cpp diff --git a/vbench/src/tests/byte_input/byte_input_test.cpp b/vbench/src/tests/byte_input/byte_input_test.cpp new file mode 100644 index 00000000000..251b16449be --- /dev/null +++ b/vbench/src/tests/byte_input/byte_input_test.cpp @@ -0,0 +1,39 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("byte input") { + SimpleBuffer buffer; + { + BufferedOutput out(buffer, 10); + out.append("abcdefgh"); + } + EXPECT_EQUAL(8u, buffer.get().size); + { + ByteInput in(buffer, 3); + EXPECT_EQUAL('a', in.get()); + EXPECT_EQUAL('b', in.get()); + EXPECT_EQUAL('c', in.get()); + EXPECT_EQUAL('d', in.get()); + } + EXPECT_EQUAL(4u, buffer.get().size); + { + ByteInput in(buffer, 3); + EXPECT_EQUAL('e', in.get()); + EXPECT_EQUAL('f', in.get()); + EXPECT_EQUAL('g', in.get()); + EXPECT_EQUAL('h', in.get()); + EXPECT_EQUAL(-1, in.get()); + EXPECT_EQUAL(-1, in.get()); + } + EXPECT_EQUAL(0u, buffer.get().size); + { + ByteInput in(buffer, 3); + EXPECT_EQUAL(-1, in.get()); + } + EXPECT_EQUAL(0u, buffer.get().size); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/create-test.sh b/vbench/src/tests/create-test.sh new file mode 100755 index 00000000000..793bfd9ef48 --- /dev/null +++ b/vbench/src/tests/create-test.sh @@ -0,0 +1,55 @@ +#!/bin/sh +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +gen_project_file() { + echo "generating '$1' ..." + echo "APPLICATION ${test}_test" > $1 + echo "OBJS ${test}_test" >> $1 + echo "LIBS vbench/test/test" >> $1 + echo "LIBS vbench/vbench" >> $1 + echo "EXTERNALLIBS staging_vespalib" >> $1 + echo "" >> $1 + echo "CUSTOMMAKE" >> $1 + echo "test: ${test}_test" >> $1 + echo -e "\t\$(LDL) \$(VALGRIND) ./${test}_test" >> $1 +} + +gen_source() { + echo "generating '$1' ..." + echo "#include <vespa/vespalib/testkit/testapp.h>" >> $1 + echo "#include <vbench/test/all.h>" >> $1 + echo "" >> $1 + echo "using namespace vbench;" >> $1 + echo "" >> $1 + echo "TEST(\"foo\") {" >> $1 + echo " EXPECT_TRUE(true);" >> $1 + echo "}" >> $1 + echo "" >> $1 + echo "TEST_MAIN() { TEST_RUN_ALL(); }" >> $1 +} + +gen_file_list() { + echo "generating '$1' ..." + echo "${test}_test.cpp" > $1 +} + +if [ $# -ne 1 ]; then + echo "usage: $0 <name>" + echo " name: name of the test to create" + exit 1 +fi + +test=$1 +if [ -e $test ]; then + echo "$test already present, don't want to mess it up..." + exit 1 +fi + +echo "creating directory '$test' ..." +mkdir -p $test || exit 1 +cd $test || exit 1 +test=`basename $test` + +gen_project_file fastos.project +gen_source ${test}_test.cpp +gen_file_list FILES diff --git a/vbench/src/tests/dispatcher/.gitignore b/vbench/src/tests/dispatcher/.gitignore new file mode 100644 index 00000000000..6b038801688 --- /dev/null +++ b/vbench/src/tests/dispatcher/.gitignore @@ -0,0 +1 @@ +vbench_dispatcher_test_app diff --git a/vbench/src/tests/dispatcher/CMakeLists.txt b/vbench/src/tests/dispatcher/CMakeLists.txt new file mode 100644 index 00000000000..0cdc9ffb2d3 --- /dev/null +++ b/vbench/src/tests/dispatcher/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_dispatcher_test_app + SOURCES + dispatcher_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_dispatcher_test_app COMMAND vbench_dispatcher_test_app) diff --git a/vbench/src/tests/dispatcher/FILES b/vbench/src/tests/dispatcher/FILES new file mode 100644 index 00000000000..8e526a62463 --- /dev/null +++ b/vbench/src/tests/dispatcher/FILES @@ -0,0 +1 @@ +dispatcher_test.cpp diff --git a/vbench/src/tests/dispatcher/dispatcher_test.cpp b/vbench/src/tests/dispatcher/dispatcher_test.cpp new file mode 100644 index 00000000000..b4afafdaed5 --- /dev/null +++ b/vbench/src/tests/dispatcher/dispatcher_test.cpp @@ -0,0 +1,60 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +struct MyHandler : public Handler<int> { + int value; + MyHandler() : value(-1) {} + virtual void handle(std::unique_ptr<int> v) { value = (v.get() != 0) ? *v : 0; } +}; + +struct Fetcher : public vespalib::Runnable { + Provider<int> &provider; + Handler<int> &handler; + Fetcher(Provider<int> &p, Handler<int> &h) : provider(p), handler(h) {} + virtual void run() { handler.handle(provider.provide()); } +}; + +TEST("dispatcher") { + MyHandler dropped; + MyHandler handler1; + MyHandler handler2; + Dispatcher<int> dispatcher(dropped); + Fetcher fetcher1(dispatcher, handler1); + Fetcher fetcher2(dispatcher, handler2); + vespalib::Thread thread1(fetcher1); + vespalib::Thread thread2(fetcher2); + thread1.start(); + EXPECT_TRUE(dispatcher.waitForThreads(1, 512)); + thread2.start(); + EXPECT_TRUE(dispatcher.waitForThreads(2, 512)); + EXPECT_EQUAL(-1, dropped.value); + EXPECT_EQUAL(-1, handler1.value); + EXPECT_EQUAL(-1, handler2.value); + dispatcher.handle(std::unique_ptr<int>(new int(1))); + dispatcher.handle(std::unique_ptr<int>(new int(2))); + dispatcher.handle(std::unique_ptr<int>(new int(3))); + thread1.join(); + thread2.join(); + EXPECT_EQUAL(3, dropped.value); + EXPECT_EQUAL(2, handler1.value); + EXPECT_EQUAL(1, handler2.value); + dispatcher.close(); + { + dispatcher.handle(std::unique_ptr<int>(new int(4))); + EXPECT_EQUAL(3, dropped.value); + MyHandler handler3; + Fetcher fetcher3(dispatcher, handler3); + EXPECT_EQUAL(-1, handler3.value); + fetcher3.run(); + EXPECT_EQUAL(0, handler3.value); + } +} + +TEST_FF("dispatcher poll timeout", MyHandler(), Dispatcher<int>(f1)) { + EXPECT_FALSE(f2.waitForThreads(1, 2)); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/dropped_tagger/.gitignore b/vbench/src/tests/dropped_tagger/.gitignore new file mode 100644 index 00000000000..71ef5c44a9d --- /dev/null +++ b/vbench/src/tests/dropped_tagger/.gitignore @@ -0,0 +1 @@ +vbench_dropped_tagger_test_app diff --git a/vbench/src/tests/dropped_tagger/CMakeLists.txt b/vbench/src/tests/dropped_tagger/CMakeLists.txt new file mode 100644 index 00000000000..2fc41839d5d --- /dev/null +++ b/vbench/src/tests/dropped_tagger/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_dropped_tagger_test_app + SOURCES + dropped_tagger_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_dropped_tagger_test_app COMMAND vbench_dropped_tagger_test_app) diff --git a/vbench/src/tests/dropped_tagger/FILES b/vbench/src/tests/dropped_tagger/FILES new file mode 100644 index 00000000000..535abf7ee58 --- /dev/null +++ b/vbench/src/tests/dropped_tagger/FILES @@ -0,0 +1 @@ +dropped_tagger_test.cpp diff --git a/vbench/src/tests/dropped_tagger/dropped_tagger_test.cpp b/vbench/src/tests/dropped_tagger/dropped_tagger_test.cpp new file mode 100644 index 00000000000..60cbf6d03a7 --- /dev/null +++ b/vbench/src/tests/dropped_tagger/dropped_tagger_test.cpp @@ -0,0 +1,15 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST_FF("dropped tagger", RequestReceptor(), DroppedTagger(f1)) { + Request::UP req(new Request()); + EXPECT_EQUAL(Request::STATUS_OK, req->status()); + f2.handle(std::move(req)); + ASSERT_TRUE(f1.request.get() != 0); + EXPECT_EQUAL(Request::STATUS_DROPPED, f1.request->status()); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/handler_thread/.gitignore b/vbench/src/tests/handler_thread/.gitignore new file mode 100644 index 00000000000..41890930291 --- /dev/null +++ b/vbench/src/tests/handler_thread/.gitignore @@ -0,0 +1 @@ +vbench_handler_thread_test_app diff --git a/vbench/src/tests/handler_thread/CMakeLists.txt b/vbench/src/tests/handler_thread/CMakeLists.txt new file mode 100644 index 00000000000..ee69cc594de --- /dev/null +++ b/vbench/src/tests/handler_thread/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_handler_thread_test_app + SOURCES + handler_thread_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_handler_thread_test_app COMMAND vbench_handler_thread_test_app) diff --git a/vbench/src/tests/handler_thread/FILES b/vbench/src/tests/handler_thread/FILES new file mode 100644 index 00000000000..978aa147772 --- /dev/null +++ b/vbench/src/tests/handler_thread/FILES @@ -0,0 +1 @@ +handler_thread_test.cpp diff --git a/vbench/src/tests/handler_thread/handler_thread_test.cpp b/vbench/src/tests/handler_thread/handler_thread_test.cpp new file mode 100644 index 00000000000..43f0c4d4a1b --- /dev/null +++ b/vbench/src/tests/handler_thread/handler_thread_test.cpp @@ -0,0 +1,30 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +struct MyHandler : Handler<int> { + std::vector<int> values; + virtual void handle(std::unique_ptr<int> value) { + values.push_back(*value); + vespalib::Thread::sleep(10); // for improved coverage + } +}; + +TEST("handler thread") { + MyHandler handler; + HandlerThread<int> th(handler); + th.handle(std::unique_ptr<int>(new int(1))); + th.handle(std::unique_ptr<int>(new int(2))); + th.handle(std::unique_ptr<int>(new int(3))); + th.join(); + th.handle(std::unique_ptr<int>(new int(4))); + th.handle(std::unique_ptr<int>(new int(5))); + ASSERT_EQUAL(3u, handler.values.size()); + EXPECT_EQUAL(1, handler.values[0]); + EXPECT_EQUAL(2, handler.values[1]); + EXPECT_EQUAL(3, handler.values[2]); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/hex_number/.gitignore b/vbench/src/tests/hex_number/.gitignore new file mode 100644 index 00000000000..4fef44ee162 --- /dev/null +++ b/vbench/src/tests/hex_number/.gitignore @@ -0,0 +1 @@ +vbench_hex_number_test_app diff --git a/vbench/src/tests/hex_number/CMakeLists.txt b/vbench/src/tests/hex_number/CMakeLists.txt new file mode 100644 index 00000000000..37875434e5e --- /dev/null +++ b/vbench/src/tests/hex_number/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_hex_number_test_app + SOURCES + hex_number_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_hex_number_test_app COMMAND vbench_hex_number_test_app) diff --git a/vbench/src/tests/hex_number/FILES b/vbench/src/tests/hex_number/FILES new file mode 100644 index 00000000000..488979a3169 --- /dev/null +++ b/vbench/src/tests/hex_number/FILES @@ -0,0 +1 @@ +hex_number_test.cpp diff --git a/vbench/src/tests/hex_number/hex_number_test.cpp b/vbench/src/tests/hex_number/hex_number_test.cpp new file mode 100644 index 00000000000..12833814979 --- /dev/null +++ b/vbench/src/tests/hex_number/hex_number_test.cpp @@ -0,0 +1,20 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("hex number") { + EXPECT_EQUAL(0u, HexNumber("").value()); + EXPECT_EQUAL(0u, HexNumber("").length()); + EXPECT_EQUAL(0u, HexNumber("000").value()); + EXPECT_EQUAL(3u, HexNumber("000").length()); + EXPECT_EQUAL(0x1ee7u, HexNumber("1ee7").value()); + EXPECT_EQUAL(0x0123456789abcdefU, HexNumber("0123456789abcdef").value()); + EXPECT_EQUAL(0xfedcba9876543210U, HexNumber("FEDCBA9876543210").value()); + EXPECT_EQUAL(16u, HexNumber("0123456789ABCDEF").length()); + EXPECT_EQUAL(0xdefu, HexNumber("defghijk").value()); + EXPECT_EQUAL(3u, HexNumber("defghijk").length()); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/http_client/.gitignore b/vbench/src/tests/http_client/.gitignore new file mode 100644 index 00000000000..7e86463762c --- /dev/null +++ b/vbench/src/tests/http_client/.gitignore @@ -0,0 +1 @@ +vbench_http_client_test_app diff --git a/vbench/src/tests/http_client/CMakeLists.txt b/vbench/src/tests/http_client/CMakeLists.txt new file mode 100644 index 00000000000..3a01f9712a3 --- /dev/null +++ b/vbench/src/tests/http_client/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_http_client_test_app + SOURCES + http_client_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_http_client_test_app COMMAND vbench_http_client_test_app) diff --git a/vbench/src/tests/http_client/FILES b/vbench/src/tests/http_client/FILES new file mode 100644 index 00000000000..a89979fbcba --- /dev/null +++ b/vbench/src/tests/http_client/FILES @@ -0,0 +1 @@ +http_client_test.cpp diff --git a/vbench/src/tests/http_client/http_client_test.cpp b/vbench/src/tests/http_client/http_client_test.cpp new file mode 100644 index 00000000000..ce763e09b7d --- /dev/null +++ b/vbench/src/tests/http_client/http_client_test.cpp @@ -0,0 +1,119 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +void checkMemory(const string &expect, const Memory &mem) { + EXPECT_EQUAL(expect, string(mem.data, mem.size)); +} + +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) { + ByteInput in(input, 256); + while (!endsWith(buffer.get(), end)) { + int c = in.get(); + if (c < 0) { + return; + } + buffer.reserve(1).data[0] = c; + buffer.commit(1, 0); + } +} + +TEST_MT_F("verify request", 2, ServerSocket()) { + if (thread_id == 0) { + SimpleBuffer expect; + { + BufferedOutput dst(expect, 256); + dst.append("GET /this/is/the/url HTTP/1.1\r\n"); + dst.append("Host: localhost\r\n"); + dst.append("User-Agent: vbench\r\n"); + dst.append("X-Yahoo-Vespa-Benchmarkdata: true\r\n"); + dst.append("X-Yahoo-Vespa-Benchmarkdata-Coverage: true\r\n"); + dst.append("\r\n"); + } + SimpleBuffer actual; + Stream::UP stream = f1.accept(); + 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()), + "/this/is/the/url", handler); + } +} + +TEST_MT_F("verify connection close", 2, ServerSocket()) { + if (thread_id == 0) { + Stream::UP stream = f1.accept(); + SimpleBuffer ignore; + readUntil(*stream, ignore, "\r\n\r\n"); + BufferedOutput out(*stream, 256); + out.append("HTTP/1.0 200\r\n"); + out.append("\r\n"); + out.append("data"); + } else { + SimpleHttpResultHandler handler; + HttpClient::fetch(ServerSpec("localhost", f1.port()), + "/foo", handler); + EXPECT_EQUAL(0u, handler.failures().size()); + EXPECT_EQUAL(0u, handler.headers().size()); + TEST_DO(checkMemory("data", handler.content())); + } +} + +TEST_MT_F("verify content length", 2, ServerSocket()) { + if (thread_id == 0) { + Stream::UP stream = f1.accept(); + SimpleBuffer ignore; + readUntil(*stream, ignore, "\r\n\r\n"); + BufferedOutput out(*stream, 256); + out.append("HTTP/1.1 200\r\n"); + out.append("content-length: 4\r\n"); + out.append("\r\n"); + out.append("data"); + } else { + SimpleHttpResultHandler handler; + HttpClient::fetch(ServerSpec("localhost", f1.port()), + "/foo", handler); + EXPECT_EQUAL(0u, handler.failures().size()); + EXPECT_EQUAL(1u, handler.headers().size()); + TEST_DO(checkMemory("data", handler.content())); + } +} + +TEST_MT_F("verify chunked encoding", 2, ServerSocket()) { + if (thread_id == 0) { + Stream::UP stream = f1.accept(); + SimpleBuffer ignore; + readUntil(*stream, ignore, "\r\n\r\n"); + BufferedOutput out(*stream, 256); + out.append("HTTP/1.1 200\r\n"); + out.append("transfer-encoding: chunked\r\n"); + out.append("\r\n"); + out.append("2\r\n"); + out.append("da\r\n"); + out.append("2\r\n"); + out.append("ta\r\n"); + out.append("0\r\n"); + out.append("\r\n"); + } else { + SimpleHttpResultHandler handler; + HttpClient::fetch(ServerSpec("localhost", f1.port()), + "/foo", handler); + if (handler.failures().size() > 0) { + fprintf(stderr, "failure: %s\n", handler.failures()[0].c_str()); + } + EXPECT_EQUAL(0u, handler.failures().size()); + EXPECT_EQUAL(1u, handler.headers().size()); + TEST_DO(checkMemory("data", handler.content())); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/http_connection/.gitignore b/vbench/src/tests/http_connection/.gitignore new file mode 100644 index 00000000000..9829af0bdba --- /dev/null +++ b/vbench/src/tests/http_connection/.gitignore @@ -0,0 +1 @@ +vbench_http_connection_test_app diff --git a/vbench/src/tests/http_connection/CMakeLists.txt b/vbench/src/tests/http_connection/CMakeLists.txt new file mode 100644 index 00000000000..8d33e8fb1e3 --- /dev/null +++ b/vbench/src/tests/http_connection/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_http_connection_test_app + SOURCES + http_connection_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_http_connection_test_app COMMAND vbench_http_connection_test_app) diff --git a/vbench/src/tests/http_connection/FILES b/vbench/src/tests/http_connection/FILES new file mode 100644 index 00000000000..de51725c9ac --- /dev/null +++ b/vbench/src/tests/http_connection/FILES @@ -0,0 +1 @@ +http_connection_test.cpp diff --git a/vbench/src/tests/http_connection/http_connection_test.cpp b/vbench/src/tests/http_connection/http_connection_test.cpp new file mode 100644 index 00000000000..dc03a9e7e8e --- /dev/null +++ b/vbench/src/tests/http_connection/http_connection_test.cpp @@ -0,0 +1,22 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("http connection") { + ServerSocket serverSocket; + HttpConnection client(ServerSpec("localhost", serverSocket.port())); + Stream::UP server = serverSocket.accept(); + EXPECT_TRUE(client.fresh()); + EXPECT_EQUAL("localhost", client.server().host); + EXPECT_FALSE(client.mayReuse(0.1)); // still fresh + client.touch(5.0); + EXPECT_FALSE(client.fresh()); + EXPECT_TRUE(client.mayReuse(5.1)); + server.reset(); + client.stream().obtain(1, 1); // trigger eof + EXPECT_FALSE(client.mayReuse(5.1)); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/http_connection_pool/.gitignore b/vbench/src/tests/http_connection_pool/.gitignore new file mode 100644 index 00000000000..f9601f89d39 --- /dev/null +++ b/vbench/src/tests/http_connection_pool/.gitignore @@ -0,0 +1 @@ +vbench_http_connection_pool_test_app diff --git a/vbench/src/tests/http_connection_pool/CMakeLists.txt b/vbench/src/tests/http_connection_pool/CMakeLists.txt new file mode 100644 index 00000000000..6ebac01b954 --- /dev/null +++ b/vbench/src/tests/http_connection_pool/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_http_connection_pool_test_app + SOURCES + http_connection_pool_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_http_connection_pool_test_app COMMAND vbench_http_connection_pool_test_app) diff --git a/vbench/src/tests/http_connection_pool/FILES b/vbench/src/tests/http_connection_pool/FILES new file mode 100644 index 00000000000..1bc5c1cc463 --- /dev/null +++ b/vbench/src/tests/http_connection_pool/FILES @@ -0,0 +1 @@ +http_connection_pool_test.cpp 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 new file mode 100644 index 00000000000..06f158e7b84 --- /dev/null +++ b/vbench/src/tests/http_connection_pool/http_connection_pool_test.cpp @@ -0,0 +1,55 @@ +// Copyright 2016 Yahoo Inc. 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/util/sync.h> + +using namespace vbench; +using vespalib::CountDownLatch; + +TEST_MT_F("http connection pool", 2, ServerSocket()) { + if (thread_id == 0) { + for (; f1.accept().get() != 0; ) {} + } else { + Timer timer; + HttpConnection::UP conn; + HttpConnectionPool pool(timer); + conn = pool.getConnection(ServerSpec("localhost", f1.port())); + EXPECT_TRUE(conn.get() != 0); + pool.putConnection(std::move(conn)); + EXPECT_TRUE(conn.get() == 0); + conn = pool.getConnection(ServerSpec("localhost", f1.port())); + EXPECT_TRUE(conn.get() != 0); + conn->stream().obtain(1, 1); // trigger eof + pool.putConnection(std::move(conn)); + EXPECT_TRUE(conn.get() == 0); + conn = pool.getConnection(ServerSpec("localhost", f1.port())); + EXPECT_TRUE(conn.get() != 0); + f1.close(); + } +} + +TEST_MT_FFFF("stress http connection pool", 256, ServerSocket(), Timer(), HttpConnectionPool(f2), + CountDownLatch(num_threads-2)) +{ + if (thread_id == 0) { + for (; f1.accept().get() != 0; ) {} + } else { + while (f2.sample() < 5.0) { + HttpConnection::UP conn = f3.getConnection(ServerSpec("localhost", f1.port())); + EXPECT_TRUE(conn.get() != 0); + if (thread_id > (num_threads / 2)) { + conn->stream().obtain(1, 1); // trigger eof + } + f3.putConnection(std::move(conn)); + EXPECT_TRUE(conn.get() == 0); + } + if (thread_id == 1) { + f4.await(); + f1.close(); + } else { + f4.countDown(); + } + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/input_file_reader/.gitignore b/vbench/src/tests/input_file_reader/.gitignore new file mode 100644 index 00000000000..a8f6e9d2af4 --- /dev/null +++ b/vbench/src/tests/input_file_reader/.gitignore @@ -0,0 +1 @@ +vbench_input_file_reader_test_app diff --git a/vbench/src/tests/input_file_reader/CMakeLists.txt b/vbench/src/tests/input_file_reader/CMakeLists.txt new file mode 100644 index 00000000000..ac4ded756f9 --- /dev/null +++ b/vbench/src/tests/input_file_reader/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_input_file_reader_test_app + SOURCES + input_file_reader_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_input_file_reader_test_app COMMAND vbench_input_file_reader_test_app) diff --git a/vbench/src/tests/input_file_reader/FILES b/vbench/src/tests/input_file_reader/FILES new file mode 100644 index 00000000000..46b97e37a9d --- /dev/null +++ b/vbench/src/tests/input_file_reader/FILES @@ -0,0 +1,3 @@ +input_file_reader_test.cpp +simple_test_input.txt +hard_test_input.txt diff --git a/vbench/src/tests/input_file_reader/hard_test_input.txt b/vbench/src/tests/input_file_reader/hard_test_input.txt new file mode 100644 index 00000000000..8144450a5c7 --- /dev/null +++ b/vbench/src/tests/input_file_reader/hard_test_input.txt @@ -0,0 +1,5 @@ +foo + +bar
+baz +
\ No newline at end of file diff --git a/vbench/src/tests/input_file_reader/input_file_reader_test.cpp b/vbench/src/tests/input_file_reader/input_file_reader_test.cpp new file mode 100644 index 00000000000..2cf59dff1ec --- /dev/null +++ b/vbench/src/tests/input_file_reader/input_file_reader_test.cpp @@ -0,0 +1,42 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("input file reader") { + { + InputFileReader reader("not_found.txt"); + EXPECT_TRUE(reader.tainted()); + } + { + InputFileReader reader("simple_test_input.txt"); + EXPECT_TRUE(!reader.tainted()); + string line; + EXPECT_TRUE(reader.readLine(line)); + EXPECT_EQUAL("foo", line); + EXPECT_TRUE(reader.readLine(line)); + EXPECT_EQUAL("bar", line); + EXPECT_TRUE(reader.readLine(line)); + EXPECT_EQUAL("baz", line); + EXPECT_TRUE(!reader.readLine(line)); + TEST_FLUSH(); + } + { + InputFileReader reader("hard_test_input.txt"); + EXPECT_TRUE(!reader.tainted()); + string line; + EXPECT_TRUE(reader.readLine(line)); + EXPECT_EQUAL("foo", line); + EXPECT_TRUE(reader.readLine(line)); + EXPECT_EQUAL("bar", line); + EXPECT_TRUE(reader.readLine(line)); + EXPECT_EQUAL("baz", line); + EXPECT_TRUE(reader.readLine(line)); + EXPECT_EQUAL("\r", line); + EXPECT_TRUE(!reader.readLine(line)); + TEST_FLUSH(); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/input_file_reader/simple_test_input.txt b/vbench/src/tests/input_file_reader/simple_test_input.txt new file mode 100644 index 00000000000..86e041dad66 --- /dev/null +++ b/vbench/src/tests/input_file_reader/simple_test_input.txt @@ -0,0 +1,3 @@ +foo +bar +baz diff --git a/vbench/src/tests/input_reader/.gitignore b/vbench/src/tests/input_reader/.gitignore new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/vbench/src/tests/input_reader/.gitignore diff --git a/vbench/src/tests/latency_analyzer/.gitignore b/vbench/src/tests/latency_analyzer/.gitignore new file mode 100644 index 00000000000..c82c48eb1f6 --- /dev/null +++ b/vbench/src/tests/latency_analyzer/.gitignore @@ -0,0 +1 @@ +vbench_latency_analyzer_test_app diff --git a/vbench/src/tests/latency_analyzer/CMakeLists.txt b/vbench/src/tests/latency_analyzer/CMakeLists.txt new file mode 100644 index 00000000000..01fbb5c3d5c --- /dev/null +++ b/vbench/src/tests/latency_analyzer/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_latency_analyzer_test_app + SOURCES + latency_analyzer_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_latency_analyzer_test_app COMMAND vbench_latency_analyzer_test_app) diff --git a/vbench/src/tests/latency_analyzer/FILES b/vbench/src/tests/latency_analyzer/FILES new file mode 100644 index 00000000000..4d90bfb352d --- /dev/null +++ b/vbench/src/tests/latency_analyzer/FILES @@ -0,0 +1 @@ +latency_analyzer_test.cpp diff --git a/vbench/src/tests/latency_analyzer/latency_analyzer_test.cpp b/vbench/src/tests/latency_analyzer/latency_analyzer_test.cpp new file mode 100644 index 00000000000..39d12420415 --- /dev/null +++ b/vbench/src/tests/latency_analyzer/latency_analyzer_test.cpp @@ -0,0 +1,36 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +void post(double latency, Handler<Request> &handler, + double startTime = 0.0, Request::Status status = Request::STATUS_OK) +{ + Request::UP req(new Request()); + req->status(status).startTime(startTime).endTime(startTime + latency); + handler.handle(std::move(req)); +} + +TEST_FF("require that only OK requests are counted", RequestSink(), LatencyAnalyzer(f1)) { + post(1.0, f2); + post(2.0, f2, 3.0); + post(10.0, f2, 0.0, Request::STATUS_DROPPED); + post(20.0, f2, 0.0, Request::STATUS_FAILED); + EXPECT_APPROX(1.0, f2.getStats().min, 10e-6); + EXPECT_APPROX(1.5, f2.getStats().avg, 10e-6); + EXPECT_APPROX(2.0, f2.getStats().max, 10e-6); +} + +TEST_FF("verify percentiles", RequestSink(), LatencyAnalyzer(f1)) { + for (size_t i = 0; i <= 10000; ++i) { + post(0.001 * i, f2); + } + LatencyAnalyzer::Stats stats = f2.getStats(); + EXPECT_APPROX(5.0, stats.per50, 10e-6); + EXPECT_APPROX(9.5, stats.per95, 10e-6); + EXPECT_APPROX(9.9, stats.per99, 10e-6); + fprintf(stderr, "%s", stats.toString().c_str()); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/line_reader/.gitignore b/vbench/src/tests/line_reader/.gitignore new file mode 100644 index 00000000000..01fa87fd5f8 --- /dev/null +++ b/vbench/src/tests/line_reader/.gitignore @@ -0,0 +1 @@ +vbench_line_reader_test_app diff --git a/vbench/src/tests/line_reader/CMakeLists.txt b/vbench/src/tests/line_reader/CMakeLists.txt new file mode 100644 index 00000000000..5235d4dfe12 --- /dev/null +++ b/vbench/src/tests/line_reader/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_line_reader_test_app + SOURCES + line_reader_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_line_reader_test_app COMMAND vbench_line_reader_test_app) diff --git a/vbench/src/tests/line_reader/FILES b/vbench/src/tests/line_reader/FILES new file mode 100644 index 00000000000..2611646033f --- /dev/null +++ b/vbench/src/tests/line_reader/FILES @@ -0,0 +1 @@ +line_reader_test.cpp diff --git a/vbench/src/tests/line_reader/line_reader_test.cpp b/vbench/src/tests/line_reader/line_reader_test.cpp new file mode 100644 index 00000000000..631b2ffc765 --- /dev/null +++ b/vbench/src/tests/line_reader/line_reader_test.cpp @@ -0,0 +1,38 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("line reader") { + SimpleBuffer buffer; + { + BufferedOutput dst(buffer, 64); + dst.append("foo\n"); + dst.append("bar\r\n"); + dst.append("\n"); + dst.append("\rbaz\n"); + dst.append("\r\n"); + dst.append("zzz"); + } + { + LineReader src(buffer, 3); + string str; + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("foo", str); + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("bar", str); + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("", str); + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("\rbaz", str); + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("", str); + EXPECT_TRUE(src.readLine(str)); + EXPECT_EQUAL("zzz", str); + EXPECT_TRUE(!src.readLine(str)); + EXPECT_EQUAL("", str); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/mapped_file_input/.gitignore b/vbench/src/tests/mapped_file_input/.gitignore new file mode 100644 index 00000000000..99fcc66eeab --- /dev/null +++ b/vbench/src/tests/mapped_file_input/.gitignore @@ -0,0 +1 @@ +vbench_mapped_file_input_test_app diff --git a/vbench/src/tests/mapped_file_input/CMakeLists.txt b/vbench/src/tests/mapped_file_input/CMakeLists.txt new file mode 100644 index 00000000000..de7cbb7c89d --- /dev/null +++ b/vbench/src/tests/mapped_file_input/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_mapped_file_input_test_app + SOURCES + mapped_file_input_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_mapped_file_input_test_app COMMAND vbench_mapped_file_input_test_app) diff --git a/vbench/src/tests/mapped_file_input/FILES b/vbench/src/tests/mapped_file_input/FILES new file mode 100644 index 00000000000..55eddab2a7a --- /dev/null +++ b/vbench/src/tests/mapped_file_input/FILES @@ -0,0 +1,2 @@ +mapped_file_input_test.cpp +file.txt diff --git a/vbench/src/tests/mapped_file_input/file.txt b/vbench/src/tests/mapped_file_input/file.txt new file mode 100644 index 00000000000..dd59d098638 --- /dev/null +++ b/vbench/src/tests/mapped_file_input/file.txt @@ -0,0 +1 @@ +file content diff --git a/vbench/src/tests/mapped_file_input/mapped_file_input_test.cpp b/vbench/src/tests/mapped_file_input/mapped_file_input_test.cpp new file mode 100644 index 00000000000..5044f5401e1 --- /dev/null +++ b/vbench/src/tests/mapped_file_input/mapped_file_input_test.cpp @@ -0,0 +1,23 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("mapped file input") { + { + MappedFileInput file("not_found.txt"); + EXPECT_TRUE(file.tainted()); + } + { + MappedFileInput file("file.txt"); + EXPECT_TRUE(!file.tainted()); + LineReader reader(file, 3); + string line; + EXPECT_TRUE(reader.readLine(line)); + EXPECT_EQUAL("file content", line); + EXPECT_TRUE(!reader.readLine(line)); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/memory/.gitignore b/vbench/src/tests/memory/.gitignore new file mode 100644 index 00000000000..e1fd81a3e7c --- /dev/null +++ b/vbench/src/tests/memory/.gitignore @@ -0,0 +1 @@ +vbench_memory_test_app diff --git a/vbench/src/tests/memory/CMakeLists.txt b/vbench/src/tests/memory/CMakeLists.txt new file mode 100644 index 00000000000..bcdaf55f4a1 --- /dev/null +++ b/vbench/src/tests/memory/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_memory_test_app + SOURCES + memory_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_memory_test_app COMMAND vbench_memory_test_app) diff --git a/vbench/src/tests/memory/FILES b/vbench/src/tests/memory/FILES new file mode 100644 index 00000000000..3627eec5ec7 --- /dev/null +++ b/vbench/src/tests/memory/FILES @@ -0,0 +1 @@ +memory_test.cpp diff --git a/vbench/src/tests/memory/memory_test.cpp b/vbench/src/tests/memory/memory_test.cpp new file mode 100644 index 00000000000..9504914d191 --- /dev/null +++ b/vbench/src/tests/memory/memory_test.cpp @@ -0,0 +1,40 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("empty memory") { + Memory m; + EXPECT_EQUAL((const char*)0, m.data); + EXPECT_EQUAL(0u, m.size); +} + +TEST("from string") { + string str("foo"); + Memory m1(str); + Memory m2 = str; + EXPECT_EQUAL(str.data(), m1.data); + EXPECT_EQUAL(str.size(), m1.size); + EXPECT_EQUAL(str.data(), m2.data); + EXPECT_EQUAL(str.size(), m2.size); +} + +TEST("from cstring") { + const char *str = "foo"; + Memory m1(str); + Memory m2 = str; + EXPECT_EQUAL(str, m1.data); + EXPECT_EQUAL(strlen(str), m1.size); + EXPECT_EQUAL(str, m2.data); + EXPECT_EQUAL(strlen(str), m2.size); +} + +TEST("from ptr and len") { + string str("foo"); + Memory m1(str.data(), str.size()); + EXPECT_EQUAL(str.data(), m1.data); + EXPECT_EQUAL(str.size(), m1.size); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/qps_analyzer/.gitignore b/vbench/src/tests/qps_analyzer/.gitignore new file mode 100644 index 00000000000..0651de34c3c --- /dev/null +++ b/vbench/src/tests/qps_analyzer/.gitignore @@ -0,0 +1 @@ +vbench_qps_analyzer_test_app diff --git a/vbench/src/tests/qps_analyzer/CMakeLists.txt b/vbench/src/tests/qps_analyzer/CMakeLists.txt new file mode 100644 index 00000000000..b4167511665 --- /dev/null +++ b/vbench/src/tests/qps_analyzer/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_qps_analyzer_test_app + SOURCES + qps_analyzer_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_qps_analyzer_test_app COMMAND vbench_qps_analyzer_test_app) diff --git a/vbench/src/tests/qps_analyzer/FILES b/vbench/src/tests/qps_analyzer/FILES new file mode 100644 index 00000000000..978efc5eafd --- /dev/null +++ b/vbench/src/tests/qps_analyzer/FILES @@ -0,0 +1 @@ +qps_analyzer_test.cpp diff --git a/vbench/src/tests/qps_analyzer/qps_analyzer_test.cpp b/vbench/src/tests/qps_analyzer/qps_analyzer_test.cpp new file mode 100644 index 00000000000..4de340fcf29 --- /dev/null +++ b/vbench/src/tests/qps_analyzer/qps_analyzer_test.cpp @@ -0,0 +1,23 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +void post(double endTime, Handler<Request> &handler, + Request::Status status = Request::STATUS_OK) +{ + Request::UP req(new Request()); + req->status(status).endTime(endTime); + handler.handle(std::move(req)); +} + +TEST_FF("simulate 100 qps", RequestSink(), QpsAnalyzer(f1)) { + for (size_t i = 1; i < 10000; ++i) { + post(i * 0.01, f2); + post(i * 0.01, f2, Request::STATUS_DROPPED); + post(i * 0.01, f2, Request::STATUS_FAILED); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/qps_tagger/.gitignore b/vbench/src/tests/qps_tagger/.gitignore new file mode 100644 index 00000000000..91701521f51 --- /dev/null +++ b/vbench/src/tests/qps_tagger/.gitignore @@ -0,0 +1 @@ +vbench_qps_tagger_test_app diff --git a/vbench/src/tests/qps_tagger/CMakeLists.txt b/vbench/src/tests/qps_tagger/CMakeLists.txt new file mode 100644 index 00000000000..2538de07b8f --- /dev/null +++ b/vbench/src/tests/qps_tagger/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_qps_tagger_test_app + SOURCES + qps_tagger_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_qps_tagger_test_app COMMAND vbench_qps_tagger_test_app) diff --git a/vbench/src/tests/qps_tagger/FILES b/vbench/src/tests/qps_tagger/FILES new file mode 100644 index 00000000000..9fbf5764e52 --- /dev/null +++ b/vbench/src/tests/qps_tagger/FILES @@ -0,0 +1 @@ +qps_tagger_test.cpp diff --git a/vbench/src/tests/qps_tagger/qps_tagger_test.cpp b/vbench/src/tests/qps_tagger/qps_tagger_test.cpp new file mode 100644 index 00000000000..34ae5082298 --- /dev/null +++ b/vbench/src/tests/qps_tagger/qps_tagger_test.cpp @@ -0,0 +1,22 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST_FF("qps tagger", RequestReceptor(), QpsTagger(2.0, f1)) { + f2.handle(Request::UP(new Request())); + ASSERT_TRUE(f1.request.get() != 0); + EXPECT_APPROX(0.0, f1.request->scheduledTime(), 10e-6); + f2.handle(Request::UP(new Request())); + ASSERT_TRUE(f1.request.get() != 0); + EXPECT_APPROX(0.5, f1.request->scheduledTime(), 10e-6); + f2.handle(Request::UP(new Request())); + ASSERT_TRUE(f1.request.get() != 0); + EXPECT_APPROX(1.0, f1.request->scheduledTime(), 10e-6); + f2.handle(Request::UP(new Request())); + ASSERT_TRUE(f1.request.get() != 0); + EXPECT_APPROX(1.5, f1.request->scheduledTime(), 10e-6); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/request_dumper/.gitignore b/vbench/src/tests/request_dumper/.gitignore new file mode 100644 index 00000000000..dec2573b121 --- /dev/null +++ b/vbench/src/tests/request_dumper/.gitignore @@ -0,0 +1 @@ +vbench_request_dumper_test_app diff --git a/vbench/src/tests/request_dumper/CMakeLists.txt b/vbench/src/tests/request_dumper/CMakeLists.txt new file mode 100644 index 00000000000..08cd6f12ebe --- /dev/null +++ b/vbench/src/tests/request_dumper/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_request_dumper_test_app + SOURCES + request_dumper_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_request_dumper_test_app COMMAND vbench_request_dumper_test_app) diff --git a/vbench/src/tests/request_dumper/FILES b/vbench/src/tests/request_dumper/FILES new file mode 100644 index 00000000000..24fc66cc387 --- /dev/null +++ b/vbench/src/tests/request_dumper/FILES @@ -0,0 +1 @@ +request_dumper_test.cpp diff --git a/vbench/src/tests/request_dumper/request_dumper_test.cpp b/vbench/src/tests/request_dumper/request_dumper_test.cpp new file mode 100644 index 00000000000..4ca98bb4c90 --- /dev/null +++ b/vbench/src/tests/request_dumper/request_dumper_test.cpp @@ -0,0 +1,11 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST_FF("dump request", RequestSink(), RequestDumper(f1)) { + f2.handle(Request::UP(new Request())); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/request_generator/.gitignore b/vbench/src/tests/request_generator/.gitignore new file mode 100644 index 00000000000..8ec28a2df32 --- /dev/null +++ b/vbench/src/tests/request_generator/.gitignore @@ -0,0 +1 @@ +vbench_request_generator_test_app diff --git a/vbench/src/tests/request_generator/CMakeLists.txt b/vbench/src/tests/request_generator/CMakeLists.txt new file mode 100644 index 00000000000..a59029055d0 --- /dev/null +++ b/vbench/src/tests/request_generator/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_request_generator_test_app + SOURCES + request_generator_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_request_generator_test_app COMMAND vbench_request_generator_test_app) diff --git a/vbench/src/tests/request_generator/FILES b/vbench/src/tests/request_generator/FILES new file mode 100644 index 00000000000..2afbcd6ec35 --- /dev/null +++ b/vbench/src/tests/request_generator/FILES @@ -0,0 +1,2 @@ +request_generator_test.cpp +input.txt diff --git a/vbench/src/tests/request_generator/input.txt b/vbench/src/tests/request_generator/input.txt new file mode 100644 index 00000000000..259b0f7250f --- /dev/null +++ b/vbench/src/tests/request_generator/input.txt @@ -0,0 +1 @@ +/this/is/url diff --git a/vbench/src/tests/request_generator/request_generator_test.cpp b/vbench/src/tests/request_generator/request_generator_test.cpp new file mode 100644 index 00000000000..52aca22954c --- /dev/null +++ b/vbench/src/tests/request_generator/request_generator_test.cpp @@ -0,0 +1,27 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST_FF("generate request", RequestReceptor(), RequestGenerator("input.txt", f1)) { + f2.run(); + ASSERT_TRUE(f1.request.get() != 0); + EXPECT_EQUAL("/this/is/url", f1.request->url()); + EXPECT_FALSE(f2.tainted()); +} + +TEST_FF("input not found", RequestReceptor(), RequestGenerator("no_such_input.txt", f1)) { + f2.run(); + EXPECT_TRUE(f1.request.get() == 0); + EXPECT_TRUE(f2.tainted()); +} + +TEST_FF("abort request generation", RequestReceptor(), RequestGenerator("input.txt", f1)) { + f2.abort(); + f2.run(); + EXPECT_TRUE(f1.request.get() == 0); + EXPECT_FALSE(f2.tainted()); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/request_sink/.gitignore b/vbench/src/tests/request_sink/.gitignore new file mode 100644 index 00000000000..82dd828954e --- /dev/null +++ b/vbench/src/tests/request_sink/.gitignore @@ -0,0 +1 @@ +vbench_request_sink_test_app diff --git a/vbench/src/tests/request_sink/CMakeLists.txt b/vbench/src/tests/request_sink/CMakeLists.txt new file mode 100644 index 00000000000..4b184c25f91 --- /dev/null +++ b/vbench/src/tests/request_sink/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_request_sink_test_app + SOURCES + request_sink_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_request_sink_test_app COMMAND vbench_request_sink_test_app) diff --git a/vbench/src/tests/request_sink/FILES b/vbench/src/tests/request_sink/FILES new file mode 100644 index 00000000000..77c3c4b8273 --- /dev/null +++ b/vbench/src/tests/request_sink/FILES @@ -0,0 +1 @@ +request_sink_test.cpp diff --git a/vbench/src/tests/request_sink/request_sink_test.cpp b/vbench/src/tests/request_sink/request_sink_test.cpp new file mode 100644 index 00000000000..aa281d2a3cb --- /dev/null +++ b/vbench/src/tests/request_sink/request_sink_test.cpp @@ -0,0 +1,11 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST_F("put a request into the sink, where does it go, nobody cares", RequestSink()) { + f1.handle(Request::UP(new Request())); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/runnable_pair/.gitignore b/vbench/src/tests/runnable_pair/.gitignore new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/vbench/src/tests/runnable_pair/.gitignore diff --git a/vbench/src/tests/server_socket/.gitignore b/vbench/src/tests/server_socket/.gitignore new file mode 100644 index 00000000000..e79511c3a0a --- /dev/null +++ b/vbench/src/tests/server_socket/.gitignore @@ -0,0 +1 @@ +vbench_server_socket_test_app diff --git a/vbench/src/tests/server_socket/CMakeLists.txt b/vbench/src/tests/server_socket/CMakeLists.txt new file mode 100644 index 00000000000..1077d7d0525 --- /dev/null +++ b/vbench/src/tests/server_socket/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_server_socket_test_app + SOURCES + server_socket_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_server_socket_test_app COMMAND vbench_server_socket_test_app) diff --git a/vbench/src/tests/server_socket/FILES b/vbench/src/tests/server_socket/FILES new file mode 100644 index 00000000000..47bee2d3769 --- /dev/null +++ b/vbench/src/tests/server_socket/FILES @@ -0,0 +1 @@ +server_socket_test.cpp diff --git a/vbench/src/tests/server_socket/server_socket_test.cpp b/vbench/src/tests/server_socket/server_socket_test.cpp new file mode 100644 index 00000000000..575c7dfaa02 --- /dev/null +++ b/vbench/src/tests/server_socket/server_socket_test.cpp @@ -0,0 +1,24 @@ +// Copyright 2016 Yahoo Inc. 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/util/thread.h> + +using namespace vbench; + +TEST_MT_F("require that close will interrupt accept", 2, ServerSocket()) { + if (thread_id == 0) { + for (;;) { + Stream::UP stream = f1.accept(); + if (stream.get() == 0) { + break; + } + } + Stream::UP s2 = f1.accept(); + EXPECT_TRUE(s2.get() == 0); + } else { + vespalib::Thread::sleep(20); + f1.close(); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/server_spec/.gitignore b/vbench/src/tests/server_spec/.gitignore new file mode 100644 index 00000000000..635947d28a8 --- /dev/null +++ b/vbench/src/tests/server_spec/.gitignore @@ -0,0 +1 @@ +vbench_server_spec_test_app diff --git a/vbench/src/tests/server_spec/CMakeLists.txt b/vbench/src/tests/server_spec/CMakeLists.txt new file mode 100644 index 00000000000..a43d2c80dde --- /dev/null +++ b/vbench/src/tests/server_spec/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_server_spec_test_app + SOURCES + server_spec_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_server_spec_test_app COMMAND vbench_server_spec_test_app) diff --git a/vbench/src/tests/server_spec/FILES b/vbench/src/tests/server_spec/FILES new file mode 100644 index 00000000000..34e52a9f86e --- /dev/null +++ b/vbench/src/tests/server_spec/FILES @@ -0,0 +1 @@ +server_spec_test.cpp diff --git a/vbench/src/tests/server_spec/server_spec_test.cpp b/vbench/src/tests/server_spec/server_spec_test.cpp new file mode 100644 index 00000000000..a254e5f8101 --- /dev/null +++ b/vbench/src/tests/server_spec/server_spec_test.cpp @@ -0,0 +1,38 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("empty") { + ServerSpec spec; + EXPECT_EQUAL("", spec.host); + EXPECT_EQUAL(0, spec.port); +} + +TEST("standard") { + ServerSpec spec("foo", 3); + EXPECT_EQUAL("foo", spec.host); + EXPECT_EQUAL(3, spec.port); +} + +TEST("compare") { + ServerSpec spec0("foo", 3); + ServerSpec spec1("foo", 3); + ServerSpec spec2("bar", 3); + ServerSpec spec3("foo", 4); + ServerSpec spec4("bar", 4); + EXPECT_TRUE(spec0 == spec1); + EXPECT_TRUE(spec1 == spec0); + EXPECT_FALSE(spec0 == spec2); + EXPECT_FALSE(spec2 == spec0); + EXPECT_TRUE(spec2 < spec0); + EXPECT_TRUE(spec0 < spec3); + EXPECT_TRUE(spec0 < spec4); + EXPECT_FALSE(spec0 < spec1); + EXPECT_FALSE(spec0 < spec2); + EXPECT_FALSE(spec3 < spec0); + EXPECT_FALSE(spec4 < spec0); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/server_tagger/.gitignore b/vbench/src/tests/server_tagger/.gitignore new file mode 100644 index 00000000000..3ade58a58d5 --- /dev/null +++ b/vbench/src/tests/server_tagger/.gitignore @@ -0,0 +1 @@ +vbench_server_tagger_test_app diff --git a/vbench/src/tests/server_tagger/CMakeLists.txt b/vbench/src/tests/server_tagger/CMakeLists.txt new file mode 100644 index 00000000000..d7cc0bdbea9 --- /dev/null +++ b/vbench/src/tests/server_tagger/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_server_tagger_test_app + SOURCES + server_tagger_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_server_tagger_test_app COMMAND vbench_server_tagger_test_app) diff --git a/vbench/src/tests/server_tagger/FILES b/vbench/src/tests/server_tagger/FILES new file mode 100644 index 00000000000..b632f6e6916 --- /dev/null +++ b/vbench/src/tests/server_tagger/FILES @@ -0,0 +1 @@ +server_tagger_test.cpp diff --git a/vbench/src/tests/server_tagger/server_tagger_test.cpp b/vbench/src/tests/server_tagger/server_tagger_test.cpp new file mode 100644 index 00000000000..461ddffc124 --- /dev/null +++ b/vbench/src/tests/server_tagger/server_tagger_test.cpp @@ -0,0 +1,17 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST_FF("server tagger", RequestReceptor(), ServerTagger(ServerSpec("host", 42), f1)) { + Request::UP req(new Request()); + EXPECT_EQUAL("", req->server().host); + EXPECT_EQUAL(0, req->server().port); + f2.handle(std::move(req)); + ASSERT_TRUE(f1.request.get() != 0); + EXPECT_EQUAL("host", f1.request->server().host); + EXPECT_EQUAL(42, f1.request->server().port); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/simple_buffer/.gitignore b/vbench/src/tests/simple_buffer/.gitignore new file mode 100644 index 00000000000..f40426a6708 --- /dev/null +++ b/vbench/src/tests/simple_buffer/.gitignore @@ -0,0 +1 @@ +vbench_simple_buffer_test_app diff --git a/vbench/src/tests/simple_buffer/CMakeLists.txt b/vbench/src/tests/simple_buffer/CMakeLists.txt new file mode 100644 index 00000000000..dd8da993c0b --- /dev/null +++ b/vbench/src/tests/simple_buffer/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_simple_buffer_test_app + SOURCES + simple_buffer_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_simple_buffer_test_app COMMAND vbench_simple_buffer_test_app) diff --git a/vbench/src/tests/simple_buffer/FILES b/vbench/src/tests/simple_buffer/FILES new file mode 100644 index 00000000000..3669f575911 --- /dev/null +++ b/vbench/src/tests/simple_buffer/FILES @@ -0,0 +1 @@ +simple_buffer_test.cpp diff --git a/vbench/src/tests/simple_buffer/simple_buffer_test.cpp b/vbench/src/tests/simple_buffer/simple_buffer_test.cpp new file mode 100644 index 00000000000..f666438d721 --- /dev/null +++ b/vbench/src/tests/simple_buffer/simple_buffer_test.cpp @@ -0,0 +1,70 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +void checkMemory(const string &expect, const Memory &mem) { + EXPECT_EQUAL(expect, string(mem.data, mem.size)); +} + +void checkBuffer(const string &expect, const SimpleBuffer &buf) { + TEST_DO(checkMemory(expect, buf.get())); +} + +TEST("simple buffer") { + SimpleBuffer buf; + TEST_DO(checkBuffer("", buf)); + { // read from empty buffer + EXPECT_EQUAL(0u, buf.obtain(1, 1).size); + } + { // write to buffer + WritableMemory mem = buf.reserve(10); + TEST_DO(checkBuffer("", buf)); + EXPECT_EQUAL(10u, mem.size); + mem.data[0] = 'a'; + mem.data[1] = 'b'; + mem.data[2] = 'c'; + EXPECT_EQUAL(&buf, &buf.commit(3, 0)); + mem = buf.reserve(0); + TEST_DO(checkBuffer("abc", buf)); + EXPECT_EQUAL(0u, mem.size); + } + { // unaligned read across end (last byte not evicted) + Memory mem = buf.obtain(2, 1); + TEST_DO(checkBuffer("abc", buf)); + TEST_DO(checkMemory("ab", mem)); + EXPECT_EQUAL(&buf, &buf.evict(2)); + mem = buf.obtain(2, 1); + TEST_DO(checkBuffer("c", buf)); + TEST_DO(checkMemory("c", mem)); + mem = buf.obtain(2, 1); + TEST_DO(checkBuffer("c", buf)); + TEST_DO(checkMemory("c", mem)); + } + { // write more to buffer + WritableMemory mem = buf.reserve(10); + EXPECT_EQUAL(10u, mem.size); + TEST_DO(checkBuffer("c", buf)); + mem.data[0] = 'd'; + EXPECT_EQUAL(&buf, &buf.commit(1, 0)); + mem = buf.reserve(5); + TEST_DO(checkBuffer("cd", buf)); + EXPECT_EQUAL(5u, mem.size); + } + { // aligned read until end + Memory mem = buf.obtain(1, 1); + TEST_DO(checkBuffer("cd", buf)); + TEST_DO(checkMemory("c", mem)); + EXPECT_EQUAL(&buf, &buf.evict(1)); + mem = buf.obtain(1, 1); + TEST_DO(checkBuffer("d", buf)); + TEST_DO(checkMemory("d", mem)); + EXPECT_EQUAL(&buf, &buf.evict(1)); + mem = buf.obtain(1, 1); + TEST_DO(checkBuffer("", buf)); + TEST_DO(checkMemory("", mem)); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/socket/.gitignore b/vbench/src/tests/socket/.gitignore new file mode 100644 index 00000000000..da032fba4cc --- /dev/null +++ b/vbench/src/tests/socket/.gitignore @@ -0,0 +1 @@ +vbench_socket_test_app diff --git a/vbench/src/tests/socket/CMakeLists.txt b/vbench/src/tests/socket/CMakeLists.txt new file mode 100644 index 00000000000..6ede77e5d63 --- /dev/null +++ b/vbench/src/tests/socket/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_socket_test_app + SOURCES + socket_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_socket_test_app COMMAND vbench_socket_test_app) diff --git a/vbench/src/tests/socket/FILES b/vbench/src/tests/socket/FILES new file mode 100644 index 00000000000..d9051f5e248 --- /dev/null +++ b/vbench/src/tests/socket/FILES @@ -0,0 +1 @@ +socket_test.cpp diff --git a/vbench/src/tests/socket/socket_test.cpp b/vbench/src/tests/socket/socket_test.cpp new file mode 100644 index 00000000000..4e58465c5a8 --- /dev/null +++ b/vbench/src/tests/socket/socket_test.cpp @@ -0,0 +1,72 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +const size_t numLines = 100; + +struct Agent { + Stream::UP socket; + Agent(Stream::UP s) : socket(std::move(s)) {} + void write(const char *prefix) { + BufferedOutput out(*socket, 32); + for (size_t i = 0; i < numLines; ++i) { + out.printf("%s%zu\n", prefix, i); + } + out.append("\n"); + } + void read(const char *prefix) { + LineReader reader(*socket, 32); + for (size_t lines = 0; true; ++lines) { + string line; + reader.readLine(line); + if (line.empty()) { + EXPECT_EQUAL(numLines, lines); + break; + } + EXPECT_EQUAL(strfmt("%s%zu", prefix, lines), line); + } + } +}; + +struct Client : public Agent, public vespalib::Runnable { + Client(Stream::UP s) : Agent(std::move(s)) {} + virtual void run() { + TEST_THREAD("client"); + write("client-"); + read("server-"); + } +}; + +struct Server : public Agent, public vespalib::Runnable { + Server(Stream::UP s) : Agent(std::move(s)) {} + virtual void run() { + 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(); + LineReader reader(*client.socket, 32); + string line; + EXPECT_FALSE(reader.readLine(line)); + EXPECT_TRUE(line.empty()); + EXPECT_TRUE(client.socket->eof()); + EXPECT_FALSE(client.socket->tainted()); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/taint/.gitignore b/vbench/src/tests/taint/.gitignore new file mode 100644 index 00000000000..ed8a6bdc417 --- /dev/null +++ b/vbench/src/tests/taint/.gitignore @@ -0,0 +1 @@ +vbench_taint_test_app diff --git a/vbench/src/tests/taint/CMakeLists.txt b/vbench/src/tests/taint/CMakeLists.txt new file mode 100644 index 00000000000..7dd23e62020 --- /dev/null +++ b/vbench/src/tests/taint/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_taint_test_app + SOURCES + taint_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_taint_test_app COMMAND vbench_taint_test_app) diff --git a/vbench/src/tests/taint/FILES b/vbench/src/tests/taint/FILES new file mode 100644 index 00000000000..448832fd7dc --- /dev/null +++ b/vbench/src/tests/taint/FILES @@ -0,0 +1 @@ +taint_test.cpp diff --git a/vbench/src/tests/taint/taint_test.cpp b/vbench/src/tests/taint/taint_test.cpp new file mode 100644 index 00000000000..1d7c1cb0ef0 --- /dev/null +++ b/vbench/src/tests/taint/taint_test.cpp @@ -0,0 +1,43 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("untainted") { + Taint t; + bool fail = t; + EXPECT_FALSE(fail); + EXPECT_FALSE(t.taint()); + EXPECT_EQUAL("", t.reason()); +} + +TEST("Taintable::nil") { + const Taint &t = Taintable::nil().tainted(); + bool fail = t; + EXPECT_FALSE(fail); + EXPECT_FALSE(t.taint()); + EXPECT_EQUAL("", t.reason()); +} + +TEST("tainted") { + Taint t("argh"); + bool fail = t; + EXPECT_TRUE(fail); + EXPECT_TRUE(t.taint()); + EXPECT_EQUAL("argh", t.reason()); +} + +TEST("reset taint") { + Taint t; + EXPECT_FALSE(t.taint()); + EXPECT_EQUAL("", t.reason()); + t.reset("argh"); + EXPECT_TRUE(t.taint()); + EXPECT_EQUAL("argh", t.reason()); + t.reset(); + EXPECT_FALSE(t.taint()); + EXPECT_EQUAL("", t.reason()); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/thread/.gitignore b/vbench/src/tests/thread/.gitignore new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/vbench/src/tests/thread/.gitignore diff --git a/vbench/src/tests/time_queue/.gitignore b/vbench/src/tests/time_queue/.gitignore new file mode 100644 index 00000000000..c7cb2538d85 --- /dev/null +++ b/vbench/src/tests/time_queue/.gitignore @@ -0,0 +1 @@ +vbench_time_queue_test_app diff --git a/vbench/src/tests/time_queue/CMakeLists.txt b/vbench/src/tests/time_queue/CMakeLists.txt new file mode 100644 index 00000000000..a87a4c1982e --- /dev/null +++ b/vbench/src/tests/time_queue/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_time_queue_test_app + SOURCES + time_queue_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_time_queue_test_app COMMAND vbench_time_queue_test_app) diff --git a/vbench/src/tests/time_queue/FILES b/vbench/src/tests/time_queue/FILES new file mode 100644 index 00000000000..39406e0b322 --- /dev/null +++ b/vbench/src/tests/time_queue/FILES @@ -0,0 +1 @@ +time_queue_test.cpp diff --git a/vbench/src/tests/time_queue/time_queue_test.cpp b/vbench/src/tests/time_queue/time_queue_test.cpp new file mode 100644 index 00000000000..d6be9501e6d --- /dev/null +++ b/vbench/src/tests/time_queue/time_queue_test.cpp @@ -0,0 +1,65 @@ +// Copyright 2016 Yahoo Inc. 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/util/sync.h> + +using namespace vbench; + +TEST_MT_FFF("time queue", 2, TimeQueue<int>(10.0, 5.0), vespalib::Gate(), vespalib::Gate()) { + if (thread_id == 0) { + f1.insert(std::unique_ptr<int>(new int(1)), 1.0); + f1.insert(std::unique_ptr<int>(new int(2)), 3.0); + f1.insert(std::unique_ptr<int>(new int(3)), 2.0); + f2.countDown(); + f1.insert(std::unique_ptr<int>(new int(4)), 100.0); + f1.insert(std::unique_ptr<int>(new int(5)), 101.0); + f3.countDown(); + } else { + double delay; + std::vector<std::unique_ptr<int> > list; + EXPECT_TRUE(f2.await(20000)); + EXPECT_FALSE(f3.await(20)); + { + f1.extract(1.5, list, delay); + ASSERT_EQUAL(1u, list.size()); + EXPECT_EQUAL(1, *list[0]); + EXPECT_EQUAL(0.5, delay); + list.clear(); + } + { + f1.extract(10.0, list, delay); + ASSERT_EQUAL(2u, list.size()); + EXPECT_EQUAL(3, *list[0]); + EXPECT_EQUAL(2, *list[1]); + EXPECT_EQUAL(5.0, delay); + list.clear(); + } + { + f1.extract(99.25, list, delay); + EXPECT_EQUAL(0u, list.size()); + EXPECT_EQUAL(5.0, delay); + } + EXPECT_TRUE(f3.await(20000)); + { + f1.extract(99.25, list, delay); + EXPECT_EQUAL(0u, list.size()); + EXPECT_EQUAL(0.75, delay); + } + f1.discard(); + { + f1.extract(101.5, list, delay); + EXPECT_EQUAL(0u, list.size()); + EXPECT_EQUAL(5.0, delay); + } + f1.close(); + f1.insert(std::unique_ptr<int>(new int(6)), 102.0); + f1.insert(std::unique_ptr<int>(new int(7)), 103.0); + { + f1.extract(103.5, list, delay); + EXPECT_EQUAL(0u, list.size()); + EXPECT_EQUAL(5.0, delay); + } + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/timer/.gitignore b/vbench/src/tests/timer/.gitignore new file mode 100644 index 00000000000..cd37c01446c --- /dev/null +++ b/vbench/src/tests/timer/.gitignore @@ -0,0 +1 @@ +vbench_timer_test_app diff --git a/vbench/src/tests/timer/CMakeLists.txt b/vbench/src/tests/timer/CMakeLists.txt new file mode 100644 index 00000000000..fc50c222ba0 --- /dev/null +++ b/vbench/src/tests/timer/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_timer_test_app + SOURCES + timer_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_timer_test_app COMMAND vbench_timer_test_app) diff --git a/vbench/src/tests/timer/FILES b/vbench/src/tests/timer/FILES new file mode 100644 index 00000000000..a90924ff2d1 --- /dev/null +++ b/vbench/src/tests/timer/FILES @@ -0,0 +1 @@ +timer_test.cpp diff --git a/vbench/src/tests/timer/timer_test.cpp b/vbench/src/tests/timer/timer_test.cpp new file mode 100644 index 00000000000..150a8d847d6 --- /dev/null +++ b/vbench/src/tests/timer/timer_test.cpp @@ -0,0 +1,16 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +IGNORE_TEST("timer") { + Timer timer; + EXPECT_APPROX(0.0, timer.sample(), 0.1); + vespalib::Thread::sleep(1000); + EXPECT_APPROX(1.0, timer.sample(), 0.1); + timer.reset(); + EXPECT_APPROX(0.0, timer.sample(), 0.1); +} + +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/vbench/src/tests/true/.gitignore b/vbench/src/tests/true/.gitignore new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/vbench/src/tests/true/.gitignore diff --git a/vbench/src/tests/writable_memory/.gitignore b/vbench/src/tests/writable_memory/.gitignore new file mode 100644 index 00000000000..00061ea18f7 --- /dev/null +++ b/vbench/src/tests/writable_memory/.gitignore @@ -0,0 +1 @@ +vbench_writable_memory_test_app diff --git a/vbench/src/tests/writable_memory/CMakeLists.txt b/vbench/src/tests/writable_memory/CMakeLists.txt new file mode 100644 index 00000000000..4011ee64f63 --- /dev/null +++ b/vbench/src/tests/writable_memory/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(vbench_writable_memory_test_app + SOURCES + writable_memory_test.cpp + DEPENDS + vbench_test + vbench +) +vespa_add_test(NAME vbench_writable_memory_test_app COMMAND vbench_writable_memory_test_app) diff --git a/vbench/src/tests/writable_memory/FILES b/vbench/src/tests/writable_memory/FILES new file mode 100644 index 00000000000..14718444a2e --- /dev/null +++ b/vbench/src/tests/writable_memory/FILES @@ -0,0 +1 @@ +writable_memory_test.cpp diff --git a/vbench/src/tests/writable_memory/writable_memory_test.cpp b/vbench/src/tests/writable_memory/writable_memory_test.cpp new file mode 100644 index 00000000000..2be9d6b5153 --- /dev/null +++ b/vbench/src/tests/writable_memory/writable_memory_test.cpp @@ -0,0 +1,20 @@ +// Copyright 2016 Yahoo Inc. 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> + +using namespace vbench; + +TEST("empty") { + WritableMemory wm; + EXPECT_EQUAL((char*)0, wm.data); + EXPECT_EQUAL(0u, wm.size); +} + +TEST("from buffer") { + char buf[3]; + WritableMemory wm(buf, 3); + EXPECT_EQUAL(buf, wm.data); + EXPECT_EQUAL(3u, wm.size); +} + +TEST_MAIN() { TEST_RUN_ALL(); } |