xref: /aosp_15_r20/external/grpc-grpc/test/cpp/util/grpc_cli.cc (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker //
2*cc02d7e2SAndroid Build Coastguard Worker 
3*cc02d7e2SAndroid Build Coastguard Worker // Copyright 2015 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker //
5*cc02d7e2SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker // You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker //
9*cc02d7e2SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker //
11*cc02d7e2SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker // limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker //
17*cc02d7e2SAndroid Build Coastguard Worker //
18*cc02d7e2SAndroid Build Coastguard Worker 
19*cc02d7e2SAndroid Build Coastguard Worker //
20*cc02d7e2SAndroid Build Coastguard Worker // A command line tool to talk to a grpc server.
21*cc02d7e2SAndroid Build Coastguard Worker // Run `grpc_cli help` command to see its usage information.
22*cc02d7e2SAndroid Build Coastguard Worker 
23*cc02d7e2SAndroid Build Coastguard Worker // Example of talking to grpc interop server:
24*cc02d7e2SAndroid Build Coastguard Worker // grpc _cli call localhost:50051 UnaryCall "response_size:10" \
25*cc02d7e2SAndroid Build Coastguard Worker //    --protofiles=src/proto/grpc/testing/test.proto \
26*cc02d7e2SAndroid Build Coastguard Worker //    --channel_creds_type=insecure
27*cc02d7e2SAndroid Build Coastguard Worker 
28*cc02d7e2SAndroid Build Coastguard Worker // Options:
29*cc02d7e2SAndroid Build Coastguard Worker //   1. --protofiles, use this flag to provide proto files if the server does
30*cc02d7e2SAndroid Build Coastguard Worker //      does not have the reflection service.
31*cc02d7e2SAndroid Build Coastguard Worker //   2. --proto_path, if your proto file is not under current working directory,
32*cc02d7e2SAndroid Build Coastguard Worker //      use this flag to provide a search root. It should work similar to the
33*cc02d7e2SAndroid Build Coastguard Worker //      counterpart in protoc. This option is valid only when protofiles is
34*cc02d7e2SAndroid Build Coastguard Worker //      provided.
35*cc02d7e2SAndroid Build Coastguard Worker //   3. --metadata specifies metadata to be sent to the server, such as:
36*cc02d7e2SAndroid Build Coastguard Worker //      --metadata="MyHeaderKey1:Value1:MyHeaderKey2:Value2"
37*cc02d7e2SAndroid Build Coastguard Worker //   4. --channel_creds_type, whether to use tls, insecure or platform-specific
38*cc02d7e2SAndroid Build Coastguard Worker //      options.
39*cc02d7e2SAndroid Build Coastguard Worker //   5. --use_auth, if set to true, attach a GoogleDefaultCredentials to the
40*cc02d7e2SAndroid Build Coastguard Worker //   call
41*cc02d7e2SAndroid Build Coastguard Worker //   6. --infile, input filename (defaults to stdin)
42*cc02d7e2SAndroid Build Coastguard Worker //   7. --outfile, output filename (defaults to stdout)
43*cc02d7e2SAndroid Build Coastguard Worker //   8. --binary_input, use the serialized request as input. The serialized
44*cc02d7e2SAndroid Build Coastguard Worker //      request can be generated by calling something like:
45*cc02d7e2SAndroid Build Coastguard Worker //      pr otoc --proto_path=src/proto/grpc/testing/ \
46*cc02d7e2SAndroid Build Coastguard Worker //       --encode=grpc.testing.SimpleRequest \
47*cc02d7e2SAndroid Build Coastguard Worker //       src/proto/grpc/testing/messages.proto \
48*cc02d7e2SAndroid Build Coastguard Worker //       < input.txt > input.bin
49*cc02d7e2SAndroid Build Coastguard Worker //      If this is used and no proto file is provided in the argument list, the
50*cc02d7e2SAndroid Build Coastguard Worker //      method string has to be exact in the form of /package.service/method.
51*cc02d7e2SAndroid Build Coastguard Worker //   9. --binary_output, use binary format response as output, it can
52*cc02d7e2SAndroid Build Coastguard Worker //      be later decoded using protoc:
53*cc02d7e2SAndroid Build Coastguard Worker //      protoc --proto_path=src/proto/grpc/testing/ \
54*cc02d7e2SAndroid Build Coastguard Worker //     --decode=grpc.testing.SimpleResponse \
55*cc02d7e2SAndroid Build Coastguard Worker //     src/proto/grpc/testing/messages.proto \
56*cc02d7e2SAndroid Build Coastguard Worker //     < output.bin > output.txt
57*cc02d7e2SAndroid Build Coastguard Worker //  10. --default_service_config, optional default service config to use
58*cc02d7e2SAndroid Build Coastguard Worker //      on the channel. Note that this may be ignored if the name resolver
59*cc02d7e2SAndroid Build Coastguard Worker //      returns a service config.
60*cc02d7e2SAndroid Build Coastguard Worker //  11. --display_peer_address, on CallMethod commands, log the peer socket
61*cc02d7e2SAndroid Build Coastguard Worker //      address of the connection that each RPC is made on to stderr.
62*cc02d7e2SAndroid Build Coastguard Worker //
63*cc02d7e2SAndroid Build Coastguard Worker 
64*cc02d7e2SAndroid Build Coastguard Worker #include <fstream>
65*cc02d7e2SAndroid Build Coastguard Worker #include <functional>
66*cc02d7e2SAndroid Build Coastguard Worker #include <iostream>
67*cc02d7e2SAndroid Build Coastguard Worker 
68*cc02d7e2SAndroid Build Coastguard Worker #include "absl/flags/flag.h"
69*cc02d7e2SAndroid Build Coastguard Worker 
70*cc02d7e2SAndroid Build Coastguard Worker #include <grpcpp/support/config.h>
71*cc02d7e2SAndroid Build Coastguard Worker 
72*cc02d7e2SAndroid Build Coastguard Worker #include "test/cpp/util/cli_credentials.h"
73*cc02d7e2SAndroid Build Coastguard Worker #include "test/cpp/util/grpc_tool.h"
74*cc02d7e2SAndroid Build Coastguard Worker #include "test/cpp/util/test_config.h"
75*cc02d7e2SAndroid Build Coastguard Worker 
76*cc02d7e2SAndroid Build Coastguard Worker ABSL_FLAG(std::string, outfile, "", "Output file (default is stdout)");
77*cc02d7e2SAndroid Build Coastguard Worker 
SimplePrint(const std::string & outfile,const std::string & output)78*cc02d7e2SAndroid Build Coastguard Worker static bool SimplePrint(const std::string& outfile, const std::string& output) {
79*cc02d7e2SAndroid Build Coastguard Worker   if (outfile.empty()) {
80*cc02d7e2SAndroid Build Coastguard Worker     std::cout << output << std::flush;
81*cc02d7e2SAndroid Build Coastguard Worker   } else {
82*cc02d7e2SAndroid Build Coastguard Worker     std::ofstream output_file(outfile, std::ios::app | std::ios::binary);
83*cc02d7e2SAndroid Build Coastguard Worker     output_file << output << std::flush;
84*cc02d7e2SAndroid Build Coastguard Worker     output_file.close();
85*cc02d7e2SAndroid Build Coastguard Worker   }
86*cc02d7e2SAndroid Build Coastguard Worker   return true;
87*cc02d7e2SAndroid Build Coastguard Worker }
88*cc02d7e2SAndroid Build Coastguard Worker 
main(int argc,char ** argv)89*cc02d7e2SAndroid Build Coastguard Worker int main(int argc, char** argv) {
90*cc02d7e2SAndroid Build Coastguard Worker   grpc::testing::InitTest(&argc, &argv, true);
91*cc02d7e2SAndroid Build Coastguard Worker 
92*cc02d7e2SAndroid Build Coastguard Worker   return grpc::testing::GrpcToolMainLib(
93*cc02d7e2SAndroid Build Coastguard Worker       argc, const_cast<const char**>(argv), grpc::testing::CliCredentials(),
94*cc02d7e2SAndroid Build Coastguard Worker       std::bind(SimplePrint, absl::GetFlag(FLAGS_outfile),
95*cc02d7e2SAndroid Build Coastguard Worker                 std::placeholders::_1));
96*cc02d7e2SAndroid Build Coastguard Worker }
97