mirror of https://github.com/grpc/grpc.git
Merge branch 'master' of https://github.com/grpc/grpc into zookeeper
commit
72538b9103
68 changed files with 1534 additions and 335 deletions
@ -0,0 +1,43 @@ |
||||
/*
|
||||
* |
||||
* 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 "src/core/client_config/subchannel_factory_decorators/add_channel_arg.h" |
||||
#include "src/core/client_config/subchannel_factory_decorators/merge_channel_args.h" |
||||
|
||||
grpc_subchannel_factory *grpc_subchannel_factory_add_channel_arg( |
||||
grpc_subchannel_factory *input, const grpc_arg *arg) { |
||||
grpc_channel_args args; |
||||
args.num_args = 1; |
||||
args.args = (grpc_arg *)arg; |
||||
return grpc_subchannel_factory_merge_channel_args(input, &args); |
||||
} |
@ -0,0 +1,45 @@ |
||||
/*
|
||||
* |
||||
* 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. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_INTERNAL_CORE_CLIENT_CONFIG_SUBCHANNEL_FACTORY_DECORATORS_ADD_CHANNEL_ARG_H |
||||
#define GRPC_INTERNAL_CORE_CLIENT_CONFIG_SUBCHANNEL_FACTORY_DECORATORS_ADD_CHANNEL_ARG_H |
||||
|
||||
#include "src/core/client_config/subchannel_factory.h" |
||||
|
||||
/** Takes a subchannel factory, returns a new one that mutates incoming
|
||||
channel_args by adding a new argument; ownership of input, arg is retained |
||||
by the caller. */ |
||||
grpc_subchannel_factory *grpc_subchannel_factory_add_channel_arg( |
||||
grpc_subchannel_factory *input, const grpc_arg *arg); |
||||
|
||||
#endif /* GRPC_INTERNAL_CORE_CLIENT_CONFIG_SUBCHANNEL_FACTORY_DECORATORS_ADD_CHANNEL_ARG_H */ |
@ -0,0 +1,84 @@ |
||||
/*
|
||||
* |
||||
* 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 "src/core/client_config/subchannel_factory_decorators/merge_channel_args.h" |
||||
#include <grpc/support/alloc.h> |
||||
#include "src/core/channel/channel_args.h" |
||||
|
||||
typedef struct { |
||||
grpc_subchannel_factory base; |
||||
gpr_refcount refs; |
||||
grpc_subchannel_factory *wrapped; |
||||
grpc_channel_args *merge_args; |
||||
} merge_args_factory; |
||||
|
||||
static void merge_args_factory_ref(grpc_subchannel_factory *scf) { |
||||
merge_args_factory *f = (merge_args_factory *)scf; |
||||
gpr_ref(&f->refs); |
||||
} |
||||
|
||||
static void merge_args_factory_unref(grpc_subchannel_factory *scf) { |
||||
merge_args_factory *f = (merge_args_factory *)scf; |
||||
if (gpr_unref(&f->refs)) { |
||||
grpc_subchannel_factory_unref(f->wrapped); |
||||
grpc_channel_args_destroy(f->merge_args); |
||||
gpr_free(f); |
||||
} |
||||
} |
||||
|
||||
static grpc_subchannel *merge_args_factory_create_subchannel( |
||||
grpc_subchannel_factory *scf, grpc_subchannel_args *args) { |
||||
merge_args_factory *f = (merge_args_factory *)scf; |
||||
grpc_channel_args *final_args = |
||||
grpc_channel_args_merge(args->args, f->merge_args); |
||||
grpc_subchannel *s; |
||||
args->args = final_args; |
||||
s = grpc_subchannel_factory_create_subchannel(f->wrapped, args); |
||||
grpc_channel_args_destroy(final_args); |
||||
return s; |
||||
} |
||||
|
||||
static const grpc_subchannel_factory_vtable merge_args_factory_vtable = { |
||||
merge_args_factory_ref, merge_args_factory_unref, |
||||
merge_args_factory_create_subchannel}; |
||||
|
||||
grpc_subchannel_factory *grpc_subchannel_factory_merge_channel_args( |
||||
grpc_subchannel_factory *input, const grpc_channel_args *args) { |
||||
merge_args_factory *f = gpr_malloc(sizeof(*f)); |
||||
f->base.vtable = &merge_args_factory_vtable; |
||||
gpr_ref_init(&f->refs, 1); |
||||
grpc_subchannel_factory_ref(input); |
||||
f->wrapped = input; |
||||
f->merge_args = grpc_channel_args_copy(args); |
||||
return &f->base; |
||||
} |
@ -0,0 +1,45 @@ |
||||
/*
|
||||
* |
||||
* 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. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_INTERNAL_CORE_CLIENT_CONFIG_SUBCHANNEL_FACTORY_DECORATORS_MERGE_CHANNEL_ARGS_H |
||||
#define GRPC_INTERNAL_CORE_CLIENT_CONFIG_SUBCHANNEL_FACTORY_DECORATORS_MERGE_CHANNEL_ARGS_H |
||||
|
||||
#include "src/core/client_config/subchannel_factory.h" |
||||
|
||||
/** Takes a subchannel factory, returns a new one that mutates incoming
|
||||
channel_args by adding a new argument; ownership of input, args is retained |
||||
by the caller. */ |
||||
grpc_subchannel_factory *grpc_subchannel_factory_merge_channel_args( |
||||
grpc_subchannel_factory *input, const grpc_channel_args *args); |
||||
|
||||
#endif /* GRPC_INTERNAL_CORE_CLIENT_CONFIG_SUBCHANNEL_FACTORY_DECORATORS_MERGE_CHANNEL_ARGS_H */ |
@ -1,2 +1,3 @@ |
||||
graft grpc |
||||
include commands.py |
||||
include requirements.txt |
||||
|
@ -0,0 +1,10 @@ |
||||
MANIFEST |
||||
*.egg-info/ |
||||
build/ |
||||
dist/ |
||||
*.egg |
||||
*.egg/ |
||||
*.eggs/ |
||||
.coverage |
||||
.coverage.* |
||||
nosetests.xml |
@ -0,0 +1,4 @@ |
||||
graft grpc_interop |
||||
graft grpc_test |
||||
include commands.py |
||||
include requirements.txt |
@ -0,0 +1,57 @@ |
||||
# 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. |
||||
|
||||
"""Provides distutils command classes for the GRPC Python test setup process.""" |
||||
|
||||
import os |
||||
import os.path |
||||
import sys |
||||
|
||||
import setuptools |
||||
|
||||
|
||||
class RunTests(setuptools.Command): |
||||
"""Command to run all tests via py.test.""" |
||||
|
||||
description = '' |
||||
user_options = [('pytest-args=', 'a', 'arguments to pass to py.test')] |
||||
|
||||
def initialize_options(self): |
||||
self.pytest_args = [] |
||||
|
||||
def finalize_options(self): |
||||
pass |
||||
|
||||
def run(self): |
||||
# We import here to ensure that setup.py has had a chance to install the |
||||
# relevant package eggs first. |
||||
import pytest |
||||
result = pytest.main(self.pytest_args) |
||||
if result != 0: |
||||
raise SystemExit(result) |
@ -0,0 +1,5 @@ |
||||
pytest>=2.6 |
||||
pytest-cov>=2.0 |
||||
pytest-xdist>=1.11 |
||||
oauth2client>=1.4.7 |
||||
grpcio>=0.10.0a0 |
@ -0,0 +1,3 @@ |
||||
[pytest] |
||||
norecursedirs = _cython |
||||
python_files = *_test.py |
@ -0,0 +1,220 @@ |
||||
/*
|
||||
* |
||||
* 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 "src/core/support/string.h" |
||||
#include <grpc/byte_buffer.h> |
||||
#include <grpc/grpc.h> |
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/time.h> |
||||
#include <grpc/support/useful.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->cq, tag(1000)); |
||||
GPR_ASSERT(grpc_completion_queue_pluck(f->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->cq); |
||||
drain_cq(f->cq); |
||||
grpc_completion_queue_destroy(f->cq); |
||||
} |
||||
|
||||
static void simple_request_body(grpc_end2end_test_fixture f) { |
||||
grpc_call *c; |
||||
grpc_call *s; |
||||
gpr_timespec deadline = five_seconds_time(); |
||||
cq_verifier *cqv = cq_verifier_create(f.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_call_details call_details; |
||||
grpc_status_code status; |
||||
char *details = NULL; |
||||
size_t details_capacity = 0; |
||||
int was_cancelled = 2; |
||||
char *peer; |
||||
|
||||
c = grpc_channel_create_call(f.client, f.cq, "/foo", NULL, deadline); |
||||
GPR_ASSERT(c); |
||||
|
||||
peer = grpc_call_get_peer(c); |
||||
GPR_ASSERT(peer != NULL); |
||||
gpr_log(GPR_DEBUG, "client_peer_before_call=%s", peer); |
||||
gpr_free(peer); |
||||
|
||||
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 = 0; |
||||
op++; |
||||
op->op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; |
||||
op->flags = 0; |
||||
op++; |
||||
op->op = GRPC_OP_RECV_INITIAL_METADATA; |
||||
op->data.recv_initial_metadata = &initial_metadata_recv; |
||||
op->flags = 0; |
||||
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 = 0; |
||||
op++; |
||||
GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(c, ops, op - ops, tag(1))); |
||||
|
||||
GPR_ASSERT(GRPC_CALL_OK == grpc_server_request_call( |
||||
f.server, &s, &call_details, |
||||
&request_metadata_recv, f.cq, f.cq, tag(101))); |
||||
cq_expect_completion(cqv, tag(101), 1); |
||||
cq_verify(cqv); |
||||
|
||||
peer = grpc_call_get_peer(s); |
||||
GPR_ASSERT(peer != NULL); |
||||
gpr_log(GPR_DEBUG, "server_peer=%s", peer); |
||||
gpr_free(peer); |
||||
peer = grpc_call_get_peer(c); |
||||
GPR_ASSERT(peer != NULL); |
||||
gpr_log(GPR_DEBUG, "client_peer=%s", peer); |
||||
gpr_free(peer); |
||||
|
||||
op = ops; |
||||
op->op = GRPC_OP_SEND_INITIAL_METADATA; |
||||
op->data.send_initial_metadata.count = 0; |
||||
op->flags = 0; |
||||
op++; |
||||
op->op = GRPC_OP_SEND_STATUS_FROM_SERVER; |
||||
op->data.send_status_from_server.trailing_metadata_count = 0; |
||||
op->data.send_status_from_server.status = GRPC_STATUS_UNIMPLEMENTED; |
||||
op->data.send_status_from_server.status_details = "xyz"; |
||||
op->flags = 0; |
||||
op++; |
||||
op->op = GRPC_OP_RECV_CLOSE_ON_SERVER; |
||||
op->data.recv_close_on_server.cancelled = &was_cancelled; |
||||
op->flags = 0; |
||||
op++; |
||||
GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(s, ops, op - ops, tag(102))); |
||||
|
||||
cq_expect_completion(cqv, tag(102), 1); |
||||
cq_expect_completion(cqv, tag(1), 1); |
||||
cq_verify(cqv); |
||||
|
||||
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED); |
||||
GPR_ASSERT(0 == strcmp(details, "xyz")); |
||||
GPR_ASSERT(0 == strcmp(call_details.method, "/foo")); |
||||
GPR_ASSERT(0 == strcmp(call_details.host, "localhost")); |
||||
GPR_ASSERT(was_cancelled == 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); |
||||
grpc_call_destroy(s); |
||||
|
||||
cq_verifier_destroy(cqv); |
||||
} |
||||
|
||||
static void test_invoke_simple_request(grpc_end2end_test_config config) { |
||||
grpc_end2end_test_fixture f; |
||||
|
||||
f = begin_test(config, "test_invoke_simple_request", NULL, NULL); |
||||
simple_request_body(f); |
||||
end_test(&f); |
||||
config.tear_down_data(&f); |
||||
} |
||||
|
||||
void grpc_end2end_tests(grpc_end2end_test_config config) { |
||||
if ((config.feature_mask & FEATURE_MASK_SUPPORTS_HOSTNAME_VERIFICATION) != 0) return; |
||||
if ((config.feature_mask & FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION) == 0) return; |
||||
test_invoke_simple_request(config); |
||||
} |
@ -1,122 +0,0 @@ |
||||
[ |
||||
{ |
||||
"module": "grpc_test._adapter._c_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test._adapter._low_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test._adapter._intermediary_low_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test._adapter._links_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test._adapter._lonely_rear_link_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test._adapter._blocking_invocation_inline_service_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test._adapter._event_invocation_synchronous_event_service_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test._adapter._future_invocation_asynchronous_event_service_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test._links._lonely_invocation_link_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test._links._transmission_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test.early_adopter.implementations_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test.framework.base.implementations_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test.framework.face.blocking_invocation_inline_service_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test.framework.face.event_invocation_synchronous_event_service_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test.framework.face.future_invocation_asynchronous_event_service_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test.framework.foundation._later_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_test.framework.foundation._logging_pool_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_interop._insecure_interop_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"module": "grpc_interop._secure_interop_test", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
}, |
||||
{ |
||||
"file": "test/compiler/python_plugin_test.py", |
||||
"pythonVersions": [ |
||||
"2.7" |
||||
] |
||||
} |
||||
] |
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue