Add server interceptors in end2end_test

pull/17072/head
Yash Tibrewal 6 years ago
parent d736b1d309
commit e2361a4751
  1. 1
      CMakeLists.txt
  2. 3
      Makefile
  3. 3
      build.yaml
  4. 1
      test/cpp/end2end/BUILD
  5. 76
      test/cpp/end2end/client_interceptors_end2end_test.cc
  6. 31
      test/cpp/end2end/end2end_test.cc
  7. 1
      test/cpp/end2end/interceptors_util.cc
  8. 7
      test/cpp/end2end/interceptors_util.h
  9. 8
      tools/run_tests/generated/sources_and_headers.json

@ -12888,6 +12888,7 @@ if (gRPC_BUILD_TESTS)
add_executable(end2end_test
test/cpp/end2end/end2end_test.cc
test/cpp/end2end/interceptor_util.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)

@ -17754,6 +17754,7 @@ endif
END2END_TEST_SRC = \
test/cpp/end2end/end2end_test.cc \
test/cpp/end2end/interceptor_util.cc \
END2END_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(END2END_TEST_SRC))))
ifeq ($(NO_SECURE),true)
@ -17786,6 +17787,8 @@ endif
$(OBJDIR)/$(CONFIG)/test/cpp/end2end/end2end_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(OBJDIR)/$(CONFIG)/test/cpp/end2end/interceptor_util.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_end2end_test: $(END2END_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)

@ -4664,8 +4664,11 @@ targets:
cpu_cost: 0.5
build: test
language: c++
headers:
- test/cpp/end2end/interceptors_util.h
src:
- test/cpp/end2end/end2end_test.cc
- test/cpp/end2end/interceptor_util.cc
deps:
- grpc++_test_util
- grpc_test_util

