From a1ec627639bcc4c0ddc54f42dee74a963fe469af Mon Sep 17 00:00:00 2001 From: laglangyue Date: Fri, 5 Apr 2024 22:29:19 +0800 Subject: [PATCH 1/3] enable GrpcInteropIoWithPekkoHttpJavaSpec --- .../pekko/grpc/interop/GrpcInteropSpec.scala | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/GrpcInteropSpec.scala b/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/GrpcInteropSpec.scala index 228ca289..290d6bd5 100644 --- a/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/GrpcInteropSpec.scala +++ b/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/GrpcInteropSpec.scala @@ -23,20 +23,20 @@ class GrpcInteropIoWithPekkoNettyJavaSpec extends GrpcInteropTests(Servers.IoGrp class GrpcInteropIoWithPekkoHttpScalaSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoHttp.Scala) class GrpcInteropIoWithPekkoHttpScalaWithSslContextSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoHttp.ScalaWithSslContext) -//class GrpcInteropIoWithPekkoHttpJavaSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoHttp.Java) +class GrpcInteropIoWithPekkoHttpJavaSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoHttp.Java) class GrpcInteropPekkoScalaWithIoSpec extends GrpcInteropTests(Servers.Pekko.Scala, Clients.IoGrpc) class GrpcInteropPekkoScalaWithPekkoNettyScalaSpec extends GrpcInteropTests(Servers.Pekko.Scala, Clients.PekkoNetty.Scala) class GrpcInteropPekkoScalaWithPekkoNettyJavaSpec extends GrpcInteropTests(Servers.Pekko.Scala, Clients.PekkoNetty.Java) class GrpcInteropPekkoScalaWithPekkoHttpScalaSpec extends GrpcInteropTests(Servers.Pekko.Scala, Clients.PekkoHttp.Scala) -//class GrpcInteropPekkoScalaWithPekkoHttpJavaSpec extends GrpcInteropTests(Servers.Pekko.Scala, Clients.PekkoHttp.Java) +class GrpcInteropPekkoScalaWithPekkoHttpJavaSpec extends GrpcInteropTests(Servers.Pekko.Scala, Clients.PekkoHttp.Java) class GrpcInteropPekkoJavaWithIoSpec extends GrpcInteropTests(Servers.Pekko.Java, Clients.IoGrpc) class GrpcInteropPekkoJavaWithPekkoNettyScalaSpec extends GrpcInteropTests(Servers.Pekko.Java, Clients.PekkoNetty.Scala) class GrpcInteropPekkoJavaWithPekkoNettyJavaSpec extends GrpcInteropTests(Servers.Pekko.Java, Clients.PekkoNetty.Java) class GrpcInteropPekkoJavaWithPekkoHttpScalaSpec extends GrpcInteropTests(Servers.Pekko.Java, Clients.PekkoHttp.Scala) -//class GrpcInteropPekkoJavaWithPekkoHttpJavaSpec extends GrpcInteropTests(Servers.Pekko.Java, Clients.PekkoHttp.Java) +class GrpcInteropPekkoJavaWithPekkoHttpJavaSpec extends GrpcInteropTests(Servers.Pekko.Java, Clients.PekkoHttp.Java) //--- Aliases @@ -57,7 +57,7 @@ object Clients { } object PekkoHttp { // FIXME: let's have Scala stable and we'll do Java later. -// val Java = PekkoHttpClientProviderJava$ + val Java = PekkoHttpClientProviderJava$ val Scala = new PekkoClientProviderScala("pekko-http", false) val ScalaWithSslContext = new PekkoClientProviderScala("pekko-http", true) } @@ -88,3 +88,9 @@ object PekkoNettyClientProviderJava$ extends PekkoClientProvider { def client = new PekkoGrpcClientJava((settings, sys) => new PekkoGrpcJavaClientTester(settings, sys)) } + +object PekkoHttpClientProviderJava$ extends PekkoClientProvider { + val label: String = "pekko-grpc java client tester" + + def client = new PekkoGrpcClientJava((settings, sys) => new PekkoGrpcJavaClientTester(settings, sys)) +} \ No newline at end of file From 16f8011adde80843d2d0cc2763c1a00aa3b676ba Mon Sep 17 00:00:00 2001 From: tangjiafu Date: Sat, 6 Apr 2024 14:31:57 +0800 Subject: [PATCH 2/3] enable GrpcInteropIoWithIoSpec with PekkoHttp to work for javaClientTest --- .../interop/PekkoGrpcJavaClientTester.java | 60 +++++++++++++++---- .../pekko/grpc/interop/GrpcInteropSpec.scala | 25 ++++---- 2 files changed, 64 insertions(+), 21 deletions(-) diff --git a/interop-tests/src/test/java/org/apache/pekko/grpc/interop/PekkoGrpcJavaClientTester.java b/interop-tests/src/test/java/org/apache/pekko/grpc/interop/PekkoGrpcJavaClientTester.java index 83f773c3..5fa20b8f 100644 --- a/interop-tests/src/test/java/org/apache/pekko/grpc/interop/PekkoGrpcJavaClientTester.java +++ b/interop-tests/src/test/java/org/apache/pekko/grpc/interop/PekkoGrpcJavaClientTester.java @@ -13,6 +13,19 @@ package org.apache.pekko.grpc.interop; +import org.apache.pekko.actor.ActorSystem; +import org.apache.pekko.grpc.GrpcClientSettings; +import org.apache.pekko.grpc.GrpcResponseMetadata; +import org.apache.pekko.grpc.GrpcSingleResponse; +import org.apache.pekko.grpc.SSLContextUtils; +import org.apache.pekko.grpc.javadsl.Metadata; +import org.apache.pekko.japi.Pair; +import org.apache.pekko.stream.Materializer; +import org.apache.pekko.stream.SystemMaterializer; +import org.apache.pekko.stream.javadsl.Keep; +import org.apache.pekko.stream.javadsl.Sink; +import org.apache.pekko.stream.javadsl.Source; +import org.junit.Assert; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; @@ -25,12 +38,23 @@ import io.grpc.testing.integration.UnimplementedServiceClient; import io.grpc.testing.integration2.ClientTester; import io.grpc.testing.integration2.Settings; + import java.io.InputStream; + import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; + +import scala.concurrent.ExecutionContext; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import org.apache.pekko.actor.ActorSystem; import org.apache.pekko.grpc.GrpcClientSettings; import org.apache.pekko.grpc.GrpcResponseMetadata; @@ -47,37 +71,53 @@ import scala.concurrent.ExecutionContext; /** - * ClientTester implementation that uses the generated pekko-grpc Java client to exercise a server - * under test. - * - *

