h2_sockpair+trace.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #include <string.h>
20 #ifdef GRPC_POSIX_SOCKET
21 #include <unistd.h>
22 #endif
23 
24 #include <grpc/support/alloc.h>
25 #include <grpc/support/log.h>
26 #include <grpc/support/sync.h>
27 
43 #include "test/core/util/port.h"
45 
46 /* chttp2 transport that is immediately available (used for testing
47  connected_channel without a client_channel */
48 
51 };
52 
56  custom_fixture_data* fixture_data =
57  static_cast<custom_fixture_data*>(f->fixture_data);
59  grpc_core::Server* core_server = grpc_core::Server::FromC(f->server);
60  grpc_error_handle error = core_server->SetupTransport(
61  transport, nullptr, core_server->channel_args(), nullptr);
63  grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
64  } else {
67  }
68 }
69 
70 typedef struct {
74 
76  sp_client_setup* cs = static_cast<sp_client_setup*>(ts);
77 
78  auto args = grpc_core::ChannelArgs::FromC(cs->client_args)
79  .Set(GRPC_ARG_DEFAULT_AUTHORITY, "test-authority");
81  "socketpair-target", args, GRPC_CLIENT_DIRECT_CHANNEL, transport);
82  if (channel.ok()) {
83  cs->f->client = channel->release()->c_ptr();
84  grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
85  } else {
87  nullptr, static_cast<grpc_status_code>(channel.status().code()),
88  "lame channel");
90  }
91 }
92 
94  const grpc_channel_args* /*client_args*/,
95  const grpc_channel_args* /*server_args*/) {
96  custom_fixture_data* fixture_data = static_cast<custom_fixture_data*>(
99  memset(&f, 0, sizeof(f));
100  f.fixture_data = fixture_data;
102  fixture_data->ep = grpc_iomgr_create_endpoint_pair("fixture", nullptr);
103  return f;
104 }
105 
107  grpc_end2end_test_fixture* f, const grpc_channel_args* client_args) {
109  auto* fixture_data = static_cast<custom_fixture_data*>(f->fixture_data);
112  cs.client_args = client_args;
113  cs.f = f;
114  client_args = grpc_core::CoreConfiguration::Get()
116  .PreconditionChannelArgs(client_args)
117  .ToC();
118  transport =
119  grpc_create_chttp2_transport(client_args, fixture_data->ep.client, true);
120  grpc_channel_args_destroy(client_args);
122  GPR_ASSERT(f->client);
123 }
124 
126  grpc_end2end_test_fixture* f, const grpc_channel_args* server_args) {
128  auto* fixture_data = static_cast<custom_fixture_data*>(f->fixture_data);
130  GPR_ASSERT(!f->server);
131  f->server = grpc_server_create(server_args, nullptr);
132  grpc_server_register_completion_queue(f->server, f->cq, nullptr);
133  grpc_server_start(f->server);
134  server_args = grpc_core::CoreConfiguration::Get()
136  .PreconditionChannelArgs(server_args)
137  .ToC();
138  transport =
139  grpc_create_chttp2_transport(server_args, fixture_data->ep.server, false);
140  grpc_channel_args_destroy(server_args);
142 }
143 
146  gpr_free(f->fixture_data);
147 }
148 
149 /* All test configurations */
151  {"chttp2/socketpair", FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER, nullptr,
154 };
155 
156 int main(int argc, char** argv) {
157  size_t i;
158 
159  /* force tracing on, with a value to force many
160  code paths in trace.c to be taken */
161  GPR_GLOBAL_CONFIG_SET(grpc_trace, "doesnt-exist,http,all");
162 
163 #ifdef GRPC_POSIX_SOCKET
164  g_fixture_slowdown_factor = isatty(STDOUT_FILENO) ? 10 : 1;
165 #else
167 #endif
168 
169 #ifdef GPR_WINDOWS
170  /* on Windows, writing logs to stderr is very slow
171  when stderr is redirected to a disk file.
172  The "trace" tests fixtures generates large amount
173  of logs, so setting a buffer for stderr prevents certain
174  test cases from timing out. */
175  setvbuf(stderr, NULL, _IOLBF, 1024);
176 #endif
177 
178  grpc::testing::TestEnvironment env(&argc, argv);
180  grpc_init();
181 
182  GPR_ASSERT(0 == grpc_tracer_set_enabled("also-doesnt-exist", 0));
183  GPR_ASSERT(1 == grpc_tracer_set_enabled("http", 1));
184  GPR_ASSERT(1 == grpc_tracer_set_enabled("all", 1));
185 
186  for (i = 0; i < sizeof(configs) / sizeof(*configs); i++) {
187  grpc_end2end_tests(argc, argv, configs[i]);
188  }
189 
190  grpc_shutdown();
191 
192  return 0;
193 }
trace.h
grpc_core::Server::SetupTransport
grpc_error_handle SetupTransport(grpc_transport *transport, grpc_pollset *accepting_pollset, const grpc_channel_args *args, const RefCountedPtr< channelz::SocketNode > &socket_node)
Definition: src/core/lib/surface/server.cc:605
FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER
#define FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER
Definition: end2end_tests.h:38
iomgr.h
custom_fixture_data
Definition: h2_sockpair+trace.cc:49
log.h
port.h
test_evm.cs
cs
Definition: test_evm.py:8
generate.env
env
Definition: generate.py:37
memset
return memset(p, 0, total)
grpc_end2end_tests_pre_init
void grpc_end2end_tests_pre_init(void)
Definition: end2end_tests.cc:221
grpc_create_chttp2_transport
grpc_transport * grpc_create_chttp2_transport(const grpc_channel_args *channel_args, grpc_endpoint *ep, bool is_client)
Definition: chttp2_transport.cc:3122
grpc_core::Server::channel_args
const grpc_channel_args * channel_args() const
Definition: src/core/lib/surface/server.h:132
GRPC_CLIENT_DIRECT_CHANNEL
@ GRPC_CLIENT_DIRECT_CHANNEL
Definition: channel_stack_type.h:34
string.h
sp_client_setup::f
grpc_end2end_test_fixture * f
Definition: h2_sockpair+trace.cc:71
grpc_lame_client_channel_create
GRPCAPI grpc_channel * grpc_lame_client_channel_create(const char *target, grpc_status_code error_code, const char *error_message)
Definition: lame_client.cc:131
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
error
grpc_error_handle error
Definition: retry_filter.cc:499
grpc_status_code
grpc_status_code
Definition: include/grpc/impl/codegen/status.h:28
client_channel.h
grpc_core::ChannelArgs::FromC
static ChannelArgs FromC(const grpc_channel_args *args)
Definition: channel_args.cc:84
completion_queue.h
grpc_server_create
GRPCAPI grpc_server * grpc_server_create(const grpc_channel_args *args, void *reserved)
Definition: src/core/lib/surface/server.cc:1456
gpr_malloc
GPRAPI void * gpr_malloc(size_t size)
Definition: alloc.cc:29
grpc_server_register_completion_queue
GRPCAPI void grpc_server_register_completion_queue(grpc_server *server, grpc_completion_queue *cq, void *reserved)
Definition: src/core/lib/surface/server.cc:1466
grpc_endpoint_pair::server
grpc_endpoint * server
Definition: endpoint_pair.h:28
custom_fixture_data::ep
grpc_endpoint_pair ep
Definition: h2_sockpair+trace.cc:50
grpc_end2end_test_config
Definition: end2end_tests.h:53
server_setup_transport
static void server_setup_transport(void *ts, grpc_transport *transport)
Definition: h2_sockpair+trace.cc:53
chttp2_init_client_socketpair
static void chttp2_init_client_socketpair(grpc_end2end_test_fixture *f, const grpc_channel_args *client_args)
Definition: h2_sockpair+trace.cc:106
grpc_channel_args
Definition: grpc_types.h:132
python_utils.port_server.stderr
stderr
Definition: port_server.py:51
chttp2_tear_down_socketpair
static void chttp2_tear_down_socketpair(grpc_end2end_test_fixture *f)
Definition: h2_sockpair+trace.cc:144
grpc_end2end_test_fixture
Definition: end2end_tests.h:46
endpoint_pair.h
http_client_filter.h
sp_client_setup::client_args
const grpc_channel_args * client_args
Definition: h2_sockpair+trace.cc:72
GRPC_ARG_DEFAULT_AUTHORITY
#define GRPC_ARG_DEFAULT_AUTHORITY
Definition: grpc_types.h:251
channel
wrapped_grpc_channel * channel
Definition: src/php/ext/grpc/call.h:33
autogen_x86imm.f
f
Definition: autogen_x86imm.py:9
chttp2_create_fixture_socketpair
static grpc_end2end_test_fixture chttp2_create_fixture_socketpair(const grpc_channel_args *, const grpc_channel_args *)
Definition: h2_sockpair+trace.cc:93
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
grpc_core::CoreConfiguration::Get
static const CoreConfiguration & Get()
Definition: core_configuration.h:82
transport
grpc_transport transport
Definition: filter_fuzzer.cc:146
grpc_transport_destroy
void grpc_transport_destroy(grpc_transport *transport)
Definition: transport.cc:96
main
int main(int argc, char **argv)
Definition: h2_sockpair+trace.cc:156
grpc_cq_pollset
grpc_pollset * grpc_cq_pollset(grpc_completion_queue *cq)
Definition: completion_queue.cc:1433
grpc_core::ChannelArgs::ToC
const grpc_channel_args * ToC() const
Definition: channel_args.cc:94
grpc_channel_args_destroy
void grpc_channel_args_destroy(grpc_channel_args *a)
Definition: channel_args.cc:360
end2end_tests.h
grpc_core::CoreConfiguration::channel_args_preconditioning
const ChannelArgsPreconditioning & channel_args_preconditioning() const
Definition: core_configuration.h:139
sp_client_setup
Definition: h2_sockpair+trace.cc:70
client_setup_transport
static void client_setup_transport(void *ts, grpc_transport *transport)
Definition: h2_sockpair+trace.cc:75
grpc_core::ExecCtx
Definition: exec_ctx.h:97
GPR_GLOBAL_CONFIG_SET
#define GPR_GLOBAL_CONFIG_SET(name, value)
Definition: global_config_generic.h:26
test_config.h
grpc_core::ChannelArgs::Set
GRPC_MUST_USE_RESULT ChannelArgs Set(absl::string_view name, Value value) const
Definition: channel_args.cc:113
configs
static grpc_end2end_test_config configs[]
Definition: h2_sockpair+trace.cc:150
grpc_end2end_tests
void grpc_end2end_tests(int argc, char **argv, grpc_end2end_test_config config)
Definition: end2end_tests.cc:321
grpc_core::Server
Definition: src/core/lib/surface/server.h:75
http_server_filter.h
port.h
exec_ctx
grpc_core::ExecCtx exec_ctx
Definition: end2end_binder_transport_test.cc:75
g_fixture_slowdown_factor
int64_t g_fixture_slowdown_factor
Definition: test/core/util/test_config.cc:47
alloc.h
grpc_iomgr_create_endpoint_pair
grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(const char *name, grpc_channel_args *args)
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
chttp2_transport.h
server.h
GRPC_ERROR_UNREF
#define GRPC_ERROR_UNREF(err)
Definition: error.h:262
grpc_transport
Definition: transport_impl.h:89
grpc_tracer_set_enabled
GRPCAPI int grpc_tracer_set_enabled(const char *name, int enabled)
Definition: debug/trace.cc:153
message_compress_filter.h
chttp2_init_server_socketpair
static void chttp2_init_server_socketpair(grpc_end2end_test_fixture *f, const grpc_channel_args *server_args)
Definition: h2_sockpair+trace.cc:125
grpc_completion_queue_create_for_next
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
Definition: completion_queue_factory.cc:62
connected_channel.h
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_server_start
GRPCAPI void grpc_server_start(grpc_server *server)
Definition: src/core/lib/surface/server.cc:1497
grpc_error
Definition: error_internal.h:42
grpc_endpoint_pair
Definition: endpoint_pair.h:26
grpc_endpoint_add_to_pollset
void grpc_endpoint_add_to_pollset(grpc_endpoint *ep, grpc_pollset *pollset)
Definition: endpoint.cc:35
grpc_core::CppImplOf< Server, grpc_server >::FromC
static Server * FromC(grpc_server *c_type)
Definition: cpp_impl_of.h:30
sync.h
grpc_trace
char * grpc_trace
Definition: php_grpc.h:80
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
grpc_core::ChannelArgsPreconditioning::PreconditionChannelArgs
ChannelArgs PreconditionChannelArgs(const grpc_channel_args *args) const
Definition: channel_args_preconditioning.cc:34
grpc_core::Channel::Create
static absl::StatusOr< RefCountedPtr< Channel > > Create(const char *target, ChannelArgs args, grpc_channel_stack_type channel_stack_type, grpc_transport *optional_transport)
Definition: channel.cc:202
grpc_chttp2_transport_start_reading
void grpc_chttp2_transport_start_reading(grpc_transport *transport, grpc_slice_buffer *read_buffer, grpc_closure *notify_on_receive_settings, grpc_closure *notify_on_close)
Definition: chttp2_transport.cc:3128
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
GRPC_ERROR_IS_NONE
#define GRPC_ERROR_IS_NONE(err)
Definition: error.h:241
api.h
channel.h


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:00