From edec4f5f816ac4fb85833d56baccd37d1533bdc8 Mon Sep 17 00:00:00 2001
From: Craig Tiller <ctiller@google.com>
Date: Wed, 26 Apr 2017 08:17:52 -0700
Subject: [PATCH] Add support for server-side channel args to qps_test

---
 src/proto/grpc/testing/control.proto |  2 ++
 test/cpp/qps/server.h                | 25 +++++++++++++++++++++++++
 test/cpp/qps/server_async.cc         |  5 +----
 test/cpp/qps/server_sync.cc          |  5 +----
 4 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/proto/grpc/testing/control.proto b/src/proto/grpc/testing/control.proto
index acee86678d..cb35032c6d 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 8fbf37a095..d411d356e1 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 b499b82091..3ddc5707cb 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 f79284d225..9fe26e85ae 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_);
 
-- 
GitLab