| Index: sandbox/linux/services/thread_helpers_unittests.cc
|
| diff --git a/sandbox/linux/services/thread_helpers_unittests.cc b/sandbox/linux/services/thread_helpers_unittests.cc
|
| index a36fd2975f81da18dc32f53ae221da9475f65483..7f99aaf2a16898ad198b33633974bcfde5d8a6e0 100644
|
| --- a/sandbox/linux/services/thread_helpers_unittests.cc
|
| +++ b/sandbox/linux/services/thread_helpers_unittests.cc
|
| @@ -27,6 +27,9 @@ namespace sandbox {
|
|
|
| namespace {
|
|
|
| +// These tests fail under ThreadSanitizer, see http://crbug.com/342305
|
| +#if !defined(THREAD_SANITIZER)
|
| +
|
| int GetRaceTestIterations() {
|
| if (IsRunningOnValgrind()) {
|
| return 2;
|
| @@ -51,31 +54,29 @@ class ScopedProcSelfTask {
|
| DISALLOW_COPY_AND_ASSIGN(ScopedProcSelfTask);
|
| };
|
|
|
| -#if defined(THREAD_SANITIZER)
|
| -// These tests fail under ThreadSanitizer, see http://crbug.com/342305
|
| -#define MAYBE_IsSingleThreadedBasic DISABLED_IsSingleThreadedBasic
|
| -#define MAYBE_IsSingleThreadedIterated DISABLED_IsSingleThreadedIterated
|
| -#define MAYBE_IsSingleThreadedStartAndStop DISABLED_IsSingleThreadedStartAndStop
|
| -#else
|
| -#define MAYBE_IsSingleThreadedBasic IsSingleThreadedBasic
|
| -#define MAYBE_IsSingleThreadedIterated IsSingleThreadedIterated
|
| -#define MAYBE_IsSingleThreadedStartAndStop IsSingleThreadedStartAndStop
|
| -#endif
|
| -
|
| -TEST(ThreadHelpers, MAYBE_IsSingleThreadedBasic) {
|
| +TEST(ThreadHelpers, IsSingleThreadedBasic) {
|
| ScopedProcSelfTask task;
|
| ASSERT_TRUE(ThreadHelpers::IsSingleThreaded(task.fd()));
|
| - ASSERT_TRUE(ThreadHelpers::IsSingleThreaded(-1));
|
| + ASSERT_TRUE(ThreadHelpers::IsSingleThreaded());
|
|
|
| base::Thread thread("sandbox_tests");
|
| ASSERT_TRUE(thread.Start());
|
| ASSERT_FALSE(ThreadHelpers::IsSingleThreaded(task.fd()));
|
| - ASSERT_FALSE(ThreadHelpers::IsSingleThreaded(-1));
|
| + ASSERT_FALSE(ThreadHelpers::IsSingleThreaded());
|
| // Explicitly stop the thread here to not pollute the next test.
|
| ASSERT_TRUE(ThreadHelpers::StopThreadAndWatchProcFS(task.fd(), &thread));
|
| }
|
|
|
| -TEST(ThreadHelpers, MAYBE_IsSingleThreadedIterated) {
|
| +SANDBOX_TEST(ThreadHelpers, AssertSingleThreaded) {
|
| + ScopedProcSelfTask task;
|
| + SANDBOX_ASSERT(ThreadHelpers::IsSingleThreaded(task.fd()));
|
| + SANDBOX_ASSERT(ThreadHelpers::IsSingleThreaded());
|
| +
|
| + ThreadHelpers::AssertSingleThreaded(task.fd());
|
| + ThreadHelpers::AssertSingleThreaded();
|
| +}
|
| +
|
| +TEST(ThreadHelpers, IsSingleThreadedIterated) {
|
| ScopedProcSelfTask task;
|
| ASSERT_TRUE(ThreadHelpers::IsSingleThreaded(task.fd()));
|
|
|
| @@ -89,7 +90,7 @@ TEST(ThreadHelpers, MAYBE_IsSingleThreadedIterated) {
|
| }
|
| }
|
|
|
| -TEST(ThreadHelpers, MAYBE_IsSingleThreadedStartAndStop) {
|
| +TEST(ThreadHelpers, IsSingleThreadedStartAndStop) {
|
| ScopedProcSelfTask task;
|
| ASSERT_TRUE(ThreadHelpers::IsSingleThreaded(task.fd()));
|
|
|
| @@ -106,6 +107,42 @@ TEST(ThreadHelpers, MAYBE_IsSingleThreadedStartAndStop) {
|
| }
|
| }
|
|
|
| +SANDBOX_TEST(ThreadHelpers, AssertSingleThreadedAfterThreadStopped) {
|
| + SANDBOX_ASSERT(ThreadHelpers::IsSingleThreaded());
|
| +
|
| + base::Thread thread1("sandbox_tests");
|
| + base::Thread thread2("sandbox_tests");
|
| +
|
| + for (int i = 0; i < GetRaceTestIterations(); ++i) {
|
| + SANDBOX_ASSERT(thread1.Start());
|
| + SANDBOX_ASSERT(thread2.Start());
|
| + SANDBOX_ASSERT(!ThreadHelpers::IsSingleThreaded());
|
| +
|
| + thread1.Stop();
|
| + thread2.Stop();
|
| + // This will wait on /proc/ to reflect the state of threads in the
|
| + // process.
|
| + ThreadHelpers::AssertSingleThreaded();
|
| + SANDBOX_ASSERT(ThreadHelpers::IsSingleThreaded());
|
| + }
|
| +}
|
| +
|
| +// Only run this test in Debug mode, where AssertSingleThreaded() will return
|
| +// in less than 64ms.
|
| +#if !defined(NDEBUG)
|
| +SANDBOX_DEATH_TEST(
|
| + ThreadHelpers,
|
| + AssertSingleThreadedDies,
|
| + DEATH_MESSAGE(
|
| + ThreadHelpers::GetAssertSingleThreadedErrorMessageForTests())) {
|
| + base::Thread thread1("sandbox_tests");
|
| + SANDBOX_ASSERT(thread1.Start());
|
| + ThreadHelpers::AssertSingleThreaded();
|
| +}
|
| +#endif // !defined(NDEBUG)
|
| +
|
| +#endif // !defined(THREAD_SANITIZER)
|
| +
|
| } // namespace
|
|
|
| } // namespace sandbox
|
|
|