From c5fb7e5b73ca587ea59c1657bd221af0743929d5 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Sun, 8 Oct 2017 03:25:31 +0000 Subject: [PATCH] Use a mutex for an exact test --- build.yaml | 1 + test/core/debug/stats_test.cc | 14 +++++++++----- tools/run_tests/generated/tests.json | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/build.yaml b/build.yaml index 19ce721be4e..211cf6913fd 100644 --- a/build.yaml +++ b/build.yaml @@ -4607,6 +4607,7 @@ targets: - grpc - gpr_test_util - gpr + uses_polling: false - name: status_test build: test language: c++ diff --git a/test/core/debug/stats_test.cc b/test/core/debug/stats_test.cc index 35f11eae378..c652e446b8e 100644 --- a/test/core/debug/stats_test.cc +++ b/test/core/debug/stats_test.cc @@ -20,6 +20,7 @@ extern "C" { #include "src/core/lib/debug/stats.h" } +#include #include #include @@ -86,10 +87,12 @@ class HistogramTest : public ::testing::TestWithParam {}; TEST_P(HistogramTest, IncHistogram) { const int kHistogram = GetParam(); - const int kThreads = std::max(1, (int)gpr_cpu_num_cores()); + const int kBuckets = grpc_stats_histo_buckets[kHistogram]; + const int kThreads = kBuckets; std::vector threads; + std::vector mutexes(kBuckets); for (int thread = 0; thread < kThreads; thread++) { - threads.emplace_back([kHistogram, kThreads, thread]() { + threads.emplace_back([kHistogram, kThreads, thread, &mutexes]() { std::vector test_values; for (int j = -1000 + thread; j < grpc_stats_histo_bucket_boundaries @@ -100,9 +103,10 @@ TEST_P(HistogramTest, IncHistogram) { } std::random_shuffle(test_values.begin(), test_values.end()); for (auto j : test_values) { - Snapshot snapshot; - int expected_bucket = FindExpectedBucket(kHistogram, j); + std::lock_guard lock(mutexes[expected_bucket]); + + Snapshot snapshot; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_stats_inc_histogram[kHistogram](&exec_ctx, j); @@ -110,7 +114,7 @@ TEST_P(HistogramTest, IncHistogram) { auto delta = snapshot.delta(); - EXPECT_GE(delta.histograms[grpc_stats_histo_start[kHistogram] + + EXPECT_EQ(delta.histograms[grpc_stats_histo_start[kHistogram] + expected_bucket], 1) << "\nhistogram:" << kHistogram diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json index 6f9b3cab897..72e840e2f20 100644 --- a/tools/run_tests/generated/tests.json +++ b/tools/run_tests/generated/tests.json @@ -4195,7 +4195,7 @@ "posix", "windows" ], - "uses_polling": true + "uses_polling": false }, { "args": [],