@@ -71,10 +71,15 @@ public void testHandshakeRequestAndResponse() throws IOException {
7171
7272 assertFalse (versionFuture .isDone ());
7373
74- TransportHandshaker .HandshakeRequest handshakeRequest = new TransportHandshaker .HandshakeRequest (TransportVersion .current ());
74+ TransportHandshaker .HandshakeRequest handshakeRequest = new TransportHandshaker .HandshakeRequest (
75+ TransportVersion .current (),
76+ randomIdentifier ()
77+ );
7578 BytesStreamOutput bytesStreamOutput = new BytesStreamOutput ();
79+ bytesStreamOutput .setTransportVersion (HANDSHAKE_REQUEST_VERSION );
7680 handshakeRequest .writeTo (bytesStreamOutput );
7781 StreamInput input = bytesStreamOutput .bytes ().streamInput ();
82+ input .setTransportVersion (HANDSHAKE_REQUEST_VERSION );
7883 final PlainActionFuture <TransportResponse > responseFuture = new PlainActionFuture <>();
7984 final TestTransportChannel channel = new TestTransportChannel (responseFuture );
8085 handshaker .handleHandshake (channel , reqId , input );
@@ -95,7 +100,7 @@ public void testHandshakeResponseFromOlderNode() throws Exception {
95100 assertFalse (versionFuture .isDone ());
96101
97102 final var remoteVersion = TransportVersionUtils .randomCompatibleVersion (random ());
98- handler .handleResponse (new TransportHandshaker .HandshakeResponse (remoteVersion ));
103+ handler .handleResponse (new TransportHandshaker .HandshakeResponse (remoteVersion , randomIdentifier () ));
99104
100105 assertTrue (versionFuture .isDone ());
101106 assertEquals (remoteVersion , versionFuture .result ());
@@ -110,7 +115,10 @@ public void testHandshakeResponseFromNewerNode() throws Exception {
110115 assertFalse (versionFuture .isDone ());
111116
112117 handler .handleResponse (
113- new TransportHandshaker .HandshakeResponse (TransportVersion .fromId (TransportVersion .current ().id () + between (0 , 10 )))
118+ new TransportHandshaker .HandshakeResponse (
119+ TransportVersion .fromId (TransportVersion .current ().id () + between (0 , 10 )),
120+ randomIdentifier ()
121+ )
114122 );
115123
116124 assertTrue (versionFuture .isDone ());
@@ -123,8 +131,12 @@ public void testHandshakeRequestFutureVersionsCompatibility() throws IOException
123131
124132 verify (requestSender ).sendRequest (node , channel , reqId , HANDSHAKE_REQUEST_VERSION );
125133
126- TransportHandshaker .HandshakeRequest handshakeRequest = new TransportHandshaker .HandshakeRequest (TransportVersion .current ());
134+ TransportHandshaker .HandshakeRequest handshakeRequest = new TransportHandshaker .HandshakeRequest (
135+ TransportVersion .current (),
136+ randomIdentifier ()
137+ );
127138 BytesStreamOutput currentHandshakeBytes = new BytesStreamOutput ();
139+ currentHandshakeBytes .setTransportVersion (HANDSHAKE_REQUEST_VERSION );
128140 handshakeRequest .writeTo (currentHandshakeBytes );
129141
130142 BytesStreamOutput lengthCheckingHandshake = new BytesStreamOutput ();
@@ -149,7 +161,116 @@ public void testHandshakeRequestFutureVersionsCompatibility() throws IOException
149161
150162 TransportHandshaker .HandshakeResponse response = (TransportHandshaker .HandshakeResponse ) responseFuture .actionGet ();
151163
152- assertEquals (TransportVersion .current (), response .getResponseVersion ());
164+ assertEquals (TransportVersion .current (), response .getTransportVersion ());
165+ }
166+
167+ public void testReadV7HandshakeRequest () throws IOException {
168+ final var transportVersion = TransportVersionUtils .randomCompatibleVersion (random ());
169+
170+ final var requestPayloadStreamOutput = new BytesStreamOutput ();
171+ requestPayloadStreamOutput .setTransportVersion (TransportHandshaker .V7_HANDSHAKE_VERSION );
172+ requestPayloadStreamOutput .writeVInt (transportVersion .id ());
173+
174+ final var requestBytesStreamOutput = new BytesStreamOutput ();
175+ requestBytesStreamOutput .setTransportVersion (TransportHandshaker .V7_HANDSHAKE_VERSION );
176+ TaskId .EMPTY_TASK_ID .writeTo (requestBytesStreamOutput );
177+ requestBytesStreamOutput .writeBytesReference (requestPayloadStreamOutput .bytes ());
178+
179+ final var requestBytesStream = requestBytesStreamOutput .bytes ().streamInput ();
180+ requestBytesStream .setTransportVersion (TransportHandshaker .V7_HANDSHAKE_VERSION );
181+ final var handshakeRequest = new TransportHandshaker .HandshakeRequest (requestBytesStream );
182+
183+ assertEquals (transportVersion , handshakeRequest .transportVersion );
184+ assertEquals (transportVersion .toReleaseVersion (), handshakeRequest .releaseVersion );
185+ }
186+
187+ public void testReadV7HandshakeResponse () throws IOException {
188+ final var transportVersion = TransportVersionUtils .randomCompatibleVersion (random ());
189+
190+ final var responseBytesStreamOutput = new BytesStreamOutput ();
191+ responseBytesStreamOutput .setTransportVersion (TransportHandshaker .V7_HANDSHAKE_VERSION );
192+ responseBytesStreamOutput .writeVInt (transportVersion .id ());
193+
194+ final var responseBytesStream = responseBytesStreamOutput .bytes ().streamInput ();
195+ responseBytesStream .setTransportVersion (TransportHandshaker .V7_HANDSHAKE_VERSION );
196+ final var handshakeResponse = new TransportHandshaker .HandshakeResponse (responseBytesStream );
197+
198+ assertEquals (transportVersion , handshakeResponse .getTransportVersion ());
199+ assertEquals (transportVersion .toReleaseVersion (), handshakeResponse .getReleaseVersion ());
200+ }
201+
202+ public void testReadV8HandshakeRequest () throws IOException {
203+ final var transportVersion = TransportVersionUtils .randomCompatibleVersion (random ());
204+
205+ final var requestPayloadStreamOutput = new BytesStreamOutput ();
206+ requestPayloadStreamOutput .setTransportVersion (TransportHandshaker .V8_HANDSHAKE_VERSION );
207+ requestPayloadStreamOutput .writeVInt (transportVersion .id ());
208+
209+ final var requestBytesStreamOutput = new BytesStreamOutput ();
210+ requestBytesStreamOutput .setTransportVersion (TransportHandshaker .V8_HANDSHAKE_VERSION );
211+ TaskId .EMPTY_TASK_ID .writeTo (requestBytesStreamOutput );
212+ requestBytesStreamOutput .writeBytesReference (requestPayloadStreamOutput .bytes ());
213+
214+ final var requestBytesStream = requestBytesStreamOutput .bytes ().streamInput ();
215+ requestBytesStream .setTransportVersion (TransportHandshaker .V8_HANDSHAKE_VERSION );
216+ final var handshakeRequest = new TransportHandshaker .HandshakeRequest (requestBytesStream );
217+
218+ assertEquals (transportVersion , handshakeRequest .transportVersion );
219+ assertEquals (transportVersion .toReleaseVersion (), handshakeRequest .releaseVersion );
220+ }
221+
222+ public void testReadV8HandshakeResponse () throws IOException {
223+ final var transportVersion = TransportVersionUtils .randomCompatibleVersion (random ());
224+
225+ final var responseBytesStreamOutput = new BytesStreamOutput ();
226+ responseBytesStreamOutput .setTransportVersion (TransportHandshaker .V8_HANDSHAKE_VERSION );
227+ responseBytesStreamOutput .writeVInt (transportVersion .id ());
228+
229+ final var responseBytesStream = responseBytesStreamOutput .bytes ().streamInput ();
230+ responseBytesStream .setTransportVersion (TransportHandshaker .V8_HANDSHAKE_VERSION );
231+ final var handshakeResponse = new TransportHandshaker .HandshakeResponse (responseBytesStream );
232+
233+ assertEquals (transportVersion , handshakeResponse .getTransportVersion ());
234+ assertEquals (transportVersion .toReleaseVersion (), handshakeResponse .getReleaseVersion ());
235+ }
236+
237+ public void testReadV9HandshakeRequest () throws IOException {
238+ final var transportVersion = TransportVersionUtils .randomCompatibleVersion (random ());
239+ final var releaseVersion = randomIdentifier ();
240+
241+ final var requestPayloadStreamOutput = new BytesStreamOutput ();
242+ requestPayloadStreamOutput .setTransportVersion (TransportHandshaker .V9_HANDSHAKE_VERSION );
243+ requestPayloadStreamOutput .writeVInt (transportVersion .id ());
244+ requestPayloadStreamOutput .writeString (releaseVersion );
245+
246+ final var requestBytesStreamOutput = new BytesStreamOutput ();
247+ requestBytesStreamOutput .setTransportVersion (TransportHandshaker .V9_HANDSHAKE_VERSION );
248+ TaskId .EMPTY_TASK_ID .writeTo (requestBytesStreamOutput );
249+ requestBytesStreamOutput .writeBytesReference (requestPayloadStreamOutput .bytes ());
250+
251+ final var requestBytesStream = requestBytesStreamOutput .bytes ().streamInput ();
252+ requestBytesStream .setTransportVersion (TransportHandshaker .V9_HANDSHAKE_VERSION );
253+ final var handshakeRequest = new TransportHandshaker .HandshakeRequest (requestBytesStream );
254+
255+ assertEquals (transportVersion , handshakeRequest .transportVersion );
256+ assertEquals (releaseVersion , handshakeRequest .releaseVersion );
257+ }
258+
259+ public void testReadV9HandshakeResponse () throws IOException {
260+ final var transportVersion = TransportVersionUtils .randomCompatibleVersion (random ());
261+ final var releaseVersion = randomIdentifier ();
262+
263+ final var responseBytesStreamOutput = new BytesStreamOutput ();
264+ responseBytesStreamOutput .setTransportVersion (TransportHandshaker .V9_HANDSHAKE_VERSION );
265+ responseBytesStreamOutput .writeVInt (transportVersion .id ());
266+ responseBytesStreamOutput .writeString (releaseVersion );
267+
268+ final var responseBytesStream = responseBytesStreamOutput .bytes ().streamInput ();
269+ responseBytesStream .setTransportVersion (TransportHandshaker .V9_HANDSHAKE_VERSION );
270+ final var handshakeResponse = new TransportHandshaker .HandshakeResponse (responseBytesStream );
271+
272+ assertEquals (transportVersion , handshakeResponse .getTransportVersion ());
273+ assertEquals (releaseVersion , handshakeResponse .getReleaseVersion ());
153274 }
154275
155276 public void testHandshakeError () throws IOException {
0 commit comments