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>