aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/cpp')
-rw-r--r--test/cpp/end2end/async_end2end_test.cc21
-rw-r--r--test/cpp/end2end/end2end_test.cc21
-rw-r--r--test/cpp/grpclb/grpclb_test.cc19
-rw-r--r--test/cpp/interop/client.cc180
-rw-r--r--test/cpp/interop/interop_client.cc9
-rw-r--r--test/cpp/interop/interop_client.h1
-rw-r--r--test/cpp/interop/interop_server.cc4
-rw-r--r--test/cpp/interop/stress_test.cc66
-rw-r--r--test/cpp/microbenchmarks/bm_fullstack.cc2
-rw-r--r--test/cpp/qps/client.h3
-rw-r--r--test/cpp/qps/driver.cc92
-rw-r--r--test/cpp/qps/driver.h3
-rw-r--r--test/cpp/qps/limit_cores.cc87
-rw-r--r--test/cpp/qps/limit_cores.h49
-rw-r--r--test/cpp/qps/qps_json_driver.cc15
-rw-r--r--test/cpp/qps/server.h3
-rw-r--r--test/cpp/test/server_context_test_spouse_test.cc3
17 files changed, 148 insertions, 430 deletions
diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc
index 2ce3f2f7bd..f53601297c 100644
--- a/test/cpp/end2end/async_end2end_test.cc
+++ b/test/cpp/end2end/async_end2end_test.cc
@@ -228,12 +228,7 @@ class TestScenario {
: disable_blocking(non_block),
credentials_type(creds_type),
message_content(content) {}
- void Log() const {
- gpr_log(
- GPR_INFO,
- "Scenario: disable_blocking %d, credentials %s, message size %" PRIuPTR,
- disable_blocking, credentials_type.c_str(), message_content.size());
- }
+ void Log() const;
bool disable_blocking;
// Although the below grpc::string's are logically const, we can't declare
// them const because of a limitation in the way old compilers (e.g., gcc-4.4)
@@ -242,6 +237,20 @@ class TestScenario {
grpc::string message_content;
};
+static std::ostream& operator<<(std::ostream& out,
+ const TestScenario& scenario) {
+ return out << "TestScenario{disable_blocking="
+ << (scenario.disable_blocking ? "true" : "false")
+ << ", credentials='" << scenario.credentials_type
+ << "', message_size=" << scenario.message_content.size() << "}";
+}
+
+void TestScenario::Log() const {
+ std::ostringstream out;
+ out << *this;
+ gpr_log(GPR_DEBUG, "%s", out.str().c_str());
+}
+
class AsyncEnd2endTest : public ::testing::TestWithParam<TestScenario> {
protected:
AsyncEnd2endTest() { GetParam().Log(); }
diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index 1a1a94e87c..d2c7edc64b 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -209,10 +209,7 @@ class TestScenario {
public:
TestScenario(bool proxy, const grpc::string& creds_type)
: use_proxy(proxy), credentials_type(creds_type) {}
- void Log() const {
- gpr_log(GPR_INFO, "Scenario: proxy %d, credentials %s", use_proxy,
- credentials_type.c_str());
- }
+ void Log() const;
bool use_proxy;
// Although the below grpc::string is logically const, we can't declare
// them const because of a limitation in the way old compilers (e.g., gcc-4.4)
@@ -220,6 +217,19 @@ class TestScenario {
grpc::string credentials_type;
};
+static std::ostream& operator<<(std::ostream& out,
+ const TestScenario& scenario) {
+ return out << "TestScenario{use_proxy="
+ << (scenario.use_proxy ? "true" : "false") << ", credentials='"
+ << scenario.credentials_type << "'}";
+}
+
+void TestScenario::Log() const {
+ std::ostringstream out;
+ out << *this;
+ gpr_log(GPR_DEBUG, "%s", out.str().c_str());
+}
+
class End2endTest : public ::testing::TestWithParam<TestScenario> {
protected:
End2endTest()
@@ -636,7 +646,7 @@ TEST_P(End2endServerTryCancelTest, BidiStreamServerCancelAfter) {
TestBidiStreamServerCancel(CANCEL_AFTER_PROCESSING, 5);
}
-TEST_P(End2endTest, SimpleRpcWithCustomeUserAgentPrefix) {
+TEST_P(End2endTest, SimpleRpcWithCustomUserAgentPrefix) {
user_agent_prefix_ = "custom_prefix";
ResetStub();
EchoRequest request;
@@ -1293,6 +1303,7 @@ TEST_P(SecureEnd2endTest, BlockingAuthMetadataPluginAndProcessorFailure) {
EXPECT_FALSE(s.ok());
EXPECT_EQ(s.error_code(), StatusCode::UNAUTHENTICATED);
}
+
TEST_P(SecureEnd2endTest, SetPerCallCredentials) {
ResetStub();
EchoRequest request;
diff --git a/test/cpp/grpclb/grpclb_test.cc b/test/cpp/grpclb/grpclb_test.cc
index de304b9f89..07db474b87 100644
--- a/test/cpp/grpclb/grpclb_test.cc
+++ b/test/cpp/grpclb/grpclb_test.cc
@@ -288,7 +288,8 @@ static void start_lb_server(server_fixture *sf, int *ports, size_t nports,
op->op = GRPC_OP_SEND_STATUS_FROM_SERVER;
op->data.send_status_from_server.trailing_metadata_count = 0;
op->data.send_status_from_server.status = GRPC_STATUS_OK;
- op->data.send_status_from_server.status_details = "xyz";
+ grpc_slice status_details = grpc_slice_from_static_string("xyz");
+ op->data.send_status_from_server.status_details = &status_details;
op->flags = 0;
op->reserved = NULL;
op++;
@@ -433,7 +434,9 @@ static void start_backend_server(server_fixture *sf) {
op->op = GRPC_OP_SEND_STATUS_FROM_SERVER;
op->data.send_status_from_server.trailing_metadata_count = 0;
op->data.send_status_from_server.status = GRPC_STATUS_OK;
- op->data.send_status_from_server.status_details = "Backend server out a-ok";
+ grpc_slice status_details =
+ grpc_slice_from_static_string("Backend server out a-ok");
+ op->data.send_status_from_server.status_details = &status_details;
op->flags = 0;
op->reserved = NULL;
op++;
@@ -462,8 +465,7 @@ static void perform_request(client_fixture *cf) {
grpc_metadata_array trailing_metadata_recv;
grpc_status_code status;
grpc_call_error error;
- char *details = NULL;
- size_t details_capacity = 0;
+ grpc_slice details;
grpc_byte_buffer *request_payload;
grpc_byte_buffer *response_payload_recv;
int i;
@@ -472,9 +474,11 @@ static void perform_request(client_fixture *cf) {
grpc_slice request_payload_slice =
grpc_slice_from_copied_string("hello world");
+ grpc_slice host = grpc_slice_from_static_string("foo.test.google.fr:1234");
c = grpc_channel_create_call(cf->client, NULL, GRPC_PROPAGATE_DEFAULTS,
- cf->cq, "/foo", "foo.test.google.fr:1234",
- GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5), NULL);
+ cf->cq, grpc_slice_from_static_string("/foo"),
+ &host, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5),
+ NULL);
gpr_log(GPR_INFO, "Call 0x%" PRIxPTR " created", (intptr_t)c);
GPR_ASSERT(c);
char *peer;
@@ -497,7 +501,6 @@ static void perform_request(client_fixture *cf) {
op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv;
op->data.recv_status_on_client.status = &status;
op->data.recv_status_on_client.status_details = &details;
- op->data.recv_status_on_client.status_details_capacity = &details_capacity;
op->flags = 0;
op->reserved = NULL;
op++;
@@ -553,7 +556,7 @@ static void perform_request(client_fixture *cf) {
grpc_metadata_array_destroy(&initial_metadata_recv);
grpc_metadata_array_destroy(&trailing_metadata_recv);
- gpr_free(details);
+ grpc_slice_unref(details);
gpr_log(GPR_INFO, "Client call (peer %s) DESTROYED.", peer);
gpr_free(peer);
}
diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc
index 3265554444..1df2fc8320 100644
--- a/test/cpp/interop/client.cc
+++ b/test/cpp/interop/client.cc
@@ -32,6 +32,7 @@
*/
#include <memory>
+#include <unordered_map>
#include <unistd.h>
@@ -108,119 +109,78 @@ int main(int argc, char** argv) {
grpc::testing::InteropClient client(CreateChannelForTestCase(FLAGS_test_case),
true,
FLAGS_do_not_abort_on_transient_failures);
- if (FLAGS_test_case == "empty_unary") {
- client.DoEmpty();
- } else if (FLAGS_test_case == "large_unary") {
- client.DoLargeUnary();
- } else if (FLAGS_test_case == "server_compressed_unary") {
- client.DoServerCompressedUnary();
- } else if (FLAGS_test_case == "client_compressed_unary") {
- client.DoClientCompressedUnary();
- } else if (FLAGS_test_case == "client_streaming") {
- client.DoRequestStreaming();
- } else if (FLAGS_test_case == "server_streaming") {
- client.DoResponseStreaming();
- } else if (FLAGS_test_case == "server_compressed_streaming") {
- client.DoServerCompressedStreaming();
- } else if (FLAGS_test_case == "client_compressed_streaming") {
- client.DoClientCompressedStreaming();
- } else if (FLAGS_test_case == "slow_consumer") {
- client.DoResponseStreamingWithSlowConsumer();
- } else if (FLAGS_test_case == "half_duplex") {
- client.DoHalfDuplex();
- } else if (FLAGS_test_case == "ping_pong") {
- client.DoPingPong();
- } else if (FLAGS_test_case == "cancel_after_begin") {
- client.DoCancelAfterBegin();
- } else if (FLAGS_test_case == "cancel_after_first_response") {
- client.DoCancelAfterFirstResponse();
- } else if (FLAGS_test_case == "timeout_on_sleeping_server") {
- client.DoTimeoutOnSleepingServer();
- } else if (FLAGS_test_case == "empty_stream") {
- client.DoEmptyStream();
- } else if (FLAGS_test_case == "compute_engine_creds") {
- client.DoComputeEngineCreds(FLAGS_default_service_account,
- FLAGS_oauth_scope);
- } else if (FLAGS_test_case == "jwt_token_creds") {
- grpc::string json_key = GetServiceAccountJsonKey();
- client.DoJwtTokenCreds(json_key);
- } else if (FLAGS_test_case == "oauth2_auth_token") {
- client.DoOauth2AuthToken(FLAGS_default_service_account, FLAGS_oauth_scope);
- } else if (FLAGS_test_case == "per_rpc_creds") {
- grpc::string json_key = GetServiceAccountJsonKey();
- client.DoPerRpcCreds(json_key);
- } else if (FLAGS_test_case == "status_code_and_message") {
- client.DoStatusWithMessage();
- } else if (FLAGS_test_case == "custom_metadata") {
- client.DoCustomMetadata();
- } else if (FLAGS_test_case == "unimplemented_method") {
- client.DoUnimplementedMethod();
- } else if (FLAGS_test_case == "unimplemented_service") {
- client.DoUnimplementedService();
- } else if (FLAGS_test_case == "cacheable_unary") {
- client.DoCacheableUnary();
- } else if (FLAGS_test_case == "all") {
- client.DoEmpty();
- client.DoLargeUnary();
- client.DoClientCompressedUnary();
- client.DoServerCompressedUnary();
- client.DoRequestStreaming();
- client.DoResponseStreaming();
- client.DoClientCompressedStreaming();
- client.DoServerCompressedStreaming();
- client.DoHalfDuplex();
- client.DoPingPong();
- client.DoCancelAfterBegin();
- client.DoCancelAfterFirstResponse();
- client.DoTimeoutOnSleepingServer();
- client.DoEmptyStream();
- client.DoStatusWithMessage();
- client.DoCustomMetadata();
- client.DoUnimplementedMethod();
- client.DoUnimplementedService();
- client.DoCacheableUnary();
- // service_account_creds and jwt_token_creds can only run with ssl.
- if (FLAGS_use_tls) {
- grpc::string json_key = GetServiceAccountJsonKey();
- client.DoJwtTokenCreds(json_key);
- client.DoOauth2AuthToken(FLAGS_default_service_account,
- FLAGS_oauth_scope);
- client.DoPerRpcCreds(json_key);
+
+ std::unordered_map<grpc::string, std::function<bool()>> actions;
+ actions["empty_unary"] =
+ std::bind(&grpc::testing::InteropClient::DoEmpty, &client);
+ actions["large_unary"] =
+ std::bind(&grpc::testing::InteropClient::DoLargeUnary, &client);
+ actions["server_compressed_unary"] = std::bind(
+ &grpc::testing::InteropClient::DoServerCompressedUnary, &client);
+ actions["client_compressed_unary"] = std::bind(
+ &grpc::testing::InteropClient::DoClientCompressedUnary, &client);
+ actions["client_streaming"] =
+ std::bind(&grpc::testing::InteropClient::DoRequestStreaming, &client);
+ actions["server_streaming"] =
+ std::bind(&grpc::testing::InteropClient::DoResponseStreaming, &client);
+ actions["server_compressed_streaming"] = std::bind(
+ &grpc::testing::InteropClient::DoServerCompressedStreaming, &client);
+ actions["client_compressed_streaming"] = std::bind(
+ &grpc::testing::InteropClient::DoClientCompressedStreaming, &client);
+ actions["slow_consumer"] = std::bind(
+ &grpc::testing::InteropClient::DoResponseStreamingWithSlowConsumer,
+ &client);
+ actions["half_duplex"] =
+ std::bind(&grpc::testing::InteropClient::DoHalfDuplex, &client);
+ actions["ping_pong"] =
+ std::bind(&grpc::testing::InteropClient::DoPingPong, &client);
+ actions["cancel_after_begin"] =
+ std::bind(&grpc::testing::InteropClient::DoCancelAfterBegin, &client);
+ actions["cancel_after_first_response"] = std::bind(
+ &grpc::testing::InteropClient::DoCancelAfterFirstResponse, &client);
+ actions["timeout_on_sleeping_server"] = std::bind(
+ &grpc::testing::InteropClient::DoTimeoutOnSleepingServer, &client);
+ actions["empty_stream"] =
+ std::bind(&grpc::testing::InteropClient::DoEmptyStream, &client);
+ if (FLAGS_use_tls) {
+ actions["compute_engine_creds"] =
+ std::bind(&grpc::testing::InteropClient::DoComputeEngineCreds, &client,
+ FLAGS_default_service_account, FLAGS_oauth_scope);
+ actions["jwt_token_creds"] =
+ std::bind(&grpc::testing::InteropClient::DoJwtTokenCreds, &client,
+ GetServiceAccountJsonKey());
+ actions["oauth2_auth_token"] =
+ std::bind(&grpc::testing::InteropClient::DoOauth2AuthToken, &client,
+ FLAGS_default_service_account, FLAGS_oauth_scope);
+ actions["per_rpc_creds"] =
+ std::bind(&grpc::testing::InteropClient::DoPerRpcCreds, &client,
+ GetServiceAccountJsonKey());
+ }
+ actions["status_code_and_message"] =
+ std::bind(&grpc::testing::InteropClient::DoStatusWithMessage, &client);
+ actions["custom_metadata"] =
+ std::bind(&grpc::testing::InteropClient::DoCustomMetadata, &client);
+ actions["unimplemented_method"] =
+ std::bind(&grpc::testing::InteropClient::DoUnimplementedMethod, &client);
+ actions["unimplemented_service"] =
+ std::bind(&grpc::testing::InteropClient::DoUnimplementedService, &client);
+ // actions["cacheable_unary"] =
+ // std::bind(&grpc::testing::InteropClient::DoCacheableUnary, &client);
+
+ if (FLAGS_test_case == "all") {
+ for (const auto& action : actions) {
+ action.second();
}
- // compute_engine_creds only runs in GCE.
+ } else if (actions.find(FLAGS_test_case) != actions.end()) {
+ actions.find(FLAGS_test_case)->second();
} else {
- const char* testcases[] = {"all",
- "cacheable_unary",
- "cancel_after_begin",
- "cancel_after_first_response",
- "client_compressed_streaming",
- "client_compressed_unary",
- "client_streaming",
- "compute_engine_creds",
- "custom_metadata",
- "empty_stream",
- "empty_unary",
- "half_duplex",
- "jwt_token_creds",
- "large_unary",
- "oauth2_auth_token",
- "oauth2_auth_token",
- "per_rpc_creds",
- "per_rpc_creds",
- "ping_pong",
- "server_compressed_streaming",
- "server_compressed_unary",
- "server_streaming",
- "status_code_and_message",
- "timeout_on_sleeping_server",
- "unimplemented_method",
- "unimplemented_service"};
- char* joined_testcases =
- gpr_strjoin_sep(testcases, GPR_ARRAY_SIZE(testcases), "\n", NULL);
-
+ grpc::string test_cases;
+ for (const auto& action : actions) {
+ if (!test_cases.empty()) test_cases += "\n";
+ test_cases += action.first;
+ }
gpr_log(GPR_ERROR, "Unsupported test case %s. Valid options are\n%s",
- FLAGS_test_case.c_str(), joined_testcases);
- gpr_free(joined_testcases);
+ FLAGS_test_case.c_str(), test_cases.c_str());
ret = 1;
}
diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index d1242627ef..aa34d94f61 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -109,7 +109,10 @@ TestService::Stub* InteropClient::ServiceStub::Get() {
UnimplementedService::Stub*
InteropClient::ServiceStub::GetUnimplementedServiceStub() {
- return UnimplementedService::NewStub(channel_).get();
+ if (unimplemented_service_stub_ == nullptr) {
+ unimplemented_service_stub_ = UnimplementedService::NewStub(channel_);
+ }
+ return unimplemented_service_stub_.get();
}
void InteropClient::ServiceStub::Reset(std::shared_ptr<Channel> channel) {
@@ -943,7 +946,7 @@ bool InteropClient::DoCustomMetadata() {
const auto& server_initial_metadata = context.GetServerInitialMetadata();
auto iter = server_initial_metadata.find(kEchoInitialMetadataKey);
GPR_ASSERT(iter != server_initial_metadata.end());
- GPR_ASSERT(iter->second.data() == kInitialMetadataValue);
+ GPR_ASSERT(iter->second == kInitialMetadataValue);
const auto& server_trailing_metadata = context.GetServerTrailingMetadata();
iter = server_trailing_metadata.find(kEchoTrailingBinMetadataKey);
GPR_ASSERT(iter != server_trailing_metadata.end());
@@ -994,7 +997,7 @@ bool InteropClient::DoCustomMetadata() {
const auto& server_initial_metadata = context.GetServerInitialMetadata();
auto iter = server_initial_metadata.find(kEchoInitialMetadataKey);
GPR_ASSERT(iter != server_initial_metadata.end());
- GPR_ASSERT(iter->second.data() == kInitialMetadataValue);
+ GPR_ASSERT(iter->second == kInitialMetadataValue);
const auto& server_trailing_metadata = context.GetServerTrailingMetadata();
iter = server_trailing_metadata.find(kEchoTrailingBinMetadataKey);
GPR_ASSERT(iter != server_trailing_metadata.end());
diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h
index 7ec7ebee20..74f4db6b78 100644
--- a/test/cpp/interop/interop_client.h
+++ b/test/cpp/interop/interop_client.h
@@ -107,6 +107,7 @@ class InteropClient {
private:
std::unique_ptr<TestService::Stub> stub_;
+ std::unique_ptr<UnimplementedService::Stub> unimplemented_service_stub_;
std::shared_ptr<Channel> channel_;
bool new_stub_every_call_; // If true, a new stub is returned by every
// Get() call
diff --git a/test/cpp/interop/interop_server.cc b/test/cpp/interop/interop_server.cc
index 956840ba70..1810cd076f 100644
--- a/test/cpp/interop/interop_server.cc
+++ b/test/cpp/interop/interop_server.cc
@@ -91,7 +91,9 @@ void MaybeEchoMetadata(ServerContext* context) {
auto iter = client_metadata.find(kEchoInitialMetadataKey);
if (iter != client_metadata.end()) {
- context->AddInitialMetadata(kEchoInitialMetadataKey, iter->second.data());
+ context->AddInitialMetadata(
+ kEchoInitialMetadataKey,
+ grpc::string(iter->second.begin(), iter->second.end()));
}
iter = client_metadata.find(kEchoTrailingBinMetadataKey);
if (iter != client_metadata.end()) {
diff --git a/test/cpp/interop/stress_test.cc b/test/cpp/interop/stress_test.cc
index 562522de77..fdc0a613f3 100644
--- a/test/cpp/interop/stress_test.cc
+++ b/test/cpp/interop/stress_test.cc
@@ -45,9 +45,9 @@
#include "src/proto/grpc/testing/metrics.grpc.pb.h"
#include "src/proto/grpc/testing/metrics.pb.h"
-#include "test/cpp/interop/client_helper.h"
#include "test/cpp/interop/interop_client.h"
#include "test/cpp/interop/stress_interop_client.h"
+#include "test/cpp/util/create_test_channel.h"
#include "test/cpp/util/metrics_server.h"
#include "test/cpp/util/test_config.h"
@@ -67,9 +67,7 @@ DEFINE_int32(test_duration_secs, -1,
" forcefully terminated.");
DEFINE_string(server_addresses, "localhost:8080",
- "The list of server"
- "addresses. This option is ignored if either\n"
- "server_port or server_host is specified. The format is: \n"
+ "The list of server addresses. The format is: \n"
" \"<name_1>:<port_1>,<name_2>:<port_1>...<name_N>:<port_N>\"\n"
" Note: <name> can be servername or IP address.");
@@ -80,34 +78,6 @@ DEFINE_int32(num_stubs_per_channel, 1,
"indicates the max number of parallel RPC calls on each channel "
"at any given time.");
-DEFINE_string(test_case, "",
- "Configure different test cases. Valid options are:\n\n"
- "all : all test cases;\n"
- "cancel_after_begin : cancel stream after starting it;\n"
- "cancel_after_first_response: cancel on first response;\n"
- "client_compressed_streaming : compressed request streaming with "
- "client_compressed_unary : single compressed request;\n"
- "client_streaming : request streaming with single response;\n"
- "compute_engine_creds: large_unary with compute engine auth;\n"
- "custom_metadata: server will echo custom metadata;\n"
- "empty_stream : bi-di stream with no request/response;\n"
- "empty_unary : empty (zero bytes) request and response;\n"
- "half_duplex : half-duplex streaming;\n"
- "jwt_token_creds: large_unary with JWT token auth;\n"
- "large_unary : single request and (large) response;\n"
- "oauth2_auth_token: raw oauth2 access token auth;\n"
- "per_rpc_creds: raw oauth2 access token on a single rpc;\n"
- "ping_pong : full-duplex streaming;\n"
- "response streaming;\n"
- "server_compressed_streaming : single request with compressed "
- "server_compressed_unary : single compressed response;\n"
- "server_streaming : single request with response streaming;\n"
- "slow_consumer : single request with response streaming with "
- "slow client consumer;\n"
- "status_code_and_message: verify status code & message;\n"
- "timeout_on_sleeping_server: deadline exceeds on stream;\n"
- "unimplemented_method: client calls an unimplemented_method;\n");
-
// TODO(sreek): Add more test cases here in future
DEFINE_string(test_cases, "",
"List of test cases to call along with the"
@@ -147,14 +117,9 @@ DEFINE_bool(do_not_abort_on_transient_failures, true,
// Options from client.cc (for compatibility with interop test).
// TODO(sreek): Consolidate overlapping options
DEFINE_bool(use_tls, false, "Whether to use tls.");
-DEFINE_string(custom_credentials_type, "", "User provided credentials type.");
DEFINE_bool(use_test_ca, false, "False to use SSL roots for google");
-DEFINE_int32(server_port, 0, "Server port.");
-DEFINE_string(server_host, "127.0.0.1", "Server host to connect to");
DEFINE_string(server_host_override, "foo.test.google.fr",
"Override the server host which is sent in HTTP header");
-DEFINE_string(service_account_key_file, "",
- "Path to service account json key file.");
using grpc::testing::kTestCaseList;
using grpc::testing::MetricsService;
@@ -241,8 +206,6 @@ bool ParseTestCasesString(const grpc::string& test_cases,
void LogParameterInfo(const std::vector<grpc::string>& addresses,
const std::vector<std::pair<TestCaseType, int>>& tests) {
gpr_log(GPR_INFO, "server_addresses: %s", FLAGS_server_addresses.c_str());
- gpr_log(GPR_INFO, "server_host: %s", FLAGS_server_host.c_str());
- gpr_log(GPR_INFO, "server_port: %d", FLAGS_server_port);
gpr_log(GPR_INFO, "test_cases : %s", FLAGS_test_cases.c_str());
gpr_log(GPR_INFO, "sleep_duration_ms: %d", FLAGS_sleep_duration_ms);
gpr_log(GPR_INFO, "test_duration_secs: %d", FLAGS_test_duration_secs);
@@ -286,24 +249,11 @@ int main(int argc, char** argv) {
// Parse the server addresses
std::vector<grpc::string> server_addresses;
- if (FLAGS_server_port != 0) {
- // We are using interop_client style cmdline options.
- const int host_port_buf_size = 1024;
- char host_port[host_port_buf_size];
- snprintf(host_port, host_port_buf_size, "%s:%d", FLAGS_server_host.c_str(),
- FLAGS_server_port);
- std::string host_port_str(host_port);
- ParseCommaDelimitedString(host_port_str, server_addresses);
- } else {
- ParseCommaDelimitedString(FLAGS_server_addresses, server_addresses);
- }
+ ParseCommaDelimitedString(FLAGS_server_addresses, server_addresses);
// Parse test cases and weights
if (FLAGS_test_cases.length() == 0) {
- // We are using interop_client style test_case option
- FLAGS_test_cases = FLAGS_test_case + ":100";
- } else if (FLAGS_test_case != "") {
- gpr_log(GPR_ERROR, "specify --test_case or --test_cases but not both.");
+ gpr_log(GPR_ERROR, "No test cases supplied");
return 1;
}
@@ -341,12 +291,8 @@ int main(int argc, char** argv) {
channel_idx++) {
gpr_log(GPR_INFO, "Starting test with %s channel_idx=%d..", it->c_str(),
channel_idx);
- std::shared_ptr<grpc::Channel> channel;
- if (FLAGS_use_tls) {
- channel = grpc::testing::CreateChannelForTestCase(FLAGS_test_case);
- } else {
- channel = grpc::CreateChannel(*it, grpc::InsecureChannelCredentials());
- }
+ std::shared_ptr<grpc::Channel> channel = grpc::CreateTestChannel(
+ *it, FLAGS_server_host_override, FLAGS_use_tls, !FLAGS_use_test_ca);
// Create stub(s) for each channel
for (int stub_idx = 0; stub_idx < FLAGS_num_stubs_per_channel;
diff --git a/test/cpp/microbenchmarks/bm_fullstack.cc b/test/cpp/microbenchmarks/bm_fullstack.cc
index 6c0bf80488..bd158db522 100644
--- a/test/cpp/microbenchmarks/bm_fullstack.cc
+++ b/test/cpp/microbenchmarks/bm_fullstack.cc
@@ -443,6 +443,8 @@ BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
Server_AddInitialMetadata<RandomAsciiMetadata<31>, 1>);
BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
Server_AddInitialMetadata<RandomAsciiMetadata<100>, 1>);
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
+ Server_AddInitialMetadata<RandomAsciiMetadata<10>, 100>);
} // namespace testing
} // namespace grpc
diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h
index 18f9778fc6..baa9304cc2 100644
--- a/test/cpp/qps/client.h
+++ b/test/cpp/qps/client.h
@@ -51,7 +51,6 @@
#include "test/cpp/qps/histogram.h"
#include "test/cpp/qps/interarrival.h"
-#include "test/cpp/qps/limit_cores.h"
#include "test/cpp/qps/usage_timer.h"
#include "test/cpp/util/create_test_channel.h"
@@ -374,7 +373,7 @@ class ClientImpl : public Client {
ClientImpl(const ClientConfig& config,
std::function<std::unique_ptr<StubType>(std::shared_ptr<Channel>)>
create_stub)
- : cores_(LimitCores(config.core_list().data(), config.core_list_size())),
+ : cores_(gpr_cpu_num_cores()),
channels_(config.client_channels()),
create_stub_(create_stub) {
for (int i = 0; i < config.client_channels(); i++) {
diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc
index 93ef32db77..74fe3662c1 100644
--- a/test/cpp/qps/driver.cc
+++ b/test/cpp/qps/driver.cc
@@ -76,30 +76,6 @@ static std::string get_host(const std::string& worker) {
return s;
}
-static std::unordered_map<string, std::deque<int>> get_hosts_and_cores(
- const deque<string>& workers) {
- std::unordered_map<string, std::deque<int>> hosts;
- for (auto it = workers.begin(); it != workers.end(); it++) {
- const string host = get_host(*it);
- if (hosts.find(host) == hosts.end()) {
- auto stub = WorkerService::NewStub(
- CreateChannel(*it, InsecureChannelCredentials()));
- grpc::ClientContext ctx;
- ctx.set_wait_for_ready(true);
- CoreRequest dummy;
- CoreResponse cores;
- grpc::Status s = stub->CoreCount(&ctx, dummy, &cores);
- GPR_ASSERT(s.ok());
- std::deque<int> dq;
- for (int i = 0; i < cores.cores(); i++) {
- dq.push_back(i);
- }
- hosts[host] = dq;
- }
- }
- return hosts;
-}
-
static deque<string> get_workers(const string& env_name) {
char* env = gpr_getenv(env_name.c_str());
if (!env) {
@@ -210,7 +186,7 @@ std::unique_ptr<ScenarioResult> RunScenario(
const ClientConfig& initial_client_config, size_t num_clients,
const ServerConfig& initial_server_config, size_t num_servers,
int warmup_seconds, int benchmark_seconds, int spawn_local_worker_count,
- const char* qps_server_target_override, bool configure_core_lists) {
+ const char* qps_server_target_override) {
// Log everything from the driver
gpr_set_log_verbosity(GPR_LOG_SEVERITY_DEBUG);
@@ -279,9 +255,6 @@ std::unique_ptr<ScenarioResult> RunScenario(
std::vector<ServerData> servers(num_servers);
std::unordered_map<string, std::deque<int>> hosts_cores;
- if (configure_core_lists) {
- hosts_cores = get_hosts_and_cores(workers);
- }
for (size_t i = 0; i < num_servers; i++) {
gpr_log(GPR_INFO, "Starting server on %s (worker #%" PRIuPTR ")",
workers[i].c_str(), i);
@@ -289,37 +262,9 @@ std::unique_ptr<ScenarioResult> RunScenario(
CreateChannel(workers[i], InsecureChannelCredentials()));
ServerConfig server_config = initial_server_config;
- int server_core_limit = initial_server_config.core_limit();
- int client_core_limit = initial_client_config.core_limit();
-
- if (configure_core_lists) {
- string host_str(get_host(workers[i]));
- if (server_core_limit == 0 && client_core_limit > 0) {
- // In this case, limit the server cores if it matches the
- // same host as one or more clients
- const auto& dq = hosts_cores.at(host_str);
- bool match = false;
- int limit = dq.size();
- for (size_t cli = 0; cli < num_clients; cli++) {
- if (host_str == get_host(workers[cli + num_servers])) {
- limit -= client_core_limit;
- match = true;
- }
- }
- if (match) {
- GPR_ASSERT(limit > 0);
- server_core_limit = limit;
- }
- }
- if (server_core_limit > 0) {
- auto& dq = hosts_cores.at(host_str);
- GPR_ASSERT(dq.size() >= static_cast<size_t>(server_core_limit));
- gpr_log(GPR_INFO, "Setting server core_list");
- for (int core = 0; core < server_core_limit; core++) {
- server_config.add_core_list(dq.front());
- dq.pop_front();
- }
- }
+ if (server_config.core_limit() != 0) {
+ gpr_log(GPR_ERROR,
+ "server config core limit is set but ignored by driver");
}
ServerArgs args;
@@ -364,33 +309,8 @@ std::unique_ptr<ScenarioResult> RunScenario(
CreateChannel(worker, InsecureChannelCredentials()));
ClientConfig per_client_config = client_config;
- int server_core_limit = initial_server_config.core_limit();
- int client_core_limit = initial_client_config.core_limit();
- if (configure_core_lists &&
- ((server_core_limit > 0) || (client_core_limit > 0))) {
- auto& dq = hosts_cores.at(get_host(worker));
- if (client_core_limit == 0) {
- // limit client cores if it matches a server host
- bool match = false;
- int limit = dq.size();
- for (size_t srv = 0; srv < num_servers; srv++) {
- if (get_host(worker) == get_host(workers[srv])) {
- match = true;
- }
- }
- if (match) {
- GPR_ASSERT(limit > 0);
- client_core_limit = limit;
- }
- }
- if (client_core_limit > 0) {
- GPR_ASSERT(dq.size() >= static_cast<size_t>(client_core_limit));
- gpr_log(GPR_INFO, "Setting client core_list");
- for (int core = 0; core < client_core_limit; core++) {
- per_client_config.add_core_list(dq.front());
- dq.pop_front();
- }
- }
+ if (initial_client_config.core_limit() != 0) {
+ gpr_log(GPR_ERROR, "client config core limit set but ignored");
}
// Reduce channel count so that total channels specified is held regardless
diff --git a/test/cpp/qps/driver.h b/test/cpp/qps/driver.h
index b5c8152e1b..e72d30a4ef 100644
--- a/test/cpp/qps/driver.h
+++ b/test/cpp/qps/driver.h
@@ -46,8 +46,7 @@ std::unique_ptr<ScenarioResult> RunScenario(
const grpc::testing::ClientConfig& client_config, size_t num_clients,
const grpc::testing::ServerConfig& server_config, size_t num_servers,
int warmup_seconds, int benchmark_seconds, int spawn_local_worker_count,
- const char* qps_server_target_override = "",
- bool configure_core_lists = true);
+ const char* qps_server_target_override = "");
bool RunQuit();
} // namespace testing
diff --git a/test/cpp/qps/limit_cores.cc b/test/cpp/qps/limit_cores.cc
deleted file mode 100644
index b5c222542b..0000000000
--- a/test/cpp/qps/limit_cores.cc
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *
- * Copyright 2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include "test/cpp/qps/limit_cores.h"
-
-#include <grpc/support/cpu.h>
-#include <grpc/support/log.h>
-#include <grpc/support/port_platform.h>
-
-#ifdef GPR_CPU_LINUX
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-#include <sched.h>
-
-namespace grpc {
-namespace testing {
-
-int LimitCores(const int* cores, int cores_size) {
- const int num_cores = gpr_cpu_num_cores();
- int cores_set = 0;
-
- cpu_set_t* cpup = CPU_ALLOC(num_cores);
- GPR_ASSERT(cpup);
- const size_t size = CPU_ALLOC_SIZE(num_cores);
- CPU_ZERO_S(size, cpup);
-
- if (cores_size > 0) {
- for (int i = 0; i < cores_size; i++) {
- if (cores[i] < num_cores) {
- CPU_SET_S(cores[i], size, cpup);
- cores_set++;
- }
- }
- } else {
- for (int i = 0; i < num_cores; i++) {
- CPU_SET_S(i, size, cpup);
- cores_set++;
- }
- }
- bool affinity_set = (sched_setaffinity(0, size, cpup) == 0);
- CPU_FREE(cpup);
- return affinity_set ? cores_set : num_cores;
-}
-
-} // namespace testing
-} // namespace grpc
-#else
-namespace grpc {
-namespace testing {
-
-// LimitCores is not currently supported for non-Linux platforms
-int LimitCores(const int*, int) { return gpr_cpu_num_cores(); }
-
-} // namespace testing
-} // namespace grpc
-#endif
diff --git a/test/cpp/qps/limit_cores.h b/test/cpp/qps/limit_cores.h
deleted file mode 100644
index 5482904a3c..0000000000
--- a/test/cpp/qps/limit_cores.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *
- * Copyright 2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef TEST_QPS_LIMIT_CORES_H
-#define TEST_QPS_LIMIT_CORES_H
-
-namespace grpc {
-namespace testing {
-/// LimitCores: allow this worker to only run on the cores specified in the
-/// array \a cores, which is of length \a cores_size.
-///
-/// LimitCores takes array and size arguments (instead of vector) for direct
-/// conversion from repeated field of protobuf. Use a cores_size of 0 to remove
-/// existing limits (from an empty repeated field)
-int LimitCores(const int *cores, int cores_size);
-} // namespace testing
-} // namespace grpc
-
-#endif // TEST_QPS_LIMIT_CORES_H
diff --git a/test/cpp/qps/qps_json_driver.cc b/test/cpp/qps/qps_json_driver.cc
index 57ee5ef63c..ddaaa7ca75 100644
--- a/test/cpp/qps/qps_json_driver.cc
+++ b/test/cpp/qps/qps_json_driver.cc
@@ -70,9 +70,6 @@ DEFINE_double(error_tolerance, 0.01,
DEFINE_string(qps_server_target_override, "",
"Override QPS server target to configure in client configs."
"Only applicable if there is a single benchmark server.");
-DEFINE_bool(configure_core_lists, true,
- "Provide 'core_list' parameters to workers. Value determined "
- "by cores available and 'core_limit' parameters of the scenarios.");
namespace grpc {
namespace testing {
@@ -80,12 +77,12 @@ namespace testing {
static std::unique_ptr<ScenarioResult> RunAndReport(const Scenario& scenario,
bool* success) {
std::cerr << "RUNNING SCENARIO: " << scenario.name() << "\n";
- auto result = RunScenario(
- scenario.client_config(), scenario.num_clients(),
- scenario.server_config(), scenario.num_servers(),
- scenario.warmup_seconds(), scenario.benchmark_seconds(),
- scenario.spawn_local_worker_count(),
- FLAGS_qps_server_target_override.c_str(), FLAGS_configure_core_lists);
+ auto result =
+ RunScenario(scenario.client_config(), scenario.num_clients(),
+ scenario.server_config(), scenario.num_servers(),
+ scenario.warmup_seconds(), scenario.benchmark_seconds(),
+ scenario.spawn_local_worker_count(),
+ FLAGS_qps_server_target_override.c_str());
// Amend the result with scenario config. Eventually we should adjust
// RunScenario contract so we don't need to touch the result here.
diff --git a/test/cpp/qps/server.h b/test/cpp/qps/server.h
index c3d18e5789..821d5935be 100644
--- a/test/cpp/qps/server.h
+++ b/test/cpp/qps/server.h
@@ -42,7 +42,6 @@
#include "src/proto/grpc/testing/messages.grpc.pb.h"
#include "test/core/end2end/data/ssl_test_data.h"
#include "test/core/util/port.h"
-#include "test/cpp/qps/limit_cores.h"
#include "test/cpp/qps/usage_timer.h"
namespace grpc {
@@ -51,7 +50,7 @@ namespace testing {
class Server {
public:
explicit Server(const ServerConfig& config) : timer_(new UsageTimer) {
- cores_ = LimitCores(config.core_list().data(), config.core_list_size());
+ cores_ = gpr_cpu_num_cores();
if (config.port()) {
port_ = config.port();
diff --git a/test/cpp/test/server_context_test_spouse_test.cc b/test/cpp/test/server_context_test_spouse_test.cc
index e0d6a2ff67..eb279e2401 100644
--- a/test/cpp/test/server_context_test_spouse_test.cc
+++ b/test/cpp/test/server_context_test_spouse_test.cc
@@ -36,11 +36,14 @@
#include <cstring>
#include <vector>
+#include <grpc++/impl/grpc_library.h>
#include <gtest/gtest.h>
namespace grpc {
namespace testing {
+static internal::GrpcLibraryInitializer g_initializer;
+
const char key1[] = "metadata-key1";
const char key2[] = "metadata-key2";
const char val1[] = "metadata-val1";