xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/http2/adapter/mock_nghttp2_callbacks.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 #include "quiche/http2/adapter/mock_nghttp2_callbacks.h"
2 
3 #include "quiche/http2/adapter/nghttp2_util.h"
4 
5 namespace http2 {
6 namespace adapter {
7 namespace test {
8 
9 /* static */
GetCallbacks()10 nghttp2_session_callbacks_unique_ptr MockNghttp2Callbacks::GetCallbacks() {
11   nghttp2_session_callbacks* callbacks;
12   nghttp2_session_callbacks_new(&callbacks);
13 
14   // All of the callback implementations below just delegate to the mock methods
15   // of |user_data|, which is assumed to be a MockNghttp2Callbacks*.
16   nghttp2_session_callbacks_set_send_callback(
17       callbacks,
18       [](nghttp2_session*, const uint8_t* data, size_t length, int flags,
19          void* user_data) -> ssize_t {
20         return static_cast<MockNghttp2Callbacks*>(user_data)->Send(data, length,
21                                                                    flags);
22       });
23 
24   nghttp2_session_callbacks_set_send_data_callback(
25       callbacks,
26       [](nghttp2_session*, nghttp2_frame* frame, const uint8_t* framehd,
27          size_t length, nghttp2_data_source* source, void* user_data) -> int {
28         return static_cast<MockNghttp2Callbacks*>(user_data)->SendData(
29             frame, framehd, length, source);
30       });
31 
32   nghttp2_session_callbacks_set_on_begin_headers_callback(
33       callbacks,
34       [](nghttp2_session*, const nghttp2_frame* frame, void* user_data) -> int {
35         return static_cast<MockNghttp2Callbacks*>(user_data)->OnBeginHeaders(
36             frame);
37       });
38 
39   nghttp2_session_callbacks_set_on_header_callback(
40       callbacks,
41       [](nghttp2_session*, const nghttp2_frame* frame, const uint8_t* raw_name,
42          size_t name_length, const uint8_t* raw_value, size_t value_length,
43          uint8_t flags, void* user_data) -> int {
44         absl::string_view name = ToStringView(raw_name, name_length);
45         absl::string_view value = ToStringView(raw_value, value_length);
46         return static_cast<MockNghttp2Callbacks*>(user_data)->OnHeader(
47             frame, name, value, flags);
48       });
49 
50   nghttp2_session_callbacks_set_on_data_chunk_recv_callback(
51       callbacks,
52       [](nghttp2_session*, uint8_t flags, int32_t stream_id,
53          const uint8_t* data, size_t len, void* user_data) -> int {
54         absl::string_view chunk = ToStringView(data, len);
55         return static_cast<MockNghttp2Callbacks*>(user_data)->OnDataChunkRecv(
56             flags, stream_id, chunk);
57       });
58 
59   nghttp2_session_callbacks_set_on_begin_frame_callback(
60       callbacks,
61       [](nghttp2_session*, const nghttp2_frame_hd* hd, void* user_data) -> int {
62         return static_cast<MockNghttp2Callbacks*>(user_data)->OnBeginFrame(hd);
63       });
64 
65   nghttp2_session_callbacks_set_on_frame_recv_callback(
66       callbacks,
67       [](nghttp2_session*, const nghttp2_frame* frame, void* user_data) -> int {
68         return static_cast<MockNghttp2Callbacks*>(user_data)->OnFrameRecv(
69             frame);
70       });
71 
72   nghttp2_session_callbacks_set_on_stream_close_callback(
73       callbacks,
74       [](nghttp2_session*, int32_t stream_id, uint32_t error_code,
75          void* user_data) -> int {
76         return static_cast<MockNghttp2Callbacks*>(user_data)->OnStreamClose(
77             stream_id, error_code);
78       });
79 
80   nghttp2_session_callbacks_set_on_frame_send_callback(
81       callbacks,
82       [](nghttp2_session*, const nghttp2_frame* frame, void* user_data) -> int {
83         return static_cast<MockNghttp2Callbacks*>(user_data)->OnFrameSend(
84             frame);
85       });
86 
87   nghttp2_session_callbacks_set_before_frame_send_callback(
88       callbacks,
89       [](nghttp2_session*, const nghttp2_frame* frame, void* user_data) -> int {
90         return static_cast<MockNghttp2Callbacks*>(user_data)->BeforeFrameSend(
91             frame);
92       });
93 
94   nghttp2_session_callbacks_set_on_frame_not_send_callback(
95       callbacks,
96       [](nghttp2_session*, const nghttp2_frame* frame, int lib_error_code,
97          void* user_data) -> int {
98         return static_cast<MockNghttp2Callbacks*>(user_data)->OnFrameNotSend(
99             frame, lib_error_code);
100       });
101 
102   nghttp2_session_callbacks_set_on_invalid_frame_recv_callback(
103       callbacks,
104       [](nghttp2_session*, const nghttp2_frame* frame, int error_code,
105          void* user_data) -> int {
106         return static_cast<MockNghttp2Callbacks*>(user_data)
107             ->OnInvalidFrameRecv(frame, error_code);
108       });
109 
110   nghttp2_session_callbacks_set_error_callback2(
111       callbacks,
112       [](nghttp2_session* /*session*/, int lib_error_code, const char* msg,
113          size_t len, void* user_data) -> int {
114         return static_cast<MockNghttp2Callbacks*>(user_data)->OnErrorCallback2(
115             lib_error_code, msg, len);
116       });
117 
118   nghttp2_session_callbacks_set_pack_extension_callback(
119       callbacks,
120       [](nghttp2_session*, uint8_t* buf, size_t len, const nghttp2_frame* frame,
121          void* user_data) -> ssize_t {
122         return static_cast<MockNghttp2Callbacks*>(user_data)->OnPackExtension(
123             buf, len, frame);
124       });
125   return MakeCallbacksPtr(callbacks);
126 }
127 
128 }  // namespace test
129 }  // namespace adapter
130 }  // namespace http2
131