diff options
Diffstat (limited to 'test/cpp/interop')
-rw-r--r-- | test/cpp/interop/client_helper.cc | 31 | ||||
-rw-r--r-- | test/cpp/interop/client_helper.h | 18 | ||||
-rw-r--r-- | test/cpp/interop/interop_client.cc | 44 | ||||
-rw-r--r-- | test/cpp/interop/server.cc | 25 | ||||
-rw-r--r-- | test/cpp/interop/server_helper.cc | 8 | ||||
-rw-r--r-- | test/cpp/interop/server_helper.h | 4 |
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; |