mock_endpoint.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2016 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 
20 
21 #include <inttypes.h>
22 
23 #include <string>
24 
25 #include "absl/strings/str_format.h"
26 
27 #include <grpc/support/alloc.h>
29 
31 
32 typedef struct mock_endpoint {
40 
42  grpc_closure* cb, bool /*urgent*/,
43  int /*min_progress_size*/) {
44  mock_endpoint* m = reinterpret_cast<mock_endpoint*>(ep);
45  gpr_mu_lock(&m->mu);
46  if (m->read_buffer.count > 0) {
47  grpc_slice_buffer_swap(&m->read_buffer, slices);
49  } else {
50  m->on_read = cb;
51  m->on_read_out = slices;
52  }
53  gpr_mu_unlock(&m->mu);
54 }
55 
57  grpc_closure* cb, void* /*arg*/, int /*max_frame_size*/) {
58  mock_endpoint* m = reinterpret_cast<mock_endpoint*>(ep);
59  for (size_t i = 0; i < slices->count; i++) {
60  m->on_write(slices->slices[i]);
61  }
63 }
64 
65 static void me_add_to_pollset(grpc_endpoint* /*ep*/,
66  grpc_pollset* /*pollset*/) {}
67 
69  grpc_pollset_set* /*pollset*/) {}
70 
72  grpc_pollset_set* /*pollset*/) {}
73 
75  mock_endpoint* m = reinterpret_cast<mock_endpoint*>(ep);
76  gpr_mu_lock(&m->mu);
77  if (m->on_read) {
80  "Endpoint Shutdown", &why, 1));
81  m->on_read = nullptr;
82  }
83  gpr_mu_unlock(&m->mu);
84  GRPC_ERROR_UNREF(why);
85 }
86 
87 static void me_destroy(grpc_endpoint* ep) {
88  mock_endpoint* m = reinterpret_cast<mock_endpoint*>(ep);
89  grpc_slice_buffer_destroy(&m->read_buffer);
90  gpr_mu_destroy(&m->mu);
91  gpr_free(m);
92 }
93 
95  return "fake:mock_endpoint";
96 }
97 
99  return "fake:mock_endpoint";
100 }
101 
102 static int me_get_fd(grpc_endpoint* /*ep*/) { return -1; }
103 
104 static bool me_can_track_err(grpc_endpoint* /*ep*/) { return false; }
105 
107  me_write,
111  me_shutdown,
112  me_destroy,
113  me_get_peer,
115  me_get_fd,
117 
119  mock_endpoint* m = static_cast<mock_endpoint*>(gpr_malloc(sizeof(*m)));
120  m->base.vtable = &vtable;
121  grpc_slice_buffer_init(&m->read_buffer);
122  gpr_mu_init(&m->mu);
123  m->on_write = on_write;
124  m->on_read = nullptr;
125  return &m->base;
126 }
127 
129  mock_endpoint* m = reinterpret_cast<mock_endpoint*>(ep);
130  gpr_mu_lock(&m->mu);
131  if (m->on_read != nullptr) {
132  grpc_slice_buffer_add(m->on_read_out, slice);
134  m->on_read = nullptr;
135  } else {
136  grpc_slice_buffer_add(&m->read_buffer, slice);
137  }
138  gpr_mu_unlock(&m->mu);
139 }
me_add_to_pollset
static void me_add_to_pollset(grpc_endpoint *, grpc_pollset *)
Definition: mock_endpoint.cc:65
grpc_mock_endpoint_put_read
void grpc_mock_endpoint_put_read(grpc_endpoint *ep, grpc_slice slice)
Definition: mock_endpoint.cc:128
mock_endpoint
struct mock_endpoint mock_endpoint
grpc_endpoint_vtable
Definition: endpoint.h:39
grpc_slice_buffer_destroy
GPRAPI void grpc_slice_buffer_destroy(grpc_slice_buffer *sb)
Definition: slice_buffer_api.cc:27
gpr_mu_unlock
GPRAPI void gpr_mu_unlock(gpr_mu *mu)
mock_endpoint
Definition: mock_endpoint.cc:32
GRPC_ERROR_NONE
#define GRPC_ERROR_NONE
Definition: error.h:234
me_get_peer
static absl::string_view me_get_peer(grpc_endpoint *)
Definition: mock_endpoint.cc:94
mock_endpoint::on_write
void(* on_write)(grpc_slice slice)
Definition: mock_endpoint.cc:35
mock_endpoint::base
grpc_endpoint base
Definition: mock_endpoint.cc:33
grpc_pollset_set
struct grpc_pollset_set grpc_pollset_set
Definition: iomgr_fwd.h:23
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
gpr_malloc
GPRAPI void * gpr_malloc(size_t size)
Definition: alloc.cc:29
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING
#define GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(desc, errs, count)
Definition: error.h:307
sockaddr.h
mock_endpoint::mu
gpr_mu mu
Definition: mock_endpoint.cc:34
gpr_mu_destroy
GPRAPI void gpr_mu_destroy(gpr_mu *mu)
DEBUG_LOCATION
#define DEBUG_LOCATION
Definition: debug_location.h:41
string_util.h
me_add_to_pollset_set
static void me_add_to_pollset_set(grpc_endpoint *, grpc_pollset_set *)
Definition: mock_endpoint.cc:68
mock_endpoint::on_read
grpc_closure * on_read
Definition: mock_endpoint.cc:38
slice
grpc_slice slice
Definition: src/core/lib/surface/server.cc:467
gpr_mu_init
GPRAPI void gpr_mu_init(gpr_mu *mu)
me_can_track_err
static bool me_can_track_err(grpc_endpoint *)
Definition: mock_endpoint.cc:104
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
mock_endpoint::on_read_out
grpc_slice_buffer * on_read_out
Definition: mock_endpoint.cc:37
gpr_mu_lock
GPRAPI void gpr_mu_lock(gpr_mu *mu)
grpc_slice_buffer_swap
GPRAPI void grpc_slice_buffer_swap(grpc_slice_buffer *a, grpc_slice_buffer *b)
Definition: slice/slice_buffer.cc:249
on_write
void on_write(uv_fs_t *req)
Definition: libuv/docs/code/uvcat/main.c:17
me_destroy
static void me_destroy(grpc_endpoint *ep)
Definition: mock_endpoint.cc:87
grpc_slice_buffer_init
GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer *sb)
Definition: slice/slice_buffer.cc:116
me_get_fd
static int me_get_fd(grpc_endpoint *)
Definition: mock_endpoint.cc:102
me_get_local_address
static absl::string_view me_get_local_address(grpc_endpoint *)
Definition: mock_endpoint.cc:98
me_read
static void me_read(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, bool, int)
Definition: mock_endpoint.cc:41
grpc_slice_buffer_add
GPRAPI void grpc_slice_buffer_add(grpc_slice_buffer *sb, grpc_slice slice)
Definition: slice/slice_buffer.cc:170
me_delete_from_pollset_set
static void me_delete_from_pollset_set(grpc_endpoint *, grpc_pollset_set *)
Definition: mock_endpoint.cc:71
gpr_mu
pthread_mutex_t gpr_mu
Definition: impl/codegen/sync_posix.h:47
mock_endpoint.h
alloc.h
slices
SliceBuffer * slices
Definition: retry_filter.cc:631
GRPC_ERROR_UNREF
#define GRPC_ERROR_UNREF(err)
Definition: error.h:262
grpc_core::ExecCtx::Run
static void Run(const DebugLocation &location, grpc_closure *closure, grpc_error_handle error)
Definition: exec_ctx.cc:98
grpc_mock_endpoint_create
grpc_endpoint * grpc_mock_endpoint_create(void(*on_write)(grpc_slice slice))
Definition: mock_endpoint.cc:118
grpc_slice_buffer
Definition: include/grpc/impl/codegen/slice.h:83
me_shutdown
static void me_shutdown(grpc_endpoint *ep, grpc_error_handle why)
Definition: mock_endpoint.cc:74
me_write
static void me_write(grpc_endpoint *ep, grpc_slice_buffer *slices, grpc_closure *cb, void *, int)
Definition: mock_endpoint.cc:56
grpc_error
Definition: error_internal.h:42
vtable
static const grpc_endpoint_vtable vtable
Definition: mock_endpoint.cc:106
regress.m
m
Definition: regress/regress.py:25
grpc_pollset
Definition: bm_cq_multiple_threads.cc:37
grpc_closure
Definition: closure.h:56
grpc_endpoint
Definition: endpoint.h:105
mock_endpoint::read_buffer
grpc_slice_buffer read_buffer
Definition: mock_endpoint.cc:36
cb
OPENSSL_EXPORT pem_password_cb * cb
Definition: pem.h:351
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:40