瀏覽代碼

Separate out Version and TransportVersion in TransportTests (#94022)

Simon Cooper 2 年之前
父節點
當前提交
c9b2810da4

+ 15 - 5
modules/transport-netty4/src/test/java/org/elasticsearch/transport/netty4/SimpleNetty4TransportTests.java

@@ -107,8 +107,8 @@ public class SimpleNetty4TransportTests extends AbstractSimpleTransportTestCase
     public void testDefaultKeepAliveSettings() throws IOException {
         assumeTrue("setting default keepalive options not supported on this platform", (IOUtils.LINUX || IOUtils.MAC_OS_X));
         try (
-            MockTransportService serviceC = buildService("TS_C", Version.CURRENT, Settings.EMPTY);
-            MockTransportService serviceD = buildService("TS_D", Version.CURRENT, Settings.EMPTY)
+            MockTransportService serviceC = buildService("TS_C", Version.CURRENT, TransportVersion.CURRENT, Settings.EMPTY);
+            MockTransportService serviceD = buildService("TS_D", Version.CURRENT, TransportVersion.CURRENT, Settings.EMPTY)
         ) {
 
             try (Transport.Connection connection = openConnection(serviceC, serviceD.getLocalDiscoNode(), TestProfiles.LIGHT_PROFILE)) {
@@ -151,8 +151,8 @@ public class SimpleNetty4TransportTests extends AbstractSimpleTransportTestCase
         );
 
         try (
-            MockTransportService serviceC = buildService("TS_C", Version.CURRENT, Settings.EMPTY);
-            MockTransportService serviceD = buildService("TS_D", Version.CURRENT, Settings.EMPTY)
+            MockTransportService serviceC = buildService("TS_C", Version.CURRENT, TransportVersion.CURRENT, Settings.EMPTY);
+            MockTransportService serviceD = buildService("TS_D", Version.CURRENT, TransportVersion.CURRENT, Settings.EMPTY)
         ) {
 
             try (Transport.Connection connection = openConnection(serviceC, serviceD.getLocalDiscoNode(), connectionProfile)) {
@@ -230,7 +230,17 @@ public class SimpleNetty4TransportTests extends AbstractSimpleTransportTestCase
                 TransportRequestOptions.Type.STATE
             );
             // connection with one connection and a large timeout -- should consume the one spot in the backlog queue
-            try (TransportService service = buildService("TS_TPC", Version.CURRENT, null, Settings.EMPTY, true, false)) {
+            try (
+                TransportService service = buildService(
+                    "TS_TPC",
+                    Version.CURRENT,
+                    TransportVersion.CURRENT,
+                    null,
+                    Settings.EMPTY,
+                    true,
+                    false
+                )
+            ) {
                 IOUtils.close(openConnection(service, first, builder.build()));
                 builder.setConnectTimeout(TimeValue.timeValueMillis(1));
                 final ConnectionProfile profile = builder.build();

+ 81 - 45
test/framework/src/main/java/org/elasticsearch/transport/AbstractSimpleTransportTestCase.java

@@ -46,7 +46,7 @@ import org.elasticsearch.node.Node;
 import org.elasticsearch.tasks.Task;
 import org.elasticsearch.test.ESTestCase;
 import org.elasticsearch.test.MockLogAppender;
-import org.elasticsearch.test.VersionUtils;
+import org.elasticsearch.test.TransportVersionUtils;
 import org.elasticsearch.test.junit.annotations.TestLogging;
 import org.elasticsearch.test.transport.MockTransportService;
 import org.elasticsearch.test.transport.StubbableTransport;
@@ -110,14 +110,15 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
 
     protected ThreadPool threadPool;
     // we use always a non-alpha or beta version here otherwise minimumCompatibilityVersion will be different for the two used versions
-    private static final Version CURRENT_VERSION = Version.fromString(String.valueOf(Version.CURRENT.major) + ".0.0");
-    protected static final Version version0 = CURRENT_VERSION;
+    protected static final Version version0 = Version.fromString(String.valueOf(Version.CURRENT.major) + ".0.0");
+    protected static final TransportVersion transportVersion0 = TransportVersion.CURRENT;
 
     protected volatile DiscoveryNode nodeA;
     protected volatile MockTransportService serviceA;
     protected ClusterSettings clusterSettingsA;
 
-    protected static final Version version1 = Version.fromId(CURRENT_VERSION.id + 1);
+    protected static final Version version1 = Version.fromId(version0.id + 1);
+    protected static final TransportVersion transportVersion1 = TransportVersion.fromId(transportVersion0.id + 1);
     protected volatile DiscoveryNode nodeB;
     protected volatile MockTransportService serviceB;
 
@@ -158,9 +159,11 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
 
         final Settings connectionSettings = connectionSettingsBuilder.build();
 
-        serviceA = buildService("TS_A", version0, clusterSettingsA, connectionSettings); // this one supports dynamic tracer updates
+        // this one supports dynamic tracer updates
+        serviceA = buildService("TS_A", version0, transportVersion0, clusterSettingsA, connectionSettings);
         nodeA = serviceA.getLocalNode();
-        serviceB = buildService("TS_B", version1, null, connectionSettings); // this one doesn't support dynamic tracer updates
+        // this one doesn't support dynamic tracer updates
+        serviceB = buildService("TS_B", version1, transportVersion1, null, connectionSettings);
         nodeB = serviceB.getLocalNode();
         // wait till all nodes are properly connected and the event has been sent, so tests in this class
         // will not get this callback called on the connections done in this setup
@@ -190,8 +193,9 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     private MockTransportService buildService(
-        final String name,
-        final Version version,
+        String name,
+        Version version,
+        TransportVersion transportVersion,
         @Nullable ClusterSettings clusterSettings,
         Settings settings,
         boolean acceptRequests,
@@ -207,7 +211,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
         if (clusterSettings == null) {
             clusterSettings = new ClusterSettings(updatedSettings, getSupportedSettings());
         }
-        Transport transport = build(updatedSettings, version.transportVersion, clusterSettings, doHandshake);
+        Transport transport = build(updatedSettings, transportVersion, clusterSettings, doHandshake);
         MockTransportService service = MockTransportService.createNewService(
             updatedSettings,
             transport,
@@ -225,27 +229,38 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     protected MockTransportService buildService(
-        final String name,
-        final Version version,
+        String name,
+        Version version,
+        TransportVersion transportVersion,
         @Nullable ClusterSettings clusterSettings,
         Settings settings,
         boolean acceptRequests,
         boolean doHandshake
     ) {
-        return buildService(name, version, clusterSettings, settings, acceptRequests, doHandshake, NOOP_TRANSPORT_INTERCEPTOR);
+        return buildService(
+            name,
+            version,
+            transportVersion,
+            clusterSettings,
+            settings,
+            acceptRequests,
+            doHandshake,
+            NOOP_TRANSPORT_INTERCEPTOR
+        );
     }
 
-    protected MockTransportService buildService(final String name, final Version version, Settings settings) {
-        return buildService(name, version, null, settings);
+    protected MockTransportService buildService(String name, Version version, TransportVersion transportVersion, Settings settings) {
+        return buildService(name, version, transportVersion, null, settings);
     }
 
     protected MockTransportService buildService(
-        final String name,
-        final Version version,
+        String name,
+        Version version,
+        TransportVersion transportVersion,
         ClusterSettings clusterSettings,
         Settings settings
     ) {
-        return buildService(name, version, clusterSettings, settings, true, true);
+        return buildService(name, version, transportVersion, clusterSettings, settings, true, true);
     }
 
     @Override
@@ -598,7 +613,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     public void testVoidMessageCompressed() throws Exception {
-        try (MockTransportService serviceC = buildService("TS_C", CURRENT_VERSION, Settings.EMPTY)) {
+        try (MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, Settings.EMPTY)) {
             serviceA.registerRequestHandler(
                 "internal:sayHello",
                 ThreadPool.Names.GENERIC,
@@ -654,7 +669,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     public void testHelloWorldCompressed() throws Exception {
-        try (MockTransportService serviceC = buildService("TS_C", CURRENT_VERSION, Settings.EMPTY)) {
+        try (MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, Settings.EMPTY)) {
             serviceA.registerRequestHandler(
                 "internal:sayHello",
                 ThreadPool.Names.GENERIC,
@@ -715,7 +730,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     public void testIndexingDataCompression() throws Exception {
-        try (MockTransportService serviceC = buildService("TS_C", CURRENT_VERSION, Settings.EMPTY)) {
+        try (MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, Settings.EMPTY)) {
             String component = "cccccccccooooooooooooooommmmmmmmmmmppppppppppprrrrrrrreeeeeeeeeessssssssiiiiiiiiiibbbbbbbbllllllllleeeeee";
             String text = component.repeat(30);
             TransportRequestHandler<StringMessageRequest> handler = (request, channel, task) -> {
@@ -964,7 +979,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
             if (i % 3 == 0) {
                 // simulate restart of nodeB
                 serviceB.close();
-                MockTransportService newService = buildService("TS_B_" + i, version1, Settings.EMPTY);
+                MockTransportService newService = buildService("TS_B_" + i, version1, transportVersion1, Settings.EMPTY);
                 newService.registerRequestHandler("internal:test", ThreadPool.Names.SAME, TestRequest::new, ignoringRequestHandler);
                 serviceB = newService;
                 nodeB = newService.getLocalDiscoNode();
@@ -1467,7 +1482,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
 
         Version1Request(StreamInput in) throws IOException {
             super(in);
-            if (in.getTransportVersion().onOrAfter(version1.transportVersion)) {
+            if (in.getTransportVersion().onOrAfter(transportVersion1)) {
                 value2 = in.readInt();
             }
         }
@@ -1475,7 +1490,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
         @Override
         public void writeTo(StreamOutput out) throws IOException {
             super.writeTo(out);
-            if (out.getTransportVersion().onOrAfter(version1.transportVersion)) {
+            if (out.getTransportVersion().onOrAfter(transportVersion1)) {
                 out.writeInt(value2);
             }
         }
@@ -1510,7 +1525,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
 
         Version1Response(StreamInput in) throws IOException {
             super(in);
-            if (in.getTransportVersion().onOrAfter(version1.transportVersion)) {
+            if (in.getTransportVersion().onOrAfter(transportVersion1)) {
                 value2 = in.readInt();
             } else {
                 value2 = 0;
@@ -1520,7 +1535,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
         @Override
         public void writeTo(StreamOutput out) throws IOException {
             super.writeTo(out);
-            if (out.getTransportVersion().onOrAfter(version1.transportVersion)) {
+            if (out.getTransportVersion().onOrAfter(transportVersion1)) {
                 out.writeInt(value2);
             }
         }
@@ -1532,7 +1547,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
             assertThat(request.value2, equalTo(0)); // not set, coming from service A
             Version1Response response = new Version1Response(1, 2);
             channel.sendResponse(response);
-            assertEquals(version0.transportVersion, channel.getVersion());
+            assertEquals(transportVersion0, channel.getVersion());
         });
 
         Version0Request version0Request = new Version0Request();
@@ -1569,7 +1584,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
             assertThat(request.value1, equalTo(1));
             Version0Response response = new Version0Response(1);
             channel.sendResponse(response);
-            assertEquals(version0.transportVersion, channel.getVersion());
+            assertEquals(transportVersion0, channel.getVersion());
         });
 
         Version1Request version1Request = new Version1Request();
@@ -1832,7 +1847,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     public void testRejectEarlyIncomingRequests() throws Exception {
-        try (TransportService service = buildService("TS_TEST", version0, null, Settings.EMPTY, false, false)) {
+        try (TransportService service = buildService("TS_TEST", version0, transportVersion0, null, Settings.EMPTY, false, false)) {
             AtomicBoolean requestProcessed = new AtomicBoolean(false);
             service.registerRequestHandler("internal:action", ThreadPool.Names.SAME, TestRequest::new, (request, channel, task) -> {
                 requestProcessed.set(true);
@@ -1841,7 +1856,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
 
             DiscoveryNode node = service.getLocalNode();
             serviceA.close();
-            serviceA = buildService("TS_A", version0, null, Settings.EMPTY, true, false);
+            serviceA = buildService("TS_A", version0, transportVersion0, null, Settings.EMPTY, true, false);
             try (Transport.Connection connection = openConnection(serviceA, node, null)) {
                 CountDownLatch latch = new CountDownLatch(1);
                 serviceA.sendRequest(
@@ -1958,7 +1973,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     public void testSendRandomRequests() throws InterruptedException {
-        TransportService serviceC = buildService("TS_C", version0, Settings.EMPTY);
+        TransportService serviceC = buildService("TS_C", version0, transportVersion0, Settings.EMPTY);
         DiscoveryNode nodeC = serviceC.getLocalNode();
 
         final CountDownLatch latch = new CountDownLatch(4);
@@ -2175,8 +2190,15 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
 
     public void testHandshakeWithIncompatVersion() {
         assumeTrue("only tcp transport has a handshake method", serviceA.getOriginalTransport() instanceof TcpTransport);
-        Version version = Version.fromString("2.0.0");
-        try (MockTransportService service = buildService("TS_C", version, Settings.EMPTY)) {
+        TransportVersion transportVersion = TransportVersion.fromId(TransportVersion.MINIMUM_COMPATIBLE.id - 1);
+        try (
+            MockTransportService service = buildService(
+                "TS_C",
+                Version.CURRENT.minimumCompatibilityVersion(),
+                transportVersion,
+                Settings.EMPTY
+            )
+        ) {
             TransportAddress address = service.boundAddress().publishAddress();
             DiscoveryNode node = new DiscoveryNode("TS_TPC", "TS_TPC", address, emptyMap(), emptySet(), version0);
             ConnectionProfile.Builder builder = new ConnectionProfile.Builder();
@@ -2194,8 +2216,19 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
 
     public void testHandshakeUpdatesVersion() throws IOException {
         assumeTrue("only tcp transport has a handshake method", serviceA.getOriginalTransport() instanceof TcpTransport);
-        Version version = VersionUtils.randomVersionBetween(random(), Version.CURRENT.minimumCompatibilityVersion(), Version.CURRENT);
-        try (MockTransportService service = buildService("TS_C", version, Settings.EMPTY)) {
+        TransportVersion transportVersion = TransportVersionUtils.randomVersionBetween(
+            random(),
+            TransportVersion.MINIMUM_COMPATIBLE,
+            TransportVersion.CURRENT
+        );
+        try (
+            MockTransportService service = buildService(
+                "TS_C",
+                Version.CURRENT.minimumCompatibilityVersion(),
+                transportVersion,
+                Settings.EMPTY
+            )
+        ) {
             TransportAddress address = service.boundAddress().publishAddress();
             DiscoveryNode node = new DiscoveryNode("TS_TPC", "TS_TPC", address, emptyMap(), emptySet(), Version.fromString("2.0.0"));
             ConnectionProfile.Builder builder = new ConnectionProfile.Builder();
@@ -2208,7 +2241,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
                 TransportRequestOptions.Type.STATE
             );
             try (Transport.Connection connection = openConnection(serviceA, node, builder.build())) {
-                assertEquals(version.transportVersion, connection.getTransportVersion());
+                assertEquals(transportVersion, connection.getTransportVersion());
             }
         }
     }
@@ -2220,7 +2253,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
         ConnectionProfile defaultProfile = ConnectionProfile.buildDefaultConnectionProfile(Settings.EMPTY);
         ConnectionProfile connectionProfile = new ConnectionProfile.Builder(defaultProfile).setPingInterval(TimeValue.timeValueMillis(50))
             .build();
-        try (TransportService service = buildService("TS_TPC", Version.CURRENT, Settings.EMPTY)) {
+        try (TransportService service = buildService("TS_TPC", Version.CURRENT, TransportVersion.CURRENT, Settings.EMPTY)) {
             PlainActionFuture<Transport.Connection> future = PlainActionFuture.newFuture();
             DiscoveryNode node = new DiscoveryNode(
                 "TS_TPC",
@@ -2241,7 +2274,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     public void testTcpHandshake() {
         assumeTrue("only tcp transport has a handshake method", serviceA.getOriginalTransport() instanceof TcpTransport);
         ConnectionProfile connectionProfile = ConnectionProfile.buildDefaultConnectionProfile(Settings.EMPTY);
-        try (TransportService service = buildService("TS_TPC", Version.CURRENT, Settings.EMPTY)) {
+        try (TransportService service = buildService("TS_TPC", Version.CURRENT, TransportVersion.CURRENT, Settings.EMPTY)) {
             DiscoveryNode node = new DiscoveryNode(
                 "TS_TPC",
                 "TS_TPC",
@@ -2396,7 +2429,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     public void testHandlerIsInvokedOnConnectionClose() throws IOException, InterruptedException {
         List<String> executors = new ArrayList<>(ThreadPool.THREAD_POOL_TYPES.keySet());
         CollectionUtil.timSort(executors); // makes sure it's reproducible
-        TransportService serviceC = buildService("TS_C", CURRENT_VERSION, Settings.EMPTY);
+        TransportService serviceC = buildService("TS_C", version0, transportVersion0, Settings.EMPTY);
         serviceC.registerRequestHandler("internal:action", ThreadPool.Names.SAME, TestRequest::new, (request, channel, task) -> {
             // do nothing
         });
@@ -2458,7 +2491,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     public void testConcurrentDisconnectOnNonPublishedConnection() throws IOException, InterruptedException {
-        MockTransportService serviceC = buildService("TS_C", version0, Settings.EMPTY);
+        MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, Settings.EMPTY);
         CountDownLatch receivedLatch = new CountDownLatch(1);
         CountDownLatch sendResponseLatch = new CountDownLatch(1);
         serviceC.registerRequestHandler("internal:action", ThreadPool.Names.SAME, TestRequest::new, (request, channel, task) -> {
@@ -2520,7 +2553,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     public void testTransportStats() throws Exception {
-        MockTransportService serviceC = buildService("TS_C", version0, Settings.EMPTY);
+        MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, Settings.EMPTY);
         CountDownLatch receivedLatch = new CountDownLatch(1);
         CountDownLatch sendResponseLatch = new CountDownLatch(1);
         serviceB.registerRequestHandler("internal:action", ThreadPool.Names.SAME, TestRequest::new, (request, channel, task) -> {
@@ -2625,7 +2658,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
     }
 
     public void testTransportStatsWithException() throws Exception {
-        MockTransportService serviceC = buildService("TS_C", version0, Settings.EMPTY);
+        MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, Settings.EMPTY);
         CountDownLatch receivedLatch = new CountDownLatch(1);
         CountDownLatch sendResponseLatch = new CountDownLatch(1);
         Exception ex = new RuntimeException("boom");
@@ -2711,7 +2744,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
             TransportException exception = receivedException.get();
             assertNotNull(exception);
             BytesStreamOutput streamOutput = new BytesStreamOutput();
-            streamOutput.setTransportVersion(version0.transportVersion);
+            streamOutput.setTransportVersion(transportVersion0);
             exception.writeTo(streamOutput);
             String failedMessage = "Unexpected read bytes size. The transport exception that was received=" + exception;
             // 57 bytes are the non-exception message bytes that have been received. It should include the initial
@@ -2735,6 +2768,7 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
             MockTransportService serviceC = buildService(
                 "TS_C",
                 version0,
+                transportVersion0,
                 Settings.builder()
                     .put("transport.profiles.default.bind_host", "_local:ipv4_")
                     .put("transport.profiles.some_profile.port", "8900-9000")
@@ -2930,14 +2964,14 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
             .build();
         BindTransportException bindTransportException = expectThrows(
             BindTransportException.class,
-            () -> buildService("test", Version.CURRENT, settings)
+            () -> buildService("test", Version.CURRENT, TransportVersion.CURRENT, settings)
         );
         InetSocketAddress inetSocketAddress = serviceA.boundAddress().publishAddress().address();
         assertEquals("Failed to bind to " + NetworkAddress.format(inetSocketAddress), bindTransportException.getMessage());
     }
 
     public void testChannelCloseWhileConnecting() {
-        try (MockTransportService service = buildService("TS_C", version0, Settings.EMPTY)) {
+        try (MockTransportService service = buildService("TS_C", version0, transportVersion0, Settings.EMPTY)) {
             AtomicBoolean connectionClosedListenerCalled = new AtomicBoolean(false);
             service.addConnectionListener(new TransportConnectionListener() {
                 @Override
@@ -3063,7 +3097,9 @@ public abstract class AbstractSimpleTransportTestCase extends ESTestCase {
                 };
             }
         };
-        try (MockTransportService serviceC = buildService("TS_C", CURRENT_VERSION, null, Settings.EMPTY, true, true, interceptor)) {
+        try (
+            MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, null, Settings.EMPTY, true, true, interceptor)
+        ) {
             final CountDownLatch latch = new CountDownLatch(1);
             serviceC.connectToNode(
                 serviceA.getLocalDiscoNode(),

+ 33 - 17
x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/transport/netty4/SimpleSecurityNetty4ServerTransportTests.java

@@ -189,7 +189,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
         TcpTransport originalTransport = (TcpTransport) serviceA.getOriginalTransport();
 
         ConnectionProfile connectionProfile = ConnectionProfile.buildDefaultConnectionProfile(Settings.EMPTY);
-        try (TransportService service = buildService("TS_TPC", Version.CURRENT, Settings.EMPTY)) {
+        try (TransportService service = buildService("TS_TPC", Version.CURRENT, TransportVersion.CURRENT, Settings.EMPTY)) {
             DiscoveryNode node = new DiscoveryNode(
                 "TS_TPC",
                 "TS_TPC",
@@ -306,7 +306,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             InetSocketAddress serverAddress = (InetSocketAddress) SocketAccess.doPrivileged(sslServerSocket::getLocalSocketAddress);
 
             Settings settings = Settings.builder().put("xpack.security.transport.ssl.verification_mode", "none").build();
-            try (MockTransportService serviceC = buildService("TS_C", version0, settings)) {
+            try (MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, settings)) {
                 HashMap<String, String> attributes = new HashMap<>();
                 attributes.put("server_name", sniIp);
                 DiscoveryNode node = new DiscoveryNode(
@@ -354,7 +354,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             InetSocketAddress serverAddress = (InetSocketAddress) SocketAccess.doPrivileged(sslServerSocket::getLocalSocketAddress);
 
             Settings settings = Settings.builder().put("xpack.security.transport.ssl.verification_mode", "none").build();
-            try (MockTransportService serviceC = buildService("TS_C", version0, settings)) {
+            try (MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, settings)) {
                 HashMap<String, String> attributes = new HashMap<>();
                 attributes.put("server_name", sniIp);
                 DiscoveryNode node = new DiscoveryNode(
@@ -389,7 +389,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
         // test required client authentication
         String value = randomCapitalization(SslClientAuthenticationMode.REQUIRED);
         Settings settings = Settings.builder().put("xpack.security.transport.ssl.client_authentication", value).build();
-        try (MockTransportService service = buildService("TS_REQUIRED_CLIENT_AUTH", Version.CURRENT, settings)) {
+        try (MockTransportService service = buildService("TS_REQUIRED_CLIENT_AUTH", Version.CURRENT, TransportVersion.CURRENT, settings)) {
             TcpTransport originalTransport = (TcpTransport) service.getOriginalTransport();
             try (Transport.Connection connection2 = openConnection(serviceA, service.getLocalNode(), TestProfiles.LIGHT_PROFILE)) {
                 sslEngine = getEngineFromAcceptedChannel(originalTransport, connection2);
@@ -401,7 +401,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
         // test no client authentication
         value = randomCapitalization(SslClientAuthenticationMode.NONE);
         settings = Settings.builder().put("xpack.security.transport.ssl.client_authentication", value).build();
-        try (MockTransportService service = buildService("TS_NO_CLIENT_AUTH", Version.CURRENT, settings)) {
+        try (MockTransportService service = buildService("TS_NO_CLIENT_AUTH", Version.CURRENT, TransportVersion.CURRENT, settings)) {
             TcpTransport originalTransport = (TcpTransport) service.getOriginalTransport();
             try (Transport.Connection connection2 = openConnection(serviceA, service.getLocalNode(), TestProfiles.LIGHT_PROFILE)) {
                 sslEngine = getEngineFromAcceptedChannel(originalTransport, connection2);
@@ -413,7 +413,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
         // test optional client authentication
         value = randomCapitalization(SslClientAuthenticationMode.OPTIONAL);
         settings = Settings.builder().put("xpack.security.transport.ssl.client_authentication", value).build();
-        try (MockTransportService service = buildService("TS_OPTIONAL_CLIENT_AUTH", Version.CURRENT, settings)) {
+        try (MockTransportService service = buildService("TS_OPTIONAL_CLIENT_AUTH", Version.CURRENT, TransportVersion.CURRENT, settings)) {
             TcpTransport originalTransport = (TcpTransport) service.getOriginalTransport();
             try (Transport.Connection connection2 = openConnection(serviceA, service.getLocalNode(), TestProfiles.LIGHT_PROFILE)) {
                 sslEngine = getEngineFromAcceptedChannel(originalTransport, connection2);
@@ -431,7 +431,14 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             .put("transport.profiles.client.xpack.security.ssl.key", testnodeKey)
             .put("transport.profiles.client.xpack.security.ssl.client_authentication", value)
             .build();
-        try (MockTransportService service = buildService("TS_PROFILE_REQUIRE_CLIENT_AUTH", Version.CURRENT, settings)) {
+        try (
+            MockTransportService service = buildService(
+                "TS_PROFILE_REQUIRE_CLIENT_AUTH",
+                Version.CURRENT,
+                TransportVersion.CURRENT,
+                settings
+            )
+        ) {
             TcpTransport originalTransport = (TcpTransport) service.getOriginalTransport();
             TransportAddress clientAddress = originalTransport.profileBoundAddresses().get("client").publishAddress();
             DiscoveryNode node = new DiscoveryNode(service.getLocalNode().getId(), clientAddress, service.getLocalNode().getVersion());
@@ -452,7 +459,9 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             .put("transport.profiles.client.xpack.security.ssl.key", testnodeKey)
             .put("transport.profiles.client.xpack.security.ssl.client_authentication", value)
             .build();
-        try (MockTransportService service = buildService("TS_PROFILE_NO_CLIENT_AUTH", Version.CURRENT, settings)) {
+        try (
+            MockTransportService service = buildService("TS_PROFILE_NO_CLIENT_AUTH", Version.CURRENT, TransportVersion.CURRENT, settings)
+        ) {
             TcpTransport originalTransport = (TcpTransport) service.getOriginalTransport();
             TransportAddress clientAddress = originalTransport.profileBoundAddresses().get("client").publishAddress();
             DiscoveryNode node = new DiscoveryNode(service.getLocalNode().getId(), clientAddress, service.getLocalNode().getVersion());
@@ -473,7 +482,14 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             .put("transport.profiles.client.xpack.security.ssl.key", testnodeKey)
             .put("transport.profiles.client.xpack.security.ssl.client_authentication", value)
             .build();
-        try (MockTransportService service = buildService("TS_PROFILE_OPTIONAL_CLIENT_AUTH", Version.CURRENT, settings)) {
+        try (
+            MockTransportService service = buildService(
+                "TS_PROFILE_OPTIONAL_CLIENT_AUTH",
+                Version.CURRENT,
+                TransportVersion.CURRENT,
+                settings
+            )
+        ) {
             TcpTransport originalTransport = (TcpTransport) service.getOriginalTransport();
             TransportAddress clientAddress = originalTransport.profileBoundAddresses().get("client").publishAddress();
             DiscoveryNode node = new DiscoveryNode(service.getLocalNode().getId(), clientAddress, service.getLocalNode().getVersion());
@@ -513,7 +529,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             .put("xpack.security.remote_cluster_server.ssl.client_authentication", "none")
             .build();
 
-        try (MockTransportService fcService = buildService("FC", Version.CURRENT, fcSettings)) {
+        try (MockTransportService fcService = buildService("FC", Version.CURRENT, TransportVersion.CURRENT, fcSettings)) {
             final TcpTransport originalTransport = (TcpTransport) fcService.getOriginalTransport();
             final TransportAddress remoteAccessAddress = originalTransport.profileBoundAddresses().get("_remote_cluster").publishAddress();
             final DiscoveryNode node = new DiscoveryNode(
@@ -524,7 +540,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
 
             // 1. Connection will fail because FC server certificate is not trusted by default
             final Settings qcSettings1 = Settings.builder().build();
-            try (MockTransportService qcService = buildService("QC", Version.CURRENT, qcSettings1)) {
+            try (MockTransportService qcService = buildService("QC", Version.CURRENT, TransportVersion.CURRENT, qcSettings1)) {
                 final ConnectTransportException e = expectThrows(
                     ConnectTransportException.class,
                     () -> openConnection(qcService, node, connectionProfile)
@@ -540,7 +556,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
                 .put("xpack.security.remote_cluster_client.ssl.verification_mode", "none")
                 .build();
             try (
-                MockTransportService qcService = buildService("QC", Version.CURRENT, qcSettings2);
+                MockTransportService qcService = buildService("QC", Version.CURRENT, TransportVersion.CURRENT, qcSettings2);
                 Transport.Connection connection = openConnection(qcService, node, connectionProfile)
             ) {
                 assertThat(connection, instanceOf(StubbableTransport.WrappedConnection.class));
@@ -564,7 +580,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
                 .put("xpack.security.remote_cluster_client.ssl.verification_mode", "full")
                 .build();
             try (
-                MockTransportService qcService = buildService("QC", Version.CURRENT, qcSettings3);
+                MockTransportService qcService = buildService("QC", Version.CURRENT, TransportVersion.CURRENT, qcSettings3);
                 Transport.Connection connection = openConnection(qcService, node, connectionProfile)
             ) {
                 assertThat(connection, instanceOf(StubbableTransport.WrappedConnection.class));
@@ -606,7 +622,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             .put("xpack.security.remote_cluster_server.ssl.enabled", "false")
             .build();
 
-        try (MockTransportService fcService = buildService("FC", Version.CURRENT, fcSettings)) {
+        try (MockTransportService fcService = buildService("FC", Version.CURRENT, TransportVersion.CURRENT, fcSettings)) {
             final TcpTransport originalTransport = (TcpTransport) fcService.getOriginalTransport();
             final TransportAddress remoteAccessAddress = originalTransport.profileBoundAddresses().get("_remote_cluster").publishAddress();
             final DiscoveryNode node = new DiscoveryNode(
@@ -616,7 +632,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             );
             final Settings qcSettings = Settings.builder().put("xpack.security.remote_cluster_client.ssl.enabled", "false").build();
             try (
-                MockTransportService qcService = buildService("QC", Version.CURRENT, qcSettings);
+                MockTransportService qcService = buildService("QC", Version.CURRENT, TransportVersion.CURRENT, qcSettings);
                 Transport.Connection connection = openConnection(qcService, node, connectionProfile)
             ) {
                 assertThat(connection, instanceOf(StubbableTransport.WrappedConnection.class));
@@ -678,7 +694,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             );
             builder.setHandshakeTimeout(TimeValue.timeValueMillis(1));
             Settings settings = Settings.builder().put("xpack.security.transport.ssl.verification_mode", "none").build();
-            try (MockTransportService serviceC = buildService("TS_C", version0, settings)) {
+            try (MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, settings)) {
                 ConnectTransportException ex = expectThrows(
                     ConnectTransportException.class,
                     () -> connectToNode(serviceC, dummy, builder.build())
@@ -767,7 +783,7 @@ public class SimpleSecurityNetty4ServerTransportTests extends AbstractSimpleTran
             );
             builder.setHandshakeTimeout(TimeValue.timeValueHours(1));
             Settings settings = Settings.builder().put("xpack.security.transport.ssl.verification_mode", "none").build();
-            try (MockTransportService serviceC = buildService("TS_C", version0, settings)) {
+            try (MockTransportService serviceC = buildService("TS_C", version0, transportVersion0, settings)) {
                 ConnectTransportException ex = expectThrows(
                     ConnectTransportException.class,
                     () -> connectToNode(serviceC, dummy, builder.build())