下面列出了怎么用io.grpc.reflection.v1alpha.ServiceResponse的API类实例代码及写法,或者点击链接到github查看源代码。
private void listServices(ServerReflectionRequest request) {
ListServiceResponse.Builder builder = ListServiceResponse.newBuilder();
for (String serviceName : serverReflectionIndex.getServiceNames()) {
builder.addService(ServiceResponse.newBuilder().setName(serviceName));
}
serverCallStreamObserver.onNext(
ServerReflectionResponse.newBuilder()
.setValidHost(request.getHost())
.setOriginalRequest(request)
.setListServicesResponse(builder)
.build());
}
private void assertServiceResponseEquals(Set<ServiceResponse> goldenResponse) throws Exception {
ServerReflectionRequest request =
ServerReflectionRequest.newBuilder().setHost(TEST_HOST).setListServices("services").build();
StreamRecorder<ServerReflectionResponse> responseObserver = StreamRecorder.create();
StreamObserver<ServerReflectionRequest> requestObserver =
stub.serverReflectionInfo(responseObserver);
requestObserver.onNext(request);
requestObserver.onCompleted();
List<ServiceResponse> response =
responseObserver.firstValue().get().getListServicesResponse().getServiceList();
assertEquals(goldenResponse.size(), response.size());
assertEquals(goldenResponse, new HashSet<ServiceResponse>(response));
}
@Test
public void testRetrievingListOfServices() {
ServerReflectionRequest request = ServerReflectionRequest.newBuilder().setHost("localhost")
.setListServices("").build();
ServerReflectionResponse response = invoke(request);
List<ServiceResponse> list = response.getListServicesResponse().getServiceList();
assertThat(list).hasSize(2)
.anySatisfy(r -> assertThat(r.getName()).isEqualTo("grpc.reflection.testing.ReflectableService"))
.anySatisfy(r -> assertThat(r.getName()).isEqualTo("grpc.health.v1.Health"));
}
private ServerReflectionResponse getServiceList(ServerReflectionRequest request) {
ListServiceResponse response = index.getServiceNames().stream()
.map(new Function<String, ServiceResponse>() { // NOSONAR
@Override
public ServiceResponse apply(String s) {
return ServiceResponse.newBuilder().setName(s).build();
}
})
.collect(new Supplier<ListServiceResponse.Builder>() {
@Override
public ListServiceResponse.Builder get() {
return ListServiceResponse.newBuilder();
}
},
new BiConsumer<ListServiceResponse.Builder, ServiceResponse>() {
@Override
public void accept(ListServiceResponse.Builder builder, ServiceResponse value) {
builder.addService(value);
}
},
new BiConsumer<ListServiceResponse.Builder, ListServiceResponse.Builder>() { // NOSONAR
@Override
public void accept(ListServiceResponse.Builder b1,
ListServiceResponse.Builder b2) {
b1.addAllService(b2.getServiceList());
}
})
.build();
return ServerReflectionResponse.newBuilder()
.setValidHost(request.getHost())
.setOriginalRequest(request)
.setListServicesResponse(response)
.build();
}
@Test
public void testReflection() throws InterruptedException {
List<String> discoveredServiceNames = new ArrayList<>();
ServerReflectionRequest request = ServerReflectionRequest.newBuilder().setListServices("services").setHost("localhost").build();
CountDownLatch latch = new CountDownLatch(1);
ServerReflectionGrpc.newStub(channel).serverReflectionInfo(new StreamObserver<ServerReflectionResponse>() {
@Override
public void onNext(ServerReflectionResponse value) {
List<ServiceResponse> serviceList = value.getListServicesResponse().getServiceList();
for (ServiceResponse serviceResponse : serviceList) {
discoveredServiceNames.add(serviceResponse.getName());
}
}
@Override
public void onError(Throwable t) {
}
@Override
public void onCompleted() {
latch.countDown();
}
}).onNext(request);
latch.await(3, TimeUnit.SECONDS);
assertFalse(discoveredServiceNames.isEmpty());
}
private void listServices(ServerReflectionRequest request) {
ListServiceResponse.Builder builder = ListServiceResponse.newBuilder();
for (String serviceName : serverReflectionIndex.getServiceNames()) {
builder.addService(ServiceResponse.newBuilder().setName(serviceName));
}
serverCallStreamObserver.onNext(
ServerReflectionResponse.newBuilder()
.setValidHost(request.getHost())
.setOriginalRequest(request)
.setListServicesResponse(builder)
.build());
}
@Test
public void sharedServiceBetweenServers()
throws IOException, ExecutionException, InterruptedException {
Server anotherServer = InProcessServerBuilder.forName("proto-reflection-test-2")
.directExecutor()
.addService(reflectionService)
.addService(new AnotherReflectableServiceGrpc.AnotherReflectableServiceImplBase() {})
.build()
.start();
grpcCleanupRule.register(anotherServer);
ManagedChannel anotherChannel = grpcCleanupRule.register(
InProcessChannelBuilder.forName("proto-reflection-test-2").directExecutor().build());
ServerReflectionGrpc.ServerReflectionStub stub2 = ServerReflectionGrpc.newStub(anotherChannel);
ServerReflectionRequest request =
ServerReflectionRequest.newBuilder().setHost(TEST_HOST).setListServices("services").build();
StreamRecorder<ServerReflectionResponse> responseObserver = StreamRecorder.create();
StreamObserver<ServerReflectionRequest> requestObserver =
stub2.serverReflectionInfo(responseObserver);
requestObserver.onNext(request);
requestObserver.onCompleted();
List<ServiceResponse> response =
responseObserver.firstValue().get().getListServicesResponse().getServiceList();
assertEquals(new HashSet<>(
Arrays.asList(
ServiceResponse.newBuilder()
.setName("grpc.reflection.v1alpha.ServerReflection")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.AnotherReflectableService")
.build())),
new HashSet<>(response));
}
private void assertServiceResponseEquals(Set<ServiceResponse> goldenResponse) throws Exception {
ServerReflectionRequest request =
ServerReflectionRequest.newBuilder().setHost(TEST_HOST).setListServices("services").build();
StreamRecorder<ServerReflectionResponse> responseObserver = StreamRecorder.create();
StreamObserver<ServerReflectionRequest> requestObserver =
stub.serverReflectionInfo(responseObserver);
requestObserver.onNext(request);
requestObserver.onCompleted();
List<ServiceResponse> response =
responseObserver.firstValue().get().getListServicesResponse().getServiceList();
assertEquals(goldenResponse.size(), response.size());
assertEquals(goldenResponse, new HashSet<>(response));
}
@Test
public void listServices() throws Exception {
Set<ServiceResponse> originalServices =
new HashSet<ServiceResponse>(
Arrays.asList(
ServiceResponse.newBuilder()
.setName("grpc.reflection.v1alpha.ServerReflection")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.ReflectableService")
.build()));
assertServiceResponseEquals(originalServices);
handlerRegistry.addService(dynamicService);
assertServiceResponseEquals(
new HashSet<ServiceResponse>(
Arrays.asList(
ServiceResponse.newBuilder()
.setName("grpc.reflection.v1alpha.ServerReflection")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.ReflectableService")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.DynamicService")
.build())));
handlerRegistry.addService(anotherDynamicService);
assertServiceResponseEquals(
new HashSet<ServiceResponse>(
Arrays.asList(
ServiceResponse.newBuilder()
.setName("grpc.reflection.v1alpha.ServerReflection")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.ReflectableService")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.DynamicService")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.AnotherDynamicService")
.build())));
handlerRegistry.removeService(dynamicService);
assertServiceResponseEquals(
new HashSet<ServiceResponse>(
Arrays.asList(
ServiceResponse.newBuilder()
.setName("grpc.reflection.v1alpha.ServerReflection")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.ReflectableService")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.AnotherDynamicService")
.build())));
handlerRegistry.removeService(anotherDynamicService);
assertServiceResponseEquals(originalServices);
}
@Test
public void listServices() throws Exception {
Set<ServiceResponse> originalServices =
new HashSet<>(
Arrays.asList(
ServiceResponse.newBuilder()
.setName("grpc.reflection.v1alpha.ServerReflection")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.ReflectableService")
.build()));
assertServiceResponseEquals(originalServices);
handlerRegistry.addService(dynamicService);
assertServiceResponseEquals(
new HashSet<>(
Arrays.asList(
ServiceResponse.newBuilder()
.setName("grpc.reflection.v1alpha.ServerReflection")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.ReflectableService")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.DynamicService")
.build())));
handlerRegistry.addService(anotherDynamicService);
assertServiceResponseEquals(
new HashSet<>(
Arrays.asList(
ServiceResponse.newBuilder()
.setName("grpc.reflection.v1alpha.ServerReflection")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.ReflectableService")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.DynamicService")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.AnotherDynamicService")
.build())));
handlerRegistry.removeService(dynamicService);
assertServiceResponseEquals(
new HashSet<>(
Arrays.asList(
ServiceResponse.newBuilder()
.setName("grpc.reflection.v1alpha.ServerReflection")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.ReflectableService")
.build(),
ServiceResponse.newBuilder()
.setName("grpc.reflection.testing.AnotherDynamicService")
.build())));
handlerRegistry.removeService(anotherDynamicService);
assertServiceResponseEquals(originalServices);
}