Repository: qpid-jms Updated Branches: refs/heads/master e489ebad6 -> f4bffc584
QPIDJMS-142 Remove much of the legacy generation code and use a simple UUID plus sequence value, reduces complexity and removes some locking + startup delay. Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/f4bffc58 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/f4bffc58 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/f4bffc58 Branch: refs/heads/master Commit: f4bffc584529d374d2b4a8e9ef74aab1f3ae2870 Parents: e489eba Author: Timothy Bish <[email protected]> Authored: Wed Dec 16 11:59:07 2015 -0500 Committer: Timothy Bish <[email protected]> Committed: Wed Dec 16 11:59:07 2015 -0500 ---------------------------------------------------------------------- .../org/apache/qpid/jms/util/IdGenerator.java | 185 +++++-------------- .../qpid/jms/meta/JmsConnectionIdTest.java | 4 +- .../qpid/jms/meta/JmsConnectionInfoTest.java | 4 +- .../apache/qpid/jms/meta/JmsConsumerIdTest.java | 8 +- .../qpid/jms/meta/JmsConsumerInfoTest.java | 6 +- .../apache/qpid/jms/meta/JmsProducerIdTest.java | 8 +- .../qpid/jms/meta/JmsProducerInfoTest.java | 6 +- .../apache/qpid/jms/meta/JmsSessionIdTest.java | 12 +- .../qpid/jms/meta/JmsSessionInfoTest.java | 6 +- .../qpid/jms/meta/JmsTransactionIdTest.java | 12 +- .../qpid/jms/meta/JmsTransactionInfoTest.java | 3 +- .../apache/qpid/jms/util/IdGeneratorTest.java | 88 +++------ 12 files changed, 103 insertions(+), 239 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/IdGenerator.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/IdGenerator.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/IdGenerator.java index 28beb9f..b708d82 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/IdGenerator.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/util/IdGenerator.java @@ -16,29 +16,27 @@ */ package org.apache.qpid.jms.util; -import java.io.IOException; -import java.net.ServerSocket; +import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * Generator for Globally unique Strings. + * Generator for Globally unique Strings used to identify resources within a given Connection. */ public class IdGenerator { private static final Logger LOG = LoggerFactory.getLogger(IdGenerator.class); - private static final String UNIQUE_STUB; - private static int instanceCount; + private static String hostName; - private String seed; + + private final String prefix; private final AtomicLong sequence = new AtomicLong(1); - private int length; - public static final String PROPERTY_IDGENERATOR_PORT = "activemq.idgenerator.port"; + + public static final String PROPERTY_IDGENERATOR_HOST_PREFIX = "qpidjms.idgenerator.hostPrefixEnabled"; static { - String stub = ""; boolean canAccessSystemProps = true; try { SecurityManager sm = System.getSecurityManager(); @@ -50,92 +48,70 @@ public class IdGenerator { } if (canAccessSystemProps) { - int idGeneratorPort = 0; - ServerSocket ss = null; - try { - idGeneratorPort = Integer.parseInt(System.getProperty(PROPERTY_IDGENERATOR_PORT, "0")); - LOG.trace("Using port {}", idGeneratorPort); - hostName = InetAddressUtil.getLocalHostName(); - ss = new ServerSocket(idGeneratorPort); - stub = "-" + ss.getLocalPort() + "-" + System.currentTimeMillis() + "-"; - Thread.sleep(100); - } catch (Exception e) { - if (LOG.isTraceEnabled()) { - LOG.trace("could not generate unique stub by using DNS and binding to local port", e); - } else { - LOG.warn("could not generate unique stub by using DNS and binding to local port: {} {}", e.getClass().getCanonicalName(), e.getMessage()); - } + boolean addHostPrefix = Boolean.getBoolean(PROPERTY_IDGENERATOR_HOST_PREFIX); + if (addHostPrefix) { + try { + LOG.trace("ID Generator attemtping to lookup host name prefix."); + hostName = InetAddressUtil.getLocalHostName(); + } catch (Exception e) { + if (LOG.isTraceEnabled()) { + LOG.trace("could not generate host name prefix from DNS lookup.", e); + } else { + LOG.warn("could not generate host name prefix from DNS lookup: {} {}", e.getClass().getCanonicalName(), e.getMessage()); + } - // Restore interrupted state so higher level code can deal with it. - if (e instanceof InterruptedException) { - Thread.currentThread().interrupt(); - } - } finally { - if (ss != null) { - try { - ss.close(); - } catch (IOException ioe) { - if (LOG.isTraceEnabled()) { - LOG.trace("Closing the server socket failed", ioe); - } else { - LOG.warn("Closing the server socket failed" + " due " + ioe.getMessage()); - } + // Restore interrupted state so higher level code can deal with it. + if (e instanceof InterruptedException) { + Thread.currentThread().interrupt(); } } - } - } - if (hostName == null) { - hostName = "localhost"; - } - hostName = sanitizeHostName(hostName); + if (hostName == null) { + hostName = "localhost"; + } - if (stub.length() == 0) { - stub = "-1-" + System.currentTimeMillis() + "-"; + hostName = sanitizeHostName(hostName); + } } - UNIQUE_STUB = stub; } /** - * Construct an IdGenerator + * Construct an IdGenerator using the given prefix value as the initial + * prefix entry for all Ids generated (default is 'ID:'). * * @param prefix * The prefix value that is applied to all generated IDs. */ public IdGenerator(String prefix) { - synchronized (UNIQUE_STUB) { - this.seed = prefix + UNIQUE_STUB + (instanceCount++) + ":"; - this.length = this.seed.length() + ("" + Long.MAX_VALUE).length(); - } - } - - public IdGenerator() { - this("ID:" + hostName); + this.prefix = prefix + (hostName != null ? hostName : "") + ":"; } /** - * As we have to find the host name as a side-affect of generating a unique stub, we allow - * it's easy retrieval here - * - * @return the local host name + * Construct an IdGenerator using the default prefix value of 'ID:' */ - public static String getHostName() { - return hostName; + public IdGenerator() { + this("ID:"); } /** - * Generate a unique id + * Generate a unique id using the configured characteristics. * - * @return a unique id + * @return a newly generated unique id value. */ public synchronized String generateId() { - StringBuilder sb = new StringBuilder(length); - sb.append(seed); + StringBuilder sb = new StringBuilder(); + + sb.append(prefix); + sb.append(UUID.randomUUID()); + sb.append(":"); sb.append(sequence.getAndIncrement()); + return sb.toString(); } - public static String sanitizeHostName(String hostName) { + //----- Internal implementation ------------------------------------------// + + protected static String sanitizeHostName(String hostName) { boolean changed = false; StringBuilder sb = new StringBuilder(); @@ -156,79 +132,4 @@ public class IdGenerator { return hostName; } } - - /** - * Generate a unique ID - that is friendly for a URL or file system - * - * @return a unique id - */ - public String generateSanitizedId() { - String result = generateId(); - result = result.replace(':', '-'); - result = result.replace('_', '-'); - result = result.replace('.', '-'); - return result; - } - - /** - * From a generated id - return the seed (i.e. minus the count) - * - * @param id - * the generated identifier - * @return the seed - */ - public static String getSeedFromId(String id) { - String result = id; - if (id != null) { - int index = id.lastIndexOf(':'); - if (index > 0 && (index + 1) < id.length()) { - result = id.substring(0, index); - } - } - return result; - } - - /** - * From a generated id - return the generator count - * - * @param id - * The ID that will be parsed for a sequence number. - * - * @return the sequence value parsed from the given ID. - */ - public static long getSequenceFromId(String id) { - long result = -1; - if (id != null) { - int index = id.lastIndexOf(':'); - - if (index > 0 && (index + 1) < id.length()) { - String numStr = id.substring(index + 1, id.length()); - result = Long.parseLong(numStr); - } - } - return result; - } - - /** - * Does a proper compare on the Id's - * - * @param id1 the lhs of the comparison. - * @param id2 the rhs of the comparison. - * - * @return 0 if equal else a positive if {@literal id1 > id2} ... - */ - public static int compare(String id1, String id2) { - int result = -1; - String seed1 = IdGenerator.getSeedFromId(id1); - String seed2 = IdGenerator.getSeedFromId(id2); - if (seed1 != null && seed2 != null) { - result = seed1.compareTo(seed2); - if (result == 0) { - long count1 = IdGenerator.getSequenceFromId(id1); - long count2 = IdGenerator.getSequenceFromId(id2); - result = (int) (count1 - count2); - } - } - return result; - } } http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionIdTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionIdTest.java index 1cacc33..6087f4b 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionIdTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionIdTest.java @@ -131,9 +131,7 @@ public class JmsConnectionIdTest { JmsConnectionId id1 = new JmsConnectionId(firstId); JmsConnectionId id2 = new JmsConnectionId(secondId); - assertEquals(-1, id1.compareTo(id2)); - assertEquals(0, id1.compareTo(id1)); - assertEquals(1, id2.compareTo(id1)); + assertFalse(id1.compareTo(id2) == 0); } @Test http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java index 091b138..ee65bf5 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java @@ -97,9 +97,7 @@ public class JmsConnectionInfoTest { JmsConnectionInfo first = new JmsConnectionInfo(firstId); JmsConnectionInfo second = new JmsConnectionInfo(secondId); - assertEquals(-1, first.compareTo(second)); - assertEquals(0, first.compareTo(first)); - assertEquals(1, second.compareTo(first)); + assertFalse(first.compareTo(second) == 0); } @Test http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerIdTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerIdTest.java index e27cea7..f154f7a 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerIdTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerIdTest.java @@ -39,8 +39,10 @@ public class JmsConsumerIdTest { public void setUp() { IdGenerator generator = new IdGenerator(); - firstId = new JmsSessionId(generator.generateId(), 1); - secondId = new JmsSessionId(generator.generateId(), 2); + String rootId = generator.generateId(); + + firstId = new JmsSessionId(rootId, 1); + secondId = new JmsSessionId(rootId, 2); } @Test(expected=IllegalArgumentException.class) @@ -145,7 +147,7 @@ public class JmsConsumerIdTest { assertFalse(id3.equals(id4)); assertTrue(id3.equals(id5)); - assertFalse(id3.equals(id6)); + assertTrue(id3.equals(id6)); } @Test http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerInfoTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerInfoTest.java index ec16d5b..47d481d 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerInfoTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConsumerInfoTest.java @@ -44,8 +44,10 @@ public class JmsConsumerInfoTest { public void setUp() { IdGenerator generator = new IdGenerator(); - firstSessionId = new JmsSessionId(generator.generateId(), 1); - secondSessionId = new JmsSessionId(generator.generateId(), 2); + String rootId = generator.generateId(); + + firstSessionId = new JmsSessionId(rootId, 1); + secondSessionId = new JmsSessionId(rootId, 2); firstId = new JmsConsumerId(firstSessionId, 1); secondId = new JmsConsumerId(secondSessionId, 2); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerIdTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerIdTest.java index 0bab725..8755aad 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerIdTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerIdTest.java @@ -39,8 +39,10 @@ public class JmsProducerIdTest { public void setUp() { IdGenerator generator = new IdGenerator(); - firstId = new JmsSessionId(generator.generateId(), 1); - secondId = new JmsSessionId(generator.generateId(), 2); + String rootId = generator.generateId(); + + firstId = new JmsSessionId(rootId, 1); + secondId = new JmsSessionId(rootId, 2); } @Test(expected=IllegalArgumentException.class) @@ -141,7 +143,7 @@ public class JmsProducerIdTest { JmsProducerId id3 = new JmsProducerId(firstId, 1); JmsProducerId id4 = new JmsProducerId(firstId, 2); JmsProducerId id5 = new JmsProducerId(firstId, 1); - JmsProducerId id6 = new JmsProducerId(secondId.getConnectionId(), 1, 1); + JmsProducerId id6 = new JmsProducerId(secondId.getConnectionId(), 1, 3); assertFalse(id3.equals(id4)); assertTrue(id3.equals(id5)); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerInfoTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerInfoTest.java index 7215318..10d9229 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerInfoTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsProducerInfoTest.java @@ -44,8 +44,10 @@ public class JmsProducerInfoTest { public void setUp() { IdGenerator generator = new IdGenerator(); - firstSessionId = new JmsSessionId(generator.generateId(), 1); - secondSessionId = new JmsSessionId(generator.generateId(), 2); + String rootId = generator.generateId(); + + firstSessionId = new JmsSessionId(rootId, 1); + secondSessionId = new JmsSessionId(rootId, 2); firstId = new JmsProducerId(firstSessionId, 1); secondId = new JmsProducerId(secondSessionId, 2); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionIdTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionIdTest.java index fa0c0dd..9116985 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionIdTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionIdTest.java @@ -39,8 +39,10 @@ public class JmsSessionIdTest { public void setUp() { IdGenerator generator = new IdGenerator(); - firstId = new JmsConnectionId(generator.generateId()); - secondId = new JmsConnectionId(generator.generateId()); + String rootId = generator.generateId(); + + firstId = new JmsConnectionId(rootId); + secondId = new JmsConnectionId(rootId); } @Test(expected=IllegalArgumentException.class) @@ -122,7 +124,7 @@ public class JmsSessionIdTest { @Test public void testCompareTo() { JmsSessionId id1 = new JmsSessionId(firstId, 1); - JmsSessionId id2 = new JmsSessionId(secondId, 1); + JmsSessionId id2 = new JmsSessionId(secondId, 2); assertEquals(-1, id1.compareTo(id2)); assertEquals(0, id1.compareTo(id1)); @@ -132,7 +134,7 @@ public class JmsSessionIdTest { @Test public void testEquals() { JmsSessionId id1 = new JmsSessionId(firstId, 1); - JmsSessionId id2 = new JmsSessionId(secondId, 1); + JmsSessionId id2 = new JmsSessionId(secondId, 2); assertTrue(id1.equals(id1)); assertTrue(id2.equals(id2)); @@ -153,7 +155,7 @@ public class JmsSessionIdTest { @Test public void testHashCode() { JmsSessionId id1 = new JmsSessionId(firstId, 1); - JmsSessionId id2 = new JmsSessionId(secondId, 1); + JmsSessionId id2 = new JmsSessionId(secondId, 2); assertEquals(id1.hashCode(), id1.hashCode()); assertEquals(id2.hashCode(), id2.hashCode()); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionInfoTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionInfoTest.java index 222f101..e6deecc 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionInfoTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsSessionInfoTest.java @@ -44,8 +44,10 @@ public class JmsSessionInfoTest { public void setUp() { IdGenerator generator = new IdGenerator(); - firstId = new JmsSessionId(generator.generateId(), 1); - secondId = new JmsSessionId(generator.generateId(), 2); + String rootId = generator.generateId(); + + firstId = new JmsSessionId(rootId, 1); + secondId = new JmsSessionId(rootId, 2); JmsConnectionId connectionId = new JmsConnectionId(generator.generateId()); connectionInfo = new JmsConnectionInfo(connectionId); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionIdTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionIdTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionIdTest.java index cdf62b5..f279224 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionIdTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionIdTest.java @@ -38,8 +38,10 @@ public class JmsTransactionIdTest { public void setUp() { IdGenerator generator = new IdGenerator(); - firstId = new JmsConnectionId(generator.generateId()); - secondId = new JmsConnectionId(generator.generateId()); + String rootId = generator.generateId(); + + firstId = new JmsConnectionId(rootId); + secondId = new JmsConnectionId(rootId); } @Test(expected=IllegalArgumentException.class) @@ -66,7 +68,7 @@ public class JmsTransactionIdTest { @Test public void testCompareTo() { JmsTransactionId id1 = new JmsTransactionId(firstId, 1); - JmsTransactionId id2 = new JmsTransactionId(secondId, 1); + JmsTransactionId id2 = new JmsTransactionId(secondId, 2); assertEquals(-1, id1.compareTo(id2)); assertEquals(0, id1.compareTo(id1)); @@ -76,7 +78,7 @@ public class JmsTransactionIdTest { @Test public void testEquals() { JmsTransactionId id1 = new JmsTransactionId(firstId, 1); - JmsTransactionId id2 = new JmsTransactionId(secondId, 1); + JmsTransactionId id2 = new JmsTransactionId(secondId, 2); assertTrue(id1.equals(id1)); assertTrue(id2.equals(id2)); @@ -97,7 +99,7 @@ public class JmsTransactionIdTest { @Test public void testHashCode() { JmsTransactionId id1 = new JmsTransactionId(firstId, 1); - JmsTransactionId id2 = new JmsTransactionId(secondId, 1); + JmsTransactionId id2 = new JmsTransactionId(secondId, 2); assertEquals(id1.hashCode(), id1.hashCode()); assertEquals(id2.hashCode(), id2.hashCode()); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionInfoTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionInfoTest.java index 4ac7d55..b5dc092 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionInfoTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsTransactionInfoTest.java @@ -87,9 +87,8 @@ public class JmsTransactionInfoTest { JmsTransactionInfo first = new JmsTransactionInfo(firstSessionId, firstTxId); JmsTransactionInfo second = new JmsTransactionInfo(secondSessionId, secondTxId); - assertEquals(-1, first.compareTo(second)); assertEquals(0, first.compareTo(first)); - assertEquals(1, second.compareTo(first)); + assertFalse(second.compareTo(first) == 0); } @Test http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/f4bffc58/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IdGeneratorTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IdGeneratorTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IdGeneratorTest.java index 21fd110..de56d0e 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IdGeneratorTest.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/util/IdGeneratorTest.java @@ -17,9 +17,9 @@ package org.apache.qpid.jms.util; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; import org.junit.Before; import org.junit.Test; @@ -41,74 +41,28 @@ public class IdGeneratorTest { } @Test - public void testGetHostName() { - assertNotNull(IdGenerator.getHostName()); - } - - @Test - public void testGenerateSanitizedId() { - IdGenerator generator = new IdGenerator("A:B.C"); - assertNotNull(generator.generateSanitizedId()); - String newId = generator.generateSanitizedId(); - assertFalse(newId.contains(":")); - assertFalse(newId.contains(".")); - } + public void testIdIndexIncrements() throws Exception { - @Test - public void testGetSequenceFromId() { - assertNotNull(IdGenerator.getSequenceFromId(generator.generateId())); - } + final int COUNT = 5; - @Test - public void testGetSequenceFromNullId() { - assertEquals(-1, IdGenerator.getSequenceFromId(null)); - } - - @Test - public void testGetSequenceFromNonConformingId() { - assertEquals(-1, IdGenerator.getSequenceFromId("SomeIdValue")); - } - - @Test - public void testGetSequenceFromNonConformingId2() { - assertEquals(-1, IdGenerator.getSequenceFromId("SomeIdValue:")); - } - - @Test - public void testGetSeedFromId() { - assertNotNull(IdGenerator.getSeedFromId(generator.generateId())); - } - - @Test - public void testGetSeedFromNullId() { - assertNull(IdGenerator.getSeedFromId(null)); - } - - @Test - public void testGetSeedFromNonConformingId() { - assertEquals("SomeIdValue", IdGenerator.getSeedFromId("SomeIdValue")); - } - - @Test - public void testGetSeedFromNonConformingId2() { - assertEquals("SomeIdValue:", IdGenerator.getSeedFromId("SomeIdValue:")); - } - - @Test - public void testCompareIds() { - IdGenerator gen = new IdGenerator(); + ArrayList<String> ids = new ArrayList<String>(COUNT); + ArrayList<Integer> sequences = new ArrayList<Integer>(); - String id1 = generator.generateId(); - String id2 = generator.generateId(); - String id3 = generator.generateId(); + for (int i = 0; i < COUNT; ++i) { + ids.add(generator.generateId()); + } - assertEquals(0, IdGenerator.compare(id1, id1)); - assertEquals(1, IdGenerator.compare(id2, id1)); - assertEquals(-1, IdGenerator.compare(id2, id3)); - assertEquals(-1, IdGenerator.compare(id2, null)); - assertEquals(-1, IdGenerator.compare(null, id3)); + for (String id : ids) { + String[] components = id.split(":"); + sequences.add(Integer.parseInt(components[components.length - 1])); + } - String idg1 = gen.generateId(); - assertEquals(1, IdGenerator.compare(idg1, id3)); + Integer lastValue = null; + for (Integer sequence : sequences) { + if (lastValue != null) { + assertTrue(sequence > lastValue); + } + lastValue = sequence; + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
