accurate, exhaustive "fast" version of this test

pull/12891/head
Craig Tiller 7 years ago
parent c5fb7e5b73
commit 3cf8d50d1e
  1. 1
      build.yaml
  2. 58
      test/core/debug/stats_test.cc
  3. 1
      tools/run_tests/generated/tests.json
  4. 2
      tools/run_tests/run_tests.py

@ -4607,6 +4607,7 @@ targets:
- grpc - grpc
- gpr_test_util - gpr_test_util
- gpr - gpr
timeout_seconds: 1200
uses_polling: false uses_polling: false
- name: status_test - name: status_test
build: test build: test

@ -87,42 +87,42 @@ class HistogramTest : public ::testing::TestWithParam<int> {};
TEST_P(HistogramTest, IncHistogram) { TEST_P(HistogramTest, IncHistogram) {
const int kHistogram = GetParam(); const int kHistogram = GetParam();
const int kBuckets = grpc_stats_histo_buckets[kHistogram];
const int kThreads = kBuckets;
std::vector<std::thread> threads; std::vector<std::thread> threads;
std::vector<std::mutex> mutexes(kBuckets); int cur_bucket = 0;
for (int thread = 0; thread < kThreads; thread++) { auto run = [kHistogram](const std::vector<int>& test_values, int expected_bucket) {
threads.emplace_back([kHistogram, kThreads, thread, &mutexes]() { gpr_log(GPR_DEBUG, "expected_bucket:%d nvalues=%" PRIdPTR, expected_bucket, test_values.size());
for (auto j : test_values) {
Snapshot snapshot;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_stats_inc_histogram[kHistogram](&exec_ctx, j);
grpc_exec_ctx_finish(&exec_ctx);
auto delta = snapshot.delta();
EXPECT_EQ(delta.histograms[grpc_stats_histo_start[kHistogram] +
expected_bucket],
1)
<< "\nhistogram:" << kHistogram
<< "\nexpected_bucket:" << expected_bucket
<< "\nj:" << j;
}
};
std::vector<int> test_values; std::vector<int> test_values;
for (int j = -1000 + thread; for (int j = -1000;
j < grpc_stats_histo_bucket_boundaries j < grpc_stats_histo_bucket_boundaries
[kHistogram][grpc_stats_histo_buckets[kHistogram] - 1] + [kHistogram][grpc_stats_histo_buckets[kHistogram] - 1] +
1000; 1000;
j += kThreads) { j ++) {
int expected_bucket = FindExpectedBucket(kHistogram, j);
if (cur_bucket != expected_bucket) {
threads.emplace_back([test_values, run, cur_bucket]() { run(test_values, cur_bucket); });
cur_bucket = expected_bucket;
test_values.clear();
}
test_values.push_back(j); test_values.push_back(j);
} }
std::random_shuffle(test_values.begin(), test_values.end()); run(test_values, cur_bucket);
for (auto j : test_values) {
int expected_bucket = FindExpectedBucket(kHistogram, j);
std::lock_guard<std::mutex> lock(mutexes[expected_bucket]);
Snapshot snapshot;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_stats_inc_histogram[kHistogram](&exec_ctx, j);
grpc_exec_ctx_finish(&exec_ctx);
auto delta = snapshot.delta();
EXPECT_EQ(delta.histograms[grpc_stats_histo_start[kHistogram] +
expected_bucket],
1)
<< "\nhistogram:" << kHistogram
<< "\nexpected_bucket:" << expected_bucket << "\nthread:" << thread
<< "\nj:" << j;
}
});
}
for (auto& t : threads) { for (auto& t : threads) {
t.join(); t.join();
} }

@ -4195,6 +4195,7 @@
"posix", "posix",
"windows" "windows"
], ],
"timeout_seconds": 1200,
"uses_polling": false "uses_polling": false
}, },
{ {

@ -353,7 +353,7 @@ class CLanguage(object):
out.append(self.config.job_spec(cmdline, out.append(self.config.job_spec(cmdline,
shortname='%s %s' % (' '.join(cmdline), shortname_ext), shortname='%s %s' % (' '.join(cmdline), shortname_ext),
cpu_cost=cpu_cost, cpu_cost=cpu_cost,
timeout_seconds=_DEFAULT_TIMEOUT_SECONDS * timeout_scaling, timeout_seconds=target.get('timeout_seconds', _DEFAULT_TIMEOUT_SECONDS) * timeout_scaling,
environ=env)) environ=env))
else: else:
cmdline = [binary] + target['args'] cmdline = [binary] + target['args']

Loading…
Cancel
Save