You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2011/06/26 15:58:23 UTC

svn commit: r1139794 - in /directory/shared/trunk/util/src: main/java/org/apache/directory/shared/util/GeneralizedTime.java test/java/org/apache/directory/shared/util/GeneralizedTimeTest.java

Author: akarasulu
Date: Sun Jun 26 13:58:23 2011
New Revision: 1139794

URL: http://svn.apache.org/viewvc?rev=1139794&view=rev
Log:
DIRSHARED-131: making the use of the fractional component the default to fix this issue.

Modified:
    directory/shared/trunk/util/src/main/java/org/apache/directory/shared/util/GeneralizedTime.java
    directory/shared/trunk/util/src/test/java/org/apache/directory/shared/util/GeneralizedTimeTest.java

Modified: directory/shared/trunk/util/src/main/java/org/apache/directory/shared/util/GeneralizedTime.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/util/src/main/java/org/apache/directory/shared/util/GeneralizedTime.java?rev=1139794&r1=1139793&r2=1139794&view=diff
==============================================================================
--- directory/shared/trunk/util/src/main/java/org/apache/directory/shared/util/GeneralizedTime.java (original)
+++ directory/shared/trunk/util/src/main/java/org/apache/directory/shared/util/GeneralizedTime.java Sun Jun 26 13:58:23 2011
@@ -193,7 +193,7 @@ public class GeneralizedTime implements 
 
         this.calendar = calendar;
         upGeneralizedTime = null;
-        upFormat = Format.YEAR_MONTH_DAY_HOUR_MIN_SEC;
+        upFormat = Format.YEAR_MONTH_DAY_HOUR_MIN_SEC_FRACTION;
         upTimeZoneFormat = TimeZoneFormat.Z;
         upFractionDelimiter = FractionDelimiter.DOT;
         upFractionLength = 3;

Modified: directory/shared/trunk/util/src/test/java/org/apache/directory/shared/util/GeneralizedTimeTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/util/src/test/java/org/apache/directory/shared/util/GeneralizedTimeTest.java?rev=1139794&r1=1139793&r2=1139794&view=diff
==============================================================================
--- directory/shared/trunk/util/src/test/java/org/apache/directory/shared/util/GeneralizedTimeTest.java (original)
+++ directory/shared/trunk/util/src/test/java/org/apache/directory/shared/util/GeneralizedTimeTest.java Sun Jun 26 13:58:23 2011
@@ -27,6 +27,7 @@ import static org.junit.Assert.fail;
 
 import java.text.ParseException;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.TimeZone;
 
 import com.mycila.junit.concurrent.Concurrency;
@@ -36,6 +37,8 @@ import org.apache.directory.shared.util.
 import org.apache.directory.shared.util.GeneralizedTime;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -47,6 +50,7 @@ import org.junit.runner.RunWith;
 @Concurrency()
 public class GeneralizedTimeTest
 {
+    private static final Logger LOG = LoggerFactory.getLogger( GeneralizedTimeTest.class );
 
     // Test all valid variants:
     // Time: min + sec / min + no sec / no min + no sec 
@@ -1051,11 +1055,12 @@ public class GeneralizedTimeTest
         calendar.set( Calendar.HOUR_OF_DAY, 12 );
         calendar.set( Calendar.MINUTE, 13 );
         calendar.set( Calendar.SECOND, 14 );
+        calendar.set( Calendar.MILLISECOND, 222 );
         calendar.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
 
         GeneralizedTime generalizedTime = new GeneralizedTime( calendar );
         String result = generalizedTime.toGeneralizedTime();
-        assertEquals( "20080102121314Z", result );
+        assertEquals( "20080102121314.222Z", result );
     }
 
 
@@ -1153,4 +1158,52 @@ public class GeneralizedTimeTest
         String result = generalizedTime.toGeneralizedTime();
         assertEquals( gt, result );
     }
+    
+    
+    /**
+     * Tests to make sure the GeneralizedTime parser preserves the milliseconds 
+     * component.
+     * 
+     * @see <a href="https://issues.apache.org/jira/browse/DIRSHARED-131">DIRSHARED-131</a>
+     */
+    @Test
+    public void testMillisecondsPreservation() throws ParseException
+    {
+        Date date = new Date();
+        long originalTime = 0;
+        long millisLost = 0;
+        long trimmedMillis = 0;
+        
+        // Get the current date and time now, also with trimmed milliseconds
+        
+        while ( millisLost == 0 )
+        {
+            date = new Date();
+            originalTime = date.getTime();
+            trimmedMillis = originalTime / 1000;
+            trimmedMillis = trimmedMillis * 1000;
+            millisLost = originalTime - trimmedMillis;
+        }
+        
+        LOG.info( "original time = {}", originalTime );
+        LOG.info( "trimmed milliseconds = {}", trimmedMillis );
+        LOG.info( "milliseconds lost = {}", millisLost );
+
+        // Set time on new Calendar instance, and generate the GT string
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime( date );
+        GeneralizedTime gt = new GeneralizedTime( calendar );
+        assertEquals( "calendar time must equal the date time", date.getTime(), calendar.getTime().getTime() );
+        String gtStr = gt.toGeneralizedTime();
+        LOG.info( "generalized time string of original time = {}", gtStr );
+
+        // Parse and regenerate calendar from gtStr
+        GeneralizedTime recalculatedGt = new GeneralizedTime( gtStr );
+        long recalculatedTime = recalculatedGt.getCalendar().getTime().getTime();
+        LOG.info( "recalculated time = {}", recalculatedTime );
+        LOG.info( "generalized time string of recalculated time = {}", recalculatedGt.toGeneralizedTime() );
+        
+        assertEquals( "The time after round trip GeneralizedTime generation should stay the same", 
+            originalTime, recalculatedTime );
+    }
 }
\ No newline at end of file