diff --git a/src/proto/grpc/testing/control.proto b/src/proto/grpc/testing/control.proto index acee86678db2e34ac3612105b9da22ba5f30988c..cb35032c6d551b0feaff2365bab0551afcc22010 100644 --- a/src/proto/grpc/testing/control.proto +++ b/src/proto/grpc/testing/control.proto @@ -158,6 +158,8 @@ message ServerConfig { // Buffer pool size (no buffer pool specified if unset) int32 resource_quota_size = 1001; + + repeated ChannelArg channel_args = 1002; } message ServerArgs { diff --git a/test/cpp/qps/server.h b/test/cpp/qps/server.h index 8fbf37a0957869868fec4b68c75c0823f21e1b39..d411d356e17c6b0ba8a850ee0e5c83ff183d7ad7 100644 --- a/test/cpp/qps/server.h +++ b/test/cpp/qps/server.h @@ -34,8 +34,11 @@ #ifndef TEST_QPS_SERVER_H #define TEST_QPS_SERVER_H +#include <grpc++/resource_quota.h> #include <grpc++/security/server_credentials.h> +#include <grpc++/server_builder.h> #include <grpc/support/cpu.h> +#include <grpc/support/log.h> #include <vector> #include "src/proto/grpc/testing/control.pb.h" @@ -106,6 +109,28 @@ class Server { } } + static void ApplyServerConfig(const ServerConfig& config, + ServerBuilder* builder) { + if (config.resource_quota_size() > 0) { + builder->SetResourceQuota( + ResourceQuota("QpsServerTest").Resize(config.resource_quota_size())); + } + + for (auto arg : config.channel_args()) { + switch (arg.value_case()) { + case ChannelArg::kStrValue: + builder->AddChannelArgument(arg.name(), arg.str_value()); + break; + case ChannelArg::kIntValue: + builder->AddChannelArgument(arg.name(), arg.int_value()); + break; + default: + gpr_log(GPR_ERROR, "Channel arg '%s' ignored due to unknown type", + arg.name().c_str()); + } + } + } + private: int port_; int cores_; diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc index b499b82091e55d48d618a61677fbb7bd4ab5eb04..3ddc5707cbb961fdd002ea99d79163960ee4a0d6 100644 --- a/test/cpp/qps/server_async.cc +++ b/test/cpp/qps/server_async.cc @@ -96,10 +96,7 @@ class AsyncQpsServerTest final : public grpc::testing::Server { srv_cqs_.emplace_back(builder.AddCompletionQueue()); } - if (config.resource_quota_size() > 0) { - builder.SetResourceQuota(ResourceQuota("AsyncQpsServerTest") - .Resize(config.resource_quota_size())); - } + ApplyServerConfig(config, &builder); server_ = builder.BuildAndStart(); diff --git a/test/cpp/qps/server_sync.cc b/test/cpp/qps/server_sync.cc index f79284d2254b04f952aed145a088f135e7d9e142..9fe26e85ae1f1d605ddf58e2262cbc859bee2c64 100644 --- a/test/cpp/qps/server_sync.cc +++ b/test/cpp/qps/server_sync.cc @@ -94,10 +94,7 @@ class SynchronousServer final : public grpc::testing::Server { Server::CreateServerCredentials(config)); gpr_free(server_address); - if (config.resource_quota_size() > 0) { - builder.SetResourceQuota(ResourceQuota("AsyncQpsServerTest") - .Resize(config.resource_quota_size())); - } + ApplyServerConfig(config, &builder); builder.RegisterService(&service_);