diff --git a/server/build.gradle b/server/build.gradle index 2a27e653b4453..5abe695351111 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -146,18 +146,30 @@ if (buildParams.isSnapshotBuild() == false) { tasks.named("test").configure { systemProperty 'es.insecure_network_trace_enabled', 'true' + filter { + excludeTestsMatching("*.TransportServiceHandshakeTests.testAcceptsMismatchedServerlessBuildHash") + } excludes << '**/IndexSettingsOverrideTests.class' } -TaskProvider indexSettingsOverrideTest = tasks.register("indexSettingsOverrideTest", Test) { +// There are tests rely on system properties to be configured differently. They must run in a separate test job +// since the default does not work for them and configuring the system properties inside the test class/method +// is too late because fields based on the system properties are often initialized statically. +TaskProvider systemPropertiesOverrideTest = tasks.register("systemPropertiesOverrideTest", Test) { include '**/IndexSettingsOverrideTests.class' + include '**/TransportServiceHandshakeTests.class' + filter { + includeTestsMatching("*.TransportServiceHandshakeTests.testAcceptsMismatchedServerlessBuildHash") + includeTestsMatching("*.IndexSettingsOverrideTests.*") + } systemProperty 'es.stateless.allow.index.refresh_interval.override', 'true' + systemProperty 'es.serverless_transport', 'true' classpath = sourceSets.test.runtimeClasspath testClassesDirs = sourceSets.test.output.classesDirs } tasks.named("check").configure { - dependsOn(indexSettingsOverrideTest) + dependsOn(systemPropertiesOverrideTest) } tasks.named("thirdPartyAudit").configure { diff --git a/server/src/test/java/org/elasticsearch/transport/TransportServiceHandshakeTests.java b/server/src/test/java/org/elasticsearch/transport/TransportServiceHandshakeTests.java index d663e2d4c354d..a0d7de67c5092 100644 --- a/server/src/test/java/org/elasticsearch/transport/TransportServiceHandshakeTests.java +++ b/server/src/test/java/org/elasticsearch/transport/TransportServiceHandshakeTests.java @@ -22,7 +22,6 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.PageCacheRecycler; import org.elasticsearch.core.Releasable; -import org.elasticsearch.core.SuppressForbidden; import org.elasticsearch.core.TimeValue; import org.elasticsearch.index.IndexVersion; import org.elasticsearch.index.IndexVersions; @@ -373,40 +372,32 @@ public void testRejectsMismatchedBuildHash() { assertFalse(transportServiceA.nodeConnected(discoveryNode)); } - @SuppressForbidden(reason = "Sets property for testing") public void testAcceptsMismatchedServerlessBuildHash() { assumeTrue("Current build needs to be a snapshot", Build.current().isSnapshot()); - assumeTrue("Security manager needs to be disabled", System.getSecurityManager() == null); - System.setProperty(TransportService.SERVERLESS_TRANSPORT_SYSTEM_PROPERTY, Boolean.TRUE.toString()); // security manager blocks - // this - try { - final DisruptingTransportInterceptor transportInterceptorA = new DisruptingTransportInterceptor(); - final DisruptingTransportInterceptor transportInterceptorB = new DisruptingTransportInterceptor(); - transportInterceptorA.setModifyBuildHash(true); - transportInterceptorB.setModifyBuildHash(true); - final Settings settings = Settings.builder() - .put("cluster.name", "a") - .put(IGNORE_DESERIALIZATION_ERRORS_SETTING.getKey(), true) // suppress assertions to test production error-handling - .build(); - final TransportService transportServiceA = startServices( - "TS_A", - settings, - TransportVersion.current(), - VersionInformation.CURRENT, - transportInterceptorA - ); - final TransportService transportServiceB = startServices( - "TS_B", - settings, - TransportVersion.current(), - VersionInformation.CURRENT, - transportInterceptorB - ); - AbstractSimpleTransportTestCase.connectToNode(transportServiceA, transportServiceB.getLocalNode(), TestProfiles.LIGHT_PROFILE); - assertTrue(transportServiceA.nodeConnected(transportServiceB.getLocalNode())); - } finally { - System.clearProperty(TransportService.SERVERLESS_TRANSPORT_SYSTEM_PROPERTY); - } + final DisruptingTransportInterceptor transportInterceptorA = new DisruptingTransportInterceptor(); + final DisruptingTransportInterceptor transportInterceptorB = new DisruptingTransportInterceptor(); + transportInterceptorA.setModifyBuildHash(true); + transportInterceptorB.setModifyBuildHash(true); + final Settings settings = Settings.builder() + .put("cluster.name", "a") + .put(IGNORE_DESERIALIZATION_ERRORS_SETTING.getKey(), true) // suppress assertions to test production error-handling + .build(); + final TransportService transportServiceA = startServices( + "TS_A", + settings, + TransportVersion.current(), + VersionInformation.CURRENT, + transportInterceptorA + ); + final TransportService transportServiceB = startServices( + "TS_B", + settings, + TransportVersion.current(), + VersionInformation.CURRENT, + transportInterceptorB + ); + AbstractSimpleTransportTestCase.connectToNode(transportServiceA, transportServiceB.getLocalNode(), TestProfiles.LIGHT_PROFILE); + assertTrue(transportServiceA.nodeConnected(transportServiceB.getLocalNode())); } public void testAcceptsMismatchedBuildHashFromDifferentVersion() {