summaryrefslogtreecommitdiffstats
path: root/vespalib/src/tests/executor/blockingthreadstackexecutor_test.cpp
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2017-06-01 12:18:32 +0000
committerHaavard <havardpe@yahoo-inc.com>2017-06-01 12:18:32 +0000
commit7d24996180577083beb0335608b1cdf34e2ded41 (patch)
tree5c8ad9b7b3c23265a0f6d6c7f5d684b41f23216b /vespalib/src/tests/executor/blockingthreadstackexecutor_test.cpp
parenta9772aff3ee6ce7b1f76322b0617890545289592 (diff)
added worker init wrapper support for executors
Diffstat (limited to 'vespalib/src/tests/executor/blockingthreadstackexecutor_test.cpp')
-rw-r--r--vespalib/src/tests/executor/blockingthreadstackexecutor_test.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/vespalib/src/tests/executor/blockingthreadstackexecutor_test.cpp b/vespalib/src/tests/executor/blockingthreadstackexecutor_test.cpp
index f8136fe2a10..6b295497744 100644
--- a/vespalib/src/tests/executor/blockingthreadstackexecutor_test.cpp
+++ b/vespalib/src/tests/executor/blockingthreadstackexecutor_test.cpp
@@ -4,6 +4,7 @@
#include <vespa/vespalib/util/blockingthreadstackexecutor.h>
#include <vespa/vespalib/util/executor.h>
#include <vespa/vespalib/util/sync.h>
+#include <vespa/vespalib/util/backtrace.h>
#include <thread>
using namespace vespalib;
@@ -108,4 +109,32 @@ TEST_F("require that task limit can be decreased", Fixture(3, 3))
f.blockedExecuteAndWaitUntilFinished();
}
+vespalib::string get_worker_stack_trace(BlockingThreadStackExecutor &executor) {
+ struct StackTraceTask : public Executor::Task {
+ vespalib::string &trace;
+ explicit StackTraceTask(vespalib::string &t) : trace(t) {}
+ void run() override { trace = getStackTrace(0); }
+ };
+ vespalib::string trace;
+ executor.execute(std::make_unique<StackTraceTask>(trace));
+ executor.sync();
+ return trace;
+}
+
+VESPA_THREAD_STACK_TAG(my_stack_tag);
+
+TEST_F("require that executor has appropriate default thread stack tag", BlockingThreadStackExecutor(1, 128*1024, 10)) {
+ vespalib::string trace = get_worker_stack_trace(f1);
+ if (!EXPECT_TRUE(trace.find("unnamed_blocking_executor") != vespalib::string::npos)) {
+ fprintf(stderr, "%s\n", trace.c_str());
+ }
+}
+
+TEST_F("require that executor thread stack tag can be set", BlockingThreadStackExecutor(1, 128*1024, 10, my_stack_tag)) {
+ vespalib::string trace = get_worker_stack_trace(f1);
+ if (!EXPECT_TRUE(trace.find("my_stack_tag") != vespalib::string::npos)) {
+ fprintf(stderr, "%s\n", trace.c_str());
+ }
+}
+
TEST_MAIN() { TEST_RUN_ALL(); }