@Override public Void answer(InvocationOnMock invocation) { Color color = invocation.getArgument(0); StreamObserver<Money> observer = invocation.getArgument(1); observer.onNext( Money.newBuilder() .setCurrencyCode("USD") .setUnits((long) (color.getRed() * 255)) .build()); observer.onCompleted(); return null; } })
@Test public void testClientStreaming() throws Exception { ClientStreamingCallable<Color, Money> streamingCallable = GrpcCallableFactory.createClientStreamingCallable( GrpcCallSettings.create(METHOD_CLIENT_STREAMING_RECOGNIZE), null, clientContext); CountDownLatch latch = new CountDownLatch(1); MoneyObserver moneyObserver = new MoneyObserver(latch); Color request = Color.newBuilder().setRed(0.5f).build(); ApiStreamObserver<Color> requestObserver = streamingCallable.clientStreamingCall(moneyObserver); requestObserver.onNext(request); requestObserver.onCompleted(); latch.await(20, TimeUnit.SECONDS); assertThat(moneyObserver.error).isNull(); Money expected = Money.newBuilder().setCurrencyCode("USD").setUnits(127).build(); assertThat(moneyObserver.response).isEqualTo(expected); assertThat(moneyObserver.completed).isTrue(); }
@Test public void testBidiStreaming() throws Exception { BidiStreamingCallable<Color, Money> streamingCallable = GrpcCallableFactory.createBidiStreamingCallable( GrpcCallSettings.create(METHOD_STREAMING_RECOGNIZE), null, clientContext); CountDownLatch latch = new CountDownLatch(1); GrpcDirectServerStreamingCallableTest.MoneyObserver moneyObserver = new GrpcDirectServerStreamingCallableTest.MoneyObserver(true, latch); Color request = Color.newBuilder().setRed(0.5f).build(); ClientStream<Color> stream = streamingCallable.splitCall(moneyObserver); stream.send(request); stream.closeSend(); latch.await(20, TimeUnit.SECONDS); assertThat(moneyObserver.error).isNull(); Money expected = Money.newBuilder().setCurrencyCode("USD").setUnits(127).build(); assertThat(moneyObserver.response).isEqualTo(expected); assertThat(moneyObserver.completed).isTrue(); }
@Test public void testMetadataTransformer_mismatchedTypes() { thrown.expect(ApiException.class); thrown.expectMessage("Failed to unpack object"); MetadataTransformer<Money> transformer = MetadataTransformer.create(Money.class); Money inputMoney = Money.newBuilder().setCurrencyCode("USD").build(); Status status = Status.newBuilder().setCode(Code.OK.value()).build(); OperationSnapshot operationSnapshot = GrpcOperationSnapshot.create( Operation.newBuilder() .setMetadata(Any.pack(Color.getDefaultInstance())) .setError(status) .build()); Truth.assertThat(transformer.apply(operationSnapshot)).isEqualTo(inputMoney); } }
@Test public void testResponseTransformer_mismatchedTypes() { thrown.expect(ApiException.class); thrown.expectMessage("Failed to unpack object"); ResponseTransformer<Money> transformer = ResponseTransformer.create(Money.class); Money inputMoney = Money.newBuilder().setCurrencyCode("USD").build(); Status status = Status.newBuilder().setCode(Code.OK.value()).build(); OperationSnapshot operationSnapshot = GrpcOperationSnapshot.create( Operation.newBuilder() .setResponse(Any.pack(Color.getDefaultInstance())) .setError(status) .build()); Truth.assertThat(transformer.apply(operationSnapshot)).isEqualTo(inputMoney); }
private Money getMoney(String currencyCode) { return Money.newBuilder().setCurrencyCode(currencyCode).build(); }
@Test public void testBlockingServerStreaming() throws Exception { Color request = Color.newBuilder().setRed(0.5f).build(); ServerStream<Money> response = streamingCallable.call(request); List<Money> responseData = Lists.newArrayList(response); Money expected = Money.newBuilder().setCurrencyCode("USD").setUnits(127).build(); Truth.assertThat(responseData).containsExactly(expected); }
@Test public void testResponseTransformer_exception() { thrown.expect(UnavailableException.class); ResponseTransformer<Money> transformer = ResponseTransformer.create(Money.class); Money inputMoney = Money.newBuilder().setCurrencyCode("USD").build(); Status status = Status.newBuilder().setCode(Code.UNAVAILABLE.value()).build(); OperationSnapshot operationSnapshot = GrpcOperationSnapshot.create( Operation.newBuilder().setResponse(Any.pack(inputMoney)).setError(status).build()); Truth.assertThat(transformer.apply(operationSnapshot)).isEqualTo(inputMoney); }
@Test public void testResponseTransformer() { ResponseTransformer<Money> transformer = ResponseTransformer.create(Money.class); Money inputMoney = Money.newBuilder().setCurrencyCode("USD").build(); OperationSnapshot operationSnapshot = GrpcOperationSnapshot.create( Operation.newBuilder().setResponse(Any.pack(inputMoney)).build()); Truth.assertThat(transformer.apply(operationSnapshot)).isEqualTo(inputMoney); }
private static Money convert(Color color) { Money result = Money.newBuilder().setCurrencyCode("USD").setUnits((long) (color.getRed() * 255)).build(); return result; }
@Test public void testMetadataTransformer() { MetadataTransformer<Money> transformer = MetadataTransformer.create(Money.class); Money inputMoney = Money.newBuilder().setCurrencyCode("USD").build(); OperationSnapshot operationSnapshot = GrpcOperationSnapshot.create( Operation.newBuilder().setMetadata(Any.pack(inputMoney)).build()); Truth.assertThat(transformer.apply(operationSnapshot)).isEqualTo(inputMoney); }