@ -159,6 +159,7 @@ grpc_cc_library(
"gtest",
],
deps = [
":interceptors_util",
":test_service_impl",
"//:gpr",
"//:grpc",

@ -43,44 +43,6 @@ namespace grpc {
namespace testing {
namespace {
class ClientInterceptorsStreamingEnd2endTest : public ::testing::Test {
protected:
ClientInterceptorsStreamingEnd2endTest() {
int port = grpc_pick_unused_port_or_die();
ServerBuilder builder;
server_address_ = "localhost:" + std::to_string(port);
builder.AddListeningPort(server_address_, InsecureServerCredentials());
builder.RegisterService(&service_);
server_ = builder.BuildAndStart();
}
~ClientInterceptorsStreamingEnd2endTest() { server_->Shutdown(); }
std::string server_address_;
EchoTestServiceStreamingImpl service_;
std::unique_ptr<Server> server_;
};
class ClientInterceptorsEnd2endTest : public ::testing::Test {
protected:
ClientInterceptorsEnd2endTest() {
int port = grpc_pick_unused_port_or_die();
ServerBuilder builder;
server_address_ = "localhost:" + std::to_string(port);
builder.AddListeningPort(server_address_, InsecureServerCredentials());
builder.RegisterService(&service_);
server_ = builder.BuildAndStart();
}
~ClientInterceptorsEnd2endTest() { server_->Shutdown(); }
std::string server_address_;
TestServiceImpl service_;
std::unique_ptr<Server> server_;
};
/* Hijacks Echo RPC and fills in the expected values */
class HijackingInterceptor : public experimental::Interceptor {
public:
@ -377,6 +339,25 @@ class LoggingInterceptorFactory
}
};
class ClientInterceptorsEnd2endTest : public ::testing::Test {
protected:
ClientInterceptorsEnd2endTest() {
int port = grpc_pick_unused_port_or_die();
ServerBuilder builder;
server_address_ = "localhost:" + std::to_string(port);
builder.AddListeningPort(server_address_, InsecureServerCredentials());
builder.RegisterService(&service_);
server_ = builder.BuildAndStart();
}
~ClientInterceptorsEnd2endTest() { server_->Shutdown(); }
std::string server_address_;
TestServiceImpl service_;
std::unique_ptr<Server> server_;
};
TEST_F(ClientInterceptorsEnd2endTest, ClientInterceptorLoggingTest) {
ChannelArguments args;
DummyInterceptor::Reset();
@ -493,6 +474,25 @@ TEST_F(ClientInterceptorsEnd2endTest,
EXPECT_EQ(DummyInterceptor::GetNumTimesRun(), 20);
}
class ClientInterceptorsStreamingEnd2endTest : public ::testing::Test {
protected:
ClientInterceptorsStreamingEnd2endTest() {
int port = grpc_pick_unused_port_or_die();
ServerBuilder builder;
server_address_ = "localhost:" + std::to_string(port);
builder.AddListeningPort(server_address_, InsecureServerCredentials());
builder.RegisterService(&service_);
server_ = builder.BuildAndStart();
}
~ClientInterceptorsStreamingEnd2endTest() { server_->Shutdown(); }
std::string server_address_;
EchoTestServiceStreamingImpl service_;
std::unique_ptr<Server> server_;
};
TEST_F(ClientInterceptorsStreamingEnd2endTest, ClientStreamingTest) {
ChannelArguments args;
DummyInterceptor::Reset();

@ -40,6 +40,7 @@
#include "src/proto/grpc/testing/echo.grpc.pb.h"
#include "test/core/util/port.h"
#include "test/core/util/test_config.h"
#include "test/cpp/end2end/interceptors_util.h"
#include "test/cpp/end2end/test_service_impl.h"
#include "test/cpp/util/string_ref_helper.h"
#include "test/cpp/util/test_credentials_provider.h"
@ -179,7 +180,7 @@ class Proxy : public ::grpc::testing::EchoTestService::Service {
}
private:
std::unique_ptr< ::grpc::testing::EchoTestService::Stub> stub_;
std::unique_ptr<::grpc::testing::EchoTestService::Stub> stub_;
};
class TestServiceImplDupPkg
@ -194,9 +195,14 @@ class TestServiceImplDupPkg
class TestScenario {
public:
TestScenario(bool proxy, bool inproc_stub, const grpc::string& creds_type)
: use_proxy(proxy), inproc(inproc_stub), credentials_type(creds_type) {}
TestScenario(bool interceptors, bool proxy, bool inproc_stub,
const grpc::string& creds_type)
: use_interceptors(interceptors),
use_proxy(proxy),
inproc(inproc_stub),
credentials_type(creds_type) {}
void Log() const;
bool use_interceptors;
bool use_proxy;
bool inproc;
const grpc::string credentials_type;
@ -260,6 +266,16 @@ class End2endTest : public ::testing::TestWithParam<TestScenario> {
if (GetParam().credentials_type != kInsecureCredentialsType) {
server_creds->SetAuthMetadataProcessor(processor);
}
if (GetParam().use_interceptors) {
std::vector<
std::unique_ptr<experimental::ServerInterceptorFactoryInterface>>
creators;
// Add 20 dummy server interceptors
for (auto i = 0; i < 20; i++) {
creators.push_back(std::unique_ptr<DummyInterceptorFactory>(
new DummyInterceptorFactory()));
}
}
builder.AddListeningPort(server_address_.str(), server_creds);
builder.RegisterService(&service_);
builder.RegisterService("foo.test.youtube.com", &special_service_);
@ -1802,13 +1818,16 @@ std::vector<TestScenario> CreateTestScenarios(bool use_proxy,
}
GPR_ASSERT(!credentials_types.empty());
for (const auto& cred : credentials_types) {
scenarios.emplace_back(false, false, cred);
scenarios.emplace_back(false, false, false, cred);
scenarios.emplace_back(true, false, false, cred);
if (use_proxy) {
scenarios.emplace_back(true, false, cred);
scenarios.emplace_back(false, true, false, cred);
scenarios.emplace_back(true, true, false, cred);
}
}
if (test_inproc && insec_ok()) {
scenarios.emplace_back(false, true, kInsecureCredentialsType);
scenarios.emplace_back(false, false, true, kInsecureCredentialsType);
scenarios.emplace_back(true, false, true, kInsecureCredentialsType);
}
return scenarios;
}

@ -23,6 +23,7 @@ namespace testing {
std::atomic<int> DummyInterceptor::num_times_run_;
std::atomic<int> DummyInterceptor::num_times_run_reverse_;
std::atomic<int> DummyInterceptor::num_times_cancel_;
void MakeCall(const std::shared_ptr<Channel>& channel) {
auto stub = grpc::testing::EchoTestService::NewStub(channel);

@ -41,6 +41,9 @@ class DummyInterceptor : public experimental::Interceptor {
experimental::InterceptionHookPoints::
POST_RECV_INITIAL_METADATA)) {
num_times_run_reverse_++;
} else if (methods->QueryInterceptionHookPoint(
experimental::InterceptionHookPoints::PRE_SEND_CANCEL)) {
num_times_cancel_++;
}
methods->Proceed();
}
@ -48,6 +51,7 @@ class DummyInterceptor : public experimental::Interceptor {
static void Reset() {
num_times_run_.store(0);
num_times_run_reverse_.store(0);
num_times_cancel_.store(0);
}
static int GetNumTimesRun() {
@ -55,9 +59,12 @@ class DummyInterceptor : public experimental::Interceptor {
return num_times_run_.load();
}
static int GetNumTimesCancel() { return num_times_cancel_.load(); }
private:
static std::atomic<int> num_times_run_;
static std::atomic<int> num_times_run_reverse_;
static std::atomic<int> num_times_cancel_;
};
class DummyInterceptorFactory

@ -3601,12 +3601,16 @@
"grpc++_test_util",
"grpc_test_util"
],
"headers": [],
"headers": [
"test/cpp/end2end/interceptors_util.h"
],
"is_filegroup": false,
"language": "c++",
"name": "end2end_test",
"src": [
"test/cpp/end2end/end2end_test.cc"
"test/cpp/end2end/end2end_test.cc",
"test/cpp/end2end/interceptor_util.cc",
"test/cpp/end2end/interceptors_util.h"
],
"third_party": false,
"type": "target"

Loading…
Cancel
Save