You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2017/11/13 22:18:57 UTC

svn commit: r1815141 - in /jmeter/trunk: src/functions/org/apache/jmeter/functions/RandomDate.java test/src/org/apache/jmeter/functions/TestTimeRandomDateFunction.java xdocs/changes.xml

Author: pmouawad
Date: Mon Nov 13 22:18:57 2017
New Revision: 1815141

URL: http://svn.apache.org/viewvc?rev=1815141&view=rev
Log:
Bug 61752 - RandomDate : Function does not allow missing last parameter used for variable name
Fix bug
Increase coverage
Correct the minimum number of parameters
Bugzilla Id: 61752

Modified:
    jmeter/trunk/src/functions/org/apache/jmeter/functions/RandomDate.java
    jmeter/trunk/test/src/org/apache/jmeter/functions/TestTimeRandomDateFunction.java
    jmeter/trunk/xdocs/changes.xml

Modified: jmeter/trunk/src/functions/org/apache/jmeter/functions/RandomDate.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/functions/org/apache/jmeter/functions/RandomDate.java?rev=1815141&r1=1815140&r2=1815141&view=diff
==============================================================================
--- jmeter/trunk/src/functions/org/apache/jmeter/functions/RandomDate.java (original)
+++ jmeter/trunk/src/functions/org/apache/jmeter/functions/RandomDate.java Mon Nov 13 22:18:57 2017
@@ -36,7 +36,6 @@ import org.apache.commons.lang3.StringUt
 import org.apache.jmeter.engine.util.CompoundVariable;
 import org.apache.jmeter.samplers.SampleResult;
 import org.apache.jmeter.samplers.Sampler;
-import org.apache.jmeter.threads.JMeterVariables;
 import org.apache.jmeter.util.JMeterUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -66,7 +65,7 @@ public class RandomDate extends Abstract
 
     private static final String KEY = "__RandomDate"; // $NON-NLS-1$
 
-    private static final int MIN_PARAMETER_COUNT = 1;
+    private static final int MIN_PARAMETER_COUNT = 3;
 
     private static final int MAX_PARAMETER_COUNT = 5;
 
@@ -75,13 +74,9 @@ public class RandomDate extends Abstract
             JMeterUtils.getResString("locale_format"), JMeterUtils.getResString("function_name_paropt"));
 
     // Ensure that these are set, even if no parameters are provided
-    private String format = ""; //$NON-NLS-1$
     private Locale locale = JMeterUtils.getLocale(); // $NON-NLS-1$
-    private String variableName = ""; //$NON-NLS-1$
     private ZoneId systemDefaultZoneID = ZoneId.systemDefault(); // $NON-NLS-1$
