Browse Source

Improve EdgeGrpcSslTest: use port 0 and Awaitility

- Use forPort(0) instead of TestSocketUtils for random port
- Replace manual poll loop with Awaitility

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
pull/15205/head
Sergey Matvienko 7 months ago
parent
commit
9e19d0818e
  1. 31
      application/src/test/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSslTest.java

31
application/src/test/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSslTest.java

@ -31,7 +31,6 @@ import org.bouncycastle.openssl.jcajce.JcePEMEncryptorBuilder;
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.test.util.TestSocketUtils;
import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.transport.config.ssl.PemSslCredentials; import org.thingsboard.server.common.transport.config.ssl.PemSslCredentials;
import org.thingsboard.server.gen.edge.v1.EdgeRpcServiceGrpc; import org.thingsboard.server.gen.edge.v1.EdgeRpcServiceGrpc;
@ -53,6 +52,7 @@ import java.util.concurrent.TimeUnit;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.awaitility.Awaitility.await;
/** /**
* Tests for Edge gRPC SSL setup using PemSslCredentials. * Tests for Edge gRPC SSL setup using PemSslCredentials.
@ -145,8 +145,7 @@ class EdgeGrpcSslTest {
SslContext sslContext = GrpcSslContexts.configure( SslContext sslContext = GrpcSslContexts.configure(
SslContextBuilder.forServer(credentials.createKeyManagerFactory())).build(); SslContextBuilder.forServer(credentials.createKeyManagerFactory())).build();
int port = TestSocketUtils.findAvailableTcpPort(); return NettyServerBuilder.forPort(0)
return NettyServerBuilder.forPort(port)
.sslContext(sslContext) .sslContext(sslContext)
.addService(new EdgeRpcServiceGrpc.EdgeRpcServiceImplBase() {}) .addService(new EdgeRpcServiceGrpc.EdgeRpcServiceImplBase() {})
.build() .build()
@ -163,22 +162,16 @@ class EdgeGrpcSslTest {
.sslContext(clientSsl) .sslContext(clientSsl)
.build(); .build();
// Trigger connection and wait for READY state channel.getState(true); // trigger connection attempt
channel.getState(true); await().atMost(5, TimeUnit.SECONDS)
long deadline = System.currentTimeMillis() + 5_000; .pollInterval(50, TimeUnit.MILLISECONDS)
while (System.currentTimeMillis() < deadline) { .untilAsserted(() -> {
var state = channel.getState(false); var state = channel.getState(false);
if (state == io.grpc.ConnectivityState.READY) { if (state == io.grpc.ConnectivityState.TRANSIENT_FAILURE) {
break; throw new AssertionError("TLS handshake failed: channel in TRANSIENT_FAILURE");
} }
if (state == io.grpc.ConnectivityState.TRANSIENT_FAILURE) { assertThat(state).isEqualTo(io.grpc.ConnectivityState.READY);
throw new AssertionError("TLS handshake failed: channel in TRANSIENT_FAILURE"); });
}
Thread.sleep(50);
}
assertThat(channel.getState(false))
.as("Client should connect via TLS")
.isEqualTo(io.grpc.ConnectivityState.READY);
} }
// --- Cert/key generation --- // --- Cert/key generation ---

Loading…
Cancel
Save