blob: 92f57f7bddbcf10cbc468bee42397094f83ac2c2 [file] [log] [blame]
Yang Gaoa4002072015-04-09 23:25:21 -07001/*
2 *
3 * Copyright 2015, Google Inc.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following disclaimer
14 * in the documentation and/or other materials provided with the
15 * distribution.
16 * * Neither the name of Google Inc. nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 */
33
34#ifndef GRPC_TEST_CPP_INTEROP_INTEROP_CLIENT_H
35#define GRPC_TEST_CPP_INTEROP_INTEROP_CLIENT_H
yang-g9e2f90c2015-08-21 15:35:03 -070036
Yang Gaoa4002072015-04-09 23:25:21 -070037#include <memory>
38
39#include <grpc/grpc.h>
yang-g8c2be9f2015-08-19 16:28:09 -070040#include <grpc++/channel.h>
Craig Tiller1b4e3302015-12-17 16:35:00 -080041#include "src/proto/grpc/testing/messages.grpc.pb.h"
42#include "src/proto/grpc/testing/test.grpc.pb.h"
Yang Gaoa4002072015-04-09 23:25:21 -070043
44namespace grpc {
45namespace testing {
46
David Garcia Quintasa2b78172015-12-15 22:25:53 -080047// Function pointer for custom checks.
48using CheckerFn =
49 std::function<void(const InteropClientContextInspector&,
50 const SimpleRequest*, const SimpleResponse*)>;
51
Yang Gaoa4002072015-04-09 23:25:21 -070052class InteropClient {
53 public:
yang-g8c2be9f2015-08-19 16:28:09 -070054 explicit InteropClient(std::shared_ptr<Channel> channel);
Sree Kuchibhotlaac7edec2015-10-20 16:45:52 -070055 explicit InteropClient(
56 std::shared_ptr<Channel> channel,
57 bool new_stub_every_test_case); // If new_stub_every_test_case is true,
58 // a new TestService::Stub object is
59 // created for every test case below
Yang Gaoa4002072015-04-09 23:25:21 -070060 ~InteropClient() {}
61
Sree Kuchibhotlaac7edec2015-10-20 16:45:52 -070062 void Reset(std::shared_ptr<Channel> channel);
Yang Gaoa4002072015-04-09 23:25:21 -070063
64 void DoEmpty();
65 void DoLargeUnary();
David Garcia Quintascd37d582015-08-09 15:50:21 -070066 void DoLargeCompressedUnary();
Yang Gaoa4002072015-04-09 23:25:21 -070067 void DoPingPong();
68 void DoHalfDuplex();
69 void DoRequestStreaming();
70 void DoResponseStreaming();
David Garcia Quintascd37d582015-08-09 15:50:21 -070071 void DoResponseCompressedStreaming();
Yang Gaoa4002072015-04-09 23:25:21 -070072 void DoResponseStreamingWithSlowConsumer();
Yang Gao68d61572015-04-24 14:42:42 -070073 void DoCancelAfterBegin();
74 void DoCancelAfterFirstResponse();
yang-g69563b92015-07-10 15:32:11 -070075 void DoTimeoutOnSleepingServer();
yang-g78bddc62015-09-21 10:32:17 -070076 void DoEmptyStream();
Abhishek Kumare1c867d2015-08-05 11:04:45 -070077 void DoStatusWithMessage();
yang-gc10348a2016-02-19 16:05:10 -080078 void DoCustomMetadata();
Yang Gaoa4002072015-04-09 23:25:21 -070079 // Auth tests.
80 // username is a string containing the user email
81 void DoJwtTokenCreds(const grpc::string& username);
82 void DoComputeEngineCreds(const grpc::string& default_service_account,
83 const grpc::string& oauth_scope);
yang-g867d0c12015-09-02 14:33:15 -070084 // username the GCE default service account email
yang-gbe5f0592015-07-13 11:11:50 -070085 void DoOauth2AuthToken(const grpc::string& username,
86 const grpc::string& oauth_scope);
yang-g5bf510b2015-07-14 10:54:29 -070087 // username is a string containing the user email
yang-g867d0c12015-09-02 14:33:15 -070088 void DoPerRpcCreds(const grpc::string& json_key);
Yang Gaoa4002072015-04-09 23:25:21 -070089
90 private:
Sree Kuchibhotlaac7edec2015-10-20 16:45:52 -070091 class ServiceStub {
92 public:
93 // If new_stub_every_call = true, pointer to a new instance of
94 // TestServce::Stub is returned by Get() everytime it is called
95 ServiceStub(std::shared_ptr<Channel> channel, bool new_stub_every_call);
96
97 TestService::Stub* Get();
98
99 void Reset(std::shared_ptr<Channel> channel);
100
101 private:
102 std::unique_ptr<TestService::Stub> stub_;
103 std::shared_ptr<Channel> channel_;
104 bool new_stub_every_call_; // If true, a new stub is returned by every
105 // Get() call
106 };
107
Yang Gaoa4002072015-04-09 23:25:21 -0700108 void PerformLargeUnary(SimpleRequest* request, SimpleResponse* response);
David Garcia Quintasa2b78172015-12-15 22:25:53 -0800109
110 /// Run \a custom_check_fn as an additional check.
111 void PerformLargeUnary(SimpleRequest* request, SimpleResponse* response,
112 CheckerFn custom_checks_fn);
Yang Gaoa4002072015-04-09 23:25:21 -0700113 void AssertOkOrPrintErrorStatus(const Status& s);
Sree Kuchibhotlaac7edec2015-10-20 16:45:52 -0700114 ServiceStub serviceStub_;
Yang Gaoa4002072015-04-09 23:25:21 -0700115};
116
117} // namespace testing
118} // namespace grpc
119
120#endif // GRPC_TEST_CPP_INTEROP_INTEROP_CLIENT_H