You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by jo...@apache.org on 2006/09/11 23:43:28 UTC
svn commit: r442360 -
/jakarta/commons/sandbox/id/trunk/src/test/org/apache/commons/id/serial/TimeBasedAlphanumericIdentifierGeneratorTest.java
Author: joehni
Date: Mon Sep 11 14:43:28 2006
New Revision: 442360
URL: http://svn.apache.org/viewvc?view=rev&rev=442360
Log:
Detect future time shifts and fail immediately.
Modified:
jakarta/commons/sandbox/id/trunk/src/test/org/apache/commons/id/serial/TimeBasedAlphanumericIdentifierGeneratorTest.java
Modified: jakarta/commons/sandbox/id/trunk/src/test/org/apache/commons/id/serial/TimeBasedAlphanumericIdentifierGeneratorTest.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/id/trunk/src/test/org/apache/commons/id/serial/TimeBasedAlphanumericIdentifierGeneratorTest.java?view=diff&rev=442360&r1=442359&r2=442360
==============================================================================
--- jakarta/commons/sandbox/id/trunk/src/test/org/apache/commons/id/serial/TimeBasedAlphanumericIdentifierGeneratorTest.java (original)
+++ jakarta/commons/sandbox/id/trunk/src/test/org/apache/commons/id/serial/TimeBasedAlphanumericIdentifierGeneratorTest.java Mon Sep 11 14:43:28 2006
@@ -98,9 +98,8 @@
/**
* Test that the generator can be tweaked to start with '0'.
- * @throws InterruptedException unexpected
*/
- public void testMayStartWithIdentifierOfZeros() throws InterruptedException {
+ public void testMayStartWithIdentifierOfZeros() {
final int maxSize = Long.toString(Long.MAX_VALUE, 36).length();
final char[] zeros = new char[maxSize];
Arrays.fill(zeros, '0');
@@ -170,9 +169,8 @@
/**
* Test ensures, that generator can recalculate the time from the id if internally no overflow
* had happened.
- * @throws InterruptedException unexpected
*/
- public void testCanRetrieveTimeFromIdWithoutInternalOverflow() throws InterruptedException {
+ public void testCanRetrieveTimeFromIdWithoutInternalOverflow() {
final TimeSliceSynchronizer synchronizer = new TimeSliceSynchronizer() {
TimeBasedAlphanumericIdentifierGenerator idGenerator;
void initialize() {
@@ -193,9 +191,8 @@
/**
* Test ensures, that generator can recalculate the time from the id even if internally an
* overflow had happened.
- * @throws InterruptedException unexpected
*/
- public void testCanRetrieveTimeFromIdWithInternalOverflow() throws InterruptedException {
+ public void testCanRetrieveTimeFromIdWithInternalOverflow() {
final TimeSliceSynchronizer synchronizer = new TimeSliceSynchronizer() {
TimeBasedAlphanumericIdentifierGenerator idGenerator;
void initialize() {
@@ -262,39 +259,40 @@
}
/**
- * A guardian class that tries hard to synchronize the test to run in the same time slice of the CPU even on time
- * shifting machines.
+ * A guardian class that tries hard to synchronize the test to run in the same time slice of
+ * the CPU even on time shifting machines.
*/
abstract static class TimeSliceSynchronizer {
long waitForNextPeriod;
long next;
- void runSynced() throws InterruptedException {
- // idea here is to generate an id in the same time slice of the CPU as the last System.currentTimeMillis() call
- int tries = 0;
- for (;;) {
+ void runSynced() {
+ // idea here is to generate an id in the same time slice of the CPU as the last
+ // System.currentTimeMillis() call
+ int fails = 0;
+ for (int tries = 10; tries-- > 0;) {
waitForNextPeriod = System.currentTimeMillis();
initialize();
next = waitForNextPeriod;
- while (next == waitForNextPeriod) {
+ // allow time shifts back into time, the generator can handle such shifts
+ while (next <= waitForNextPeriod) {
next = System.currentTimeMillis();
}
- // sanity check, neither condition should normally occur, but on time shifting machines we start over
- if (next < waitForNextPeriod || next - waitForNextPeriod > 100) {
- // we already tried 10 times to find a situation without time shifting
- if (++tries > 10) {
- fail("Cannot perform this test on a machine, that is steadily time shifting!");
- }
- Thread.sleep(1);
- continue;
+ // time shift into future, no problem for the generator, but breaks tests that
+ // assume to run in the same time slice
+ if (next > System.currentTimeMillis()) {
+ ++fails;
}
-
- runTest();
- break;
}
+ // we tried 10 times to be sure not running on a time shifting machine
+ if (fails > 0) {
+ fail("Cannot perform this test on a machine, that is steadily time shifting into future!");
+ }
+
+ runTest();
}
void initialize() {
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org