aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar David Garcia Quintas <dgq@google.com>2016-06-15 22:53:08 -0700
committerGravatar David Garcia Quintas <dgq@google.com>2016-06-15 22:53:08 -0700
commit3fb8f7360b033874978e517043c7eec59e295e42 (patch)
treea783d62fb07f468f498bcdae9f89cf5170b43b42 /tools
parentfa9b7c1bc6488be17d18007f45c57dac39ea5b79 (diff)
gRPC LB policy
Diffstat (limited to 'tools')
-rwxr-xr-xtools/codegen/core/gen_grpclb_test_response.py97
-rw-r--r--tools/doxygen/Doxyfile.core.internal1
-rw-r--r--tools/run_tests/sources_and_headers.json19
-rw-r--r--tools/run_tests/tests.json21
4 files changed, 138 insertions, 0 deletions
diff --git a/tools/codegen/core/gen_grpclb_test_response.py b/tools/codegen/core/gen_grpclb_test_response.py
new file mode 100755
index 0000000000..4535efc738
--- /dev/null
+++ b/tools/codegen/core/gen_grpclb_test_response.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python2.7
+
+# Copyright 2015-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.
+
+from __future__ import print_function
+import argparse
+import subprocess
+import sys
+import os.path
+import sys
+import tempfile
+import importlib
+
+# Example: tools/codegen/core/gen_grpclb_test_response.py \
+# --lb_proto src/proto/grpc/lb/v1/load_balancer.proto \
+# 127.0.0.1:1234 10.0.0.1:4321
+
+# 1) Compile src/proto/grpc/lb/v1/load_balancer.proto to a temp location
+parser = argparse.ArgumentParser()
+parser.add_argument('--lb_proto', required=True)
+parser.add_argument('-e', '--expiration_interval_secs', type=int)
+parser.add_argument('-o', '--output')
+parser.add_argument('-q', '--quiet', default=False, action='store_true')
+parser.add_argument('ipports', nargs='+')
+args = parser.parse_args()
+
+if not os.path.isfile(args.lb_proto):
+ print("ERROR: file '{}' cannot be accessed (not found, no permissions, etc.)"
+ .format(args.lb_proto), file=sys.stderr)
+ sys.exit(1)
+
+proto_dirname = os.path.dirname(args.lb_proto)
+output_dir = tempfile.mkdtemp()
+
+protoc_cmd = 'protoc -I{} --python_out={} {}'.format(
+ proto_dirname, output_dir, args.lb_proto)
+
+with tempfile.TemporaryFile() as stderr_tmpfile:
+ if subprocess.call(protoc_cmd, stderr=stderr_tmpfile, shell=True) != 0:
+ stderr_tmpfile.seek(0)
+ print("ERROR: while running '{}': {}".
+ format(protoc_cmd, stderr_tmpfile.read()))
+ sys.exit(2)
+
+# 2) import the output .py file.
+module_name = os.path.splitext(os.path.basename(args.lb_proto))[0] + '_pb2'
+sys.path.append(output_dir)
+pb_module = importlib.import_module(module_name)
+
+# 3) Generate!
+lb_response = pb_module.LoadBalanceResponse()
+if args.expiration_interval_secs:
+ lb_response.server_list.expiration_interval.seconds = \
+ args.expiration_interval_secs
+
+for ipport in args.ipports:
+ ip, port = ipport.split(':')
+ server = lb_response.server_list.servers.add()
+ server.ip_address = ip
+ server.port = int(port)
+ server.load_balance_token = b'token{}'.format(port)
+
+serialized_bytes = lb_response.SerializeToString()
+serialized_hex = ''.join('\\x{:02x}'.format(ord(c)) for c in serialized_bytes)
+if args.output:
+ with open(args.output, 'w') as f:
+ f.write(serialized_bytes)
+if not args.quiet:
+ print(str(lb_response))
+ print(serialized_hex)
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index aee866adf4..62ae97a9a3 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -1100,6 +1100,7 @@ src/core/ext/transport/chttp2/server/insecure/server_chttp2.c \
src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c \
src/core/ext/transport/chttp2/client/insecure/channel_create.c \
src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c \
+src/core/ext/lb_policy/grpclb/grpclb.c \
src/core/ext/lb_policy/grpclb/load_balancer_api.c \
src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c \
third_party/nanopb/pb_common.c \
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 4aad52c69d..b2b0d5bf99 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -953,6 +953,22 @@
],
"headers": [],
"language": "c",
+ "name": "grpclb_test",
+ "src": [
+ "test/core/client_config/grpclb_test.c"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
"name": "hpack_parser_fuzzer_test",
"src": [
"test/core/transport/chttp2/hpack_parser_fuzzer_test.c"
@@ -4152,6 +4168,7 @@
"gpr",
"grpc_base",
"grpc_lb_policy_grpclb",
+ "grpc_lb_policy_grpclb",
"grpc_lb_policy_pick_first",
"grpc_lb_policy_round_robin",
"grpc_load_reporting",
@@ -4246,6 +4263,7 @@
"gpr",
"grpc_base",
"grpc_lb_policy_grpclb",
+ "grpc_lb_policy_grpclb",
"grpc_lb_policy_pick_first",
"grpc_lb_policy_round_robin",
"grpc_load_reporting",
@@ -6048,6 +6066,7 @@
"language": "c",
"name": "grpc_lb_policy_grpclb",
"src": [
+ "src/core/ext/lb_policy/grpclb/grpclb.c",
"src/core/ext/lb_policy/grpclb/load_balancer_api.c",
"src/core/ext/lb_policy/grpclb/load_balancer_api.h",
"src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c",
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index 5a84a41b63..bf439b43e9 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -1092,6 +1092,27 @@
"flaky": false,
"gtest": false,
"language": "c",
+ "name": "grpclb_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "args": [],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "flaky": false,
+ "gtest": false,
+ "language": "c",
"name": "hpack_parser_test",
"platforms": [
"linux",