public static List<Pair<TransportConfiguration, TransportConfiguration>> decodeConfigs(ActiveMQBuffer buffer) { int size = buffer.readInt(); List<Pair<TransportConfiguration, TransportConfiguration>> configs = new ArrayList<>(size); for (int i = 0; i < size; i++) { TransportConfiguration live = decode(buffer); boolean hasBackup = buffer.readBoolean(); TransportConfiguration backup = null; if (hasBackup) { backup = decode(buffer); } configs.add(new Pair<>(live, backup)); } return configs; }
public static void encodeConfigs(ActiveMQBuffer buffer, List<Pair<TransportConfiguration, TransportConfiguration>> configs) { buffer.writeInt(configs == null ? 0 : configs.size()); if (configs != null) { for (Pair<TransportConfiguration, TransportConfiguration> pair : configs) { encode(buffer, pair.getA()); boolean backup = (pair.getB() != null); buffer.writeBoolean(backup); if (backup) { encode(buffer, pair.getB()); } } } }
public static int getEncodeSize(List<Pair<TransportConfiguration, TransportConfiguration>> configs) { int size = DataConstants.SIZE_INT; // number of configs; if (configs != null) { for (Pair<TransportConfiguration, TransportConfiguration> pair : configs) { size += getEncodeSize(pair.getA()); size += DataConstants.SIZE_BOOLEAN; // whether there is a backup config if (pair.getB() != null) { size += getEncodeSize(pair.getB()); } } } return size; }
@Test public void testTransportConfiguration() throws Exception { Map<String, Object> params = new HashMap<>(); params.put(TransportConstants.PORT_PROP_NAME, 5665); params.put(TransportConstants.HOST_PROP_NAME, RandomUtil.randomString()); TransportConfiguration config = new TransportConfiguration(NettyConnectorFactory.class.getName(), params); ActiveMQBuffer buffer = ActiveMQBuffers.fixedBuffer(TransportConfigurationEncodingSupport.getEncodeSize(config)); TransportConfigurationEncodingSupport.encode(buffer, config); assertEquals(buffer.capacity(), buffer.writerIndex()); buffer.readerIndex(0); TransportConfiguration decoded = TransportConfigurationEncodingSupport.decode(buffer); assertNotNull(decoded); assertEquals(config.getName(), decoded.getName()); assertEquals(config.getFactoryClassName(), decoded.getFactoryClassName()); assertEquals(config.getParams().size(), decoded.getParams().size()); for (String key : config.getParams().keySet()) { assertEquals(config.getParams().get(key).toString(), decoded.getParams().get(key).toString()); } }
@Test public void testTransportConfigurations() throws Exception { List<Pair<TransportConfiguration, TransportConfiguration>> connectorConfigs = new ArrayList<>(); Map<String, Object> liveParams = new HashMap<>(); liveParams.put(TransportConstants.PORT_PROP_NAME, 5665); TransportConfiguration live1 = new TransportConfiguration(NettyConnectorFactory.class.getName(), liveParams); Map<String, Object> backupParams = new HashMap<>(); backupParams.put(TransportConstants.PORT_PROP_NAME, 5775); TransportConfiguration backup1 = new TransportConfiguration(NettyConnectorFactory.class.getName(), backupParams); Map<String, Object> liveParams2 = new HashMap<>(); liveParams2.put(TransportConstants.PORT_PROP_NAME, 6665); TransportConfiguration live2 = new TransportConfiguration(NettyConnectorFactory.class.getName(), liveParams2); connectorConfigs.add(new Pair<>(live1, backup1)); connectorConfigs.add(new Pair<TransportConfiguration, TransportConfiguration>(live2, null)); ActiveMQBuffer buffer = ActiveMQBuffers.fixedBuffer(TransportConfigurationEncodingSupport.getEncodeSize(connectorConfigs)); TransportConfigurationEncodingSupport.encodeConfigs(buffer, connectorConfigs); assertEquals(buffer.capacity(), buffer.writerIndex()); buffer.readerIndex(0); List<Pair<TransportConfiguration, TransportConfiguration>> decodedConfigs = TransportConfigurationEncodingSupport.decodeConfigs(buffer); assertNotNull(decodedConfigs); assertEquals(2, decodedConfigs.size()); assertEquivalent(connectorConfigs.get(0).getA(), decodedConfigs.get(0).getA()); assertEquivalent(connectorConfigs.get(0).getB(), decodedConfigs.get(0).getB()); assertEquivalent(connectorConfigs.get(1).getA(), decodedConfigs.get(1).getA()); assertNull(decodedConfigs.get(1).getB()); }