mirror of https://github.com/grpc/grpc.git
commit
9e9aaa88e1
137 changed files with 2295 additions and 497 deletions
File diff suppressed because one or more lines are too long
@ -0,0 +1,3 @@ |
||||
Michael Lumish (mlumish@google.com) |
||||
Tim Emiola (temiola@google.com) |
||||
Stanley Cheung (stanleycheung@google.com) |
@ -0,0 +1,32 @@ |
||||
/* |
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
@ -0,0 +1,72 @@ |
||||
gRPC PHP Extension |
||||
================== |
||||
|
||||
# Requirements |
||||
|
||||
* PHP 5.5+ |
||||
* [gRPC core library](https://github.com/grpc/grpc) 0.9.1 |
||||
|
||||
# Installation |
||||
|
||||
## Install PHP 5 |
||||
|
||||
``` |
||||
$ sudo apt-get install git php5 php5-dev php-pear unzip |
||||
``` |
||||
|
||||
## Compile gRPC Core Library |
||||
|
||||
Clone the gRPC source code repository |
||||
|
||||
``` |
||||
$ git clone https://github.com/grpc/grpc.git |
||||
``` |
||||
|
||||
Build and install the Protocol Buffers compiler (protoc) |
||||
|
||||
``` |
||||
$ # from grpc |
||||
$ git checkout --track origin/release-0_9 |
||||
$ git pull --recurse-submodules && git submodule update --init --recursive |
||||
$ cd third_party/protobuf |
||||
$ ./autogen.sh |
||||
$ ./configure |
||||
$ make |
||||
$ make check |
||||
$ sudo make install |
||||
``` |
||||
|
||||
Build and install the gRPC C core library |
||||
|
||||
```sh |
||||
$ # from grpc |
||||
$ make |
||||
$ sudo make install |
||||
``` |
||||
|
||||
## Install the gRPC PHP extension |
||||
|
||||
Quick install |
||||
|
||||
```sh |
||||
$ sudo pecl install grpc |
||||
``` |
||||
|
||||
Note: before a stable release, you may need to do |
||||
|
||||
```sh |
||||
$ sudo pecl install grpc-0.5.0 |
||||
``` |
||||
|
||||
OR |
||||
|
||||
Compile from source |
||||
|
||||
```sh |
||||
$ # from grpc |
||||
$ cd src/php/ext/grpc |
||||
$ phpize |
||||
$ ./configure |
||||
$ make |
||||
$ sudo make install |
||||
``` |
@ -0,0 +1,82 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<package packagerversion="1.9.5" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 http://pear.php.net/dtd/tasks-1.0.xsd http://pear.php.net/dtd/package-2.0 http://pear.php.net/dtd/package-2.0.xsd"> |
||||
<name>grpc</name> |
||||
<channel>pecl.php.net</channel> |
||||
<summary>A high performance, open source, general RPC framework that puts mobile and HTTP/2 first.</summary> |
||||
<description>Remote Procedure Calls (RPCs) provide a useful abstraction for building distributed applications and services. The libraries in this repository provide a concrete implementation of the gRPC protocol, layered over HTTP/2. These libraries enable communication between clients and servers using any combination of the supported languages.</description> |
||||
<lead> |
||||
<name>Stanley Cheung</name> |
||||
<user>stanleycheung</user> |
||||
<email>grpc-packages@google.com</email> |
||||
<active>yes</active> |
||||
</lead> |
||||
<date>2015-06-16</date> |
||||
<time>20:12:55</time> |
||||
<version> |
||||
<release>0.5.0</release> |
||||
<api>0.5.0</api> |
||||
</version> |
||||
<stability> |
||||
<release>alpha</release> |
||||
<api>alpha</api> |
||||
</stability> |
||||
<license>BSD</license> |
||||
<notes> |
||||
First alpha release |
||||
</notes> |
||||
<contents> |
||||
<dir baseinstalldir="/" name="/"> |
||||
<file baseinstalldir="/" md5sum="6f19828fb869b7b8a590cbb76b4f996d" name="byte_buffer.c" role="src" /> |
||||
<file baseinstalldir="/" md5sum="c8de0f819499c48adfc8d7f472c0196b" name="byte_buffer.h" role="src" /> |
||||
<file baseinstalldir="/" md5sum="cb45b62f767ae7b4377761df696649fc" name="call.c" role="src" /> |
||||
<file baseinstalldir="/" md5sum="26acbf04c30162c2d2aca4688bb2aec8" name="call.h" role="src" /> |
||||
<file baseinstalldir="/" md5sum="50837fbdb2892795f1871b22e5979762" name="channel.c" role="src" /> |
||||
<file baseinstalldir="/" md5sum="f1b66029daeced20b47cf00cc6523fc8" name="channel.h" role="src" /> |
||||
<file baseinstalldir="/" md5sum="81a1193e93d8b6602add8ac360de565b" name="completion_queue.c" role="src" /> |
||||
<file baseinstalldir="/" md5sum="f10b5bb232d74a6878e829e2e76cdaa2" name="completion_queue.h" role="src" /> |
||||
<file baseinstalldir="/" md5sum="a9181ed994a072ac5f41e7c9705c170f" name="config.m4" role="src" /> |
||||
<file baseinstalldir="/" md5sum="8c3f1e11dac623001378bfd53b554f08" name="credentials.c" role="src" /> |
||||
<file baseinstalldir="/" md5sum="6988d6e97c19c8f8e3eb92371cf8246b" name="credentials.h" role="src" /> |
||||
<file baseinstalldir="/" md5sum="38a1bc979d810c36ebc2a52d4b7b5319" name="CREDITS" role="doc" /> |
||||
<file baseinstalldir="/" md5sum="3f35b472bbdef5a788cd90617d7d0847" name="LICENSE" role="doc" /> |
||||
<file baseinstalldir="/" md5sum="6aaa7a290122d230f2d8c4e4e05da4a9" name="php_grpc.c" role="src" /> |
||||
<file baseinstalldir="/" md5sum="673b07859d9f69232f8a754c56780686" name="php_grpc.h" role="src" /> |
||||
<file baseinstalldir="/" md5sum="4d4d3382f8d10cae2e4378468e5516b9" name="README.md" role="doc" /> |
||||
<file baseinstalldir="/" md5sum="53fda0ee6937f6ddc8e271886018d441" name="server.c" role="src" /> |
||||
<file baseinstalldir="/" md5sum="4b730f06d14cbbb0642bdbd194749595" name="server.h" role="src" /> |
||||
<file baseinstalldir="/" md5sum="f6930beafb6c0e061899262f2f077e98" name="server_credentials.c" role="src" /> |
||||
<file baseinstalldir="/" md5sum="9c4b4cc06356a8a39a16a085a9b85996" name="server_credentials.h" role="src" /> |
||||
<file baseinstalldir="/" md5sum="c89c623cd17177ebde18313fc5c17122" name="timeval.c" role="src" /> |
||||
<file baseinstalldir="/" md5sum="496e27a100b4d93ca3fb35c924c5e163" name="timeval.h" role="src" /> |
||||
</dir> |
||||
</contents> |
||||
<dependencies> |
||||
<required> |
||||
<php> |
||||
<min>5.5.0</min> |
||||
</php> |
||||
<pearinstaller> |
||||
<min>1.4.0</min> |
||||
</pearinstaller> |
||||
</required> |
||||
</dependencies> |
||||
<providesextension>grpc</providesextension> |
||||
<extsrcrelease /> |
||||
<changelog> |
||||
<release> |
||||
<version> |
||||
<release>0.5.0</release> |
||||
<api>0.5.0</api> |
||||
</version> |
||||
<stability> |
||||
<release>alpha</release> |
||||
<api>alpha</api> |
||||
</stability> |
||||
<date>2015-06-16</date> |
||||
<license>BSD</license> |
||||
<notes> |
||||
First alpha release |
||||
</notes> |
||||
</release> |
||||
</changelog> |
||||
</package> |
@ -1,2 +1,4 @@ |
||||
-I. |
||||
--require spec_helper |
||||
--format documentation |
||||
--color |
||||
|
@ -0,0 +1,126 @@ |
||||
<%! |
||||
bad_header_names = ('time.h', 'string.h') |
||||
def fix_header_name(name): |
||||
split_name = name.split('/') |
||||
if split_name[-1] in bad_header_names: |
||||
return '/'.join(split_name[:-1] + ['grpc_' + split_name[-1]]) |
||||
else: |
||||
return name |
||||
%> |
||||
|
||||
Pod::Spec.new do |s| |
||||
s.name = 'gRPC' |
||||
s.version = '0.6.0' |
||||
s.summary = 'gRPC client library for iOS/OSX' |
||||
s.homepage = 'http://www.grpc.io' |
||||
s.license = 'New BSD' |
||||
s.authors = { 'The gRPC contributors' => 'grpc-packages@google.com' } |
||||
|
||||
# s.source = { :git => 'https://github.com/grpc/grpc.git', |
||||
# :tag => 'release-0_9_1-objectivec-0.5.1' } |
||||
|
||||
s.ios.deployment_target = '6.0' |
||||
s.osx.deployment_target = '10.8' |
||||
s.requires_arc = true |
||||
|
||||
# Reactive Extensions library for iOS. |
||||
s.subspec 'RxLibrary' do |rs| |
||||
rs.source_files = 'src/objective-c/RxLibrary/*.{h,m}', |
||||
'src/objective-c/RxLibrary/transformations/*.{h,m}', |
||||
'src/objective-c/RxLibrary/private/*.{h,m}' |
||||
rs.private_header_files = 'src/objective-c/RxLibrary/private/*.h' |
||||
end |
||||
|
||||
# Core cross-platform gRPC library, written in C. |
||||
s.subspec 'C-Core' do |cs| |
||||
cs.source_files = \ |
||||
% for lib in libs: |
||||
% if lib.name in ("grpc", "gpr"): |
||||
% for hdr in lib.get("headers", []): |
||||
'${fix_header_name(hdr)}', \ |
||||
% endfor |
||||
% for hdr in lib.get("public_headers", []): |
||||
'${fix_header_name(hdr)}', \ |
||||
% endfor |
||||
% for src in lib.src: |
||||
'${src}', \ |
||||
% endfor |
||||
% endif |
||||
% endfor |
||||
|
||||
cs.private_header_files = \ |
||||
% for lib in libs: |
||||
% if lib.name in ("grpc", "gpr"): |
||||
% for hdr in lib.get("headers", []): |
||||
'${hdr}', \ |
||||
% endfor |
||||
% endif |
||||
% endfor |
||||
|
||||
cs.header_mappings_dir = '.' |
||||
# The core library includes its headers as either "src/core/..." or "grpc/...", meaning we have |
||||
# to tell XCode to look for headers under the "include" subdirectory too. |
||||
# |
||||
# TODO(jcanizales): Instead of doing this, during installation move everything under |
||||
# "include/grpc" one directory up. The directory names under PODS_ROOT are implementation |
||||
# details of Cocoapods, and have changed in the past, breaking this podspec. |
||||
cs.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/Headers/Private/gRPC" ' + |
||||
'"$(PODS_ROOT)/Headers/Private/gRPC/include"' } |
||||
|
||||
cs.requires_arc = false |
||||
cs.libraries = 'z' |
||||
cs.dependency 'OpenSSL', '~> 1.0.200' |
||||
end |
||||
|
||||
# This is a workaround for Cocoapods Issue #1437. |
||||
# It renames time.h and string.h to grpc_time.h and grpc_string.h. |
||||
# It needs to be here (top-level) instead of in the C-Core subspec because Cocoapods doesn't run |
||||
# prepare_command's of subspecs. |
||||
# |
||||
# TODO(jcanizales): Try out Todd Reed's solution at Issue #1437. |
||||
s.prepare_command = <<-CMD |
||||
DIR_TIME="grpc/support" |
||||
BAD_TIME="$DIR_TIME/time.h" |
||||
GOOD_TIME="$DIR_TIME/grpc_time.h" |
||||
grep -rl "$BAD_TIME" include/grpc src/core | xargs sed -i '' -e s@$BAD_TIME@$GOOD_TIME@g |
||||
if [ -f "include/$BAD_TIME" ]; |
||||
then |
||||
mv -f "include/$BAD_TIME" "include/$GOOD_TIME" |
||||
fi |
||||
|
||||
DIR_STRING="src/core/support" |
||||
BAD_STRING="$DIR_STRING/string.h" |
||||
GOOD_STRING="$DIR_STRING/grpc_string.h" |
||||
grep -rl "$BAD_STRING" include/grpc src/core | xargs sed -i '' -e s@$BAD_STRING@$GOOD_STRING@g |
||||
if [ -f "$BAD_STRING" ]; |
||||
then |
||||
mv -f "$BAD_STRING" "$GOOD_STRING" |
||||
fi |
||||
CMD |
||||
|
||||
# Objective-C wrapper around the core gRPC library. |
||||
s.subspec 'GRPCClient' do |gs| |
||||
gs.source_files = 'src/objective-c/GRPCClient/*.{h,m}', |
||||
'src/objective-c/GRPCClient/private/*.{h,m}' |
||||
gs.private_header_files = 'src/objective-c/GRPCClient/private/*.h' |
||||
gs.compiler_flags = '-GCC_WARN_INHIBIT_ALL_WARNINGS', '-w' |
||||
|
||||
gs.dependency 'gRPC/C-Core' |
||||
# TODO(jcanizales): Remove this when the prepare_command moves everything under "include/grpc" |
||||
# one directory up. |
||||
gs.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/Headers/Public/gRPC/include"' } |
||||
gs.dependency 'gRPC/RxLibrary' |
||||
|
||||
# Certificates, to be able to establish TLS connections: |
||||
gs.resource_bundles = { 'gRPC' => ['etc/roots.pem'] } |
||||
end |
||||
|
||||
# RPC library for ProtocolBuffers, based on gRPC |
||||
s.subspec 'ProtoRPC' do |ps| |
||||
ps.source_files = 'src/objective-c/ProtoRPC/*.{h,m}' |
||||
|
||||
ps.dependency 'gRPC/GRPCClient' |
||||
ps.dependency 'gRPC/RxLibrary' |
||||
ps.dependency 'Protobuf', '~> 3.0.0-alpha-3' |
||||
end |
||||
end |
@ -0,0 +1,207 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include "test/core/end2end/end2end_tests.h" |
||||
|
||||
#include <stdio.h> |
||||
#include <string.h> |
||||
|
||||
#include <grpc/byte_buffer.h> |
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/time.h> |
||||
#include <grpc/support/useful.h> |
||||
#include "src/core/transport/stream_op.h" |
||||
#include "test/core/end2end/cq_verifier.h" |
||||
|
||||
enum { TIMEOUT = 200000 }; |
||||
|
||||
static void *tag(gpr_intptr t) { return (void *)t; } |
||||
|
||||
static grpc_end2end_test_fixture begin_test(grpc_end2end_test_config config, |
||||
const char *test_name, |
||||
grpc_channel_args *client_args, |
||||
grpc_channel_args *server_args) { |
||||
grpc_end2end_test_fixture f; |
||||
gpr_log(GPR_INFO, "%s/%s", test_name, config.name); |
||||
f = config.create_fixture(client_args, server_args); |
||||
config.init_client(&f, client_args); |
||||
config.init_server(&f, server_args); |
||||
return f; |
||||
} |
||||
|
||||
static gpr_timespec n_seconds_time(int n) { |
||||
return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(n); |
||||
} |
||||
|
||||
static gpr_timespec five_seconds_time(void) { return n_seconds_time(5); } |
||||
|
||||
static void drain_cq(grpc_completion_queue *cq) { |
||||
grpc_event ev; |
||||
do { |
||||
ev = grpc_completion_queue_next(cq, five_seconds_time()); |
||||
} while (ev.type != GRPC_QUEUE_SHUTDOWN); |
||||
} |
||||
|
||||
static void shutdown_server(grpc_end2end_test_fixture *f) { |
||||
if (!f->server) return; |
||||
grpc_server_shutdown_and_notify(f->server, f->server_cq, tag(1000)); |
||||
GPR_ASSERT(grpc_completion_queue_pluck(f->server_cq, tag(1000), GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5)).type == GRPC_OP_COMPLETE); |
||||
grpc_server_destroy(f->server); |
||||
f->server = NULL; |
||||
} |
||||
|
||||
static void shutdown_client(grpc_end2end_test_fixture *f) { |
||||
if (!f->client) return; |
||||
grpc_channel_destroy(f->client); |
||||
f->client = NULL; |
||||
} |
||||
|
||||
static void end_test(grpc_end2end_test_fixture *f) { |
||||
shutdown_server(f); |
||||
shutdown_client(f); |
||||
|
||||
grpc_completion_queue_shutdown(f->server_cq); |
||||
drain_cq(f->server_cq); |
||||
grpc_completion_queue_destroy(f->server_cq); |
||||
grpc_completion_queue_shutdown(f->client_cq); |
||||
drain_cq(f->client_cq); |
||||
grpc_completion_queue_destroy(f->client_cq); |
||||
} |
||||
|
||||
static void test_invoke_request_with_flags( |
||||
grpc_end2end_test_config config, gpr_uint32 *flags_for_op, |
||||
grpc_call_error call_start_batch_expected_result) { |
||||
grpc_call *c; |
||||
gpr_slice request_payload_slice = gpr_slice_from_copied_string("hello world"); |
||||
grpc_byte_buffer *request_payload = |
||||
grpc_raw_byte_buffer_create(&request_payload_slice, 1); |
||||
gpr_timespec deadline = five_seconds_time(); |
||||
grpc_end2end_test_fixture f = |
||||
begin_test(config, "test_invoke_request_with_flags", NULL, NULL); |
||||
cq_verifier *v_client = cq_verifier_create(f.client_cq); |
||||
cq_verifier *v_server = cq_verifier_create(f.server_cq); |
||||
grpc_op ops[6]; |
||||
grpc_op *op; |
||||
grpc_metadata_array initial_metadata_recv; |
||||
grpc_metadata_array trailing_metadata_recv; |
||||
grpc_metadata_array request_metadata_recv; |
||||
grpc_byte_buffer *request_payload_recv = NULL; |
||||
grpc_call_details call_details; |
||||
grpc_status_code status; |
||||
char *details = NULL; |
||||
size_t details_capacity = 0; |
||||
grpc_call_error expectation; |
||||
|
||||
c = grpc_channel_create_call(f.client, f.client_cq, "/foo", |
||||
"foo.test.google.fr", deadline); |
||||
GPR_ASSERT(c); |
||||
|
||||
grpc_metadata_array_init(&initial_metadata_recv); |
||||
grpc_metadata_array_init(&trailing_metadata_recv); |
||||
grpc_metadata_array_init(&request_metadata_recv); |
||||
grpc_call_details_init(&call_details); |
||||
|
||||
op = ops; |
||||
op->op = GRPC_OP_SEND_INITIAL_METADATA; |
||||
op->data.send_initial_metadata.count = 0; |
||||
op->flags = flags_for_op[op->op]; |
||||
op++; |
||||
op->op = GRPC_OP_SEND_MESSAGE; |
||||
op->data.send_message = request_payload; |
||||
op->flags = flags_for_op[op->op]; |
||||
op++; |
||||
op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; |
||||
op->flags = flags_for_op[op->op]; |
||||
op++; |
||||
op->op = GRPC_OP_RECV_INITIAL_METADATA; |
||||
op->data.recv_initial_metadata = &initial_metadata_recv; |
||||
op->flags = flags_for_op[op->op]; |
||||
op++; |
||||
op->op = GRPC_OP_RECV_STATUS_ON_CLIENT; |
||||
op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv; |
||||
op->data.recv_status_on_client.status = &status; |
||||
op->data.recv_status_on_client.status_details = &details; |
||||
op->data.recv_status_on_client.status_details_capacity = &details_capacity; |
||||
op->flags = flags_for_op[op->op]; |
||||
op++; |
||||
expectation = call_start_batch_expected_result; |
||||
GPR_ASSERT(expectation == grpc_call_start_batch(c, ops, op - ops, tag(1))); |
||||
|
||||
gpr_free(details); |
||||
grpc_metadata_array_destroy(&initial_metadata_recv); |
||||
grpc_metadata_array_destroy(&trailing_metadata_recv); |
||||
grpc_metadata_array_destroy(&request_metadata_recv); |
||||
grpc_call_details_destroy(&call_details); |
||||
|
||||
grpc_call_destroy(c); |
||||
|
||||
cq_verifier_destroy(v_client); |
||||
cq_verifier_destroy(v_server); |
||||
|
||||
grpc_byte_buffer_destroy(request_payload); |
||||
grpc_byte_buffer_destroy(request_payload_recv); |
||||
|
||||
end_test(&f); |
||||
config.tear_down_data(&f); |
||||
} |
||||
|
||||
void grpc_end2end_tests(grpc_end2end_test_config config) { |
||||
size_t i; |
||||
gpr_uint32 flags_for_op[GRPC_OP_RECV_CLOSE_ON_SERVER+1]; |
||||
|
||||
{ |
||||
/* check that all grpc_op_types fail when their flag value is set to an
|
||||
* invalid value */ |
||||
int indices[] = {GRPC_OP_SEND_INITIAL_METADATA, GRPC_OP_SEND_MESSAGE, |
||||
GRPC_OP_SEND_CLOSE_FROM_CLIENT, |
||||
GRPC_OP_RECV_INITIAL_METADATA, |
||||
GRPC_OP_RECV_STATUS_ON_CLIENT}; |
||||
for (i = 0; i < GPR_ARRAY_SIZE(indices); ++i) { |
||||
memset(flags_for_op, 0, sizeof(flags_for_op)); |
||||
flags_for_op[indices[i]] = 0xDEADBEEF; |
||||
test_invoke_request_with_flags(config, flags_for_op, |
||||
GRPC_CALL_ERROR_INVALID_FLAGS); |
||||
} |
||||
} |
||||
{ |
||||
/* check valid operation with allowed flags for GRPC_OP_SEND_BUFFER */ |
||||
gpr_uint32 flags[] = {GRPC_WRITE_BUFFER_HINT, GRPC_WRITE_NO_COMPRESS, |
||||
GRPC_WRITE_INTERNAL_COMPRESS}; |
||||
for (i = 0; i < GPR_ARRAY_SIZE(flags); ++i) { |
||||
memset(flags_for_op, 0, sizeof(flags_for_op)); |
||||
flags_for_op[GRPC_OP_SEND_MESSAGE] = flags[i]; |
||||
test_invoke_request_with_flags(config, flags_for_op, GRPC_CALL_OK); |
||||
} |
||||
} |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue