17
17
#include < grpc/event_engine/event_engine.h>
18
18
19
19
#include < cstddef>
20
+ #include < initializer_list>
21
+ #include < utility>
22
+ #include < vector>
20
23
21
24
#include " gmock/gmock.h"
22
25
#include " gtest/gtest.h"
26
+ #include " src/core/util/debug_location.h"
23
27
#include " src/core/util/notification.h"
24
28
25
29
using EventEngineSlice = grpc_event_engine::experimental::Slice;
@@ -33,15 +37,19 @@ namespace testing {
33
37
34
38
void MockPromiseEndpoint::ExpectRead (
35
39
std::initializer_list<EventEngineSlice> slices_init,
36
- EventEngine* schedule_on_event_engine) {
40
+ EventEngine* schedule_on_event_engine, DebugLocation whence ) {
37
41
std::vector<EventEngineSlice> slices;
38
42
for (auto && slice : slices_init) slices.emplace_back (slice.Copy ());
39
43
EXPECT_CALL (*endpoint, Read)
40
44
.InSequence (read_sequence)
41
45
.WillOnce (WithArgs<0 , 1 >(
42
- [slices = std::move (slices), schedule_on_event_engine](
46
+ [slices = std::move (slices), schedule_on_event_engine, whence ](
43
47
absl::AnyInvocable<void (absl::Status)> on_read,
44
48
grpc_event_engine::experimental::SliceBuffer* buffer) mutable {
49
+ if (::testing::Test::HasFailure ()) {
50
+ ADD_FAILURE_AT (whence.file (), whence.line ())
51
+ << " Failure in ExpectRead" ;
52
+ }
45
53
for (auto & slice : slices) {
46
54
buffer->Append (std::move (slice));
47
55
}
@@ -95,17 +103,21 @@ class DelayedRead {
95
103
96
104
absl::AnyInvocable<void ()> MockPromiseEndpoint::ExpectDelayedRead (
97
105
std::initializer_list<EventEngineSlice> slices_init,
98
- EventEngine* schedule_on_event_engine) {
106
+ EventEngine* schedule_on_event_engine, DebugLocation whence ) {
99
107
std::shared_ptr<DelayedRead> delayed_read =
100
108
std::make_shared<DelayedRead>(schedule_on_event_engine, absl::OkStatus ());
101
109
std::vector<EventEngineSlice> slices;
102
110
for (auto && slice : slices_init) slices.emplace_back (slice.Copy ());
103
111
EXPECT_CALL (*endpoint, Read)
104
112
.InSequence (read_sequence)
105
113
.WillOnce (WithArgs<0 , 1 >(
106
- [slices = std::move (slices), delayed_read](
114
+ [slices = std::move (slices), delayed_read, whence ](
107
115
absl::AnyInvocable<void (absl::Status)> on_read,
108
116
grpc_event_engine::experimental::SliceBuffer* buffer) mutable {
117
+ if (::testing::Test::HasFailure ()) {
118
+ ADD_FAILURE_AT (whence.file (), whence.line ())
119
+ << " Failure in ExpectDelayedRead" ;
120
+ }
109
121
for (auto & slice : slices) {
110
122
buffer->Append (std::move (slice));
111
123
}
@@ -117,16 +129,21 @@ absl::AnyInvocable<void()> MockPromiseEndpoint::ExpectDelayedRead(
117
129
118
130
void MockPromiseEndpoint::ExpectReadClose (
119
131
absl::Status status,
120
- grpc_event_engine::experimental::EventEngine* schedule_on_event_engine) {
132
+ grpc_event_engine::experimental::EventEngine* schedule_on_event_engine,
133
+ DebugLocation whence) {
121
134
DCHECK_NE (status, absl::OkStatus ());
122
135
DCHECK_NE (schedule_on_event_engine, nullptr );
123
136
EXPECT_CALL (*endpoint, Read)
124
137
.InSequence (read_sequence)
125
138
.WillOnce (WithArgs<0 , 1 >(
126
- [status = std::move (status), schedule_on_event_engine](
139
+ [status = std::move (status), schedule_on_event_engine, whence ](
127
140
absl::AnyInvocable<void (absl::Status)> on_read,
128
141
GRPC_UNUSED grpc_event_engine::experimental::SliceBuffer*
129
142
buffer) {
143
+ if (::testing::Test::HasFailure ()) {
144
+ ADD_FAILURE_AT (whence.file (), whence.line ())
145
+ << " Failure in ExpectReadClose" ;
146
+ }
130
147
schedule_on_event_engine->Run (
131
148
[on_read = std::move (on_read), status]() mutable {
132
149
on_read (status);
@@ -137,17 +154,22 @@ void MockPromiseEndpoint::ExpectReadClose(
137
154
138
155
absl::AnyInvocable<void ()> MockPromiseEndpoint::ExpectDelayedReadClose (
139
156
absl::Status status,
140
- grpc_event_engine::experimental::EventEngine* schedule_on_event_engine) {
157
+ grpc_event_engine::experimental::EventEngine* schedule_on_event_engine,
158
+ DebugLocation whence) {
141
159
std::shared_ptr<DelayedRead> delayed_read_close =
142
160
std::make_shared<DelayedRead>(schedule_on_event_engine, status);
143
161
DCHECK_NE (schedule_on_event_engine, nullptr );
144
162
EXPECT_CALL (*endpoint, Read)
145
163
.InSequence (read_sequence)
146
164
.WillOnce (WithArgs<0 , 1 >(
147
- [delayed_read_close](
165
+ [delayed_read_close, whence ](
148
166
absl::AnyInvocable<void (absl::Status)> on_read,
149
167
GRPC_UNUSED grpc_event_engine::experimental::SliceBuffer*
150
168
buffer) {
169
+ if (::testing::Test::HasFailure ()) {
170
+ ADD_FAILURE_AT (whence.file (), whence.line ())
171
+ << " Failure in ExpectDelayedReadClose" ;
172
+ }
151
173
delayed_read_close->GotOnRead (std::move (on_read));
152
174
return false ;
153
175
}));
@@ -160,7 +182,7 @@ absl::AnyInvocable<void()> MockPromiseEndpoint::ExpectDelayedReadClose(
160
182
161
183
void MockPromiseEndpoint::ExpectWrite (
162
184
std::initializer_list<EventEngineSlice> slices,
163
- EventEngine* schedule_on_event_engine) {
185
+ EventEngine* schedule_on_event_engine, DebugLocation whence ) {
164
186
SliceBuffer expect;
165
187
for (auto && slice : slices) {
166
188
expect.Append (grpc_event_engine::experimental::internal::SliceCast<Slice>(
@@ -169,13 +191,17 @@ void MockPromiseEndpoint::ExpectWrite(
169
191
EXPECT_CALL (*endpoint, Write)
170
192
.InSequence (write_sequence)
171
193
.WillOnce (WithArgs<0 , 1 >(
172
- [expect = expect.JoinIntoString (), schedule_on_event_engine](
194
+ [expect = expect.JoinIntoString (), schedule_on_event_engine, whence ](
173
195
absl::AnyInvocable<void (absl::Status)> on_writable,
174
196
grpc_event_engine::experimental::SliceBuffer* buffer) mutable {
175
197
SliceBuffer tmp;
176
198
grpc_slice_buffer_swap (buffer->c_slice_buffer (),
177
199
tmp.c_slice_buffer ());
178
200
EXPECT_EQ (tmp.JoinIntoString (), expect);
201
+ if (::testing::Test::HasFailure ()) {
202
+ ADD_FAILURE_AT (whence.file (), whence.line ())
203
+ << " Failure in ExpectWrite" ;
204
+ }
179
205
if (schedule_on_event_engine != nullptr ) {
180
206
schedule_on_event_engine->Run (
181
207
[on_writable = std::move (on_writable)]() mutable {
@@ -191,7 +217,8 @@ void MockPromiseEndpoint::ExpectWrite(
191
217
void MockPromiseEndpoint::ExpectWriteWithCallback (
192
218
std::initializer_list<EventEngineSlice> slices,
193
219
EventEngine* schedule_on_event_engine,
194
- absl::AnyInvocable<void (SliceBuffer&, SliceBuffer&)> callback) {
220
+ absl::AnyInvocable<void (SliceBuffer&, SliceBuffer&)> callback,
221
+ DebugLocation whence) {
195
222
SliceBuffer expect;
196
223
for (auto && slice : slices) {
197
224
expect.Append (grpc_event_engine::experimental::internal::SliceCast<Slice>(
@@ -201,13 +228,17 @@ void MockPromiseEndpoint::ExpectWriteWithCallback(
201
228
.InSequence (write_sequence)
202
229
.WillOnce (WithArgs<0 , 1 >(
203
230
[expect = std::move (expect), schedule_on_event_engine,
204
- callback = std::move (callback)](
231
+ callback = std::move (callback), whence ](
205
232
absl::AnyInvocable<void (absl::Status)> on_writable,
206
233
grpc_event_engine::experimental::SliceBuffer* buffer) mutable {
207
234
SliceBuffer tmp;
208
235
grpc_slice_buffer_swap (buffer->c_slice_buffer (),
209
236
tmp.c_slice_buffer ());
210
237
callback (tmp, expect);
238
+ if (::testing::Test::HasFailure ()) {
239
+ ADD_FAILURE_AT (whence.file (), whence.line ())
240
+ << " Failure in ExpectWriteWithCallback" ;
241
+ }
211
242
212
243
if (schedule_on_event_engine != nullptr ) {
213
244
schedule_on_event_engine->Run (
0 commit comments