-    private String dateStart; // $NON-NLS-1$
-    private String dateEnd; // $NON-NLS-1$
-    private Object[] values;
+    private CompoundVariable[] values;
 
     private static final class LocaleFormatObject {
 
@@ -137,16 +132,15 @@ public class RandomDate extends Abstract
     /** {@inheritDoc} */
     @Override
     public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {
-        long localStartDate = 0;
-        long localEndDate = 0;
-
         DateTimeFormatter formatter;
-        format = ((CompoundVariable) values[0]).execute().trim();
-        String localeAsString = ((CompoundVariable) values[3]).execute().trim();
-        if (!localeAsString.trim().isEmpty()) {
-            locale = LocaleUtils.toLocale(localeAsString);
+        if(values.length>3) {
+            String localeAsString = values[3].execute().trim();
+            if (!localeAsString.trim().isEmpty()) {
+                locale = LocaleUtils.toLocale(localeAsString);
+            }
         }
 
+        String format = values[0].execute().trim();
         if (!StringUtils.isEmpty(format)) {
             try {
                 LocaleFormatObject lfo = new LocaleFormatObject(format, locale);
@@ -169,7 +163,8 @@ public class RandomDate extends Abstract
             }
         }
 
-        dateStart = ((CompoundVariable) values[1]).execute().trim();
+        String dateStart = values[1].execute().trim();
+        long localStartDate = 0;
         if (!dateStart.isEmpty()) {
             try {
                 localStartDate = LocalDate.parse(dateStart, formatter).toEpochDay();
@@ -183,14 +178,14 @@ public class RandomDate extends Abstract
                 log.error("Failed to create current date '{}'", dateStart, ex); // $NON-NLS-1$
             }
         }
-
-        dateEnd = ((CompoundVariable) values[2]).execute().trim();
+        long localEndDate = 0;
+        String dateEnd = values[2].execute().trim();
         try {
             localEndDate = LocalDate.parse(dateEnd, formatter).toEpochDay();
         } catch (DateTimeParseException | NumberFormatException ex) {
             log.error("Failed to parse End date '{}'", dateEnd, ex); // $NON-NLS-1$
         }
-
+        
         // Generate the random date
         String dateString = "";
         if (localEndDate < localStartDate) {
@@ -202,14 +197,7 @@ public class RandomDate extends Abstract
             } catch (DateTimeParseException | NumberFormatException ex) {
                 log.error("Failed to generate random date '{}'", randomDay, ex); // $NON-NLS-1$
             }
-
-            variableName = ((CompoundVariable) values[4]).execute().trim();
-            if (!StringUtils.isEmpty(variableName)) {
-                JMeterVariables vars = getVariables();
-                if (vars != null) {// vars will be null on TestPlan
-                    vars.put(variableName, dateString);
-                }
-            }
+            addVariableValue(dateString, values, 4);
         }
         return dateString;
     }
@@ -227,7 +215,7 @@ public class RandomDate extends Abstract
     public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
 
         checkParameterCount(parameters, MIN_PARAMETER_COUNT, MAX_PARAMETER_COUNT);
-        values = parameters.toArray();
+        values = parameters.toArray(new CompoundVariable[parameters.size()]);
         // Create the cache
         if (dateRandomFormatterCache == null) {
             dateRandomFormatterCache = Caffeine.newBuilder().maximumSize(100).build();

Modified: jmeter/trunk/test/src/org/apache/jmeter/functions/TestTimeRandomDateFunction.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/functions/TestTimeRandomDateFunction.java?rev=1815141&r1=1815140&r2=1815141&view=diff
==============================================================================
--- jmeter/trunk/test/src/org/apache/jmeter/functions/TestTimeRandomDateFunction.java (original)
+++ jmeter/trunk/test/src/org/apache/jmeter/functions/TestTimeRandomDateFunction.java Mon Nov 13 22:18:57 2017
@@ -62,27 +62,27 @@ public class TestTimeRandomDateFunction
 
     @Test
     public void testParameterCount() throws Exception {
-        checkInvalidParameterCounts(function, 1, 5);
+        checkInvalidParameterCounts(function, 3, 5);
     }
 
     @Test
     public void testDefault() throws Exception {
-        String EndDate = "2099-01-01";
-        String FormatDate = "yyyy-dd-MM";
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FormatDate);
-        Collection<CompoundVariable> params = makeParams(FormatDate, "", EndDate, "", "");
+        String endDate = "2099-01-01";
+        String formatDate = "yyyy-dd-MM";
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatDate);
+        Collection<CompoundVariable> params = makeParams(formatDate, "", endDate, "", "");
         function.setParameters(params);
         value = function.execute(result, null);
         LocalDate result = LocalDate.parse(value, formatter);
         LocalDate now = LocalDate.now();
-        LocalDate max = LocalDate.parse(EndDate, formatter);
+        LocalDate max = LocalDate.parse(endDate, formatter);
         assertTrue(now.isBefore(result) && result.isBefore(max));
     }
 
     @Test
     public void testDefault2() throws Exception {
-        String EndDate = "2099-01-01";
-        Collection<CompoundVariable> params = makeParams("yyyy-dd-MM", "", EndDate, "", "");
+        String endDate = "2099-01-01";
+        Collection<CompoundVariable> params = makeParams("yyyy-dd-MM", "", endDate, "", "");
         function.setParameters(params);
         value = function.execute(result, null);
         assertEquals(10, value.length());
@@ -90,23 +90,23 @@ public class TestTimeRandomDateFunction
 
     @Test
     public void testFormatDate() throws Exception {
-        String EndDate = "01 01 2099";
-        String FormatDate = "dd MM yyyy";
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FormatDate);
-        Collection<CompoundVariable> params = makeParams(FormatDate, "", EndDate, "", "");
+        String endDate = "01 01 2099";
+        String formatDate = "dd MM yyyy";
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatDate);
+        Collection<CompoundVariable> params = makeParams(formatDate, "", endDate, "", "");
         function.setParameters(params);
         value = function.execute(result, null);
         LocalDate result = LocalDate.parse(value, formatter);
         LocalDate now = LocalDate.now();
