|
18 | 18 |
|
19 | 19 | package org.apache.cassandra.nodes;
|
20 | 20 |
|
| 21 | +import java.io.ByteArrayOutputStream; |
21 | 22 | import java.io.File;
|
22 | 23 | import java.io.IOException;
|
| 24 | +import java.net.InetAddress; |
23 | 25 | import java.net.UnknownHostException;
|
| 26 | +import java.nio.file.Paths; |
24 | 27 | import java.util.Arrays;
|
25 | 28 | import java.util.Collection;
|
26 | 29 | import java.util.HashMap;
|
27 | 30 | import java.util.Map;
|
28 | 31 | import java.util.UUID;
|
29 | 32 |
|
| 33 | +import com.fasterxml.jackson.core.JsonGenerator; |
| 34 | +import com.fasterxml.jackson.core.JsonParser; |
| 35 | +import com.fasterxml.jackson.databind.JsonSerializer; |
| 36 | +import com.fasterxml.jackson.databind.SerializerProvider; |
30 | 37 | import org.apache.commons.lang3.RandomStringUtils;
|
31 | 38 | import org.junit.After;
|
32 | 39 | import org.junit.Before;
|
@@ -260,6 +267,50 @@ public void testLocalInfoUnknownFieldsAreIgnoredDuringDeserialization() throws I
|
260 | 267 | assertEquals(clusterName, loadedLocalInfo.getClusterName());
|
261 | 268 | }
|
262 | 269 |
|
| 270 | + @Test |
| 271 | + public void testDse6InetAddresPeerInfoDeserialisation() throws IOException |
| 272 | + { |
| 273 | + InetAddressAndPort peer = InetAddressAndPort.getByName("127.0.0.2"); |
| 274 | + InetAddressSerializer ser = new InetAddressSerializer(); |
| 275 | + SerHelper.InetAddressAndPortDeserializer des = new SerHelper.InetAddressAndPortDeserializer(); |
| 276 | + |
| 277 | + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| 278 | + JsonGenerator jsonGenerator = new ObjectMapper().getFactory().createGenerator(outputStream); |
| 279 | + ser.serialize(peer.address, jsonGenerator, null); |
| 280 | + jsonGenerator.flush(); |
| 281 | + |
| 282 | + JsonParser jsonParser = new ObjectMapper().getFactory().createParser(outputStream.toByteArray()); |
| 283 | + InetAddressAndPort inap = des.deserialize(jsonParser, null); |
| 284 | + assertEquals(peer, inap); |
| 285 | + } |
| 286 | + |
| 287 | + @Test |
| 288 | + public void testDse6Compat() throws UnknownHostException |
| 289 | + { |
| 290 | + Nodes.Instance.unsafeSetup(Paths.get("test/data/legacy-metadata/dse-6.8/nodes")); |
| 291 | + |
| 292 | + LocalInfo local = Nodes.local().get(); |
| 293 | + assertEquals("local", local.getKey()); |
| 294 | + assertEquals(BootstrapState.COMPLETED, local.getBootstrapState()); |
| 295 | + assertEquals("3.4.5", local.getCqlVersion().toString()); |
| 296 | + assertEquals("66", local.getNativeProtocolVersion()); |
| 297 | + assertEquals("org.apache.cassandra.dht.Murmur3Partitioner", local.getPartitioner()); |
| 298 | + assertEquals("Cassandra", local.getDataCenter()); |
| 299 | + assertEquals("rack1", local.getRack()); |
| 300 | + assertEquals(256, local.getTokens().size()); |
| 301 | + |
| 302 | + Nodes.Peers peers = Nodes.peers(); |
| 303 | + assertEquals(2, peers.stream().count()); |
| 304 | + PeerInfo peer = peers.get(InetAddressAndPort.getByNameOverrideDefaults("127.0.0.2", 7000)); |
| 305 | + assertEquals("4.0.0.6855", peer.getReleaseVersion().toString()); |
| 306 | + assertEquals("Cassandra", peer.getDataCenter()); |
| 307 | + assertEquals("rack1", peer.getRack()); |
| 308 | + peer = peers.get(InetAddressAndPort.getByNameOverrideDefaults("127.0.0.3", 7000)); |
| 309 | + assertEquals("4.0.0.6855", peer.getReleaseVersion().toString()); |
| 310 | + assertEquals("Cassandra", peer.getDataCenter()); |
| 311 | + assertEquals("rack1", peer.getRack()); |
| 312 | + } |
| 313 | + |
263 | 314 | static void fakePeer(PeerInfo p)
|
264 | 315 | {
|
265 | 316 | int nodeId = p.getPeer().address.getAddress()[3];
|
@@ -354,4 +405,14 @@ public void setUnsupportedField(String unsupportedField)
|
354 | 405 | this.unsupportedField = unsupportedField;
|
355 | 406 | }
|
356 | 407 | }
|
| 408 | + |
| 409 | + private static final class InetAddressSerializer extends JsonSerializer<InetAddress> |
| 410 | + { |
| 411 | + @Override |
| 412 | + public void serialize(InetAddress t, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException |
| 413 | + { |
| 414 | + // same as https://github.com/riptano/bdp/blob/6.8.54/dse-db/src/java/com/datastax/bdp/db/nodes/SerHelper.java#L200 |
| 415 | + jsonGenerator.writeString(t.getHostAddress()); |
| 416 | + } |
| 417 | + } |
357 | 418 | }
|
0 commit comments