Essentially porting the client code from [[io.grpc.testing.integration.AbstractInteropTest]] - * against our Scala API's + * ClientTester implementation that uses the generated pekko-grpc Java client to exercise a server under test. + *

+ * Essentially porting the client code from [[io.grpc.testing.integration.AbstractInteropTest]] against our Scala API's */ public class PekkoGrpcJavaClientTester implements ClientTester { + private final Settings settings; private final Materializer mat; private final ExecutionContext ec; private final ActorSystem as; + private final String backend; + private final Boolean testWithSslContext; private TestServiceClient client; private UnimplementedServiceClient clientUnimplementedService; private static int AWAIT_TIME_SECONDS = 3; - public PekkoGrpcJavaClientTester(Settings settings, ActorSystem sys) { + public PekkoGrpcJavaClientTester(Settings settings, ActorSystem sys, String backend, Boolean testWithSslContext) { this.settings = settings; this.mat = SystemMaterializer.get(sys).materializer(); this.as = sys; + this.backend = backend; + this.testWithSslContext = testWithSslContext; this.ec = sys.dispatcher(); } @Override public void setUp() { - final GrpcClientSettings grpcSettings = - GrpcClientSettings.connectToServiceAt(settings.serverHost(), settings.serverPort(), as) + TrustManager trustManager = SSLContextUtils.trustManagerFromResource("/certs/ca.pem"); + GrpcClientSettings grpcSettings = + GrpcClientSettings + .connectToServiceAt(settings.serverHost(), settings.serverPort(), as) + .withBackend(backend) .withOverrideAuthority(settings.serverHostOverride()) - .withTls(settings.useTls()) - .withTrustManager(SSLContextUtils.trustManagerFromResource("/certs/ca.pem")); + .withTls(settings.useTls()); + try { + if (testWithSslContext) { + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, new TrustManager[]{trustManager}, null); + grpcSettings = grpcSettings.withSslContext(sslContext); + } else { + grpcSettings = grpcSettings.withTrustManager(trustManager); + } + } catch (NoSuchAlgorithmException | KeyManagementException e) { + throw new RuntimeException(e); + } client = TestServiceClient.create(grpcSettings, as); clientUnimplementedService = UnimplementedServiceClient.create(grpcSettings, as); } diff --git a/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/GrpcInteropSpec.scala b/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/GrpcInteropSpec.scala index 290d6bd5..577f1252 100644 --- a/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/GrpcInteropSpec.scala +++ b/interop-tests/src/test/scala/org/apache/pekko/grpc/interop/GrpcInteropSpec.scala @@ -16,16 +16,23 @@ package org.apache.pekko.grpc.interop import io.grpc.testing.integration.TestServiceHandlerFactory class GrpcInteropIoWithIoSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.IoGrpc) + class GrpcInteropIoWithPekkoNettyScalaSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoNetty.Scala) class GrpcInteropIoWithPekkoNettyScalaWithSslContextSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoNetty.ScalaWithSslContext) class GrpcInteropIoWithPekkoNettyJavaSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoNetty.Java) +class GrpcInteropIoWithPekkoNettyJavaWithSslContextSpec + extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoNetty.JavaWithSslContext) + class GrpcInteropIoWithPekkoHttpScalaSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoHttp.Scala) class GrpcInteropIoWithPekkoHttpScalaWithSslContextSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoHttp.ScalaWithSslContext) class GrpcInteropIoWithPekkoHttpJavaSpec extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoHttp.Java) +class GrpcInteropIoWithPekkoHttpJavaWithSslContextSpec + extends GrpcInteropTests(Servers.IoGrpc, Clients.PekkoHttp.JavaWithSslContext) class GrpcInteropPekkoScalaWithIoSpec extends GrpcInteropTests(Servers.Pekko.Scala, Clients.IoGrpc) + class GrpcInteropPekkoScalaWithPekkoNettyScalaSpec extends GrpcInteropTests(Servers.Pekko.Scala, Clients.PekkoNetty.Scala) class GrpcInteropPekkoScalaWithPekkoNettyJavaSpec extends GrpcInteropTests(Servers.Pekko.Scala, Clients.PekkoNetty.Java) @@ -51,15 +58,16 @@ object Servers { object Clients { val IoGrpc = IoGrpcJavaClientProvider object PekkoNetty { - val Java = PekkoNettyClientProviderJava$ + val Java = new PekkoClientProviderJava("netty", false) val Scala = new PekkoClientProviderScala("netty", false) val ScalaWithSslContext = new PekkoClientProviderScala("netty", true) + val JavaWithSslContext = new PekkoClientProviderJava("netty", true) } object PekkoHttp { - // FIXME: let's have Scala stable and we'll do Java later. - val Java = PekkoHttpClientProviderJava$ + val Java = new PekkoClientProviderJava("pekko-http", false) val Scala = new PekkoClientProviderScala("pekko-http", false) val ScalaWithSslContext = new PekkoClientProviderScala("pekko-http", true) + val JavaWithSslContext = new PekkoClientProviderJava("pekko-http", true) } } @@ -83,14 +91,9 @@ class PekkoClientProviderScala(backend: String, testWithSslContext: Boolean) ext implicit sys => new PekkoGrpcScalaClientTester(settings, backend, testWithSslContext)) } -object PekkoNettyClientProviderJava$ extends PekkoClientProvider { +class PekkoClientProviderJava(backend: String, testWithSslContext: Boolean) extends PekkoClientProvider { val label: String = "pekko-grpc java client tester" - def client = new PekkoGrpcClientJava((settings, sys) => new PekkoGrpcJavaClientTester(settings, sys)) + def client = new PekkoGrpcClientJava((settings, sys) => + new PekkoGrpcJavaClientTester(settings, sys, backend, testWithSslContext)) } - -object PekkoHttpClientProviderJava$ extends PekkoClientProvider { - val label: String = "pekko-grpc java client tester" - - def client = new PekkoGrpcClientJava((settings, sys) => new PekkoGrpcJavaClientTester(settings, sys)) -} \ No newline at end of file From c3fe462470725ae44a1d9ab43a7adae673c2735e Mon Sep 17 00:00:00 2001 From: tangjiafu Date: Sun, 7 Apr 2024 11:26:48 +0800 Subject: [PATCH 3/3] format --- .../interop/PekkoGrpcJavaClientTester.java | 46 ++++++------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/interop-tests/src/test/java/org/apache/pekko/grpc/interop/PekkoGrpcJavaClientTester.java b/interop-tests/src/test/java/org/apache/pekko/grpc/interop/PekkoGrpcJavaClientTester.java index 5fa20b8f..3dc24f36 100644 --- a/interop-tests/src/test/java/org/apache/pekko/grpc/interop/PekkoGrpcJavaClientTester.java +++ b/interop-tests/src/test/java/org/apache/pekko/grpc/interop/PekkoGrpcJavaClientTester.java @@ -13,19 +13,6 @@ package org.apache.pekko.grpc.interop; -import org.apache.pekko.actor.ActorSystem; -import org.apache.pekko.grpc.GrpcClientSettings; -import org.apache.pekko.grpc.GrpcResponseMetadata; -import org.apache.pekko.grpc.GrpcSingleResponse; -import org.apache.pekko.grpc.SSLContextUtils; -import org.apache.pekko.grpc.javadsl.Metadata; -import org.apache.pekko.japi.Pair; -import org.apache.pekko.stream.Materializer; -import org.apache.pekko.stream.SystemMaterializer; -import org.apache.pekko.stream.javadsl.Keep; -import org.apache.pekko.stream.javadsl.Sink; -import org.apache.pekko.stream.javadsl.Source; -import org.junit.Assert; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; @@ -34,27 +21,22 @@ import io.grpc.StatusRuntimeException; import io.grpc.testing.integration.EmptyProtos; import io.grpc.testing.integration.Messages; +import io.grpc.testing.integration.Messages.SimpleResponse; +import io.grpc.testing.integration.Messages.StreamingOutputCallResponse; import io.grpc.testing.integration.TestServiceClient; import io.grpc.testing.integration.UnimplementedServiceClient; import io.grpc.testing.integration2.ClientTester; import io.grpc.testing.integration2.Settings; - import java.io.InputStream; - +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; - -import scala.concurrent.ExecutionContext; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; import org.apache.pekko.actor.ActorSystem; import org.apache.pekko.grpc.GrpcClientSettings; import org.apache.pekko.grpc.GrpcResponseMetadata; @@ -71,9 +53,11 @@ import scala.concurrent.ExecutionContext; /** - * ClientTester implementation that uses the generated pekko-grpc Java client to exercise a server under test. - *

