aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/cpp/interop
diff options
context:
space:
mode:
authorGravatar David Garcia Quintas <dgq@google.com>2015-07-21 16:07:36 -0700
committerGravatar David Garcia Quintas <dgq@google.com>2015-07-21 16:07:36 -0700
commit80f3995e47ae1ccd30a48c00ef8770cf18e51280 (patch)
tree8a628a88e43173658d368ebd22a0d5a27ddf3988 /test/cpp/interop
parentcead5e83e28b64bcbf91870e36e42c495baae13e (diff)
wip
Diffstat (limited to 'test/cpp/interop')
-rw-r--r--test/cpp/interop/client_helper.cc31
-rw-r--r--test/cpp/interop/client_helper.h18
-rw-r--r--test/cpp/interop/interop_client.cc44
-rw-r--r--test/cpp/interop/server.cc25
-rw-r--r--test/cpp/interop/server_helper.cc8
-rw-r--r--test/cpp/interop/server_helper.h4
6 files changed, 104 insertions, 26 deletions
diff --git a/test/cpp/interop/client_helper.cc b/test/cpp/interop/client_helper.cc
index 48b1b2e864..9df79bdbb5 100644
--- a/test/cpp/interop/client_helper.cc
+++ b/test/cpp/interop/client_helper.cc
@@ -48,10 +48,13 @@
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
#include <grpc++/stream.h>
-#include "src/cpp/client/secure_credentials.h"
+
#include "test/core/security/oauth2_utils.h"
#include "test/cpp/util/create_test_channel.h"
+#include "src/core/surface/call.h"
+#include "src/cpp/client/secure_credentials.h"
+
DECLARE_bool(enable_ssl);
DECLARE_bool(use_prod_roots);
DECLARE_int32(server_port);
@@ -62,6 +65,8 @@ DECLARE_string(default_service_account);
DECLARE_string(service_account_key_file);
DECLARE_string(oauth_scope);
+using grpc::testing::CompressionType;
+
namespace grpc {
namespace testing {
@@ -137,5 +142,29 @@ std::shared_ptr<ChannelInterface> CreateChannelForTestCase(
}
}
+CompressionType GetInteropCompressionTypeFromCompressionAlgorithm(
+ grpc_compression_algorithm algorithm) {
+ switch (algorithm) {
+ case GRPC_COMPRESS_NONE:
+ return CompressionType::NONE;
+ case GRPC_COMPRESS_GZIP:
+ return CompressionType::GZIP;
+ case GRPC_COMPRESS_DEFLATE:
+ return CompressionType::DEFLATE;
+ default:
+ GPR_ASSERT(false);
+ }
+}
+
+InteropClientContextInspector::InteropClientContextInspector(
+ const ::grpc::ClientContext& context)
+ : context_(context) {}
+
+grpc_compression_algorithm
+InteropClientContextInspector::GetCallCompressionAlgorithm() const {
+ return grpc_call_get_compression_algorithm(context_.call_);
+}
+
+
} // namespace testing
} // namespace grpc
diff --git a/test/cpp/interop/client_helper.h b/test/cpp/interop/client_helper.h
index c4361bb9de..fb8a6644e4 100644
--- a/test/cpp/interop/client_helper.h
+++ b/test/cpp/interop/client_helper.h
@@ -39,6 +39,8 @@
#include <grpc++/config.h>
#include <grpc++/channel_interface.h>
+#include "test/proto/messages.grpc.pb.h"
+
namespace grpc {
namespace testing {
@@ -49,6 +51,22 @@ grpc::string GetOauth2AccessToken();
std::shared_ptr<ChannelInterface> CreateChannelForTestCase(
const grpc::string& test_case);
+grpc::testing::CompressionType
+GetInteropCompressionTypeFromCompressionAlgorithm(
+ grpc_compression_algorithm algorithm);
+
+class InteropClientContextInspector {
+ public:
+ InteropClientContextInspector(const ::grpc::ClientContext& context);
+
+ // Inspector methods, able to peek inside ClientContext, follow.
+ grpc_compression_algorithm GetCallCompressionAlgorithm() const;
+
+ private:
+ const ::grpc::ClientContext& context_;
+};
+
+
} // namespace testing
} // namespace grpc
diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index b53535bd46..3a28c704b5 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -43,6 +43,8 @@
#include <grpc++/client_context.h>
#include <grpc++/status.h>
#include <grpc++/stream.h>
+
+#include "test/cpp/interop/client_helper.h"
#include "test/proto/test.grpc.pb.h"
#include "test/proto/empty.grpc.pb.h"
#include "test/proto/messages.grpc.pb.h"
@@ -93,24 +95,18 @@ void InteropClient::PerformLargeUnary(SimpleRequest* request,
std::unique_ptr<TestService::Stub> stub(TestService::NewStub(channel_));
ClientContext context;
- // XXX: add UNCOMPRESSABLE to the mix
- //
- // XXX: 1) set request.response_compression to all the diff available
- // compression values. We can't check the compression method used at the
- // application level, but if something is wrong, two different implementations
- // of gRPC (java vs c) won't be able to communicate.
- //
- // 2) for UNCOMPRESSABLE, verify that the response can be whatever, most
- // likely uncompressed
- request->set_response_type(PayloadType::COMPRESSABLE);
+ InteropClientContextInspector inspector(context);
request->set_response_size(kLargeResponseSize);
grpc::string payload(kLargeRequestSize, '\0');
request->mutable_payload()->set_body(payload.c_str(), kLargeRequestSize);
Status s = stub->UnaryCall(&context, *request, response);
+ GPR_ASSERT(request->response_compression() ==
+ GetInteropCompressionTypeFromCompressionAlgorithm(
+ inspector.GetCallCompressionAlgorithm()));
AssertOkOrPrintErrorStatus(s);
- GPR_ASSERT(response->payload().type() == PayloadType::COMPRESSABLE);
+ GPR_ASSERT(response->payload().type() == request->response_type());
GPR_ASSERT(response->payload().body() ==
grpc::string(kLargeResponseSize, '\0'));
}
@@ -124,6 +120,7 @@ void InteropClient::DoComputeEngineCreds(
SimpleResponse response;
request.set_fill_username(true);
request.set_fill_oauth_scope(true);
+ request.set_response_type(PayloadType::COMPRESSABLE);
PerformLargeUnary(&request, &response);
gpr_log(GPR_INFO, "Got username %s", response.username().c_str());
gpr_log(GPR_INFO, "Got oauth_scope %s", response.oauth_scope().c_str());
@@ -143,6 +140,7 @@ void InteropClient::DoServiceAccountCreds(const grpc::string& username,
SimpleResponse response;
request.set_fill_username(true);
request.set_fill_oauth_scope(true);
+ request.set_response_type(PayloadType::COMPRESSABLE);
PerformLargeUnary(&request, &response);
GPR_ASSERT(!response.username().empty());
GPR_ASSERT(!response.oauth_scope().empty());
@@ -180,6 +178,7 @@ void InteropClient::DoJwtTokenCreds(const grpc::string& username) {
SimpleRequest request;
SimpleResponse response;
request.set_fill_username(true);
+ request.set_response_type(PayloadType::COMPRESSABLE);
PerformLargeUnary(&request, &response);
GPR_ASSERT(!response.username().empty());
GPR_ASSERT(username.find(response.username()) != grpc::string::npos);
@@ -187,12 +186,19 @@ void InteropClient::DoJwtTokenCreds(const grpc::string& username) {
}
void InteropClient::DoLargeUnary() {
- gpr_log(GPR_INFO, "Sending a large unary rpc...");
- SimpleRequest request;
- request.set_response_compression(grpc::testing::GZIP);
- SimpleResponse response;
- PerformLargeUnary(&request, &response);
- gpr_log(GPR_INFO, "Large unary done.");
+ const CompressionType compression_types[] = {NONE, GZIP, DEFLATE};
+ const PayloadType payload_types[] = {COMPRESSABLE, UNCOMPRESSABLE, RANDOM};
+ for (const auto payload_type : payload_types) {
+ for (const auto compression_type : compression_types) {
+ gpr_log(GPR_INFO, "Sending a large unary rpc...");
+ SimpleRequest request;
+ SimpleResponse response;
+ request.set_response_type(payload_type);
+ request.set_response_compression(compression_type);
+ PerformLargeUnary(&request, &response);
+ gpr_log(GPR_INFO, "Large unary done.");
+ }
+ }
}
void InteropClient::DoRequestStreaming() {
@@ -227,11 +233,15 @@ void InteropClient::DoResponseStreaming() {
ClientContext context;
StreamingOutputCallRequest request;
+ request.set_response_type(PayloadType::COMPRESSABLE);
+ request.set_response_compression(CompressionType::GZIP);
+
for (unsigned int i = 0; i < response_stream_sizes.size(); ++i) {
ResponseParameters* response_parameter = request.add_response_parameters();
response_parameter->set_size(response_stream_sizes[i]);
}
StreamingOutputCallResponse response;
+
std::unique_ptr<ClientReader<StreamingOutputCallResponse>> stream(
stub->StreamingOutputCall(&context, request));
diff --git a/test/cpp/interop/server.cc b/test/cpp/interop/server.cc
index 7605b2a6ff..55df82b567 100644
--- a/test/cpp/interop/server.cc
+++ b/test/cpp/interop/server.cc
@@ -81,8 +81,28 @@ static bool got_sigint = false;
bool SetPayload(PayloadType type, int size, Payload* payload) {
PayloadType response_type = type;
payload->set_type(response_type);
- std::unique_ptr<char[]> body(new char[size]());
- payload->set_body(body.get(), size);
+ switch (type) {
+ case PayloadType::COMPRESSABLE:
+ {
+ std::unique_ptr<char[]> body(new char[size]());
+ payload->set_body(body.get(), size);
+ }
+ break;
+ case PayloadType::UNCOMPRESSABLE:
+ {
+ // XXX
+ std::unique_ptr<char[]> body(new char[size]());
+ payload->set_body(body.get(), size);
+ }
+ break;
+ case PayloadType::RANDOM:
+ {
+ // XXX
+ std::unique_ptr<char[]> body(new char[size]());
+ payload->set_body(body.get(), size);
+ }
+ break;
+ }
return true;
}
@@ -122,6 +142,7 @@ class TestServiceImpl : public TestService::Service {
return Status(grpc::StatusCode::INTERNAL, "Error creating payload.");
}
}
+
return Status::OK;
}
diff --git a/test/cpp/interop/server_helper.cc b/test/cpp/interop/server_helper.cc
index 0f8e5ff4f6..8cfed2acb5 100644
--- a/test/cpp/interop/server_helper.cc
+++ b/test/cpp/interop/server_helper.cc
@@ -60,21 +60,21 @@ std::shared_ptr<ServerCredentials> CreateInteropServerCredentials() {
}
}
-InteropContextInspector::InteropContextInspector(
+InteropServerContextInspector::InteropServerContextInspector(
const ::grpc::ServerContext& context)
: context_(context) {}
grpc_compression_algorithm
-InteropContextInspector::GetCallCompressionAlgorithm() const {
+InteropServerContextInspector::GetCallCompressionAlgorithm() const {
return grpc_call_get_compression_algorithm(context_.call_);
}
-std::shared_ptr<const AuthContext> InteropContextInspector::GetAuthContext()
+std::shared_ptr<const AuthContext> InteropServerContextInspector::GetAuthContext()
const {
return context_.auth_context();
}
-bool InteropContextInspector::IsCancelled() const {
+bool InteropServerContextInspector::IsCancelled() const {
return context_.IsCancelled();
}
diff --git a/test/cpp/interop/server_helper.h b/test/cpp/interop/server_helper.h
index 504652c885..a57ef0b3c5 100644
--- a/test/cpp/interop/server_helper.h
+++ b/test/cpp/interop/server_helper.h
@@ -45,9 +45,9 @@ namespace testing {
std::shared_ptr<ServerCredentials> CreateInteropServerCredentials();
-class InteropContextInspector {
+class InteropServerContextInspector {
public:
- InteropContextInspector(const ::grpc::ServerContext& context);
+ InteropServerContextInspector(const ::grpc::ServerContext& context);
// Inspector methods, able to peek inside ServerContext, follow.
std::shared_ptr<const AuthContext> GetAuthContext() const;