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