- * Essentially porting the client code from [[io.grpc.testing.integration.AbstractInteropTest]] against our Scala API's + * ClientTester implementation that uses the generated pekko-grpc Java client to exercise a server + * under test. + * + *

Essentially porting the client code from [[io.grpc.testing.integration.AbstractInteropTest]] + * against our Scala API's */ public class PekkoGrpcJavaClientTester implements ClientTester { @@ -89,7 +73,8 @@ public class PekkoGrpcJavaClientTester implements ClientTester { private static int AWAIT_TIME_SECONDS = 3; - public PekkoGrpcJavaClientTester(Settings settings, ActorSystem sys, String backend, Boolean testWithSslContext) { + public PekkoGrpcJavaClientTester( + Settings settings, ActorSystem sys, String backend, Boolean testWithSslContext) { this.settings = settings; this.mat = SystemMaterializer.get(sys).materializer(); this.as = sys; @@ -102,15 +87,14 @@ public PekkoGrpcJavaClientTester(Settings settings, ActorSystem sys, String back public void setUp() { TrustManager trustManager = SSLContextUtils.trustManagerFromResource("/certs/ca.pem"); GrpcClientSettings grpcSettings = - GrpcClientSettings - .connectToServiceAt(settings.serverHost(), settings.serverPort(), as) + GrpcClientSettings.connectToServiceAt(settings.serverHost(), settings.serverPort(), as) .withBackend(backend) .withOverrideAuthority(settings.serverHostOverride()) .withTls(settings.useTls()); try { if (testWithSslContext) { SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, new TrustManager[]{trustManager}, null); + sslContext.init(null, new TrustManager[] {trustManager}, null); grpcSettings = grpcSettings.withSslContext(sslContext); } else { grpcSettings = grpcSettings.withTrustManager(trustManager); @@ -236,7 +220,7 @@ public void serverStreaming() throws Exception { .setPayload(Messages.Payload.newBuilder().setBody(ByteString.copyFrom(new byte[58979]))) .build()); - final List response = + final List response = client .streamingOutputCall(request) .toMat(Sink.seq(), Keep.right()) @@ -389,7 +373,7 @@ public void customMetadata() throws Exception { // unary call org.apache.pekko.util.ByteString binaryValue = org.apache.pekko.util.ByteString.fromInts(0xababab); - CompletionStage> unaryResponseCs = + CompletionStage> unaryResponseCs = client .unaryCall() .addHeader("x-grpc-test-echo-initial", "test_initial_metadata_value")