[fixit] Parallelize hpack_size tests (#30580)

* [hpack_size] Parallelize tests

* Automated change: Fix sanity tests

* fix tsan race

* fix tsan race

* bleh

* windows-strerror

* ugh

* Automated change: Fix sanity tests

Co-authored-by: ctiller <ctiller@users.noreply.github.com>
pull/31164/head
Craig Tiller 2 years ago committed by GitHub
parent c62013d699
commit 631e8b2c36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      BUILD
  2. 25
      src/core/lib/iomgr/error.cc
  3. 3
      test/core/end2end/fixtures/h2_local_abstract_uds_percent_encoded.cc
  4. 3
      test/core/end2end/fixtures/h2_local_uds.cc
  5. 3
      test/core/end2end/fixtures/h2_local_uds_percent_encoded.cc
  6. 3
      test/core/end2end/fixtures/h2_uds.cc
  7. 3
      test/core/end2end/fixtures/h2_uds_abstract.cc
  8. 18
      test/core/end2end/tests/hpack_size.cc

@ -2177,7 +2177,10 @@ grpc_cc_library(
hdrs = [
"src/core/lib/iomgr/error.h",
],
external_deps = ["absl/status"],
external_deps = [
"absl/status",
"absl/strings:str_format",
],
deps = [
"gpr",
"gpr_spinlock",

@ -22,6 +22,8 @@
#include <inttypes.h>
#include <string.h>
#include "absl/strings/str_format.h"
#include <grpc/impl/codegen/status.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
@ -65,13 +67,32 @@ std::string grpc_error_std_string(absl::Status error) {
return grpc_core::StatusToString(error);
}
namespace {
#ifdef GPR_WINDOWS
std::string StrError(int err) { return strerror(err); }
#else
std::string StrError(int err) {
struct Finish {
static std::string Run(char* buf, int err, int r) {
if (r == 0) return buf;
return absl::StrFormat("strerror_r(%d) failed: %d", err, r);
}
static std::string Run(char*, int, const char* r) { return r; }
};
char buf[256];
return Finish::Run(buf, err, strerror_r(err, buf, sizeof(buf)));
}
#endif // !GPR_WINDOWS
} // namespace
absl::Status grpc_os_error(const grpc_core::DebugLocation& location, int err,
const char* call_name) {
auto err_string = StrError(err);
absl::Status s =
StatusCreate(absl::StatusCode::kUnknown, strerror(err), location, {});
StatusCreate(absl::StatusCode::kUnknown, err_string, location, {});
grpc_core::StatusSetInt(&s, grpc_core::StatusIntProperty::kErrorNo, err);
grpc_core::StatusSetStr(&s, grpc_core::StatusStrProperty::kOsError,
strerror(err));
err_string);
grpc_core::StatusSetStr(&s, grpc_core::StatusStrProperty::kSyscall,
call_name);
return s;

@ -15,6 +15,7 @@
#include <inttypes.h>
#include <unistd.h>
#include <atomic>
#include <string>
#include "absl/strings/str_format.h"
@ -27,7 +28,7 @@
#include "test/core/end2end/fixtures/local_util.h"
#include "test/core/util/test_config.h"
static int unique{0};
static std::atomic<int> unique{0};
static grpc_end2end_test_fixture chttp2_create_fixture_fullstack_uds(
const grpc_channel_args* /*client_args*/,

@ -19,6 +19,7 @@
#include <inttypes.h>
#include <unistd.h>
#include <atomic>
#include <string>
#include "absl/strings/str_format.h"
@ -31,7 +32,7 @@
#include "test/core/end2end/fixtures/local_util.h"
#include "test/core/util/test_config.h"
static int unique = 1;
static std::atomic<int> unique{1};
static grpc_end2end_test_fixture chttp2_create_fixture_fullstack_uds(
const grpc_channel_args* /*client_args*/,

@ -19,6 +19,7 @@
#include <inttypes.h>
#include <unistd.h>
#include <atomic>
#include <string>
#include "absl/strings/str_format.h"
@ -31,7 +32,7 @@
#include "test/core/end2end/fixtures/local_util.h"
#include "test/core/util/test_config.h"
static int unique = 1;
static std::atomic<int> unique{1};
static grpc_end2end_test_fixture chttp2_create_fixture_fullstack_uds(
const grpc_channel_args* /*client_args*/,

@ -20,6 +20,7 @@
#include <string.h>
#include <unistd.h>
#include <atomic>
#include <string>
#include <utility>
@ -37,7 +38,7 @@ struct fullstack_fixture_data {
std::string localaddr;
};
static int unique = 1;
static std::atomic<int> unique{1};
static grpc_end2end_test_fixture chttp2_create_fixture_fullstack_base(
std::string addr) {

@ -20,6 +20,7 @@
#include <string.h>
#include <unistd.h>
#include <atomic>
#include <string>
#include <utility>
@ -37,7 +38,7 @@ struct fullstack_fixture_data {
std::string localaddr;
};
static int unique = 1;
static std::atomic<int> unique{1};
static grpc_end2end_test_fixture chttp2_create_fixture_fullstack_base(
std::string addr) {

@ -20,16 +20,22 @@
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <memory>
#include <string>
#include <vector>
#include "absl/strings/str_format.h"
#include "absl/synchronization/notification.h"
#include <grpc/event_engine/event_engine.h>
#include <grpc/grpc.h>
#include <grpc/impl/codegen/propagation_bits.h>
#include <grpc/slice.h>
#include <grpc/status.h>
#include <grpc/support/log.h>
#include "src/core/lib/event_engine/default_event_engine.h"
#include "src/core/lib/gpr/useful.h"
#include "test/core/end2end/cq_verifier.h"
#include "test/core/end2end/end2end_tests.h"
@ -386,11 +392,21 @@ void hpack_size(grpc_end2end_test_config config) {
1000, 32768, 4 * 1024 * 1024};
size_t i, j;
auto event_engine = grpc_event_engine::experimental::GetDefaultEventEngine();
std::vector<std::shared_ptr<absl::Notification>> dones;
for (i = 0; i < GPR_ARRAY_SIZE(interesting_sizes); i++) {
for (j = 0; j < GPR_ARRAY_SIZE(interesting_sizes); j++) {
test_size(config, interesting_sizes[i], interesting_sizes[j]);
auto done = std::make_shared<absl::Notification>();
dones.push_back(done);
event_engine->Run([done, config, i, j] {
test_size(config, interesting_sizes[i], interesting_sizes[j]);
done->Notify();
});
}
}
for (auto& done : dones) {
done->WaitForNotification();
}
}
void hpack_size_pre_init(void) {}

Loading…
Cancel
Save