From 145f12a95b19d2a2f926176cd63fe5645b376186 Mon Sep 17 00:00:00 2001 From: Joshua Humphries Date: Tue, 27 Apr 2021 16:15:08 -0400 Subject: [PATCH] reflection: accept interface instead of grpc.Server struct in Register() (#4340) --- reflection/serverreflection.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/reflection/serverreflection.go b/reflection/serverreflection.go index d2696168..82a5ba7f 100644 --- a/reflection/serverreflection.go +++ b/reflection/serverreflection.go @@ -54,9 +54,19 @@ import ( "google.golang.org/grpc/status" ) +// GRPCServer is the interface provided by a gRPC server. It is implemented by +// *grpc.Server, but could also be implemented by other concrete types. It acts +// as a registry, for accumulating the services exposed by the server. +type GRPCServer interface { + grpc.ServiceRegistrar + GetServiceInfo() map[string]grpc.ServiceInfo +} + +var _ GRPCServer = (*grpc.Server)(nil) + type serverReflectionServer struct { rpb.UnimplementedServerReflectionServer - s *grpc.Server + s GRPCServer initSymbols sync.Once serviceNames []string @@ -64,7 +74,7 @@ type serverReflectionServer struct { } // Register registers the server reflection service on the given gRPC server. -func Register(s *grpc.Server) { +func Register(s GRPCServer) { rpb.RegisterServerReflectionServer(s, &serverReflectionServer{ s: s, })