-        LocalDate max = LocalDate.parse(EndDate, formatter);
+        LocalDate max = LocalDate.parse(endDate, formatter);
         assertTrue(now.isBefore(result) && result.isBefore(max));
     }
 
     @Test
     public void testFormatDate2() throws Exception {
-        String EndDate = "01012099";
-        String FormatDate = "ddMMyyyy";
-        Collection<CompoundVariable> params = makeParams(FormatDate, "", EndDate, "", "");
+        String endDate = "01012099";
+        String formatDate = "ddMMyyyy";
+        Collection<CompoundVariable> params = makeParams(formatDate, "", endDate, "", "");
         function.setParameters(params);
         value = function.execute(result, null);
         assertEquals(8, value.length());
@@ -114,11 +114,11 @@ public class TestTimeRandomDateFunction
 
     @Test
     public void testFormatDate3() throws Exception {
-        String StartDate = "29 Aug 2111";
-        String EndDate = "30 Aug 2111";
-        String FormatDate = "dd MMM yyyy";
+        String startDate = "29 Aug 2111";
+        String endDate = "30 Aug 2111";
+        String formatDate = "dd MMM yyyy";
         String localeAsString = "en_EN";
-        Collection<CompoundVariable> params = makeParams(FormatDate, StartDate, EndDate, localeAsString, "");
+        Collection<CompoundVariable> params = makeParams(formatDate, startDate, endDate, localeAsString, "");
         function.setParameters(params);
         value = function.execute(result, null);
         assertThat(value, is(equalTo("29 Aug 2111")));
@@ -126,13 +126,98 @@ public class TestTimeRandomDateFunction
 
     @Test
     public void testFrenchFormatDate() throws Exception {
-        String StartDate = "29 mars 2111";
-        String EndDate = "30 mars 2111";
-        String FormatDate = "dd MMM yyyy";
+        String startDate = "29 mars 2111";
+        String endDate = "30 mars 2111";
+        String formatDate = "dd MMM yyyy";
         String localeAsString = "fr_FR";
-        Collection<CompoundVariable> params = makeParams(FormatDate, StartDate, EndDate, localeAsString, "");
+        Collection<CompoundVariable> params = makeParams(formatDate, startDate, endDate, localeAsString, "");
         function.setParameters(params);
         value = function.execute(result, null);
         assertThat(value, is(equalTo("29 mars 2111")));
     }
+    
+    @Test
+    public void testEmptyFormatDate() throws Exception {
+        String startDate = "2111-03-29";
+        String endDate = "2111-03-30";
+        String formatDate = "";
+        String localeAsString = "en";
+        Collection<CompoundVariable> params = makeParams(formatDate, startDate, endDate, localeAsString, "");
+        function.setParameters(params);
+        value = function.execute(result, null);
+        assertThat(value, is(equalTo("2111-03-29")));
+    }
+    
+    @Test
+    public void testEndDateBeforeStartDate() throws Exception {
+        String startDate = "2111-03-29";
+        String endDate = "2011-03-30";
+        String formatDate = "";
+        String localeAsString = "en";
+        Collection<CompoundVariable> params = makeParams(formatDate, startDate, endDate, localeAsString, "");
+        function.setParameters(params);
+        value = function.execute(result, null);
+        assertThat(value, is(equalTo("")));
+    }
+    
+    @Test
+    public void testEndDateBeforeStartDateNullVariable() throws Exception {
+        String startDate = "2111-03-29";
+        String endDate = "2111-03-30";
+        String formatDate = "";
+        String localeAsString = "en";
+        Collection<CompoundVariable> params = makeParams(formatDate, startDate, endDate, localeAsString, null);
+        function.setParameters(params);
+        value = function.execute(result, null);
+        assertThat(value, is(equalTo("2111-03-29")));
+    }
+    
+    @Test
+    public void testEndDateBeforeStartDateWithVariable() throws Exception {
+        String startDate = "2111-03-29";
+        String endDate = "2111-03-30";
+        String formatDate = "";
+        String localeAsString = "en";
+        Collection<CompoundVariable> params = makeParams(formatDate, startDate, endDate, localeAsString, "MY_VAR");
+        function.setParameters(params);
+        value = function.execute(result, null);
+        assertThat(value, is(equalTo("2111-03-29")));
+        assertThat(vars.get("MY_VAR"), is(equalTo("2111-03-29")));
+    }
+    
+    @Test
+    public void testInvalidFormat() throws Exception {
+        String startDate = "2111-03-29";
+        String endDate = "2011-03-30";
+        String formatDate = "abcd";
+        String localeAsString = "en";
+        Collection<CompoundVariable> params = makeParams(formatDate, startDate, endDate, localeAsString, "");
+        function.setParameters(params);
+        value = function.execute(result, null);
+        assertThat(value, is(equalTo("")));
+    }
+    
+    @Test
+    public void testInvalidStartDateFormat() throws Exception {
+        String startDate = "23-2111-03";
+        String endDate = "2011-03-30";
+        String formatDate = "abcd";
+        String localeAsString = "en";
+        Collection<CompoundVariable> params = makeParams(formatDate, startDate, endDate, localeAsString, "");
+        function.setParameters(params);
+        value = function.execute(result, null);
+        assertThat(value, is(equalTo("")));
+    }
+    
+    @Test
+    public void testInvalidEndDateFormat() throws Exception {
+        String startDate = "2011-03-30";
+        String endDate = "23-2111-03";
+        String formatDate = "abcd";
+        String localeAsString = "en";
+        Collection<CompoundVariable> params = makeParams(formatDate, startDate, endDate, localeAsString, "");
+        function.setParameters(params);
+        value = function.execute(result, null);
+        assertThat(value, is(equalTo("")));
+    }
 }

Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1815141&r1=1815140&r2=1815141&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Mon Nov 13 22:18:57 2017
@@ -206,6 +206,7 @@ Summary
     <li><bug>61588</bug>Better log message for RandomDate function</li>
     <li><bug>61619</bug>In Function Helper Dialog, the 1st function doesn't display default parameters</li>
     <li><bug>61628</bug>If split string has empty separator default separator is not used</li>
+    <li><bug>61752</bug><code>__RandomDate</code> : Function does not allow missing last parameter used for variable name</li>
 </ul>
 
 <h3>I18N</h3>