Merge branch 'master' of https://github.com/grpc/grpc into no-more-extern-c

pull/13432/head
ncteisen 7 years ago
commit e7af52580d
  1. 2
      Makefile
  2. 4
      README.md
  3. 4
      WORKSPACE
  4. 6
      build.yaml
  5. 3
      examples/python/route_guide/route_guide_client.py
  6. 2
      requirements.txt
  7. 2
      setup.py
  8. 2
      src/compiler/cpp_generator.cc
  9. 2
      src/compiler/csharp_generator.cc
  10. 2
      src/compiler/node_generator.cc
  11. 2
      src/compiler/objective_c_generator.cc
  12. 20
      src/compiler/objective_c_plugin.cc
  13. 2
      src/compiler/php_generator.cc
  14. 1
      src/compiler/protobuf_plugin.h
  15. 2
      src/compiler/python_generator.cc
  16. 2
      src/compiler/ruby_generator.cc
  17. 1
      src/compiler/schema_interface.h
  18. 2
      src/core/lib/iomgr/sockaddr_utils.cc
  19. 96
      src/objective-c/tests/CoreCronetEnd2EndTests/CoreCronetEnd2EndTests.mm
  20. 8
      src/objective-c/tests/Tests.xcodeproj/project.pbxproj
  21. 65
      src/python/grpcio/grpc/__init__.py
  22. 15
      src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
  23. 14
      src/python/grpcio/grpc/_cython/_cygrpc/server.pyx.pxi
  24. 2
      src/python/grpcio_health_checking/setup.py
  25. 2
      src/python/grpcio_reflection/setup.py
  26. 2
      src/python/grpcio_testing/setup.py
  27. 4
      src/python/grpcio_tests/setup.py
  28. 9
      src/python/grpcio_tests/tests/unit/_api_test.py
  29. 45
      src/python/grpcio_tests/tests/unit/_server_ssl_cert_config_test.py
  30. 8
      templates/test/core/surface/public_headers_must_be_c89.c.template
  31. 2
      templates/tools/dockerfile/python_deps.include
  32. 564
      test/core/surface/public_headers_must_be_c89.c
  33. 3
      test/core/util/grpc_fuzzer.bzl
  34. 2
      third_party/protobuf
  35. 2
      tools/codegen/core/gen_nano_proto.sh
  36. 4
      tools/distrib/python/grpcio_tools/protoc_lib_deps.py
  37. 2
      tools/distrib/python/grpcio_tools/setup.py
  38. 2
      tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile
  39. 2
      tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile
  40. 2
      tools/dockerfile/interoptest/grpc_interop_cxx/Dockerfile
  41. 2
      tools/dockerfile/interoptest/grpc_interop_go/Dockerfile
  42. 2
      tools/dockerfile/interoptest/grpc_interop_go1.7/Dockerfile
  43. 2
      tools/dockerfile/interoptest/grpc_interop_go1.8/Dockerfile
  44. 2
      tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile
  45. 2
      tools/dockerfile/interoptest/grpc_interop_java/Dockerfile
  46. 2
      tools/dockerfile/interoptest/grpc_interop_java_oracle8/Dockerfile
  47. 2
      tools/dockerfile/interoptest/grpc_interop_node/Dockerfile
  48. 2
      tools/dockerfile/interoptest/grpc_interop_python/Dockerfile
  49. 2
      tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile
  50. 2
      tools/dockerfile/test/csharp_jessie_x64/Dockerfile
  51. 2
      tools/dockerfile/test/cxx_alpine_x64/Dockerfile
  52. 2
      tools/dockerfile/test/cxx_jessie_x64/Dockerfile
  53. 2
      tools/dockerfile/test/cxx_jessie_x86/Dockerfile
  54. 2
      tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile
  55. 2
      tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile
  56. 2
      tools/dockerfile/test/fuzzer/Dockerfile
  57. 2
      tools/dockerfile/test/multilang_jessie_x64/Dockerfile
  58. 2
      tools/dockerfile/test/node_jessie_x64/Dockerfile
  59. 2
      tools/dockerfile/test/php7_jessie_x64/Dockerfile
  60. 2
      tools/dockerfile/test/php_jessie_x64/Dockerfile
  61. 2
      tools/dockerfile/test/python_alpine_x64/Dockerfile
  62. 2
      tools/dockerfile/test/python_jessie_x64/Dockerfile
  63. 2
      tools/dockerfile/test/python_pyenv_x64/Dockerfile
  64. 2
      tools/dockerfile/test/ruby_jessie_x64/Dockerfile
  65. 2
      tools/dockerfile/test/sanity/Dockerfile
  66. 4
      tools/interop_matrix/README.md
  67. 29
      tools/interop_matrix/client_matrix.py
  68. 16
      tools/interop_matrix/create_matrix_images.py
  69. 36
      tools/interop_matrix/testcases/node__v1.0.1
  70. 5
      tools/run_tests/generated/configs.json
  71. 2
      tools/run_tests/sanity/check_submodules.sh

@ -114,7 +114,7 @@ CC_msan = clang
CXX_msan = clang++ CXX_msan = clang++
LD_msan = clang++ LD_msan = clang++
LDXX_msan = clang++ LDXX_msan = clang++
CPPFLAGS_msan = -O0 -fsanitize-coverage=edge -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS CPPFLAGS_msan = -O0 -fsanitize-coverage=edge -fsanitize=memory -fsanitize-memory-track-origins -fsanitize-memory-use-after-dtor -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS
LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,)
DEFINES_msan = NDEBUG DEFINES_msan = NDEBUG

