xref: /aosp_15_r20/external/grpc-grpc/test/core/end2end/fixtures/inproc_fixture.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 // Copyright 2023 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef GRPC_TEST_CORE_END2END_FIXTURES_INPROC_FIXTURE_H
16 #define GRPC_TEST_CORE_END2END_FIXTURES_INPROC_FIXTURE_H
17 
18 #include "absl/functional/any_invocable.h"
19 
20 #include <grpc/grpc.h>
21 
22 #include "src/core/ext/transport/inproc/inproc_transport.h"
23 #include "src/core/lib/channel/channel_args.h"
24 #include "test/core/end2end/end2end_tests.h"
25 
26 class InprocFixture : public grpc_core::CoreTestFixture {
27  private:
MakeServer(const grpc_core::ChannelArgs & args,grpc_completion_queue * cq,absl::AnyInvocable<void (grpc_server *)> & pre_server_start)28   grpc_server* MakeServer(
29       const grpc_core::ChannelArgs& args, grpc_completion_queue* cq,
30       absl::AnyInvocable<void(grpc_server*)>& pre_server_start) override {
31     if (made_server_ != nullptr) return made_server_;
32     made_server_ = grpc_server_create(args.ToC().get(), nullptr);
33     grpc_server_register_completion_queue(made_server_, cq, nullptr);
34     pre_server_start(made_server_);
35     grpc_server_start(made_server_);
36     return made_server_;
37   }
MakeClient(const grpc_core::ChannelArgs & args,grpc_completion_queue * cq)38   grpc_channel* MakeClient(const grpc_core::ChannelArgs& args,
39                            grpc_completion_queue* cq) override {
40     // Registered method registration isn't going to work for tests that create
41     // the client first and use inproc transports.
42     absl::AnyInvocable<void(grpc_server*)>
43         not_sure_what_to_do_but_this_works_for_now = [](grpc_server*) {};
44     return grpc_inproc_channel_create(
45         MakeServer(args, cq, not_sure_what_to_do_but_this_works_for_now),
46         args.ToC().get(), nullptr);
47   }
48 
49   grpc_server* made_server_ = nullptr;
50 };
51 
52 #endif  // GRPC_TEST_CORE_END2END_FIXTURES_INPROC_FIXTURE_H
53