Add support for getting the current thread's name
[folly.git] / folly / test / ThreadNameTest.cpp
index 87909538e25556c948556f09797efbfb0566be45..b804bbb156c3dfa5ae6cd2a4f6cc1ac1c677edca 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2015 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 
 #include <thread>
+
 #include <folly/Baton.h>
+#include <folly/ScopeGuard.h>
 #include <folly/ThreadName.h>
-#include <gtest/gtest.h>
+#include <folly/portability/GTest.h>
 
 using namespace std;
 using namespace folly;
 
+static bool expectedSetOtherThreadNameResult = folly::canSetOtherThreadName();
+static bool expectedSetSelfThreadNameResult = folly::canSetCurrentThreadName();
+
+TEST(ThreadName, getCurrentThreadName) {
+  static constexpr StringPiece kThreadName{"rockin-thread"};
+  thread th([] {
+    EXPECT_EQ(expectedSetSelfThreadNameResult, setThreadName(kThreadName));
+    if (expectedSetSelfThreadNameResult) {
+      EXPECT_EQ(kThreadName.toString(), getCurrentThreadName().value());
+    }
+  });
+  SCOPE_EXIT { th.join(); };
+}
+
 TEST(ThreadName, setThreadName_self) {
   thread th([] {
-      EXPECT_TRUE(setThreadName("rockin-thread"));
+    EXPECT_EQ(expectedSetSelfThreadNameResult, setThreadName("rockin-thread"));
   });
   SCOPE_EXIT { th.join(); };
 }
@@ -41,7 +57,8 @@ TEST(ThreadName, setThreadName_other_pthread) {
   SCOPE_EXIT { th.join(); };
   handle_set.wait();
   SCOPE_EXIT { let_thread_end.post(); };
-  EXPECT_TRUE(setThreadName(handle, "rockin-thread"));
+  EXPECT_EQ(
+      expectedSetOtherThreadNameResult, setThreadName(handle, "rockin-thread"));
 }
 
 TEST(ThreadName, setThreadName_other_native) {
@@ -51,5 +68,19 @@ TEST(ThreadName, setThreadName_other_native) {
   });
   SCOPE_EXIT { th.join(); };
   SCOPE_EXIT { let_thread_end.post(); };
-  EXPECT_TRUE(setThreadName(th.native_handle(), "rockin-thread"));
+  EXPECT_EQ(
+      expectedSetOtherThreadNameResult,
+      setThreadName(th.native_handle(), "rockin-thread"));
+}
+
+TEST(ThreadName, setThreadName_other_id) {
+  Baton<> let_thread_end;
+  thread th([&] {
+      let_thread_end.wait();
+  });
+  SCOPE_EXIT { th.join(); };
+  SCOPE_EXIT { let_thread_end.post(); };
+  EXPECT_EQ(
+      expectedSetOtherThreadNameResult,
+      setThreadName(th.get_id(), "rockin-thread"));
 }