@ -30,7 +30,6 @@ Libraries in different languages may be in different states of development. We a
| Shared C [core library] | [src/core](src/core) | 1.6 | | Shared C [core library] | [src/core](src/core) | 1.6 |
| C++ | [src/cpp](src/cpp) | 1.6 | | C++ | [src/cpp](src/cpp) | 1.6 |
| Ruby | [src/ruby](src/ruby) | 1.6 | | Ruby | [src/ruby](src/ruby) | 1.6 |
| NodeJS | [src/node](src/node) | 1.6 |
| Python | [src/python](src/python) | 1.6 | | Python | [src/python](src/python) | 1.6 |
| PHP | [src/php](src/php) | 1.6 | | PHP | [src/php](src/php) | 1.6 |
| C# | [src/csharp](src/csharp) | 1.6 | | C# | [src/csharp](src/csharp) | 1.6 |
@ -38,7 +37,8 @@ Libraries in different languages may be in different states of development. We a
Java source code is in the [grpc-java](http://github.com/grpc/grpc-java) Java source code is in the [grpc-java](http://github.com/grpc/grpc-java)
repository. Go source code is in the repository. Go source code is in the
[grpc-go](http://github.com/grpc/grpc-go) repository. [grpc-go](http://github.com/grpc/grpc-go) repository. NodeJS source code is in the
[grpc-node](https://github.com/grpc/grpc-node) repository.
See [MANIFEST.md](MANIFEST.md) for a listing of top-level items in the See [MANIFEST.md](MANIFEST.md) for a listing of top-level items in the
repository. repository.

@ -73,8 +73,8 @@ new_http_archive(
http_archive( http_archive(
name = "com_google_protobuf", name = "com_google_protobuf",
strip_prefix = "protobuf-80a37e0782d2d702d52234b62dd4b9ec74fd2c95", strip_prefix = "protobuf-2761122b810fe8861004ae785cc3ab39f384d342",
url = "https://github.com/google/protobuf/archive/80a37e0782d2d702d52234b62dd4b9ec74fd2c95.tar.gz", url = "https://github.com/google/protobuf/archive/2761122b810fe8861004ae785cc3ab39f384d342.tar.gz",
) )
new_http_archive( new_http_archive(

@ -4915,8 +4915,8 @@ configs:
msan: msan:
CC: clang CC: clang
CPPFLAGS: -O0 -fsanitize-coverage=edge -fsanitize=memory -fsanitize-memory-track-origins CPPFLAGS: -O0 -fsanitize-coverage=edge -fsanitize=memory -fsanitize-memory-track-origins
-fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fsanitize-memory-use-after-dtor -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0
-Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie -DGPR_NO_DIRECT_SYSCALLS
CXX: clang++ CXX: clang++
DEFINES: NDEBUG DEFINES: NDEBUG
LD: clang++ LD: clang++
@ -4924,6 +4924,8 @@ configs:
-fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,) -fPIE -pie $(if $(JENKINS_BUILD),-Wl$(comma)-Ttext-segment=0x7e0000000000,)
LDXX: clang++ LDXX: clang++
compile_the_world: true compile_the_world: true
test_environ:
MSAN_OPTIONS: poison_in_dtor=1
mutrace: mutrace:
CPPFLAGS: -O3 -fno-omit-frame-pointer CPPFLAGS: -O3 -fno-omit-frame-pointer
DEFINES: NDEBUG DEFINES: NDEBUG

@ -17,7 +17,6 @@
from __future__ import print_function from __future__ import print_function
import random import random
import time
import grpc import grpc
@ -66,7 +65,6 @@ def generate_route(feature_list):
random_feature = feature_list[random.randint(0, len(feature_list) - 1)] random_feature = feature_list[random.randint(0, len(feature_list) - 1)]
print("Visiting point %s" % random_feature.location) print("Visiting point %s" % random_feature.location)
yield random_feature.location yield random_feature.location
time.sleep(random.uniform(0.5, 1.5))
def guide_record_route(stub): def guide_record_route(stub):
@ -91,7 +89,6 @@ def generate_messages():
for msg in messages: for msg in messages:
print("Sending %s at %s" % (msg.message, msg.location)) print("Sending %s at %s" % (msg.message, msg.location))
yield msg yield msg
time.sleep(random.uniform(0.5, 1.0))
def guide_route_chat(stub): def guide_route_chat(stub):

@ -3,6 +3,6 @@ coverage>=4.0
cython>=0.23 cython>=0.23
enum34>=1.0.4 enum34>=1.0.4
futures>=2.2.0 futures>=2.2.0
protobuf>=3.2.0 protobuf>=3.5.0.post1
six>=1.10 six>=1.10
wheel>=0.29 wheel>=0.29

@ -237,7 +237,7 @@ INSTALL_REQUIRES = (
'six>=1.5.2', 'six>=1.5.2',
# TODO(atash): eventually split the grpcio package into a metapackage # TODO(atash): eventually split the grpcio package into a metapackage
# depending on protobuf and the runtime component (independent of protobuf) # depending on protobuf and the runtime component (independent of protobuf)
'protobuf>=3.3.0', 'protobuf>=3.5.0.post1',
) )
if not PY3: if not PY3:

@ -104,7 +104,7 @@ grpc::string GetHeaderPrologue(grpc_generator::File* file,
grpc::string leading_comments = file->GetLeadingComments("//"); grpc::string leading_comments = file->GetLeadingComments("//");
if (!leading_comments.empty()) { if (!leading_comments.empty()) {
printer->Print(vars, "// Original file comments:\n"); printer->Print(vars, "// Original file comments:\n");
printer->Print(leading_comments.c_str()); printer->PrintRaw(leading_comments.c_str());
} }
printer->Print(vars, "#ifndef GRPC_$filename_identifier$__INCLUDED\n"); printer->Print(vars, "#ifndef GRPC_$filename_identifier$__INCLUDED\n");
printer->Print(vars, "#define GRPC_$filename_identifier$__INCLUDED\n"); printer->Print(vars, "#define GRPC_$filename_identifier$__INCLUDED\n");

@ -666,7 +666,7 @@ grpc::string GetServices(const FileDescriptor* file, bool generate_client,
grpc::string leading_comments = GetCsharpComments(file, true); grpc::string leading_comments = GetCsharpComments(file, true);
if (!leading_comments.empty()) { if (!leading_comments.empty()) {
out.Print("// Original file comments:\n"); out.Print("// Original file comments:\n");
out.Print(leading_comments.c_str()); out.PrintRaw(leading_comments.c_str());
} }
out.Print("#pragma warning disable 1591\n"); out.Print("#pragma warning disable 1591\n");

@ -250,7 +250,7 @@ grpc::string GenerateFile(const FileDescriptor* file) {
grpc::string leading_comments = GetNodeComments(file, true); grpc::string leading_comments = GetNodeComments(file, true);
if (!leading_comments.empty()) { if (!leading_comments.empty()) {
out.Print("// Original file comments:\n"); out.Print("// Original file comments:\n");
out.Print(leading_comments.c_str()); out.PrintRaw(leading_comments.c_str());
} }
out.Print("'use strict';\n"); out.Print("'use strict';\n");

@ -65,7 +65,7 @@ static void PrintAllComments(const DescriptorType* desc, Printer* printer) {
printer->Print(" * "); printer->Print(" * ");
size_t start_pos = it->find_first_not_of(' '); size_t start_pos = it->find_first_not_of(' ');
if (start_pos != grpc::string::npos) { if (start_pos != grpc::string::npos) {
printer->Print(it->c_str() + start_pos); printer->PrintRaw(it->c_str() + start_pos);
} }
printer->Print("\n"); printer->Print("\n");
} }

@ -51,12 +51,15 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
{ {
// Generate .pbrpc.h // Generate .pbrpc.h
::grpc::string imports = ::grpc::string("#import \"") + file_name + ::grpc::string imports =
".pbobjc.h\"\n\n" ::grpc::string("#if !GPB_GRPC_FORWARD_DECLARE_MESSAGE_PROTO\n") +
"#import <ProtoRPC/ProtoService.h>\n" "#import \"" + file_name +
"#import <ProtoRPC/ProtoRPC.h>\n" ".pbobjc.h\"\n"
"#import <RxLibrary/GRXWriteable.h>\n" "#endif\n\n"
"#import <RxLibrary/GRXWriter.h>\n"; "#import <ProtoRPC/ProtoService.h>\n"
"#import <ProtoRPC/ProtoRPC.h>\n"
"#import <RxLibrary/GRXWriteable.h>\n"
"#import <RxLibrary/GRXWriter.h>\n";
::grpc::string proto_imports; ::grpc::string proto_imports;
proto_imports += "#if GPB_GRPC_FORWARD_DECLARE_MESSAGE_PROTO\n" + proto_imports += "#if GPB_GRPC_FORWARD_DECLARE_MESSAGE_PROTO\n" +
@ -105,7 +108,10 @@ class ObjectiveCGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
// Generate .pbrpc.m // Generate .pbrpc.m
::grpc::string imports = ::grpc::string("#import \"") + file_name + ::grpc::string imports = ::grpc::string("#import \"") + file_name +
".pbrpc.h\"\n\n" ".pbrpc.h\"\n"
"#import \"" +
file_name +
".pbobjc.h\"\n\n"
"#import <ProtoRPC/ProtoRPC.h>\n" "#import <ProtoRPC/ProtoRPC.h>\n"
"#import <RxLibrary/GRXWriter+Immediate.h>\n"; "#import <RxLibrary/GRXWriter+Immediate.h>\n";
for (int i = 0; i < file->dependency_count(); i++) { for (int i = 0; i < file->dependency_count(); i++) {

@ -164,7 +164,7 @@ grpc::string GenerateFile(const FileDescriptor* file,
grpc::string leading_comments = GetPHPComments(file, "//"); grpc::string leading_comments = GetPHPComments(file, "//");
if (!leading_comments.empty()) { if (!leading_comments.empty()) {
out.Print("// Original file comments:\n"); out.Print("// Original file comments:\n");
out.Print(leading_comments.c_str()); out.PrintRaw(leading_comments.c_str());
} }
map<grpc::string, grpc::string> vars; map<grpc::string, grpc::string> vars;

@ -141,6 +141,7 @@ class ProtoBufPrinter : public grpc_generator::Printer {
} }
void Print(const char* string) { printer_.Print(string); } void Print(const char* string) { printer_.Print(string); }
void PrintRaw(const char* string) { printer_.PrintRaw(string); }
void Indent() { printer_.Indent(); } void Indent() { printer_.Indent(); }
void Outdent() { printer_.Outdent(); } void Outdent() { printer_.Outdent(); }

@ -101,7 +101,7 @@ void PrivateGenerator::PrintAllComments(StringVector comments,
++it) { ++it) {
size_t start_pos = it->find_first_not_of(' '); size_t start_pos = it->find_first_not_of(' ');
if (start_pos != grpc::string::npos) { if (start_pos != grpc::string::npos) {
out->Print(it->c_str() + start_pos); out->PrintRaw(it->c_str() + start_pos);
} }
out->Print("\n"); out->Print("\n");
} }

@ -174,7 +174,7 @@ grpc::string GetServices(const FileDescriptor* file) {
grpc::string leading_comments = GetRubyComments(file, true); grpc::string leading_comments = GetRubyComments(file, true);
if (!leading_comments.empty()) { if (!leading_comments.empty()) {
out.Print("# Original file comments:\n"); out.Print("# Original file comments:\n");
out.Print(leading_comments.c_str()); out.PrintRaw(leading_comments.c_str());
} }
out.Print("\n"); out.Print("\n");

@ -86,6 +86,7 @@ struct Printer {
virtual void Print(const std::map<grpc::string, grpc::string>& vars, virtual void Print(const std::map<grpc::string, grpc::string>& vars,
const char* template_string) = 0; const char* template_string) = 0;
virtual void Print(const char* string) = 0; virtual void Print(const char* string) = 0;
virtual void PrintRaw(const char* string) = 0;
virtual void Indent() = 0; virtual void Indent() = 0;
virtual void Outdent() = 0; virtual void Outdent() = 0;
}; };

@ -148,7 +148,7 @@ int grpc_sockaddr_to_string(char** out,
grpc_resolved_address addr_normalized; grpc_resolved_address addr_normalized;
char ntop_buf[INET6_ADDRSTRLEN]; char ntop_buf[INET6_ADDRSTRLEN];
const void* ip = nullptr; const void* ip = nullptr;
int port; int port = 0;
uint32_t sin6_scope_id = 0; uint32_t sin6_scope_id = 0;
int ret; int ret;

@ -58,7 +58,7 @@ static grpc_end2end_test_fixture chttp2_create_fixture_secure_fullstack(
grpc_end2end_test_fixture f; grpc_end2end_test_fixture f;
int port = grpc_pick_unused_port_or_die(); int port = grpc_pick_unused_port_or_die();
fullstack_secure_fixture_data *ffd = fullstack_secure_fixture_data *ffd =
gpr_malloc(sizeof(fullstack_secure_fixture_data)); (fullstack_secure_fixture_data*)gpr_malloc(sizeof(fullstack_secure_fixture_data));
memset(&f, 0, sizeof(f)); memset(&f, 0, sizeof(f));
gpr_join_host_port(&ffd->localaddr, "127.0.0.1", port); gpr_join_host_port(&ffd->localaddr, "127.0.0.1", port);
@ -81,7 +81,7 @@ static void process_auth_failure(void *state, grpc_auth_context *ctx,
static void cronet_init_client_secure_fullstack(grpc_end2end_test_fixture *f, static void cronet_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
grpc_channel_args *client_args, grpc_channel_args *client_args,
stream_engine *cronetEngine) { stream_engine *cronetEngine) {
fullstack_secure_fixture_data *ffd = f->fixture_data; fullstack_secure_fixture_data *ffd = (fullstack_secure_fixture_data *)f->fixture_data;
f->client = grpc_cronet_secure_channel_create(cronetEngine, ffd->localaddr, f->client = grpc_cronet_secure_channel_create(cronetEngine, ffd->localaddr,
client_args, NULL); client_args, NULL);
GPR_ASSERT(f->client != NULL); GPR_ASSERT(f->client != NULL);
@ -90,7 +90,7 @@ static void cronet_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
static void chttp2_init_server_secure_fullstack( static void chttp2_init_server_secure_fullstack(
grpc_end2end_test_fixture *f, grpc_channel_args *server_args, grpc_end2end_test_fixture *f, grpc_channel_args *server_args,
grpc_server_credentials *server_creds) { grpc_server_credentials *server_creds) {
fullstack_secure_fixture_data *ffd = f->fixture_data; fullstack_secure_fixture_data *ffd = (fullstack_secure_fixture_data *)f->fixture_data;
if (f->server) { if (f->server) {
grpc_server_destroy(f->server); grpc_server_destroy(f->server);
} }
@ -103,7 +103,7 @@ static void chttp2_init_server_secure_fullstack(
} }
static void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) { static void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) {
fullstack_secure_fixture_data *ffd = f->fixture_data; fullstack_secure_fixture_data *ffd = (fullstack_secure_fixture_data *)f->fixture_data;
gpr_free(ffd->localaddr); gpr_free(ffd->localaddr);
gpr_free(ffd); gpr_free(ffd);
} }
@ -171,7 +171,7 @@ static char *roots_filename;
FILE *roots_file; FILE *roots_file;
size_t roots_size = strlen(test_root_cert); size_t roots_size = strlen(test_root_cert);
char *argv[] = {"CoreCronetEnd2EndTests"}; char *argv[] = {(char *)"CoreCronetEnd2EndTests"};
grpc_test_init(1, argv); grpc_test_init(1, argv);
grpc_end2end_tests_pre_init(); grpc_end2end_tests_pre_init();
@ -207,7 +207,7 @@ static char *roots_filename;
} }
- (void)testIndividualCase:(char *)test_case { - (void)testIndividualCase:(char *)test_case {
char *argv[] = {"h2_ssl", test_case}; char *argv[] = {(char *)"h2_ssl", test_case};
for (int i = 0; i < sizeof(configs) / sizeof(*configs); i++) { for (int i = 0; i < sizeof(configs) / sizeof(*configs); i++) {
grpc_end2end_tests(sizeof(argv) / sizeof(argv[0]), argv, configs[i]); grpc_end2end_tests(sizeof(argv) / sizeof(argv[0]), argv, configs[i]);
@ -217,182 +217,182 @@ static char *roots_filename;
// TODO(mxyan): Use NSStringFromSelector(_cmd) to acquire test name from the // TODO(mxyan): Use NSStringFromSelector(_cmd) to acquire test name from the
// test case method name, so that bodies of test cases can stay identical // test case method name, so that bodies of test cases can stay identical
- (void)testAuthorityNotSupported { - (void)testAuthorityNotSupported {
[self testIndividualCase:"authority_not_supported"]; [self testIndividualCase:(char *)"authority_not_supported"];
} }
- (void)testBadHostname { - (void)testBadHostname {
[self testIndividualCase:"bad_hostname"]; [self testIndividualCase:(char *)"bad_hostname"];
} }
- (void)testBinaryMetadata { - (void)testBinaryMetadata {
// NOT SUPPORTED // NOT SUPPORTED
//[self testIndividualCase:"binary_metadata"]; //[self testIndividualCase:(char *)"binary_metadata"];
} }
- (void)testCallCreds { - (void)testCallCreds {
// NOT SUPPORTED // NOT SUPPORTED
// [self testIndividualCase:"call_creds"]; // [self testIndividualCase:(char *)"call_creds"];
} }
- (void)testCancelAfterAccept { - (void)testCancelAfterAccept {
[self testIndividualCase:"cancel_after_accept"]; [self testIndividualCase:(char *)"cancel_after_accept"];
} }
- (void)testCancelAfterClientDone { - (void)testCancelAfterClientDone {
[self testIndividualCase:"cancel_after_client_done"]; [self testIndividualCase:(char *)"cancel_after_client_done"];
} }
- (void)testCancelAfterInvoke { - (void)testCancelAfterInvoke {
[self testIndividualCase:"cancel_after_invoke"]; [self testIndividualCase:(char *)"cancel_after_invoke"];
} }
- (void)testCancelAfterRoundTrip { - (void)testCancelAfterRoundTrip {
[self testIndividualCase:"cancel_after_round_trip"]; [self testIndividualCase:(char *)"cancel_after_round_trip"];
} }
- (void)testCancelBeforeInvoke { - (void)testCancelBeforeInvoke {
[self testIndividualCase:"cancel_before_invoke"]; [self testIndividualCase:(char *)"cancel_before_invoke"];
} }
- (void)testCancelInAVacuum { - (void)testCancelInAVacuum {
[self testIndividualCase:"cancel_in_a_vacuum"]; [self testIndividualCase:(char *)"cancel_in_a_vacuum"];
} }
- (void)testCancelWithStatus { - (void)testCancelWithStatus {
[self testIndividualCase:"cancel_with_status"]; [self testIndividualCase:(char *)"cancel_with_status"];
} }
- (void)testCompressedPayload { - (void)testCompressedPayload {
[self testIndividualCase:"compressed_payload"]; [self testIndividualCase:(char *)"compressed_payload"];
} }
- (void)testConnectivity { - (void)testConnectivity {
// NOT SUPPORTED // NOT SUPPORTED
// [self testIndividualCase:"connectivity"]; // [self testIndividualCase:(char *)"connectivity"];
} }
- (void)testDefaultHost { - (void)testDefaultHost {
[self testIndividualCase:"default_host"]; [self testIndividualCase:(char *)"default_host"];
} }
- (void)testDisappearingServer { - (void)testDisappearingServer {
[self testIndividualCase:"disappearing_server"]; [self testIndividualCase:(char *)"disappearing_server"];
} }
- (void)testEmptyBatch { - (void)testEmptyBatch {
[self testIndividualCase:"empty_batch"]; [self testIndividualCase:(char *)"empty_batch"];
} }
- (void)testFilterCausesClose { - (void)testFilterCausesClose {
// NOT SUPPORTED // NOT SUPPORTED
// [self testIndividualCase:"filter_causes_close"]; // [self testIndividualCase:(char *)"filter_causes_close"];
} }
- (void)testGracefulServerShutdown { - (void)testGracefulServerShutdown {
[self testIndividualCase:"graceful_server_shutdown"]; [self testIndividualCase:(char *)"graceful_server_shutdown"];
} }
- (void)testHighInitialSeqno { - (void)testHighInitialSeqno {
[self testIndividualCase:"high_initial_seqno"]; [self testIndividualCase:(char *)"high_initial_seqno"];
} }
- (void)testHpackSize { - (void)testHpackSize {
// NOT SUPPORTED // NOT SUPPORTED
// [self testIndividualCase:"hpack_size"]; // [self testIndividualCase:(char *)"hpack_size"];
} }
- (void)testIdempotentRequest { - (void)testIdempotentRequest {
// NOT SUPPORTED // NOT SUPPORTED
// [self testIndividualCase:"idempotent_request"]; // [self testIndividualCase:(char *)"idempotent_request"];
} }
- (void)testInvokeLargeRequest { - (void)testInvokeLargeRequest {
// NOT SUPPORTED (frame size) // NOT SUPPORTED (frame size)
// [self testIndividualCase:"invoke_large_request"]; // [self testIndividualCase:(char *)"invoke_large_request"];
} }
- (void)testLargeMetadata { - (void)testLargeMetadata {
// NOT SUPPORTED // NOT SUPPORTED
// [self testIndividualCase:"large_metadata"]; // [self testIndividualCase:(char *)"large_metadata"];
} }
- (void)testMaxConcurrentStreams { - (void)testMaxConcurrentStreams {
[self testIndividualCase:"max_concurrent_streams"]; [self testIndividualCase:(char *)"max_concurrent_streams"];
} }
- (void)testMaxMessageLength { - (void)testMaxMessageLength {
// NOT SUPPORTED (close_error) // NOT SUPPORTED (close_error)
// [self testIndividualCase:"max_message_length"]; // [self testIndividualCase:(char *)"max_message_length"];
} }
- (void)testNegativeDeadline { - (void)testNegativeDeadline {
[self testIndividualCase:"negative_deadline"]; [self testIndividualCase:(char *)"negative_deadline"];
} }
- (void)testNetworkStatusChange { - (void)testNetworkStatusChange {
[self testIndividualCase:"network_status_change"]; [self testIndividualCase:(char *)"network_status_change"];
} }
- (void)testNoOp { - (void)testNoOp {
[self testIndividualCase:"no_op"]; [self testIndividualCase:(char *)"no_op"];
} }
- (void)testPayload { - (void)testPayload {
[self testIndividualCase:"payload"]; [self testIndividualCase:(char *)"payload"];
} }
- (void)testPing { - (void)testPing {
// NOT SUPPORTED // NOT SUPPORTED
// [self testIndividualCase:"ping"]; // [self testIndividualCase:(char *)"ping"];
} }
- (void)testPingPongStreaming { - (void)testPingPongStreaming {
[self testIndividualCase:"ping_pong_streaming"]; [self testIndividualCase:(char *)"ping_pong_streaming"];
} }
- (void)testRegisteredCall { - (void)testRegisteredCall {
[self testIndividualCase:"registered_call"]; [self testIndividualCase:(char *)"registered_call"];
} }
- (void)testRequestWithFlags { - (void)testRequestWithFlags {
// NOT SUPPORTED // NOT SUPPORTED
// [self testIndividualCase:"request_with_flags"]; // [self testIndividualCase:(char *)"request_with_flags"];
} }
- (void)testRequestWithPayload { - (void)testRequestWithPayload {
[self testIndividualCase:"request_with_payload"]; [self testIndividualCase:(char *)"request_with_payload"];
} }
- (void)testServerFinishesRequest { - (void)testServerFinishesRequest {
[self testIndividualCase:"server_finishes_request"]; [self testIndividualCase:(char *)"server_finishes_request"];
} }
- (void)testShutdownFinishesCalls { - (void)testShutdownFinishesCalls {
[self testIndividualCase:"shutdown_finishes_calls"]; [self testIndividualCase:(char *)"shutdown_finishes_calls"];
} }
- (void)testShutdownFinishesTags { - (void)testShutdownFinishesTags {
[self testIndividualCase:"shutdown_finishes_tags"]; [self testIndividualCase:(char *)"shutdown_finishes_tags"];
} }
- (void)testSimpleDelayedRequest { - (void)testSimpleDelayedRequest {
[self testIndividualCase:"simple_delayed_request"]; [self testIndividualCase:(char *)"simple_delayed_request"];
} }
- (void)testSimpleMetadata { - (void)testSimpleMetadata {
[self testIndividualCase:"simple_metadata"]; [self testIndividualCase:(char *)"simple_metadata"];
} }
- (void)testSimpleRequest { - (void)testSimpleRequest {
[self testIndividualCase:"simple_request"]; [self testIndividualCase:(char *)"simple_request"];
} }
- (void)testStreamingErrorResponse { - (void)testStreamingErrorResponse {
[self testIndividualCase:"streaming_error_response"]; [self testIndividualCase:(char *)"streaming_error_response"];
} }
- (void)testTrailingMetadata { - (void)testTrailingMetadata {
[self testIndividualCase:"trailing_metadata"]; [self testIndividualCase:(char *)"trailing_metadata"];
} }
@end @end

@ -14,7 +14,7 @@
20DFDF829DD993A4A00D5662 /* libPods-RxLibraryUnitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A58BE6DF1C62D1739EBB2C78 /* libPods-RxLibraryUnitTests.a */; }; 20DFDF829DD993A4A00D5662 /* libPods-RxLibraryUnitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A58BE6DF1C62D1739EBB2C78 /* libPods-RxLibraryUnitTests.a */; };
333E8FC01C8285B7C547D799 /* libPods-InteropTestsLocalCleartext.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD346DB2C23F676C4842F3FF /* libPods-InteropTestsLocalCleartext.a */; }; 333E8FC01C8285B7C547D799 /* libPods-InteropTestsLocalCleartext.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD346DB2C23F676C4842F3FF /* libPods-InteropTestsLocalCleartext.a */; };
3D7C85F6AA68C4A205E3BA16 /* libPods-Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 20DFF2F3C97EF098FE5A3171 /* libPods-Tests.a */; }; 3D7C85F6AA68C4A205E3BA16 /* libPods-Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 20DFF2F3C97EF098FE5A3171 /* libPods-Tests.a */; };
5E8A5DA71D3840B4000F8BC4 /* CoreCronetEnd2EndTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E8A5DA61D3840B4000F8BC4 /* CoreCronetEnd2EndTests.m */; }; 5E8A5DA71D3840B4000F8BC4 /* CoreCronetEnd2EndTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5E8A5DA61D3840B4000F8BC4 /* CoreCronetEnd2EndTests.mm */; };
5E8A5DA91D3840B4000F8BC4 /* libTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 635697C71B14FC11007A7283 /* libTests.a */; }; 5E8A5DA91D3840B4000F8BC4 /* libTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 635697C71B14FC11007A7283 /* libTests.a */; };
5EAD6D271E27047400002378 /* CronetUnitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EAD6D261E27047400002378 /* CronetUnitTests.m */; }; 5EAD6D271E27047400002378 /* CronetUnitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EAD6D261E27047400002378 /* CronetUnitTests.m */; };
5EAD6D291E27047400002378 /* libTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 635697C71B14FC11007A7283 /* libTests.a */; }; 5EAD6D291E27047400002378 /* libTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 635697C71B14FC11007A7283 /* libTests.a */; };
@ -140,7 +140,7 @@
573450F334B331D0BED8B961 /* Pods-CoreCronetEnd2EndTests.cronet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CoreCronetEnd2EndTests.cronet.xcconfig"; path = "Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests.cronet.xcconfig"; sourceTree = "<group>"; }; 573450F334B331D0BED8B961 /* Pods-CoreCronetEnd2EndTests.cronet.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CoreCronetEnd2EndTests.cronet.xcconfig"; path = "Pods/Target Support Files/Pods-CoreCronetEnd2EndTests/Pods-CoreCronetEnd2EndTests.cronet.xcconfig"; sourceTree = "<group>"; };
5761E98978DDDF136A58CB7E /* Pods-AllTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AllTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-AllTests/Pods-AllTests.release.xcconfig"; sourceTree = "<group>"; }; 5761E98978DDDF136A58CB7E /* Pods-AllTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AllTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-AllTests/Pods-AllTests.release.xcconfig"; sourceTree = "<group>"; };
5E8A5DA41D3840B4000F8BC4 /* CoreCronetEnd2EndTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreCronetEnd2EndTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 5E8A5DA41D3840B4000F8BC4 /* CoreCronetEnd2EndTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreCronetEnd2EndTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5E8A5DA61D3840B4000F8BC4 /* CoreCronetEnd2EndTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CoreCronetEnd2EndTests.m; sourceTree = "<group>"; }; 5E8A5DA61D3840B4000F8BC4 /* CoreCronetEnd2EndTests.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = CoreCronetEnd2EndTests.mm; sourceTree = "<group>"; };
5EAD6D241E27047400002378 /* CronetUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CronetUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 5EAD6D241E27047400002378 /* CronetUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CronetUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5EAD6D261E27047400002378 /* CronetUnitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CronetUnitTests.m; sourceTree = "<group>"; }; 5EAD6D261E27047400002378 /* CronetUnitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CronetUnitTests.m; sourceTree = "<group>"; };
5EAD6D281E27047400002378 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 5EAD6D281E27047400002378 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@ -343,7 +343,7 @@
5E8A5DA51D3840B4000F8BC4 /* CoreCronetEnd2EndTests */ = { 5E8A5DA51D3840B4000F8BC4 /* CoreCronetEnd2EndTests */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
5E8A5DA61D3840B4000F8BC4 /* CoreCronetEnd2EndTests.m */, 5E8A5DA61D3840B4000F8BC4 /* CoreCronetEnd2EndTests.mm */,
); );
path = CoreCronetEnd2EndTests; path = CoreCronetEnd2EndTests;
sourceTree = "<group>"; sourceTree = "<group>";
@ -1196,7 +1196,7 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
5E8A5DA71D3840B4000F8BC4 /* CoreCronetEnd2EndTests.m in Sources */, 5E8A5DA71D3840B4000F8BC4 /* CoreCronetEnd2EndTests.mm in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

@ -424,17 +424,19 @@ class ServerCredentials(object):
self._credentials = credentials self._credentials = credentials
class ServerCertificateConfig(object): class ServerCertificateConfiguration(object):
"""A certificate config for use with an SSL-enabled Server, e.g., can """A certificate configuration for use with an SSL-enabled Server.
be returned in the certificate config fetching callback.
Instances of this class can be returned in the certificate configuration
fetching callback.
This class has no supported interface -- it exists to define the This class has no supported interface -- it exists to define the
type of its instances and its instances exist to be passed to type of its instances and its instances exist to be passed to
other functions. other functions.
""" """
def __init__(self, cert_config): def __init__(self, certificate_configuration):
self._cert_config = cert_config self._certificate_configuration = certificate_configuration
######################## Multi-Callable Interfaces ########################### ######################## Multi-Callable Interfaces ###########################
@ -1265,9 +1267,9 @@ def ssl_server_credentials(private_key_certificate_chain_pairs,
], require_client_auth)) ], require_client_auth))
def ssl_server_certificate_config(private_key_certificate_chain_pairs, def ssl_server_certificate_configuration(private_key_certificate_chain_pairs,
root_certificates=None): root_certificates=None):
"""Creates a ServerCertificateConfig for use with an SSL-enabled Server. """Creates a ServerCertificateConfiguration for use with a Server.
Args: Args:
private_key_certificate_chain_pairs: A collection of pairs of private_key_certificate_chain_pairs: A collection of pairs of
@ -1277,38 +1279,38 @@ def ssl_server_certificate_config(private_key_certificate_chain_pairs,
certificates that the server will use to verify client authentication. certificates that the server will use to verify client authentication.
Returns: Returns:
A ServerCertificateConfig that can be returned in the certificate config A ServerCertificateConfiguration that can be returned in the certificate
fetching callback. configuration fetching callback.
""" """
if len(private_key_certificate_chain_pairs) == 0: if len(private_key_certificate_chain_pairs) == 0:
raise ValueError( raise ValueError(
'At least one private key-certificate chain pair is required!') 'At least one private key-certificate chain pair is required!')
else: else:
return ServerCertificateConfig( return ServerCertificateConfiguration(
_cygrpc.server_certificate_config_ssl(root_certificates, [ _cygrpc.server_certificate_config_ssl(root_certificates, [
_cygrpc.SslPemKeyCertPair(key, pem) _cygrpc.SslPemKeyCertPair(key, pem)
for key, pem in private_key_certificate_chain_pairs for key, pem in private_key_certificate_chain_pairs
])) ]))
def ssl_server_credentials_dynamic_cert_config(initial_cert_config, def dynamic_ssl_server_credentials(initial_certificate_configuration,
cert_config_fetcher, certificate_configuration_fetcher,
require_client_auth=False): require_client_authentication=False):
"""Creates a ServerCredentials for use with an SSL-enabled Server. """Creates a ServerCredentials for use with an SSL-enabled Server.
Args: Args:
initial_cert_config (ServerCertificateConfig): the certificate initial_certificate_configuration (ServerCertificateConfiguration): The
config with which the server will be initialized. certificate configuration with which the server will be initialized.
cert_config_fetcher (callable): a callable that takes no certificate_configuration_fetcher (callable): A callable that takes no
arguments and should return a ServerCertificateConfig to arguments and should return a ServerCertificateConfiguration to
replace the server's current cert, or None for no change replace the server's current certificate, or None for no change
(i.e., the server will continue its current certificate (i.e., the server will continue its current certificate
config). The library will call this callback on *every* new config). The library will call this callback on *every* new
client connection before starting the TLS handshake with the client connection before starting the TLS handshake with the
client, thus allowing the user application to optionally client, thus allowing the user application to optionally
return a new ServerCertificateConfig that the server will then return a new ServerCertificateConfiguration that the server will then
use for the handshake. use for the handshake.
require_client_auth: A boolean indicating whether or not to require_client_authentication: A boolean indicating whether or not to
require clients to be authenticated. require clients to be authenticated.
Returns: Returns:
@ -1316,7 +1318,8 @@ def ssl_server_credentials_dynamic_cert_config(initial_cert_config,
""" """
return ServerCredentials( return ServerCredentials(
_cygrpc.server_credentials_ssl_dynamic_cert_config( _cygrpc.server_credentials_ssl_dynamic_cert_config(
initial_cert_config, cert_config_fetcher, require_client_auth)) initial_certificate_configuration,
certificate_configuration_fetcher, require_client_authentication))
def channel_ready_future(channel): def channel_ready_future(channel):
@ -1401,19 +1404,19 @@ __all__ = ('FutureTimeoutError', 'FutureCancelledError', 'Future',
'ChannelConnectivity', 'StatusCode', 'RpcError', 'RpcContext', 'ChannelConnectivity', 'StatusCode', 'RpcError', 'RpcContext',
'Call', 'ChannelCredentials', 'CallCredentials', 'Call', 'ChannelCredentials', 'CallCredentials',
'AuthMetadataContext', 'AuthMetadataPluginCallback', 'AuthMetadataContext', 'AuthMetadataPluginCallback',
'AuthMetadataPlugin', 'ServerCertificateConfig', 'ServerCredentials', 'AuthMetadataPlugin', 'ServerCertificateConfiguration',
'UnaryUnaryMultiCallable', 'UnaryStreamMultiCallable', 'ServerCredentials', 'UnaryUnaryMultiCallable',
'StreamUnaryMultiCallable', 'StreamStreamMultiCallable', 'Channel', 'UnaryStreamMultiCallable', 'StreamUnaryMultiCallable',
'ServicerContext', 'RpcMethodHandler', 'HandlerCallDetails', 'StreamStreamMultiCallable', 'Channel', 'ServicerContext',
'GenericRpcHandler', 'ServiceRpcHandler', 'Server', 'RpcMethodHandler', 'HandlerCallDetails', 'GenericRpcHandler',
'unary_unary_rpc_method_handler', 'unary_stream_rpc_method_handler', 'ServiceRpcHandler', 'Server', 'unary_unary_rpc_method_handler',
'stream_unary_rpc_method_handler', 'unary_stream_rpc_method_handler', 'stream_unary_rpc_method_handler',
'stream_stream_rpc_method_handler', 'stream_stream_rpc_method_handler',
'method_handlers_generic_handler', 'ssl_channel_credentials', 'method_handlers_generic_handler', 'ssl_channel_credentials',
'metadata_call_credentials', 'access_token_call_credentials', 'metadata_call_credentials', 'access_token_call_credentials',
'composite_call_credentials', 'composite_channel_credentials', 'composite_call_credentials', 'composite_channel_credentials',
'ssl_server_credentials', 'ssl_server_certificate_config', 'ssl_server_credentials', 'ssl_server_certificate_configuration',
'ssl_server_credentials_dynamic_cert_config', 'channel_ready_future', 'dynamic_ssl_server_credentials', 'channel_ready_future',
'insecure_channel', 'secure_channel', 'server',) 'insecure_channel', 'secure_channel', 'server',)
############################### Extension Shims ################################ ############################### Extension Shims ################################

@ -274,10 +274,10 @@ def call_credentials_metadata_plugin(CredentialsMetadataPlugin plugin):
return credentials return credentials
cdef const char* _get_c_pem_root_certs(pem_root_certs): cdef const char* _get_c_pem_root_certs(pem_root_certs):
cdef char *c_pem_root_certs = NULL if pem_root_certs is None:
if pem_root_certs is not None: return NULL
c_pem_root_certs = pem_root_certs else:
return c_pem_root_certs return pem_root_certs
cdef grpc_ssl_pem_key_cert_pair* _create_c_ssl_pem_key_cert_pairs(pem_key_cert_pairs): cdef grpc_ssl_pem_key_cert_pair* _create_c_ssl_pem_key_cert_pairs(pem_key_cert_pairs):
# return a malloc'ed grpc_ssl_pem_key_cert_pair from a _list_ of SslPemKeyCertPair # return a malloc'ed grpc_ssl_pem_key_cert_pair from a _list_ of SslPemKeyCertPair
@ -303,7 +303,7 @@ def server_credentials_ssl(pem_root_certs, pem_key_cert_pairs,
cdef ServerCredentials credentials = ServerCredentials() cdef ServerCredentials credentials = ServerCredentials()
credentials.references.append(pem_root_certs) credentials.references.append(pem_root_certs)
credentials.references.append(pem_key_cert_pairs) credentials.references.append(pem_key_cert_pairs)
cdef char * c_pem_root_certs = _get_c_pem_root_certs(pem_root_certs) cdef const char * c_pem_root_certs = _get_c_pem_root_certs(pem_root_certs)
credentials.c_ssl_pem_key_cert_pairs_count = len(pem_key_cert_pairs) credentials.c_ssl_pem_key_cert_pairs_count = len(pem_key_cert_pairs)
credentials.c_ssl_pem_key_cert_pairs = _create_c_ssl_pem_key_cert_pairs(pem_key_cert_pairs) credentials.c_ssl_pem_key_cert_pairs = _create_c_ssl_pem_key_cert_pairs(pem_key_cert_pairs)
cdef grpc_ssl_server_certificate_config *c_cert_config = NULL cdef grpc_ssl_server_certificate_config *c_cert_config = NULL
@ -338,8 +338,9 @@ def server_certificate_config_ssl(pem_root_certs, pem_key_cert_pairs):
def server_credentials_ssl_dynamic_cert_config(initial_cert_config, def server_credentials_ssl_dynamic_cert_config(initial_cert_config,
cert_config_fetcher, cert_config_fetcher,
bint force_client_auth): bint force_client_auth):
if not isinstance(initial_cert_config, grpc.ServerCertificateConfig): if not isinstance(initial_cert_config, grpc.ServerCertificateConfiguration):
raise TypeError('initial_cert_config must be a grpc.ServerCertificateConfig') raise TypeError(
'initial_cert_config must be a grpc.ServerCertificateConfiguration')
if not callable(cert_config_fetcher): if not callable(cert_config_fetcher):
raise TypeError('cert_config_fetcher must be callable') raise TypeError('cert_config_fetcher must be callable')
cdef ServerCredentials credentials = ServerCredentials() cdef ServerCredentials credentials = ServerCredentials()

@ -28,7 +28,7 @@ cdef grpc_ssl_certificate_config_reload_status _server_cert_config_fetcher_wrapp
if not credentials.initial_cert_config_fetched: if not credentials.initial_cert_config_fetched:
# C-core is asking for the initial cert config # C-core is asking for the initial cert config
credentials.initial_cert_config_fetched = True credentials.initial_cert_config_fetched = True
cert_config = credentials.initial_cert_config._cert_config cert_config = credentials.initial_cert_config._certificate_configuration
else: else:
user_cb = credentials.cert_config_fetcher user_cb = credentials.cert_config_fetcher
try: try:
@ -38,13 +38,15 @@ cdef grpc_ssl_certificate_config_reload_status _server_cert_config_fetcher_wrapp
return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL
if cert_config_wrapper is None: if cert_config_wrapper is None:
return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED
elif not isinstance(cert_config_wrapper, grpc.ServerCertificateConfig): elif not isinstance(
logging.error('Error fetching certificate config: certificate ' cert_config_wrapper, grpc.ServerCertificateConfiguration):
'config must be of type grpc.ServerCertificateConfig, ' logging.error(
'not %s' % type(cert_config_wrapper).__name__) 'Error fetching certificate configuration: certificate '
'configuration must be of type grpc.ServerCertificateConfiguration, '
'not %s' % type(cert_config_wrapper).__name__)
return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL return GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL
else: else:
cert_config = cert_config_wrapper._cert_config cert_config = cert_config_wrapper._certificate_configuration
config[0] = <grpc_ssl_server_certificate_config*>cert_config.c_cert_config config[0] = <grpc_ssl_server_certificate_config*>cert_config.c_cert_config
# our caller will assume ownership of memory, so we have to recreate # our caller will assume ownership of memory, so we have to recreate
# a copy of c_cert_config here # a copy of c_cert_config here

@ -56,7 +56,7 @@ PACKAGE_DIRECTORIES = {
'': '.', '': '.',
} }
INSTALL_REQUIRES = ('protobuf>=3.3.0', INSTALL_REQUIRES = ('protobuf>=3.5.0.post1',
'grpcio>={version}'.format(version=grpc_version.VERSION),) 'grpcio>={version}'.format(version=grpc_version.VERSION),)
try: try:

@ -57,7 +57,7 @@ PACKAGE_DIRECTORIES = {
'': '.', '': '.',
} }
INSTALL_REQUIRES = ('protobuf>=3.3.0', INSTALL_REQUIRES = ('protobuf>=3.5.0.post1',
'grpcio>={version}'.format(version=grpc_version.VERSION),) 'grpcio>={version}'.format(version=grpc_version.VERSION),)
try: try:

@ -28,7 +28,7 @@ PACKAGE_DIRECTORIES = {
'': '.', '': '.',
} }
INSTALL_REQUIRES = ('protobuf>=3.3.0', INSTALL_REQUIRES = ('protobuf>=3.5.0.post1',
'grpcio>={version}'.format(version=grpc_version.VERSION),) 'grpcio>={version}'.format(version=grpc_version.VERSION),)
setuptools.setup( setuptools.setup(

@ -41,8 +41,8 @@ INSTALL_REQUIRES = (
'grpcio>={version}'.format(version=grpc_version.VERSION), 'grpcio>={version}'.format(version=grpc_version.VERSION),
'grpcio-tools>={version}'.format(version=grpc_version.VERSION), 'grpcio-tools>={version}'.format(version=grpc_version.VERSION),
'grpcio-health-checking>={version}'.format(version=grpc_version.VERSION), 'grpcio-health-checking>={version}'.format(version=grpc_version.VERSION),
'oauth2client>=1.4.7', 'protobuf>=3.3.0', 'six>=1.10', 'google-auth>=1.0.0', 'oauth2client>=1.4.7', 'protobuf>=3.5.0.post1', 'six>=1.10',
'requests>=2.14.2') 'google-auth>=1.0.0', 'requests>=2.14.2')
COMMAND_CLASS = { COMMAND_CLASS = {
# Run `preprocess` *before* doing any packaging! # Run `preprocess` *before* doing any packaging!

@ -30,7 +30,7 @@ class AllTest(unittest.TestCase):
'ChannelConnectivity', 'StatusCode', 'RpcError', 'RpcContext', 'ChannelConnectivity', 'StatusCode', 'RpcError', 'RpcContext',
'Call', 'ChannelCredentials', 'CallCredentials', 'Call', 'ChannelCredentials', 'CallCredentials',
'AuthMetadataContext', 'AuthMetadataPluginCallback', 'AuthMetadataContext', 'AuthMetadataPluginCallback',
'AuthMetadataPlugin', 'ServerCertificateConfig', 'AuthMetadataPlugin', 'ServerCertificateConfiguration',
'ServerCredentials', 'UnaryUnaryMultiCallable', 'ServerCredentials', 'UnaryUnaryMultiCallable',
'UnaryStreamMultiCallable', 'StreamUnaryMultiCallable', 'UnaryStreamMultiCallable', 'StreamUnaryMultiCallable',
'StreamStreamMultiCallable', 'Channel', 'ServicerContext', 'StreamStreamMultiCallable', 'Channel', 'ServicerContext',
@ -42,10 +42,9 @@ class AllTest(unittest.TestCase):
'method_handlers_generic_handler', 'ssl_channel_credentials', 'method_handlers_generic_handler', 'ssl_channel_credentials',
'metadata_call_credentials', 'access_token_call_credentials', 'metadata_call_credentials', 'access_token_call_credentials',
'composite_call_credentials', 'composite_channel_credentials', 'composite_call_credentials', 'composite_channel_credentials',
'ssl_server_credentials', 'ssl_server_certificate_config', 'ssl_server_credentials', 'ssl_server_certificate_configuration',
'ssl_server_credentials_dynamic_cert_config', 'dynamic_ssl_server_credentials', 'channel_ready_future',
'channel_ready_future', 'insecure_channel', 'secure_channel', 'insecure_channel', 'secure_channel', 'server',)
'server',)
six.assertCountEqual(self, expected_grpc_code_elements, six.assertCountEqual(self, expected_grpc_code_elements,
_from_grpc_import_star.GRPC_ELEMENTS) _from_grpc_import_star.GRPC_ELEMENTS)

@ -11,11 +11,10 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
""" """Tests server certificate rotation.
This tests server certificate rotation support.
Here we test various aspects of gRPC Python, and in some cases C-core Here we test various aspects of gRPC Python, and in some cases gRPC
by extension, support for server certificate rotation. Core by extension, support for server certificate rotation.
* ServerSSLCertReloadTestWithClientAuth: test ability to rotate * ServerSSLCertReloadTestWithClientAuth: test ability to rotate
server's SSL cert for use in future channels with clients while not server's SSL cert for use in future channels with clients while not
@ -27,7 +26,7 @@ by extension, support for server certificate rotation.
not authenticate the client. not authenticate the client.
* ServerSSLCertReloadTestCertConfigReuse: tests gRPC Python's ability * ServerSSLCertReloadTestCertConfigReuse: tests gRPC Python's ability
to deal with user's reuse of ServerCertificateConfig instances. to deal with user's reuse of ServerCertificateConfiguration instances.
""" """
import abc import abc
@ -140,14 +139,14 @@ class _ServerSSLCertReloadTest(
services_pb2_grpc.add_FirstServiceServicer_to_server( services_pb2_grpc.add_FirstServiceServicer_to_server(
_server_application.FirstServiceServicer(), self.server) _server_application.FirstServiceServicer(), self.server)
switch_cert_on_client_num = 10 switch_cert_on_client_num = 10
initial_cert_config = grpc.ssl_server_certificate_config( initial_cert_config = grpc.ssl_server_certificate_configuration(
[(SERVER_KEY_1_PEM, SERVER_CERT_CHAIN_1_PEM)], [(SERVER_KEY_1_PEM, SERVER_CERT_CHAIN_1_PEM)],
root_certificates=CA_2_PEM) root_certificates=CA_2_PEM)
self.cert_config_fetcher = CertConfigFetcher() self.cert_config_fetcher = CertConfigFetcher()
server_credentials = grpc.ssl_server_credentials_dynamic_cert_config( server_credentials = grpc.dynamic_ssl_server_credentials(
initial_cert_config, initial_cert_config,
self.cert_config_fetcher, self.cert_config_fetcher,
require_client_auth=self.require_client_auth()) require_client_authentication=self.require_client_auth())
self.port = self.server.add_secure_port('[::]:0', server_credentials) self.port = self.server.add_secure_port('[::]:0', server_credentials)
self.server.start() self.server.start()
@ -285,7 +284,7 @@ class _ServerSSLCertReloadTest(
# moment of truth!! client should reject server because the # moment of truth!! client should reject server because the
# server switch cert... # server switch cert...
cert_config = grpc.ssl_server_certificate_config( cert_config = grpc.ssl_server_certificate_configuration(
[(SERVER_KEY_2_PEM, SERVER_CERT_CHAIN_2_PEM)], [(SERVER_KEY_2_PEM, SERVER_CERT_CHAIN_2_PEM)],
root_certificates=CA_1_PEM) root_certificates=CA_1_PEM)
self.cert_config_fetcher.reset() self.cert_config_fetcher.reset()
@ -362,18 +361,18 @@ class ServerSSLCertConfigFetcherParamsChecks(unittest.TestCase):
def test_check_on_initial_config(self): def test_check_on_initial_config(self):
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
grpc.ssl_server_credentials_dynamic_cert_config(None, str) grpc.dynamic_ssl_server_credentials(None, str)
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
grpc.ssl_server_credentials_dynamic_cert_config(1, str) grpc.dynamic_ssl_server_credentials(1, str)
def test_check_on_config_fetcher(self): def test_check_on_config_fetcher(self):
cert_config = grpc.ssl_server_certificate_config( cert_config = grpc.ssl_server_certificate_configuration(
[(SERVER_KEY_2_PEM, SERVER_CERT_CHAIN_2_PEM)], [(SERVER_KEY_2_PEM, SERVER_CERT_CHAIN_2_PEM)],
root_certificates=CA_1_PEM) root_certificates=CA_1_PEM)
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
grpc.ssl_server_credentials_dynamic_cert_config(cert_config, None) grpc.dynamic_ssl_server_credentials(cert_config, None)
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
grpc.ssl_server_credentials_dynamic_cert_config(cert_config, 1) grpc.dynamic_ssl_server_credentials(cert_config, 1)
class ServerSSLCertReloadTestWithClientAuth(_ServerSSLCertReloadTest): class ServerSSLCertReloadTestWithClientAuth(_ServerSSLCertReloadTest):
@ -393,14 +392,14 @@ class ServerSSLCertReloadTestWithoutClientAuth(_ServerSSLCertReloadTest):
class ServerSSLCertReloadTestCertConfigReuse(_ServerSSLCertReloadTest): class ServerSSLCertReloadTestCertConfigReuse(_ServerSSLCertReloadTest):
"""Ensures that `ServerCertificateConfig` instances can be reused. """Ensures that `ServerCertificateConfiguration` instances can be reused.
Because C-core takes ownership of the Because gRPC Core takes ownership of the
`grpc_ssl_server_certificate_config` encapsulated by `grpc_ssl_server_certificate_config` encapsulated by
`ServerCertificateConfig`, this test reuses the same `ServerCertificateConfiguration`, this test reuses the same
`ServerCertificateConfig` instances multiple times to make sure `ServerCertificateConfiguration` instances multiple times to make sure
gRPC Python takes care of maintaining the validity of gRPC Python takes care of maintaining the validity of
`ServerCertificateConfig` instances, so that such instances can be `ServerCertificateConfiguration` instances, so that such instances can be
re-used by user application. re-used by user application.
""" """
@ -411,17 +410,17 @@ class ServerSSLCertReloadTestCertConfigReuse(_ServerSSLCertReloadTest):
self.server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) self.server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
services_pb2_grpc.add_FirstServiceServicer_to_server( services_pb2_grpc.add_FirstServiceServicer_to_server(
_server_application.FirstServiceServicer(), self.server) _server_application.FirstServiceServicer(), self.server)
self.cert_config_A = grpc.ssl_server_certificate_config( self.cert_config_A = grpc.ssl_server_certificate_configuration(
[(SERVER_KEY_1_PEM, SERVER_CERT_CHAIN_1_PEM)], [(SERVER_KEY_1_PEM, SERVER_CERT_CHAIN_1_PEM)],
root_certificates=CA_2_PEM) root_certificates=CA_2_PEM)
self.cert_config_B = grpc.ssl_server_certificate_config( self.cert_config_B = grpc.ssl_server_certificate_configuration(
[(SERVER_KEY_2_PEM, SERVER_CERT_CHAIN_2_PEM)], [(SERVER_KEY_2_PEM, SERVER_CERT_CHAIN_2_PEM)],
root_certificates=CA_1_PEM) root_certificates=CA_1_PEM)
self.cert_config_fetcher = CertConfigFetcher() self.cert_config_fetcher = CertConfigFetcher()
server_credentials = grpc.ssl_server_credentials_dynamic_cert_config( server_credentials = grpc.dynamic_ssl_server_credentials(
self.cert_config_A, self.cert_config_A,
self.cert_config_fetcher, self.cert_config_fetcher,
require_client_auth=True) require_client_authentication=True)
self.port = self.server.add_secure_port('[::]:0', server_credentials) self.port = self.server.add_secure_port('[::]:0', server_credentials)
self.server.start() self.server.start()

@ -48,10 +48,8 @@
#include <stdio.h> #include <stdio.h>
int main(int argc, char **argv) { int main(int argc, char **argv) {
if(argc == 12345678) { % for fn in fns:
% for fn in fns: printf("%lx", (unsigned long) ${fn});
printf("%lx", (unsigned long) ${fn}); % endfor
% endfor
}
return 0; return 0;
} }

@ -11,4 +11,4 @@ RUN apt-get update && apt-get install -y ${'\\'}
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0

@ -66,288 +66,286 @@
#include <stdio.h> #include <stdio.h>
int main(int argc, char **argv) { int main(int argc, char **argv) {
if(argc == 12345678) { printf("%lx", (unsigned long) grpc_compression_algorithm_parse);
printf("%lx", (unsigned long) grpc_compression_algorithm_parse); printf("%lx", (unsigned long) grpc_compression_algorithm_name);
printf("%lx", (unsigned long) grpc_compression_algorithm_name); printf("%lx", (unsigned long) grpc_stream_compression_algorithm_name);
printf("%lx", (unsigned long) grpc_stream_compression_algorithm_name); printf("%lx", (unsigned long) grpc_compression_algorithm_for_level);
printf("%lx", (unsigned long) grpc_compression_algorithm_for_level); printf("%lx", (unsigned long) grpc_stream_compression_algorithm_for_level);
printf("%lx", (unsigned long) grpc_stream_compression_algorithm_for_level); printf("%lx", (unsigned long) grpc_compression_options_init);
printf("%lx", (unsigned long) grpc_compression_options_init); printf("%lx", (unsigned long) grpc_compression_options_enable_algorithm);
printf("%lx", (unsigned long) grpc_compression_options_enable_algorithm); printf("%lx", (unsigned long) grpc_compression_options_disable_algorithm);
printf("%lx", (unsigned long) grpc_compression_options_disable_algorithm); printf("%lx", (unsigned long) grpc_compression_options_is_algorithm_enabled);
printf("%lx", (unsigned long) grpc_compression_options_is_algorithm_enabled); printf("%lx", (unsigned long) grpc_compression_options_is_stream_compression_algorithm_enabled);
printf("%lx", (unsigned long) grpc_compression_options_is_stream_compression_algorithm_enabled); printf("%lx", (unsigned long) grpc_metadata_array_init);
printf("%lx", (unsigned long) grpc_metadata_array_init); printf("%lx", (unsigned long) grpc_metadata_array_destroy);
printf("%lx", (unsigned long) grpc_metadata_array_destroy); printf("%lx", (unsigned long) grpc_call_details_init);
printf("%lx", (unsigned long) grpc_call_details_init); printf("%lx", (unsigned long) grpc_call_details_destroy);
printf("%lx", (unsigned long) grpc_call_details_destroy); printf("%lx", (unsigned long) grpc_register_plugin);
printf("%lx", (unsigned long) grpc_register_plugin); printf("%lx", (unsigned long) grpc_init);
printf("%lx", (unsigned long) grpc_init); printf("%lx", (unsigned long) grpc_shutdown);
printf("%lx", (unsigned long) grpc_shutdown); printf("%lx", (unsigned long) grpc_version_string);
printf("%lx", (unsigned long) grpc_version_string); printf("%lx", (unsigned long) grpc_g_stands_for);
printf("%lx", (unsigned long) grpc_g_stands_for); printf("%lx", (unsigned long) grpc_completion_queue_factory_lookup);
printf("%lx", (unsigned long) grpc_completion_queue_factory_lookup); printf("%lx", (unsigned long) grpc_completion_queue_create_for_next);
printf("%lx", (unsigned long) grpc_completion_queue_create_for_next); printf("%lx", (unsigned long) grpc_completion_queue_create_for_pluck);
printf("%lx", (unsigned long) grpc_completion_queue_create_for_pluck); printf("%lx", (unsigned long) grpc_completion_queue_create);
printf("%lx", (unsigned long) grpc_completion_queue_create); printf("%lx", (unsigned long) grpc_completion_queue_next);
printf("%lx", (unsigned long) grpc_completion_queue_next); printf("%lx", (unsigned long) grpc_completion_queue_pluck);
printf("%lx", (unsigned long) grpc_completion_queue_pluck); printf("%lx", (unsigned long) grpc_completion_queue_shutdown);
printf("%lx", (unsigned long) grpc_completion_queue_shutdown); printf("%lx", (unsigned long) grpc_completion_queue_destroy);
printf("%lx", (unsigned long) grpc_completion_queue_destroy); printf("%lx", (unsigned long) grpc_completion_queue_thread_local_cache_init);
printf("%lx", (unsigned long) grpc_completion_queue_thread_local_cache_init); printf("%lx", (unsigned long) grpc_completion_queue_thread_local_cache_flush);
printf("%lx", (unsigned long) grpc_completion_queue_thread_local_cache_flush); printf("%lx", (unsigned long) grpc_alarm_create);
printf("%lx", (unsigned long) grpc_alarm_create); printf("%lx", (unsigned long) grpc_alarm_set);
printf("%lx", (unsigned long) grpc_alarm_set); printf("%lx", (unsigned long) grpc_alarm_cancel);
printf("%lx", (unsigned long) grpc_alarm_cancel); printf("%lx", (unsigned long) grpc_alarm_destroy);
printf("%lx", (unsigned long) grpc_alarm_destroy); printf("%lx", (unsigned long) grpc_channel_check_connectivity_state);
printf("%lx", (unsigned long) grpc_channel_check_connectivity_state); printf("%lx", (unsigned long) grpc_channel_num_external_connectivity_watchers);
printf("%lx", (unsigned long) grpc_channel_num_external_connectivity_watchers); printf("%lx", (unsigned long) grpc_channel_watch_connectivity_state);
printf("%lx", (unsigned long) grpc_channel_watch_connectivity_state); printf("%lx", (unsigned long) grpc_channel_support_connectivity_watcher);
printf("%lx", (unsigned long) grpc_channel_support_connectivity_watcher); printf("%lx", (unsigned long) grpc_channel_create_call);
printf("%lx", (unsigned long) grpc_channel_create_call); printf("%lx", (unsigned long) grpc_channel_ping);
printf("%lx", (unsigned long) grpc_channel_ping); printf("%lx", (unsigned long) grpc_channel_register_call);
printf("%lx", (unsigned long) grpc_channel_register_call); printf("%lx", (unsigned long) grpc_channel_create_registered_call);
printf("%lx", (unsigned long) grpc_channel_create_registered_call); printf("%lx", (unsigned long) grpc_call_arena_alloc);
printf("%lx", (unsigned long) grpc_call_arena_alloc); printf("%lx", (unsigned long) grpc_call_start_batch);
printf("%lx", (unsigned long) grpc_call_start_batch); printf("%lx", (unsigned long) grpc_call_get_peer);
printf("%lx", (unsigned long) grpc_call_get_peer); printf("%lx", (unsigned long) grpc_census_call_set_context);
printf("%lx", (unsigned long) grpc_census_call_set_context); printf("%lx", (unsigned long) grpc_census_call_get_context);
printf("%lx", (unsigned long) grpc_census_call_get_context); printf("%lx", (unsigned long) grpc_channel_get_target);
printf("%lx", (unsigned long) grpc_channel_get_target); printf("%lx", (unsigned long) grpc_channel_get_info);
printf("%lx", (unsigned long) grpc_channel_get_info); printf("%lx", (unsigned long) grpc_insecure_channel_create);
printf("%lx", (unsigned long) grpc_insecure_channel_create); printf("%lx", (unsigned long) grpc_lame_client_channel_create);
printf("%lx", (unsigned long) grpc_lame_client_channel_create); printf("%lx", (unsigned long) grpc_channel_destroy);
printf("%lx", (unsigned long) grpc_channel_destroy); printf("%lx", (unsigned long) grpc_call_cancel);
printf("%lx", (unsigned long) grpc_call_cancel); printf("%lx", (unsigned long) grpc_call_cancel_with_status);
printf("%lx", (unsigned long) grpc_call_cancel_with_status); printf("%lx", (unsigned long) grpc_call_ref);
printf("%lx", (unsigned long) grpc_call_ref); printf("%lx", (unsigned long) grpc_call_unref);
printf("%lx", (unsigned long) grpc_call_unref); printf("%lx", (unsigned long) grpc_server_request_call);
printf("%lx", (unsigned long) grpc_server_request_call); printf("%lx", (unsigned long) grpc_server_register_method);
printf("%lx", (unsigned long) grpc_server_register_method); printf("%lx", (unsigned long) grpc_server_request_registered_call);
printf("%lx", (unsigned long) grpc_server_request_registered_call); printf("%lx", (unsigned long) grpc_server_create);
printf("%lx", (unsigned long) grpc_server_create); printf("%lx", (unsigned long) grpc_server_register_completion_queue);
printf("%lx", (unsigned long) grpc_server_register_completion_queue); printf("%lx", (unsigned long) grpc_server_add_insecure_http2_port);
printf("%lx", (unsigned long) grpc_server_add_insecure_http2_port); printf("%lx", (unsigned long) grpc_server_start);
printf("%lx", (unsigned long) grpc_server_start); printf("%lx", (unsigned long) grpc_server_shutdown_and_notify);
printf("%lx", (unsigned long) grpc_server_shutdown_and_notify); printf("%lx", (unsigned long) grpc_server_cancel_all_calls);
printf("%lx", (unsigned long) grpc_server_cancel_all_calls); printf("%lx", (unsigned long) grpc_server_destroy);
printf("%lx", (unsigned long) grpc_server_destroy); printf("%lx", (unsigned long) grpc_tracer_set_enabled);
printf("%lx", (unsigned long) grpc_tracer_set_enabled); printf("%lx", (unsigned long) grpc_header_key_is_legal);
printf("%lx", (unsigned long) grpc_header_key_is_legal); printf("%lx", (unsigned long) grpc_header_nonbin_value_is_legal);
printf("%lx", (unsigned long) grpc_header_nonbin_value_is_legal); printf("%lx", (unsigned long) grpc_is_binary_header);
printf("%lx", (unsigned long) grpc_is_binary_header); printf("%lx", (unsigned long) grpc_call_error_to_string);
printf("%lx", (unsigned long) grpc_call_error_to_string); printf("%lx", (unsigned long) grpc_resource_quota_create);
printf("%lx", (unsigned long) grpc_resource_quota_create); printf("%lx", (unsigned long) grpc_resource_quota_ref);
printf("%lx", (unsigned long) grpc_resource_quota_ref); printf("%lx", (unsigned long) grpc_resource_quota_unref);
printf("%lx", (unsigned long) grpc_resource_quota_unref); printf("%lx", (unsigned long) grpc_resource_quota_resize);
printf("%lx", (unsigned long) grpc_resource_quota_resize); printf("%lx", (unsigned long) grpc_resource_quota_arg_vtable);
printf("%lx", (unsigned long) grpc_resource_quota_arg_vtable); printf("%lx", (unsigned long) grpc_auth_property_iterator_next);
printf("%lx", (unsigned long) grpc_auth_property_iterator_next); printf("%lx", (unsigned long) grpc_auth_context_property_iterator);
printf("%lx", (unsigned long) grpc_auth_context_property_iterator); printf("%lx", (unsigned long) grpc_auth_context_peer_identity);
printf("%lx", (unsigned long) grpc_auth_context_peer_identity); printf("%lx", (unsigned long) grpc_auth_context_find_properties_by_name);
printf("%lx", (unsigned long) grpc_auth_context_find_properties_by_name); printf("%lx", (unsigned long) grpc_auth_context_peer_identity_property_name);
printf("%lx", (unsigned long) grpc_auth_context_peer_identity_property_name); printf("%lx", (unsigned long) grpc_auth_context_peer_is_authenticated);
printf("%lx", (unsigned long) grpc_auth_context_peer_is_authenticated); printf("%lx", (unsigned long) grpc_call_auth_context);
printf("%lx", (unsigned long) grpc_call_auth_context); printf("%lx", (unsigned long) grpc_auth_context_release);
printf("%lx", (unsigned long) grpc_auth_context_release); printf("%lx", (unsigned long) grpc_auth_context_add_property);
printf("%lx", (unsigned long) grpc_auth_context_add_property); printf("%lx", (unsigned long) grpc_auth_context_add_cstring_property);
printf("%lx", (unsigned long) grpc_auth_context_add_cstring_property); printf("%lx", (unsigned long) grpc_auth_context_set_peer_identity_property_name);
printf("%lx", (unsigned long) grpc_auth_context_set_peer_identity_property_name); printf("%lx", (unsigned long) grpc_channel_credentials_release);
printf("%lx", (unsigned long) grpc_channel_credentials_release); printf("%lx", (unsigned long) grpc_google_default_credentials_create);
printf("%lx", (unsigned long) grpc_google_default_credentials_create); printf("%lx", (unsigned long) grpc_set_ssl_roots_override_callback);
printf("%lx", (unsigned long) grpc_set_ssl_roots_override_callback); printf("%lx", (unsigned long) grpc_ssl_credentials_create);
printf("%lx", (unsigned long) grpc_ssl_credentials_create); printf("%lx", (unsigned long) grpc_call_credentials_release);
printf("%lx", (unsigned long) grpc_call_credentials_release); printf("%lx", (unsigned long) grpc_composite_channel_credentials_create);
printf("%lx", (unsigned long) grpc_composite_channel_credentials_create); printf("%lx", (unsigned long) grpc_composite_call_credentials_create);
printf("%lx", (unsigned long) grpc_composite_call_credentials_create); printf("%lx", (unsigned long) grpc_google_compute_engine_credentials_create);
printf("%lx", (unsigned long) grpc_google_compute_engine_credentials_create); printf("%lx", (unsigned long) grpc_max_auth_token_lifetime);
printf("%lx", (unsigned long) grpc_max_auth_token_lifetime); printf("%lx", (unsigned long) grpc_service_account_jwt_access_credentials_create);
printf("%lx", (unsigned long) grpc_service_account_jwt_access_credentials_create); printf("%lx", (unsigned long) grpc_google_refresh_token_credentials_create);
printf("%lx", (unsigned long) grpc_google_refresh_token_credentials_create); printf("%lx", (unsigned long) grpc_access_token_credentials_create);
printf("%lx", (unsigned long) grpc_access_token_credentials_create); printf("%lx", (unsigned long) grpc_google_iam_credentials_create);
printf("%lx", (unsigned long) grpc_google_iam_credentials_create); printf("%lx", (unsigned long) grpc_metadata_credentials_create_from_plugin);
printf("%lx", (unsigned long) grpc_metadata_credentials_create_from_plugin); printf("%lx", (unsigned long) grpc_secure_channel_create);
printf("%lx", (unsigned long) grpc_secure_channel_create); printf("%lx", (unsigned long) grpc_server_credentials_release);
printf("%lx", (unsigned long) grpc_server_credentials_release); printf("%lx", (unsigned long) grpc_ssl_server_certificate_config_create);
printf("%lx", (unsigned long) grpc_ssl_server_certificate_config_create); printf("%lx", (unsigned long) grpc_ssl_server_certificate_config_destroy);
printf("%lx", (unsigned long) grpc_ssl_server_certificate_config_destroy); printf("%lx", (unsigned long) grpc_ssl_server_credentials_create);
printf("%lx", (unsigned long) grpc_ssl_server_credentials_create); printf("%lx", (unsigned long) grpc_ssl_server_credentials_create_ex);
printf("%lx", (unsigned long) grpc_ssl_server_credentials_create_ex); printf("%lx", (unsigned long) grpc_ssl_server_credentials_create_options_using_config);
printf("%lx", (unsigned long) grpc_ssl_server_credentials_create_options_using_config); printf("%lx", (unsigned long) grpc_ssl_server_credentials_create_options_using_config_fetcher);
printf("%lx", (unsigned long) grpc_ssl_server_credentials_create_options_using_config_fetcher); printf("%lx", (unsigned long) grpc_ssl_server_credentials_options_destroy);
printf("%lx", (unsigned long) grpc_ssl_server_credentials_options_destroy); printf("%lx", (unsigned long) grpc_ssl_server_credentials_create_with_options);
printf("%lx", (unsigned long) grpc_ssl_server_credentials_create_with_options); printf("%lx", (unsigned long) grpc_server_add_secure_http2_port);
printf("%lx", (unsigned long) grpc_server_add_secure_http2_port); printf("%lx", (unsigned long) grpc_call_set_credentials);
printf("%lx", (unsigned long) grpc_call_set_credentials); printf("%lx", (unsigned long) grpc_server_credentials_set_auth_metadata_processor);
printf("%lx", (unsigned long) grpc_server_credentials_set_auth_metadata_processor); printf("%lx", (unsigned long) grpc_raw_byte_buffer_create);
printf("%lx", (unsigned long) grpc_raw_byte_buffer_create); printf("%lx", (unsigned long) grpc_raw_compressed_byte_buffer_create);
printf("%lx", (unsigned long) grpc_raw_compressed_byte_buffer_create); printf("%lx", (unsigned long) grpc_byte_buffer_copy);
printf("%lx", (unsigned long) grpc_byte_buffer_copy); printf("%lx", (unsigned long) grpc_byte_buffer_length);
printf("%lx", (unsigned long) grpc_byte_buffer_length); printf("%lx", (unsigned long) grpc_byte_buffer_destroy);
printf("%lx", (unsigned long) grpc_byte_buffer_destroy); printf("%lx", (unsigned long) grpc_byte_buffer_reader_init);
printf("%lx", (unsigned long) grpc_byte_buffer_reader_init); printf("%lx", (unsigned long) grpc_byte_buffer_reader_destroy);
printf("%lx", (unsigned long) grpc_byte_buffer_reader_destroy); printf("%lx", (unsigned long) grpc_byte_buffer_reader_next);
printf("%lx", (unsigned long) grpc_byte_buffer_reader_next); printf("%lx", (unsigned long) grpc_byte_buffer_reader_readall);
printf("%lx", (unsigned long) grpc_byte_buffer_reader_readall); printf("%lx", (unsigned long) grpc_raw_byte_buffer_from_reader);
printf("%lx", (unsigned long) grpc_raw_byte_buffer_from_reader); printf("%lx", (unsigned long) grpc_slice_ref);
printf("%lx", (unsigned long) grpc_slice_ref); printf("%lx", (unsigned long) grpc_slice_unref);
printf("%lx", (unsigned long) grpc_slice_unref); printf("%lx", (unsigned long) grpc_slice_copy);
printf("%lx", (unsigned long) grpc_slice_copy); printf("%lx", (unsigned long) grpc_slice_new);
printf("%lx", (unsigned long) grpc_slice_new); printf("%lx", (unsigned long) grpc_slice_new_with_user_data);
printf("%lx", (unsigned long) grpc_slice_new_with_user_data); printf("%lx", (unsigned long) grpc_slice_new_with_len);
printf("%lx", (unsigned long) grpc_slice_new_with_len); printf("%lx", (unsigned long) grpc_slice_malloc);
printf("%lx", (unsigned long) grpc_slice_malloc); printf("%lx", (unsigned long) grpc_slice_malloc_large);
printf("%lx", (unsigned long) grpc_slice_malloc_large); printf("%lx", (unsigned long) grpc_slice_intern);
printf("%lx", (unsigned long) grpc_slice_intern); printf("%lx", (unsigned long) grpc_slice_from_copied_string);
printf("%lx", (unsigned long) grpc_slice_from_copied_string); printf("%lx", (unsigned long) grpc_slice_from_copied_buffer);
printf("%lx", (unsigned long) grpc_slice_from_copied_buffer); printf("%lx", (unsigned long) grpc_slice_from_static_string);
printf("%lx", (unsigned long) grpc_slice_from_static_string); printf("%lx", (unsigned long) grpc_slice_from_static_buffer);
printf("%lx", (unsigned long) grpc_slice_from_static_buffer); printf("%lx", (unsigned long) grpc_slice_sub);
printf("%lx", (unsigned long) grpc_slice_sub); printf("%lx", (unsigned long) grpc_slice_sub_no_ref);
printf("%lx", (unsigned long) grpc_slice_sub_no_ref); printf("%lx", (unsigned long) grpc_slice_split_tail);
printf("%lx", (unsigned long) grpc_slice_split_tail); printf("%lx", (unsigned long) grpc_slice_split_tail_maybe_ref);
printf("%lx", (unsigned long) grpc_slice_split_tail_maybe_ref); printf("%lx", (unsigned long) grpc_slice_split_head);
printf("%lx", (unsigned long) grpc_slice_split_head); printf("%lx", (unsigned long) grpc_empty_slice);
printf("%lx", (unsigned long) grpc_empty_slice); printf("%lx", (unsigned long) grpc_slice_default_hash_impl);
printf("%lx", (unsigned long) grpc_slice_default_hash_impl); printf("%lx", (unsigned long) grpc_slice_default_eq_impl);
printf("%lx", (unsigned long) grpc_slice_default_eq_impl); printf("%lx", (unsigned long) grpc_slice_eq);
printf("%lx", (unsigned long) grpc_slice_eq); printf("%lx", (unsigned long) grpc_slice_cmp);
printf("%lx", (unsigned long) grpc_slice_cmp); printf("%lx", (unsigned long) grpc_slice_str_cmp);
printf("%lx", (unsigned long) grpc_slice_str_cmp); printf("%lx", (unsigned long) grpc_slice_buf_start_eq);
printf("%lx", (unsigned long) grpc_slice_buf_start_eq); printf("%lx", (unsigned long) grpc_slice_rchr);
printf("%lx", (unsigned long) grpc_slice_rchr); printf("%lx", (unsigned long) grpc_slice_chr);
printf("%lx", (unsigned long) grpc_slice_chr); printf("%lx", (unsigned long) grpc_slice_slice);
printf("%lx", (unsigned long) grpc_slice_slice); printf("%lx", (unsigned long) grpc_slice_hash);
printf("%lx", (unsigned long) grpc_slice_hash); printf("%lx", (unsigned long) grpc_slice_is_equivalent);
printf("%lx", (unsigned long) grpc_slice_is_equivalent); printf("%lx", (unsigned long) grpc_slice_dup);
printf("%lx", (unsigned long) grpc_slice_dup); printf("%lx", (unsigned long) grpc_slice_to_c_string);
printf("%lx", (unsigned long) grpc_slice_to_c_string); printf("%lx", (unsigned long) grpc_slice_buffer_init);
printf("%lx", (unsigned long) grpc_slice_buffer_init); printf("%lx", (unsigned long) grpc_slice_buffer_destroy);
printf("%lx", (unsigned long) grpc_slice_buffer_destroy); printf("%lx", (unsigned long) grpc_slice_buffer_add);
printf("%lx", (unsigned long) grpc_slice_buffer_add); printf("%lx", (unsigned long) grpc_slice_buffer_add_indexed);
printf("%lx", (unsigned long) grpc_slice_buffer_add_indexed); printf("%lx", (unsigned long) grpc_slice_buffer_addn);
printf("%lx", (unsigned long) grpc_slice_buffer_addn); printf("%lx", (unsigned long) grpc_slice_buffer_tiny_add);
printf("%lx", (unsigned long) grpc_slice_buffer_tiny_add); printf("%lx", (unsigned long) grpc_slice_buffer_pop);
printf("%lx", (unsigned long) grpc_slice_buffer_pop); printf("%lx", (unsigned long) grpc_slice_buffer_reset_and_unref);
printf("%lx", (unsigned long) grpc_slice_buffer_reset_and_unref); printf("%lx", (unsigned long) grpc_slice_buffer_swap);
printf("%lx", (unsigned long) grpc_slice_buffer_swap); printf("%lx", (unsigned long) grpc_slice_buffer_move_into);
printf("%lx", (unsigned long) grpc_slice_buffer_move_into); printf("%lx", (unsigned long) grpc_slice_buffer_trim_end);
printf("%lx", (unsigned long) grpc_slice_buffer_trim_end); printf("%lx", (unsigned long) grpc_slice_buffer_move_first);
printf("%lx", (unsigned long) grpc_slice_buffer_move_first); printf("%lx", (unsigned long) grpc_slice_buffer_move_first_no_ref);
printf("%lx", (unsigned long) grpc_slice_buffer_move_first_no_ref); printf("%lx", (unsigned long) grpc_slice_buffer_move_first_into_buffer);
printf("%lx", (unsigned long) grpc_slice_buffer_move_first_into_buffer); printf("%lx", (unsigned long) grpc_slice_buffer_take_first);
printf("%lx", (unsigned long) grpc_slice_buffer_take_first); printf("%lx", (unsigned long) grpc_slice_buffer_undo_take_first);
printf("%lx", (unsigned long) grpc_slice_buffer_undo_take_first); printf("%lx", (unsigned long) gpr_malloc);
printf("%lx", (unsigned long) gpr_malloc); printf("%lx", (unsigned long) gpr_zalloc);
printf("%lx", (unsigned long) gpr_zalloc); printf("%lx", (unsigned long) gpr_free);
printf("%lx", (unsigned long) gpr_free); printf("%lx", (unsigned long) gpr_realloc);
printf("%lx", (unsigned long) gpr_realloc); printf("%lx", (unsigned long) gpr_malloc_aligned);
printf("%lx", (unsigned long) gpr_malloc_aligned); printf("%lx", (unsigned long) gpr_free_aligned);
printf("%lx", (unsigned long) gpr_free_aligned); printf("%lx", (unsigned long) gpr_set_allocation_functions);
printf("%lx", (unsigned long) gpr_set_allocation_functions); printf("%lx", (unsigned long) gpr_get_allocation_functions);
printf("%lx", (unsigned long) gpr_get_allocation_functions); printf("%lx", (unsigned long) gpr_avl_create);
printf("%lx", (unsigned long) gpr_avl_create); printf("%lx", (unsigned long) gpr_avl_ref);
printf("%lx", (unsigned long) gpr_avl_ref); printf("%lx", (unsigned long) gpr_avl_unref);
printf("%lx", (unsigned long) gpr_avl_unref); printf("%lx", (unsigned long) gpr_avl_add);
printf("%lx", (unsigned long) gpr_avl_add); printf("%lx", (unsigned long) gpr_avl_remove);
printf("%lx", (unsigned long) gpr_avl_remove); printf("%lx", (unsigned long) gpr_avl_get);
printf("%lx", (unsigned long) gpr_avl_get); printf("%lx", (unsigned long) gpr_avl_maybe_get);
printf("%lx", (unsigned long) gpr_avl_maybe_get); printf("%lx", (unsigned long) gpr_avl_is_empty);
printf("%lx", (unsigned long) gpr_avl_is_empty); printf("%lx", (unsigned long) gpr_cmdline_create);
printf("%lx", (unsigned long) gpr_cmdline_create); printf("%lx", (unsigned long) gpr_cmdline_add_int);
printf("%lx", (unsigned long) gpr_cmdline_add_int); printf("%lx", (unsigned long) gpr_cmdline_add_flag);
printf("%lx", (unsigned long) gpr_cmdline_add_flag); printf("%lx", (unsigned long) gpr_cmdline_add_string);
printf("%lx", (unsigned long) gpr_cmdline_add_string); printf("%lx", (unsigned long) gpr_cmdline_on_extra_arg);
printf("%lx", (unsigned long) gpr_cmdline_on_extra_arg); printf("%lx", (unsigned long) gpr_cmdline_set_survive_failure);
printf("%lx", (unsigned long) gpr_cmdline_set_survive_failure); printf("%lx", (unsigned long) gpr_cmdline_parse);
printf("%lx", (unsigned long) gpr_cmdline_parse); printf("%lx", (unsigned long) gpr_cmdline_destroy);
printf("%lx", (unsigned long) gpr_cmdline_destroy); printf("%lx", (unsigned long) gpr_cmdline_usage_string);
printf("%lx", (unsigned long) gpr_cmdline_usage_string); printf("%lx", (unsigned long) gpr_cpu_num_cores);
printf("%lx", (unsigned long) gpr_cpu_num_cores); printf("%lx", (unsigned long) gpr_cpu_current_cpu);
printf("%lx", (unsigned long) gpr_cpu_current_cpu); printf("%lx", (unsigned long) gpr_histogram_create);
printf("%lx", (unsigned long) gpr_histogram_create); printf("%lx", (unsigned long) gpr_histogram_destroy);
printf("%lx", (unsigned long) gpr_histogram_destroy); printf("%lx", (unsigned long) gpr_histogram_add);
printf("%lx", (unsigned long) gpr_histogram_add); printf("%lx", (unsigned long) gpr_histogram_merge);
printf("%lx", (unsigned long) gpr_histogram_merge); printf("%lx", (unsigned long) gpr_histogram_percentile);
printf("%lx", (unsigned long) gpr_histogram_percentile); printf("%lx", (unsigned long) gpr_histogram_mean);
printf("%lx", (unsigned long) gpr_histogram_mean); printf("%lx", (unsigned long) gpr_histogram_stddev);
printf("%lx", (unsigned long) gpr_histogram_stddev); printf("%lx", (unsigned long) gpr_histogram_variance);
printf("%lx", (unsigned long) gpr_histogram_variance); printf("%lx", (unsigned long) gpr_histogram_maximum);
printf("%lx", (unsigned long) gpr_histogram_maximum); printf("%lx", (unsigned long) gpr_histogram_minimum);
printf("%lx", (unsigned long) gpr_histogram_minimum); printf("%lx", (unsigned long) gpr_histogram_count);
printf("%lx", (unsigned long) gpr_histogram_count); printf("%lx", (unsigned long) gpr_histogram_sum);
printf("%lx", (unsigned long) gpr_histogram_sum); printf("%lx", (unsigned long) gpr_histogram_sum_of_squares);
printf("%lx", (unsigned long) gpr_histogram_sum_of_squares); printf("%lx", (unsigned long) gpr_histogram_get_contents);
printf("%lx", (unsigned long) gpr_histogram_get_contents); printf("%lx", (unsigned long) gpr_histogram_merge_contents);
printf("%lx", (unsigned long) gpr_histogram_merge_contents); printf("%lx", (unsigned long) gpr_join_host_port);
printf("%lx", (unsigned long) gpr_join_host_port); printf("%lx", (unsigned long) gpr_split_host_port);
printf("%lx", (unsigned long) gpr_split_host_port); printf("%lx", (unsigned long) gpr_log_severity_string);
printf("%lx", (unsigned long) gpr_log_severity_string); printf("%lx", (unsigned long) gpr_log);
printf("%lx", (unsigned long) gpr_log); printf("%lx", (unsigned long) gpr_log_message);
printf("%lx", (unsigned long) gpr_log_message); printf("%lx", (unsigned long) gpr_set_log_verbosity);
printf("%lx", (unsigned long) gpr_set_log_verbosity); printf("%lx", (unsigned long) gpr_log_verbosity_init);
printf("%lx", (unsigned long) gpr_log_verbosity_init); printf("%lx", (unsigned long) gpr_set_log_function);
printf("%lx", (unsigned long) gpr_set_log_function); printf("%lx", (unsigned long) gpr_strdup);
printf("%lx", (unsigned long) gpr_strdup); printf("%lx", (unsigned long) gpr_asprintf);
printf("%lx", (unsigned long) gpr_asprintf); printf("%lx", (unsigned long) gpr_subprocess_binary_extension);
printf("%lx", (unsigned long) gpr_subprocess_binary_extension); printf("%lx", (unsigned long) gpr_subprocess_create);
printf("%lx", (unsigned long) gpr_subprocess_create); printf("%lx", (unsigned long) gpr_subprocess_destroy);
printf("%lx", (unsigned long) gpr_subprocess_destroy); printf("%lx", (unsigned long) gpr_subprocess_join);
printf("%lx", (unsigned long) gpr_subprocess_join); printf("%lx", (unsigned long) gpr_subprocess_interrupt);
printf("%lx", (unsigned long) gpr_subprocess_interrupt); printf("%lx", (unsigned long) gpr_mu_init);
printf("%lx", (unsigned long) gpr_mu_init); printf("%lx", (unsigned long) gpr_mu_destroy);
printf("%lx", (unsigned long) gpr_mu_destroy); printf("%lx", (unsigned long) gpr_mu_lock);
printf("%lx", (unsigned long) gpr_mu_lock); printf("%lx", (unsigned long) gpr_mu_unlock);
printf("%lx", (unsigned long) gpr_mu_unlock); printf("%lx", (unsigned long) gpr_mu_trylock);
printf("%lx", (unsigned long) gpr_mu_trylock); printf("%lx", (unsigned long) gpr_cv_init);
printf("%lx", (unsigned long) gpr_cv_init); printf("%lx", (unsigned long) gpr_cv_destroy);
printf("%lx", (unsigned long) gpr_cv_destroy); printf("%lx", (unsigned long) gpr_cv_wait);
printf("%lx", (unsigned long) gpr_cv_wait); printf("%lx", (unsigned long) gpr_cv_signal);
printf("%lx", (unsigned long) gpr_cv_signal); printf("%lx", (unsigned long) gpr_cv_broadcast);
printf("%lx", (unsigned long) gpr_cv_broadcast); printf("%lx", (unsigned long) gpr_once_init);
printf("%lx", (unsigned long) gpr_once_init); printf("%lx", (unsigned long) gpr_event_init);
printf("%lx", (unsigned long) gpr_event_init); printf("%lx", (unsigned long) gpr_event_set);
printf("%lx", (unsigned long) gpr_event_set); printf("%lx", (unsigned long) gpr_event_get);
printf("%lx", (unsigned long) gpr_event_get); printf("%lx", (unsigned long) gpr_event_wait);
printf("%lx", (unsigned long) gpr_event_wait); printf("%lx", (unsigned long) gpr_ref_init);
printf("%lx", (unsigned long) gpr_ref_init); printf("%lx", (unsigned long) gpr_ref);
printf("%lx", (unsigned long) gpr_ref); printf("%lx", (unsigned long) gpr_ref_non_zero);
printf("%lx", (unsigned long) gpr_ref_non_zero); printf("%lx", (unsigned long) gpr_refn);
printf("%lx", (unsigned long) gpr_refn); printf("%lx", (unsigned long) gpr_unref);
printf("%lx", (unsigned long) gpr_unref); printf("%lx", (unsigned long) gpr_ref_is_unique);
printf("%lx", (unsigned long) gpr_ref_is_unique); printf("%lx", (unsigned long) gpr_stats_init);
printf("%lx", (unsigned long) gpr_stats_init); printf("%lx", (unsigned long) gpr_stats_inc);
printf("%lx", (unsigned long) gpr_stats_inc); printf("%lx", (unsigned long) gpr_stats_read);
printf("%lx", (unsigned long) gpr_stats_read); printf("%lx", (unsigned long) gpr_thd_new);
printf("%lx", (unsigned long) gpr_thd_new); printf("%lx", (unsigned long) gpr_thd_options_default);
printf("%lx", (unsigned long) gpr_thd_options_default); printf("%lx", (unsigned long) gpr_thd_options_set_detached);
printf("%lx", (unsigned long) gpr_thd_options_set_detached); printf("%lx", (unsigned long) gpr_thd_options_set_joinable);
printf("%lx", (unsigned long) gpr_thd_options_set_joinable); printf("%lx", (unsigned long) gpr_thd_options_is_detached);
printf("%lx", (unsigned long) gpr_thd_options_is_detached); printf("%lx", (unsigned long) gpr_thd_options_is_joinable);
printf("%lx", (unsigned long) gpr_thd_options_is_joinable); printf("%lx", (unsigned long) gpr_thd_currentid);
printf("%lx", (unsigned long) gpr_thd_currentid); printf("%lx", (unsigned long) gpr_thd_join);
printf("%lx", (unsigned long) gpr_thd_join); printf("%lx", (unsigned long) gpr_time_0);
printf("%lx", (unsigned long) gpr_time_0); printf("%lx", (unsigned long) gpr_inf_future);
printf("%lx", (unsigned long) gpr_inf_future); printf("%lx", (unsigned long) gpr_inf_past);
printf("%lx", (unsigned long) gpr_inf_past); printf("%lx", (unsigned long) gpr_time_init);
printf("%lx", (unsigned long) gpr_time_init); printf("%lx", (unsigned long) gpr_now);
printf("%lx", (unsigned long) gpr_now); printf("%lx", (unsigned long) gpr_convert_clock_type);
printf("%lx", (unsigned long) gpr_convert_clock_type); printf("%lx", (unsigned long) gpr_time_cmp);
printf("%lx", (unsigned long) gpr_time_cmp); printf("%lx", (unsigned long) gpr_time_max);
printf("%lx", (unsigned long) gpr_time_max); printf("%lx", (unsigned long) gpr_time_min);
printf("%lx", (unsigned long) gpr_time_min); printf("%lx", (unsigned long) gpr_time_add);
printf("%lx", (unsigned long) gpr_time_add); printf("%lx", (unsigned long) gpr_time_sub);
printf("%lx", (unsigned long) gpr_time_sub); printf("%lx", (unsigned long) gpr_time_from_micros);
printf("%lx", (unsigned long) gpr_time_from_micros); printf("%lx", (unsigned long) gpr_time_from_nanos);
printf("%lx", (unsigned long) gpr_time_from_nanos); printf("%lx", (unsigned long) gpr_time_from_millis);
printf("%lx", (unsigned long) gpr_time_from_millis); printf("%lx", (unsigned long) gpr_time_from_seconds);
printf("%lx", (unsigned long) gpr_time_from_seconds); printf("%lx", (unsigned long) gpr_time_from_minutes);
printf("%lx", (unsigned long) gpr_time_from_minutes); printf("%lx", (unsigned long) gpr_time_from_hours);
printf("%lx", (unsigned long) gpr_time_from_hours); printf("%lx", (unsigned long) gpr_time_to_millis);
printf("%lx", (unsigned long) gpr_time_to_millis); printf("%lx", (unsigned long) gpr_time_similar);
printf("%lx", (unsigned long) gpr_time_similar); printf("%lx", (unsigned long) gpr_sleep_until);
printf("%lx", (unsigned long) gpr_sleep_until); printf("%lx", (unsigned long) gpr_timespec_to_micros);
printf("%lx", (unsigned long) gpr_timespec_to_micros);
}
return 0; return 0;
} }

@ -19,8 +19,7 @@ def grpc_fuzzer(name, corpus, srcs = [], deps = [], **kwargs):
name = name, name = name,
srcs = srcs, srcs = srcs,
deps = deps + ["//test/core/util:fuzzer_corpus_test"], deps = deps + ["//test/core/util:fuzzer_corpus_test"],
data = [corpus], data = native.glob([corpus + "/**"]),
args = ['--directory', '$(location %s)' % corpus],
external_deps = [ external_deps = [
'gtest', 'gtest',
], ],

@ -1 +1 @@
Subproject commit 80a37e0782d2d702d52234b62dd4b9ec74fd2c95 Subproject commit 2761122b810fe8861004ae785cc3ab39f384d342

@ -68,7 +68,7 @@ popd
# this should be the same version as the submodule we compile against # this should be the same version as the submodule we compile against
# ideally we'd update this as a template to ensure that # ideally we'd update this as a template to ensure that
pip install protobuf==3.2.0 pip install protobuf==3.5.0.post1
pushd "$(dirname $INPUT_PROTO)" > /dev/null pushd "$(dirname $INPUT_PROTO)" > /dev/null

File diff suppressed because one or more lines are too long

@ -209,7 +209,7 @@ setuptools.setup(
ext_modules=extension_modules(), ext_modules=extension_modules(),
packages=setuptools.find_packages('.'), packages=setuptools.find_packages('.'),
install_requires=[ install_requires=[
'protobuf>=3.3.0', 'protobuf>=3.5.0.post1',
'grpcio>={version}'.format(version=grpc_version.VERSION), 'grpcio>={version}'.format(version=grpc_version.VERSION),
], ],
package_data=package_data(), package_data=package_data(),

@ -62,7 +62,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================ #================
# C# dependencies # C# dependencies

@ -62,7 +62,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================ #================
# C# dependencies # C# dependencies

@ -62,7 +62,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================= #=================
# C++ dependencies # C++ dependencies

@ -30,7 +30,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Define the default command. # Define the default command.
CMD ["bash"] CMD ["bash"]

@ -30,7 +30,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Define the default command. # Define the default command.
CMD ["bash"] CMD ["bash"]

@ -30,7 +30,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Define the default command. # Define the default command.
CMD ["bash"] CMD ["bash"]

@ -30,7 +30,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
RUN pip install twisted h2==2.6.1 hyper RUN pip install twisted h2==2.6.1 hyper

@ -45,7 +45,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Trigger download of as many Gradle artifacts as possible. # Trigger download of as many Gradle artifacts as possible.

@ -45,7 +45,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Trigger download of as many Gradle artifacts as possible. # Trigger download of as many Gradle artifacts as possible.

@ -62,7 +62,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================== #==================
# Node dependencies # Node dependencies

@ -62,7 +62,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Prepare ccache # Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc RUN ln -s /usr/bin/ccache /usr/local/bin/gcc

@ -62,7 +62,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================== #==================
# Ruby dependencies # Ruby dependencies

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================ #================
# C# dependencies # C# dependencies

@ -38,7 +38,7 @@ RUN apk update && apk add \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0
# Google Cloud platform API libraries # Google Cloud platform API libraries
RUN pip install --upgrade google-api-python-client RUN pip install --upgrade google-api-python-client

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================= #=================
# C++ dependencies # C++ dependencies

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================= #=================
# C++ dependencies # C++ dependencies

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================= #=================
# C++ dependencies # C++ dependencies

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================= #=================
# C++ dependencies # C++ dependencies

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================= #=================
# C++ dependencies # C++ dependencies

@ -141,7 +141,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Install coverage for Python test coverage reporting # Install coverage for Python test coverage reporting
RUN pip install coverage RUN pip install coverage

@ -77,7 +77,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================== #==================
# Node dependencies # Node dependencies

@ -77,7 +77,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Prepare ccache # Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc RUN ln -s /usr/bin/ccache /usr/local/bin/gcc

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================= #=================
# PHP dependencies # PHP dependencies

@ -38,7 +38,7 @@ RUN apk update && apk add \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0
# Google Cloud platform API libraries # Google Cloud platform API libraries
RUN pip install --upgrade google-api-python-client RUN pip install --upgrade google-api-python-client

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Prepare ccache # Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc RUN ln -s /usr/bin/ccache /usr/local/bin/gcc

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
# Install dependencies for pyenv # Install dependencies for pyenv
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================== #==================
# Ruby dependencies # Ruby dependencies

@ -66,7 +66,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI # Install Python packages from PyPI
RUN pip install --upgrade pip==9.0.1 RUN pip install --upgrade pip==9.0.1
RUN pip install virtualenv RUN pip install virtualenv
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0 twisted==17.5.0 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.5.0.post1 six==1.10.0 twisted==17.5.0
#================= #=================
# C++ dependencies # C++ dependencies

@ -8,8 +8,8 @@ from specific releases/tag, are used to test version compatiblity between gRPC r
## Step-by-step instructions for adding a GCR image for a new release for compatibility test ## Step-by-step instructions for adding a GCR image for a new release for compatibility test
We have continuous nightly test setup to test gRPC backward compatibility between old clients and latest server. When a gRPC developer creates a new gRPC release, s/he is also responsible to add the just-released gRPC client to the nightly test. The steps are: We have continuous nightly test setup to test gRPC backward compatibility between old clients and latest server. When a gRPC developer creates a new gRPC release, s/he is also responsible to add the just-released gRPC client to the nightly test. The steps are:
- Add (or update) an entry in `./client_matrix.py` file to reference the github tag for the release. - Add (or update) an entry in `./client_matrix.py` file to reference the github tag for the release.
- Build new client docker image(s). For example, for java release `v1.9.9`, do - Build new client docker image(s). For example, for C and wrapper languages release `v1.9.9`, do
- `tools/interop_matrix/create_matrix_images.py --git_checkout --release=v1.9.9 --language=java` - `tools/interop_matrix/create_matrix_images.py --git_checkout --release=v1.9.9 --language cxx csharp python ruby php`
- Verify that the new docker image was built successfully and uploaded to GCR. For example, - Verify that the new docker image was built successfully and uploaded to GCR. For example,
- `gcloud beta container images list --repository gcr.io/grpc-testing` shows image repos. - `gcloud beta container images list --repository gcr.io/grpc-testing` shows image repos.
- `gcloud beta container images list-tags gcr.io/grpc-testing/grpc_interop_java_oracle8` should show an image entry with tag `v1.9.9`. - `gcloud beta container images list-tags gcr.io/grpc-testing/grpc_interop_java_oracle8` should show an image entry with tag `v1.9.9`.

@ -19,6 +19,7 @@ def get_github_repo(lang):
return { return {
'go': 'git@github.com:grpc/grpc-go.git', 'go': 'git@github.com:grpc/grpc-go.git',
'java': 'git@github.com:grpc/grpc-java.git', 'java': 'git@github.com:grpc/grpc-java.git',
'node': 'git@github.com:grpc/grpc-node.git',
# all other languages use the grpc.git repo. # all other languages use the grpc.git repo.
}.get(lang, 'git@github.com:grpc/grpc.git') }.get(lang, 'git@github.com:grpc/grpc.git')
@ -44,6 +45,7 @@ LANG_RELEASE_MATRIX = {
'v1.3.9', 'v1.3.9',
'v1.4.2', 'v1.4.2',
'v1.6.6', 'v1.6.6',
'v1.7.2',
], ],
'go': [ 'go': [
'v1.0.5', 'v1.0.5',
@ -53,6 +55,10 @@ LANG_RELEASE_MATRIX = {
'v1.5.2', 'v1.5.2',
'v1.6.0', 'v1.6.0',
'v1.7.0', 'v1.7.0',
'v1.7.1',
'v1.7.2',
'v1.7.3',
'v1.8.0',
], ],
'java': [ 'java': [
'v1.0.3', 'v1.0.3',
@ -63,6 +69,7 @@ LANG_RELEASE_MATRIX = {
'v1.5.0', 'v1.5.0',
'v1.6.1', 'v1.6.1',
'v1.7.0', 'v1.7.0',
'v1.8.0',
], ],
'python': [ 'python': [
'v1.0.x', 'v1.0.x',
@ -72,6 +79,24 @@ LANG_RELEASE_MATRIX = {
'v1.4.2', 'v1.4.2',
'v1.6.6', 'v1.6.6',
], ],
'python': [
'v1.0.x',
'v1.1.4',
'v1.2.5',
'v1.3.9',
'v1.4.2',
'v1.6.6',
'v1.7.2',
],
'python': [
'v1.0.x',
'v1.1.4',
'v1.2.5',
'v1.3.9',
'v1.4.2',
'v1.6.6',
'v1.7.2',
],
'node': [ 'node': [
'v1.0.1', 'v1.0.1',
'v1.1.4', 'v1.1.4',
@ -79,6 +104,7 @@ LANG_RELEASE_MATRIX = {
'v1.3.9', 'v1.3.9',
'v1.4.2', 'v1.4.2',
'v1.6.6', 'v1.6.6',
#'v1.7.1', Failing tests.
], ],
'ruby': [ 'ruby': [
# Ruby v1.0.x doesn't have the fix #8914, therefore not supported. # Ruby v1.0.x doesn't have the fix #8914, therefore not supported.
@ -87,6 +113,7 @@ LANG_RELEASE_MATRIX = {
'v1.3.9', 'v1.3.9',
'v1.4.2', 'v1.4.2',
'v1.6.6', 'v1.6.6',
'v1.7.2',
], ],
'php': [ 'php': [
'v1.0.1', 'v1.0.1',
@ -95,6 +122,7 @@ LANG_RELEASE_MATRIX = {
'v1.3.9', 'v1.3.9',
'v1.4.2', 'v1.4.2',
'v1.6.6', 'v1.6.6',
'v1.7.2',
], ],
'csharp': [ 'csharp': [
#'v1.0.1', #'v1.0.1',
@ -103,5 +131,6 @@ LANG_RELEASE_MATRIX = {
'v1.3.9', 'v1.3.9',
'v1.4.2', 'v1.4.2',
'v1.6.6', 'v1.6.6',
'v1.7.2',
], ],
} }

@ -77,6 +77,15 @@ argp.add_argument('--keep',
action='store_true', action='store_true',
help='keep the created local images after uploading to GCR') help='keep the created local images after uploading to GCR')
argp.add_argument('--reuse_git_root',
default=False,
action='store_const',
const=True,
help='reuse the repo dir. If False, the existing git root '
'directory will removed before a clean checkout, because '
'reusing the repo can cause git checkout error if you switch '
'between releases.')
args = argp.parse_args() args = argp.parse_args()
@ -133,7 +142,7 @@ def build_image_jobspec(runtime, env, gcr_tag, stack_base):
} }
build_env.update(env) build_env.update(env)
build_job = jobset.JobSpec( build_job = jobset.JobSpec(
cmdline=[os.path.join(stack_base, _IMAGE_BUILDER)], cmdline=[_IMAGE_BUILDER],
environ=build_env, environ=build_env,
shortname='build_docker_%s' % runtime, shortname='build_docker_%s' % runtime,
timeout_seconds=30*60) timeout_seconds=30*60)
@ -227,6 +236,11 @@ def checkout_grpc_stack(lang, release):
repo_dir = os.path.splitext(os.path.basename(repo))[0] repo_dir = os.path.splitext(os.path.basename(repo))[0]
stack_base = os.path.join(args.git_checkout_root, repo_dir) stack_base = os.path.join(args.git_checkout_root, repo_dir)
# Clean up leftover repo dir if necessary.
if not args.reuse_git_root and os.path.exists(stack_base):
jobset.message('START', 'Removing git checkout root.', do_newline=True)
shutil.rmtree(stack_base)
if not os.path.exists(stack_base): if not os.path.exists(stack_base):
subprocess.check_call(['git', 'clone', '--recursive', repo], subprocess.check_call(['git', 'clone', '--recursive', repo],
cwd=os.path.dirname(stack_base)) cwd=os.path.dirname(stack_base))

@ -1,21 +1,21 @@
#!/bin/bash #!/bin/bash
echo "Testing ${docker_image:=grpc_interop_node:a53aa5e3-b548-4566-b5a8-6d15c1315b32}" echo "Testing ${docker_image:=grpc_interop_node:a53aa5e3-b548-4566-b5a8-6d15c1315b32}"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_00c688f2-57da-4023-89f3-46b1f7b5869f $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test.sandbox.googleapis.com --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=large_unary" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_00c688f2-57da-4023-89f3-46b1f7b5869f $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=large_unary"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_d86705d8-14ea-4024-90b6-de74d6e8d19c $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test.sandbox.googleapis.com --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=empty_unary" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_d86705d8-14ea-4024-90b6-de74d6e8d19c $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=empty_unary"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_ebaafacd-1d82-4a75-bea1-a5c64e01fcaf $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test.sandbox.googleapis.com --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=ping_pong" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_ebaafacd-1d82-4a75-bea1-a5c64e01fcaf $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=ping_pong"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_5125241a-fbf6-4c1c-895b-026a5a41f02f $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test.sandbox.googleapis.com --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=empty_stream" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_5125241a-fbf6-4c1c-895b-026a5a41f02f $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=empty_stream"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_3d5e5b82-7205-4eba-b775-8122f05a4760 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test.sandbox.googleapis.com --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=client_streaming" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_3d5e5b82-7205-4eba-b775-8122f05a4760 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=client_streaming"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_16fa0b49-2083-4932-8f26-79cfdffec940 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test.sandbox.googleapis.com --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=server_streaming" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_16fa0b49-2083-4932-8f26-79cfdffec940 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=server_streaming"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_23cee670-2d8d-4f5c-8893-c3c43da8b03a $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test.sandbox.googleapis.com --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=cancel_after_begin" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_23cee670-2d8d-4f5c-8893-c3c43da8b03a $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=cancel_after_begin"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_7b6a9454-e3b6-4993-b542-468e268930aa $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test.sandbox.googleapis.com --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=cancel_after_first_response" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_7b6a9454-e3b6-4993-b542-468e268930aa $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=cancel_after_first_response"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_5a7109ed-c065-4b62-98f4-b3ed8f385762 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test.sandbox.googleapis.com --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=timeout_on_sleeping_server" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_5a7109ed-c065-4b62-98f4-b3ed8f385762 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=timeout_on_sleeping_server"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_1e0ba8dd-4dc1-431b-b202-529e7ace5d1d $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test4.sandbox.googleapis.com --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=large_unary" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_1e0ba8dd-4dc1-431b-b202-529e7ace5d1d $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=large_unary"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_649de56a-e722-4a59-b265-e9c0e871f068 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test4.sandbox.googleapis.com --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=empty_unary" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_649de56a-e722-4a59-b265-e9c0e871f068 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=empty_unary"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_8be512a2-5e1c-4858-8cfc-82f99b678b76 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test4.sandbox.googleapis.com --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=ping_pong" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_8be512a2-5e1c-4858-8cfc-82f99b678b76 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=ping_pong"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_d19b6333-e528-48b5-8421-2ae3f7ce9dab $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test4.sandbox.googleapis.com --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=empty_stream" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_d19b6333-e528-48b5-8421-2ae3f7ce9dab $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=empty_stream"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_4749c80a-21c5-4d81-9df5-3c46ba6480cd $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test4.sandbox.googleapis.com --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=client_streaming" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_4749c80a-21c5-4d81-9df5-3c46ba6480cd $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=client_streaming"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_b7bee545-4857-4269-a1f2-9553dfc7e4b8 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test4.sandbox.googleapis.com --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=server_streaming" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_b7bee545-4857-4269-a1f2-9553dfc7e4b8 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=server_streaming"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_4e96db87-6f48-426d-a7f0-97f3a5b6b3f4 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test4.sandbox.googleapis.com --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=cancel_after_begin" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_4e96db87-6f48-426d-a7f0-97f3a5b6b3f4 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=cancel_after_begin"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_31a1d58c-f8bf-460a-af60-28969ecaaf80 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test4.sandbox.googleapis.com --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=cancel_after_first_response" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_31a1d58c-f8bf-460a-af60-28969ecaaf80 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=cancel_after_first_response"
docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_ce64b147-bcfa-44b2-a2f7-4a485380ce30 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=grpc-test4.sandbox.googleapis.com --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=timeout_on_sleeping_server" docker run -i --rm=true -w /var/local/git/grpc --net=host --name interop_client_node_ce64b147-bcfa-44b2-a2f7-4a485380ce30 $docker_image bash -l -c "node src/node/interop/interop_client.js --server_host=216.239.32.254 --server_host_override=grpc-test4.sandbox.googleapis.com --server_port=443 --use_tls=true --test_case=timeout_on_sleeping_server"

@ -20,7 +20,10 @@
} }
}, },
{ {
"config": "msan" "config": "msan",
"environ": {
"MSAN_OPTIONS": "poison_in_dtor=1"
}
}, },
{ {
"config": "basicprof" "config": "basicprof"

@ -31,7 +31,7 @@ cat << EOF | awk '{ print $1 }' | sort > $want_submodules
886e7d75368e3f4fab3f4d0d3584e4abfc557755 third_party/boringssl-with-bazel (version_for_cocoapods_7.0-857-g886e7d7) 886e7d75368e3f4fab3f4d0d3584e4abfc557755 third_party/boringssl-with-bazel (version_for_cocoapods_7.0-857-g886e7d7)
30dbc81fb5ffdc98ea9b14b1918bfe4e8779b26e third_party/gflags (v2.2.0) 30dbc81fb5ffdc98ea9b14b1918bfe4e8779b26e third_party/gflags (v2.2.0)
ec44c6c1675c25b9827aacd08c02433cccde7780 third_party/googletest (release-1.8.0) ec44c6c1675c25b9827aacd08c02433cccde7780 third_party/googletest (release-1.8.0)
80a37e0782d2d702d52234b62dd4b9ec74fd2c95 third_party/protobuf (v3.4.0) 2761122b810fe8861004ae785cc3ab39f384d342 third_party/protobuf (v3.5.0)
cacf7f1d4e3d44d871b605da3b647f07d718623f third_party/zlib (v1.2.11) cacf7f1d4e3d44d871b605da3b647f07d718623f third_party/zlib (v1.2.11)
3be1924221e1326df520f8498d704a5c4c8d0cce third_party/cares/cares (cares-1_13_0) 3be1924221e1326df520f8498d704a5c4c8d0cce third_party/cares/cares (cares-1_13_0)
73594cde8c9a52a102c4341c244c833aa61b9c06 third_party/bloaty 73594cde8c9a52a102c4341c244c833aa61b9c06 third_party/bloaty

Loading…
Cancel
Save