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 2019/09/18 07:18:40 UTC
[jmeter] branch master updated: Various sonar fixes (#485)
This is an automated email from the ASF dual-hosted git repository.
pmouawad pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jmeter.git
The following commit(s) were added to refs/heads/master by this push:
new bb86cdb Various sonar fixes (#485)
bb86cdb is described below
commit bb86cdb1ab4c597dbf7cfa352e0d86470c3c89a2
Author: Graham Russell <gr...@ham1.co.uk>
AuthorDate: Wed Sep 18 08:18:33 2019 +0100
Various sonar fixes (#485)
* Used Guard Clauses where possible instead of nested ifs
* Use Java 8 features to improve readability
* Use richer assertions
* Formatting/whitespace/comments
* Naming for clarity
* Remove if's around log statements for clarity
* Minor readability changes
* Rename variables and format test for RegexExtractor
* Fix unused import
* Fixed import order and checkstyle.xml indent
* Fixes mistake and further improved HtmlTemplateExporter.
* Reduce size of changes in CSVDataSet
* Revert slower JSONPathAssertion changes.
* Reverted boolean expression simplification
---
config/checkstyle/checkstyle.xml | 2 +-
.../jmeter/assertions/JSONPathAssertion.java | 50 +-
.../jmeter/assertions/ResponseAssertion.java | 7 +-
.../apache/jmeter/assertions/SMIMEAssertion.java | 10 +-
.../java/org/apache/jmeter/config/CSVDataSet.java | 48 +-
.../jmeter/control/gui/ForeachControlPanel.java | 44 +-
.../apache/jmeter/extractor/RegexExtractor.java | 48 +-
.../ConstantPoissonProcessGenerator.java | 1 -
.../org/apache/jmeter/visualizers/AxisGraph.java | 14 +-
.../jmeter/assertions/TestJSONPathAssertion.java | 46 +-
.../jmeter/extractor/TestRegexExtractor.java | 712 ++++++++++-----------
.../report/dashboard/AbstractDataExporter.java | 45 +-
.../report/dashboard/HtmlTemplateExporter.java | 372 +++++------
.../org/apache/commons/cli/avalon/CLOption.java | 2 +-
14 files changed, 678 insertions(+), 723 deletions(-)
diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml
index ed0c42c..69c99f0 100644
--- a/config/checkstyle/checkstyle.xml
+++ b/config/checkstyle/checkstyle.xml
@@ -132,7 +132,7 @@
</module>
<module name="RedundantImport"/>
<module name="UnusedImports"/>
- <module name="ImportOrder">
+ <module name="ImportOrder">
<property name="groups" value="/^java\./,javax,org,net,com"/>
<property name="ordered" value="true"/>
<property name="separated" value="true"/>
diff --git a/src/components/src/main/java/org/apache/jmeter/assertions/JSONPathAssertion.java b/src/components/src/main/java/org/apache/jmeter/assertions/JSONPathAssertion.java
index dc34ef9..37e11c5 100644
--- a/src/components/src/main/java/org/apache/jmeter/assertions/JSONPathAssertion.java
+++ b/src/components/src/main/java/org/apache/jmeter/assertions/JSONPathAssertion.java
@@ -109,30 +109,32 @@ public class JSONPathAssertion extends AbstractTestElement implements Serializab
private void doAssert(String jsonString) {
Object value = JsonPath.read(jsonString, getJsonPath());
- if (isJsonValidationBool()) {
- if (value instanceof JSONArray) {
- if (arrayMatched((JSONArray) value)) {
- return;
- }
- } else {
- if (isExpectNull() && value == null) {
- return;
- } else if (isEquals(value)) {
- return;
- }
+ if (!isJsonValidationBool()) {
+ return;
+ }
+
+ if (value instanceof JSONArray) {
+ if (arrayMatched((JSONArray) value)) {
+ return;
+ }
+ } else {
+ if (isExpectNull() && value == null) {
+ return;
+ } else if (isEquals(value)) {
+ return;
}
+ }
- if (isExpectNull()) {
- throw new IllegalStateException(String.format("Value expected to be null, but found '%s'", value));
+ if (isExpectNull()) {
+ throw new IllegalStateException(String.format("Value expected to be null, but found '%s'", value));
+ } else {
+ String msg;
+ if (isUseRegex()) {
+ msg = "Value expected to match regexp '%s', but it did not match: '%s'";
} else {
- String msg;
- if (isUseRegex()) {
- msg="Value expected to match regexp '%s', but it did not match: '%s'";
- } else {
- msg="Value expected to be '%s', but found '%s'";
- }
- throw new IllegalStateException(String.format(msg, getExpectedValue(), objectToString(value)));
+ msg = "Value expected to be '%s', but found '%s'";
}
+ throw new IllegalStateException(String.format(msg, getExpectedValue(), objectToString(value)));
}
}
@@ -176,9 +178,7 @@ public class JSONPathAssertion extends AbstractTestElement implements Serializab
try {
doAssert(responseData);
} catch (Exception e) {
- if (log.isDebugEnabled()) {
- log.debug("Assertion failed", e);
- }
+ log.debug("Assertion failed", e);
result.setFailure(true);
result.setFailureMessage(e.getMessage());
}
@@ -196,9 +196,7 @@ public class JSONPathAssertion extends AbstractTestElement implements Serializab
result.setFailureMessage("Failed that JSONPath not exists: " + getJsonPath());
}
} catch (Exception e) {
- if (log.isDebugEnabled()) {
- log.debug("Assertion failed", e);
- }
+ log.debug("Assertion failed, as expected", e);
}
}
return result;
diff --git a/src/components/src/main/java/org/apache/jmeter/assertions/ResponseAssertion.java b/src/components/src/main/java/org/apache/jmeter/assertions/ResponseAssertion.java
index e0dc91d..4c17830 100644
--- a/src/components/src/main/java/org/apache/jmeter/assertions/ResponseAssertion.java
+++ b/src/components/src/main/java/org/apache/jmeter/assertions/ResponseAssertion.java
@@ -300,8 +300,9 @@ public class ResponseAssertion extends AbstractScopedAssertion implements Serial
result.setFailure(false);
result.setError(false);
- boolean notTest = (NOT & getTestType()) > 0;
- boolean orTest = (OR & getTestType()) > 0;
+ int testType = getTestType();
+ boolean notTest = (NOT & testType) > 0;
+ boolean orTest = (OR & testType) > 0;
boolean contains = isContainsType(); // do it once outside loop
boolean equals = isEqualsType();
boolean substring = isSubstringType();
@@ -487,7 +488,7 @@ public class ResponseAssertion extends AbstractScopedAssertion implements Serial
} else if (right) {
return str.substring(0, EQUALS_SECTION_DIFF_LEN) + EQUALS_DIFF_TRUNC;
} else {
- return EQUALS_DIFF_TRUNC + str.substring(str.length() - EQUALS_SECTION_DIFF_LEN, str.length());
+ return EQUALS_DIFF_TRUNC + str.substring(str.length() - EQUALS_SECTION_DIFF_LEN);
}
}
diff --git a/src/components/src/main/java/org/apache/jmeter/assertions/SMIMEAssertion.java b/src/components/src/main/java/org/apache/jmeter/assertions/SMIMEAssertion.java
index c844e5d..4c5ac1f 100644
--- a/src/components/src/main/java/org/apache/jmeter/assertions/SMIMEAssertion.java
+++ b/src/components/src/main/java/org/apache/jmeter/assertions/SMIMEAssertion.java
@@ -93,26 +93,26 @@ class SMIMEAssertion {
msg = getMessageFromResponse(response, msgPos);
}
- SMIMESignedParser s = null;
+ SMIMESignedParser signedParser = null;
if(log.isDebugEnabled()) {
log.debug("Content-type: {}", msg.getContentType());
}
if (msg.isMimeType("multipart/signed")) { // $NON-NLS-1$
MimeMultipart multipart = (MimeMultipart) msg.getContent();
- s = new SMIMESignedParser(new BcDigestCalculatorProvider(), multipart);
+ signedParser = new SMIMESignedParser(new BcDigestCalculatorProvider(), multipart);
} else if (msg.isMimeType("application/pkcs7-mime") // $NON-NLS-1$
|| msg.isMimeType("application/x-pkcs7-mime")) { // $NON-NLS-1$
- s = new SMIMESignedParser(new BcDigestCalculatorProvider(), msg);
+ signedParser = new SMIMESignedParser(new BcDigestCalculatorProvider(), msg);
}
- if (null != s) {
+ if (null != signedParser) {
log.debug("Found signature");
if (testElement.isNotSigned()) {
res.setFailure(true);
res.setFailureMessage("Mime message is signed");
} else if (testElement.isVerifySignature() || !testElement.isSignerNoCheck()) {
- res = verifySignature(testElement, s, name);
+ res = verifySignature(testElement, signedParser, name);
}
} else {
diff --git a/src/components/src/main/java/org/apache/jmeter/config/CSVDataSet.java b/src/components/src/main/java/org/apache/jmeter/config/CSVDataSet.java
index f709a2f..a748a43 100644
--- a/src/components/src/main/java/org/apache/jmeter/config/CSVDataSet.java
+++ b/src/components/src/main/java/org/apache/jmeter/config/CSVDataSet.java
@@ -120,30 +120,36 @@ public class CSVDataSet extends ConfigTestElement
*/
@Override
public void setProperty(JMeterProperty property) {
- if (property instanceof StringProperty) {
- final String propName = property.getName();
- if ("shareMode".equals(propName)) { // The original name of the property
- final String propValue = property.getStringValue();
- if (propValue.contains(" ")){ // variables are unlikely to contain spaces, so most likely a translation
- try {
- final BeanInfo beanInfo = Introspector.getBeanInfo(this.getClass());
- final ResourceBundle rb = (ResourceBundle) beanInfo.getBeanDescriptor().getValue(GenericTestBeanCustomizer.RESOURCE_BUNDLE);
- for(String resKey : CSVDataSetBeanInfo.getShareTags()) {
- if (propValue.equals(rb.getString(resKey))) {
- if (log.isDebugEnabled()) {
- log.debug("Converted {}={} to {} using Locale: {}", propName, propValue, resKey, rb.getLocale());
- }
- ((StringProperty) property).setValue(resKey); // reset the value
- super.setProperty(property);
- return;
- }
+ if (!(property instanceof StringProperty)) {
+ super.setProperty(property);
+ return;
+ }
+
+ final String propName = property.getName();
+ if (!"shareMode".equals(propName)) {
+ super.setProperty(property);
+ return;
+ }
+
+ final String propValue = property.getStringValue();
+ if (propValue.contains(" ")) { // variables are unlikely to contain spaces, so most likely a translation
+ try {
+ final BeanInfo beanInfo = Introspector.getBeanInfo(this.getClass());
+ final ResourceBundle rb = (ResourceBundle) beanInfo.getBeanDescriptor().getValue(GenericTestBeanCustomizer.RESOURCE_BUNDLE);
+ for (String resKey : CSVDataSetBeanInfo.getShareTags()) {
+ if (propValue.equals(rb.getString(resKey))) {
+ if (log.isDebugEnabled()) {
+ log.debug("Converted {}={} to {} using Locale: {}", propName, propValue, resKey, rb.getLocale());
}
- // This could perhaps be a variable name
- log.warn("Could not translate {}={} using Locale: {}", propName, propValue, rb.getLocale());
- } catch (IntrospectionException e) {
- log.error("Could not find BeanInfo; cannot translate shareMode entries", e);
+ ((StringProperty) property).setValue(resKey); // reset the value
+ super.setProperty(property);
+ return;
}
}
+ // This could perhaps be a variable name
+ log.warn("Could not translate {}={} using Locale: {}", propName, propValue, rb.getLocale());
+ } catch (IntrospectionException e) {
+ log.error("Could not find BeanInfo; cannot translate shareMode entries", e);
}
}
super.setProperty(property);
diff --git a/src/components/src/main/java/org/apache/jmeter/control/gui/ForeachControlPanel.java b/src/components/src/main/java/org/apache/jmeter/control/gui/ForeachControlPanel.java
index 9bb1a1d..4a6afdb 100644
--- a/src/components/src/main/java/org/apache/jmeter/control/gui/ForeachControlPanel.java
+++ b/src/components/src/main/java/org/apache/jmeter/control/gui/ForeachControlPanel.java
@@ -32,10 +32,9 @@ import org.apache.jmeter.util.JMeterUtils;
/**
* The user interface for a foreach controller which specifies that its
- * subcomponents should be executed some number of times in a loop. This
+ * sub-components should be executed some number of times in a loop. This
* component can be used standalone or embedded into some other component.
*/
-
public class ForeachControlPanel extends AbstractControllerGui {
private static final long serialVersionUID = 240L;
@@ -46,14 +45,10 @@ public class ForeachControlPanel extends AbstractControllerGui {
*/
private JTextField inputVal;
- /**
- * A field allowing the user to specify the indice start of the loop
- */
+ /** A field allowing the user to specify the indice start of the loop */
private JTextField startIndex;
- /**
- * A field allowing the user to specify the indice end of the loop
- */
+ /** A field allowing the user to specify the indice end of the loop */
private JTextField endIndex;
/**
@@ -68,21 +63,21 @@ public class ForeachControlPanel extends AbstractControllerGui {
/**
* Boolean indicating whether or not this component should display its name.
* If true, this is a standalone component. If false, this component is
- * intended to be used as a subpanel for another component.
+ * intended to be used as a sub-panel for another component.
*/
private boolean displayName = true;
/** The name of the infinite checkbox component. */
- private static final String INPUTVAL = "Input Field"; // $NON-NLS-1$
+ private static final String INPUT_VAL_NAME = "Input Field"; // $NON-NLS-1$
/** The name of the loops field component. */
- private static final String RETURNVAL = "Return Field"; // $NON-NLS-1$
+ private static final String RETURN_VAL_NAME = "Return Field"; // $NON-NLS-1$
/** The name of the start index field component. */
- private static final String START_INDEX = "Start Index Field"; // $NON-NLS-1$
+ private static final String START_INDEX_NAME = "Start Index Field"; // $NON-NLS-1$
/** The name of the end index field component. */
- private static final String END_INDEX = "End Index Field"; // $NON-NLS-1$
+ private static final String END_INDEX_NAME = "End Index Field"; // $NON-NLS-1$
/**
* Create a new LoopControlPanel as a standalone component.
*/
@@ -146,9 +141,7 @@ public class ForeachControlPanel extends AbstractControllerGui {
}
}
- /**
- * Implements JMeterGUIComponent.clearGui
- */
+ /** Implements JMeterGUIComponent.clearGui */
@Override
public void clearGui() {
super.clearGui();
@@ -160,21 +153,18 @@ public class ForeachControlPanel extends AbstractControllerGui {
useSeparator.setSelected(true);
}
-
@Override
public String getLabelResource() {
return "foreach_controller_title"; // $NON-NLS-1$
}
- /**
- * Initialize the GUI components and layout for this component.
- */
- private void init() { // WARNING: called from ctor so must not be overridden (i.e. must be private or final)
+ /** Initialize the GUI components and layout for this component. */
+ private void init() {
+ // WARNING: called from ctor so must not be overridden (i.e. must be private or final)
// The Loop Controller panel can be displayed standalone or inside
// another panel. For standalone, we want to display the TITLE, NAME,
// etc. (everything). However, if we want to display it within another
- // panel, we just display the Loop Count fields (not the TITLE and
- // NAME).
+ // panel, we just display the Loop Count fields (not the TITLE and NAME).
// Standalone
if (displayName) {
@@ -210,7 +200,7 @@ public class ForeachControlPanel extends AbstractControllerGui {
// TEXT FIELD
JPanel inputValSubPanel = new JPanel(new BorderLayout(5, 0));
inputVal = new JTextField("", 5); // $NON-NLS-1$
- inputVal.setName(INPUTVAL);
+ inputVal.setName(INPUT_VAL_NAME);
inputValLabel.setLabelFor(inputVal);
inputValSubPanel.add(inputValLabel, BorderLayout.WEST);
inputValSubPanel.add(inputVal, BorderLayout.CENTER);
@@ -218,7 +208,7 @@ public class ForeachControlPanel extends AbstractControllerGui {
// TEXT FIELD
JPanel startIndexSubPanel = new JPanel(new BorderLayout(5, 0));
startIndex = new JTextField("", 5); // $NON-NLS-1$
- startIndex.setName(START_INDEX);
+ startIndex.setName(START_INDEX_NAME);
startIndexLabel.setLabelFor(startIndex);
startIndexSubPanel.add(startIndexLabel, BorderLayout.WEST);
startIndexSubPanel.add(startIndex, BorderLayout.CENTER);
@@ -226,7 +216,7 @@ public class ForeachControlPanel extends AbstractControllerGui {
// TEXT FIELD
JPanel endIndexSubPanel = new JPanel(new BorderLayout(5, 0));
endIndex = new JTextField("", 5); // $NON-NLS-1$
- endIndex.setName(END_INDEX);
+ endIndex.setName(END_INDEX_NAME);
endIndexLabel.setLabelFor(endIndex);
endIndexSubPanel.add(endIndexLabel, BorderLayout.WEST);
endIndexSubPanel.add(endIndex, BorderLayout.CENTER);
@@ -234,7 +224,7 @@ public class ForeachControlPanel extends AbstractControllerGui {
// TEXT FIELD
JPanel returnValSubPanel = new JPanel(new BorderLayout(5, 0));
returnVal = new JTextField("", 5); // $NON-NLS-1$
- returnVal.setName(RETURNVAL);
+ returnVal.setName(RETURN_VAL_NAME);
returnValLabel.setLabelFor(returnVal);
returnValSubPanel.add(returnValLabel, BorderLayout.WEST);
returnValSubPanel.add(returnVal, BorderLayout.CENTER);
diff --git a/src/components/src/main/java/org/apache/jmeter/extractor/RegexExtractor.java b/src/components/src/main/java/org/apache/jmeter/extractor/RegexExtractor.java
index f5452db..37b65ae 100644
--- a/src/components/src/main/java/org/apache/jmeter/extractor/RegexExtractor.java
+++ b/src/components/src/main/java/org/apache/jmeter/extractor/RegexExtractor.java
@@ -42,8 +42,6 @@ import org.apache.oro.text.regex.Perl5Matcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-// @see org.apache.jmeter.extractor.TestRegexExtractor for unit tests
-
public class RegexExtractor extends AbstractScopedTestElement implements PostProcessor, Serializable {
private static final long serialVersionUID = 242L;
@@ -70,18 +68,12 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
public static final String USE_CODE = "code"; // $NON-NLS-1$
public static final String USE_MESSAGE = "message"; // $NON-NLS-1$
-
- private static final String REGEX = "RegexExtractor.regex"; // $NON-NLS-1$
-
- private static final String REFNAME = "RegexExtractor.refname"; // $NON-NLS-1$
-
- private static final String MATCH_NUMBER = "RegexExtractor.match_number"; // $NON-NLS-1$
-
- private static final String DEFAULT = "RegexExtractor.default"; // $NON-NLS-1$
-
- private static final String DEFAULT_EMPTY_VALUE = "RegexExtractor.default_empty_value"; // $NON-NLS-1$
-
- private static final String TEMPLATE = "RegexExtractor.template"; // $NON-NLS-1$
+ private static final String REGEX_PROP = "RegexExtractor.regex"; // $NON-NLS-1$
+ private static final String REFNAME_PROP = "RegexExtractor.refname"; // $NON-NLS-1$
+ private static final String MATCH_NUMBER_PROP = "RegexExtractor.match_number"; // $NON-NLS-1$
+ private static final String DEFAULT_PROP = "RegexExtractor.default"; // $NON-NLS-1$
+ private static final String DEFAULT_EMPTY_VALUE_PROP = "RegexExtractor.default_empty_value"; // $NON-NLS-1$
+ private static final String TEMPLATE_PROP = "RegexExtractor.template"; // $NON-NLS-1$
private static final String REF_MATCH_NR = "_matchNr"; // $NON-NLS-1$
@@ -381,7 +373,7 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
* @param regex The string representation of the regex
*/
public void setRegex(String regex) {
- setProperty(REGEX, regex);
+ setProperty(REGEX_PROP, regex);
}
/**
@@ -389,7 +381,7 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
* @return string representing the regex
*/
public String getRegex() {
- return getPropertyAsString(REGEX);
+ return getPropertyAsString(REGEX_PROP);
}
/**
@@ -397,7 +389,7 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
* @param refName prefix of the variables to be used
*/
public void setRefName(String refName) {
- setProperty(REFNAME, refName);
+ setProperty(REFNAME_PROP, refName);
}
/**
@@ -405,7 +397,7 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
* @return The prefix of the variables to be used
*/
public String getRefName() {
- return getPropertyAsString(REFNAME);
+ return getPropertyAsString(REFNAME_PROP);
}
/**
@@ -418,19 +410,19 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
* random match should be used.
*/
public void setMatchNumber(int matchNumber) {
- setProperty(new IntegerProperty(MATCH_NUMBER, matchNumber));
+ setProperty(new IntegerProperty(MATCH_NUMBER_PROP, matchNumber));
}
public void setMatchNumber(String matchNumber) {
- setProperty(MATCH_NUMBER, matchNumber);
+ setProperty(MATCH_NUMBER_PROP, matchNumber);
}
public int getMatchNumber() {
- return getPropertyAsInt(MATCH_NUMBER);
+ return getPropertyAsInt(MATCH_NUMBER_PROP);
}
public String getMatchNumberAsString() {
- return getPropertyAsString(MATCH_NUMBER);
+ return getPropertyAsString(MATCH_NUMBER_PROP);
}
/**
@@ -439,7 +431,7 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
* @param defaultValue The default value for the variable
*/
public void setDefaultValue(String defaultValue) {
- setProperty(DEFAULT, defaultValue);
+ setProperty(DEFAULT_PROP, defaultValue);
}
/**
@@ -448,7 +440,7 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
* @param defaultEmptyValue The default value for the variable
*/
public void setDefaultEmptyValue(boolean defaultEmptyValue) {
- setProperty(DEFAULT_EMPTY_VALUE, defaultEmptyValue, DEFAULT_VALUE_FOR_DEFAULT_EMPTY_VALUE);
+ setProperty(DEFAULT_EMPTY_VALUE_PROP, defaultEmptyValue, DEFAULT_VALUE_FOR_DEFAULT_EMPTY_VALUE);
}
/**
@@ -458,7 +450,7 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
* @return The default value for the variable
*/
public String getDefaultValue() {
- return getPropertyAsString(DEFAULT);
+ return getPropertyAsString(DEFAULT_PROP);
}
/**
@@ -466,15 +458,15 @@ public class RegexExtractor extends AbstractScopedTestElement implements PostPro
* @return true if we should set default value to "" if variable cannot be extracted
*/
public boolean isEmptyDefaultValue() {
- return getPropertyAsBoolean(DEFAULT_EMPTY_VALUE, DEFAULT_VALUE_FOR_DEFAULT_EMPTY_VALUE);
+ return getPropertyAsBoolean(DEFAULT_EMPTY_VALUE_PROP, DEFAULT_VALUE_FOR_DEFAULT_EMPTY_VALUE);
}
public void setTemplate(String template) {
- setProperty(TEMPLATE, template);
+ setProperty(TEMPLATE_PROP, template);
}
public String getTemplate() {
- return getPropertyAsString(TEMPLATE);
+ return getPropertyAsString(TEMPLATE_PROP);
}
public boolean useHeaders() {
diff --git a/src/components/src/main/java/org/apache/jmeter/timers/poissonarrivals/ConstantPoissonProcessGenerator.java b/src/components/src/main/java/org/apache/jmeter/timers/poissonarrivals/ConstantPoissonProcessGenerator.java
index 032e5d6..e8c3f88 100644
--- a/src/components/src/main/java/org/apache/jmeter/timers/poissonarrivals/ConstantPoissonProcessGenerator.java
+++ b/src/components/src/main/java/org/apache/jmeter/timers/poissonarrivals/ConstantPoissonProcessGenerator.java
@@ -144,7 +144,6 @@ public class ConstantPoissonProcessGenerator implements EventProducer {
}
log.info(sb.toString());
}
-
}
events.flip();
if (batchSize > 1) {
diff --git a/src/components/src/main/java/org/apache/jmeter/visualizers/AxisGraph.java b/src/components/src/main/java/org/apache/jmeter/visualizers/AxisGraph.java
index 0009609..4685389 100644
--- a/src/components/src/main/java/org/apache/jmeter/visualizers/AxisGraph.java
+++ b/src/components/src/main/java/org/apache/jmeter/visualizers/AxisGraph.java
@@ -50,7 +50,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- *
* Axis graph is used by StatGraphVisualizer, which generates bar graphs
* from the statistical data.
*/
@@ -344,14 +343,8 @@ public class AxisGraph extends JPanel {
Font legendFont, Graphics g) {
double max = maxYAxisScale > 0 ? maxYAxisScale : findMax(_data); // define max scale y axis
try {
- /** These controls are already done in StatGraphVisualizer
- if (_width == 0) {
- _width = 450;
- }
- if (_height == 0) {
- _height = 250;
- }
- **/
+ // Width and Height are already set in StatGraphVisualizer
+
if (_maxLength < 3) {
_maxLength = 3;
}
@@ -365,7 +358,8 @@ public class AxisGraph extends JPanel {
_xAxisLabels[i]=squeeze(label, _maxLength);
}
this.setPreferredSize(new Dimension(_width,_height));
- DataSeries dataSeries = new DataSeries( _xAxisLabels, null, _yAxisTitle, _title ); // replace _xAxisTitle to null (don't display x axis title)
+ // _xAxisTitle to null (don't display x axis title)
+ DataSeries dataSeries = new DataSeries( _xAxisLabels, null, _yAxisTitle, _title );
ClusteredBarChartProperties clusteredBarChartProperties= new ClusteredBarChartProperties();
clusteredBarChartProperties.setShowOutlinesFlag(outlinesBarFlag);
diff --git a/src/components/src/test/java/org/apache/jmeter/assertions/TestJSONPathAssertion.java b/src/components/src/test/java/org/apache/jmeter/assertions/TestJSONPathAssertion.java
index ea6023e..3efb1e0 100644
--- a/src/components/src/test/java/org/apache/jmeter/assertions/TestJSONPathAssertion.java
+++ b/src/components/src/test/java/org/apache/jmeter/assertions/TestJSONPathAssertion.java
@@ -18,6 +18,8 @@
package org.apache.jmeter.assertions;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import java.util.Locale;
@@ -66,7 +68,7 @@ public class TestJSONPathAssertion {
public void testIsJsonValidationBool() {
JSONPathAssertion instance = new JSONPathAssertion();
boolean result = instance.isJsonValidationBool();
- assertEquals(false, result);
+ assertFalse(result);
}
@Test
@@ -81,7 +83,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
}
@Test
@@ -96,11 +98,11 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
samplerResult.setResponseData("{\"myval\": 456}".getBytes());
AssertionResult result2 = instance.getResult(samplerResult);
- assertEquals(false, result2.isFailure());
+ assertFalse(result2.isFailure());
}
@Test
@@ -115,7 +117,7 @@ public class TestJSONPathAssertion {
instance.setInvert(true);
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
- assertEquals(true, result.isFailure());
+ assertTrue(result.isFailure());
assertEquals(expResult.getName(), result.getName());
}
@@ -129,11 +131,11 @@ public class TestJSONPathAssertion {
instance.setJsonValidationBool(true);
instance.setExpectedValue("some.+");
AssertionResult result = instance.getResult(samplerResult);
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
instance.setIsRegex(false);
AssertionResult result2 = instance.getResult(samplerResult);
- assertEquals(true, result2.isFailure());
+ assertTrue(result2.isFailure());
}
@Test
@@ -148,7 +150,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(true, result.isFailure());
+ assertTrue(result.isFailure());
}
@Test
@@ -163,7 +165,7 @@ public class TestJSONPathAssertion {
instance.setInvert(true);
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
assertEquals(expResult.getName(), result.getName());
}
@@ -179,7 +181,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
}
@Test
@@ -194,7 +196,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(true, result.isFailure());
+ assertTrue(result.isFailure());
}
@Test
@@ -208,7 +210,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
}
@Test
@@ -222,7 +224,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(true, result.isFailure());
+ assertTrue(result.isFailure());
}
@Test
@@ -237,7 +239,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
}
@Test
@@ -252,7 +254,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(true, result.isFailure());
+ assertTrue(result.isFailure());
}
@Test
@@ -266,7 +268,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
}
@Test
@@ -281,7 +283,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
}
@Test
@@ -296,7 +298,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
}
@Test
@@ -312,7 +314,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(true, result.isFailure());
+ assertTrue(result.isFailure());
}
@Test
@@ -330,7 +332,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(true, result.isFailure());
+ assertTrue(result.isFailure());
assertEquals(
"Value expected to match regexp '{headerkey=header value}', but it did not match: '{\"headerkey\":\"header value\"}'",
result.getFailureMessage());
@@ -364,7 +366,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
}
@Test
@@ -386,7 +388,7 @@ public class TestJSONPathAssertion {
AssertionResult expResult = new AssertionResult("");
AssertionResult result = instance.getResult(samplerResult);
assertEquals(expResult.getName(), result.getName());
- assertEquals(false, result.isFailure());
+ assertFalse(result.isFailure());
} finally {
Locale.setDefault(prevLocale);
}
diff --git a/src/components/src/test/java/org/apache/jmeter/extractor/TestRegexExtractor.java b/src/components/src/test/java/org/apache/jmeter/extractor/TestRegexExtractor.java
index 7eb6280..18ab07b 100644
--- a/src/components/src/test/java/org/apache/jmeter/extractor/TestRegexExtractor.java
+++ b/src/components/src/test/java/org/apache/jmeter/extractor/TestRegexExtractor.java
@@ -38,364 +38,361 @@ import org.junit.Test;
public class TestRegexExtractor {
- private RegexExtractor extractor;
-
- private SampleResult result;
-
- private JMeterVariables vars;
-
- private JMeterContext jmctx;
-
- @Before
- public void setUp() {
- jmctx = JMeterContextService.getContext();
- extractor = new RegexExtractor();
- extractor.setThreadContext(jmctx);// This would be done by the run
- // command
- extractor.setRefName("regVal");
- result = new SampleResult();
- String data = "<company-xmlext-query-ret>" + "<row>" + "<value field=\"RetCode\">LIS_OK</value>"
- + "<value field=\"RetCodeExtension\"></value>" + "<value field=\"alias\"></value>"
- + "<value field=\"positioncount\"></value>" + "<value field=\"invalidpincount\">0</value>"
- + "<value field=\"pinposition1\">1</value>" + "<value field=\"pinpositionvalue1\"></value>"
- + "<value field=\"pinposition2\">5</value>" + "<value field=\"pinpositionvalue2\"></value>"
- + "<value field=\"pinposition3\">6</value>" + "<value field=\"pinpositionvalue3\"></value>"
- + "</row>" + "</company-xmlext-query-ret>";
- result.setResponseData(data, null);
- result.setResponseHeaders("Header1: Value1\nHeader2: Value2");
- result.setResponseCode("abcd");
- result.setResponseMessage("The quick brown fox");
- vars = new JMeterVariables();
- jmctx.setVariables(vars);
- jmctx.setPreviousResult(result);
- }
-
- @Test
- public void testProcessAllElementsSingleMatch() {
- vars.put("content", "one");
- extractor.setMatchNumber(-1);
- extractor.setRefName("varname");
- extractor.setRegex("(\\w+)");
- extractor.setScopeVariable("content");
- extractor.setThreadContext(jmctx);
- extractor.setTemplate("$1$");
- extractor.process();
- assertThat(vars.get("varname"), CoreMatchers.is(CoreMatchers.nullValue()));
- assertThat(vars.get("varname_1"), CoreMatchers.is("one"));
- assertThat(vars.get("varname_matchNr"), CoreMatchers.is("1"));
- }
-
- @Test
- public void testProcessAllElementsMultipleMatches() {
- vars.put("content", "one, two");
- extractor.setMatchNumber(-1);
- extractor.setRefName("varname");
- extractor.setRegex("(\\w+)");
- extractor.setScopeVariable("content");
- extractor.setThreadContext(jmctx);
- extractor.setTemplate("$1$");
- extractor.process();
- assertThat(vars.get("varname"), CoreMatchers.is(CoreMatchers.nullValue()));
- assertThat(vars.get("varname_1"), CoreMatchers.is("one"));
- assertThat(vars.get("varname_2"), CoreMatchers.is("two"));
- assertThat(vars.get("varname_matchNr"), CoreMatchers.is("2"));
- }
-
- @Test
- public void testEmptyDefaultVariable() throws Exception {
- extractor.setRegex("<value name=\"positioncount\">(.+?)</value>");
- extractor.setTemplate("$1$");
- extractor.setMatchNumber(1);
- extractor.setDefaultEmptyValue(true);
- extractor.process();
- assertEquals("", vars.get("regVal"));
- }
-
- @Test
- public void testNotEmptyDefaultVariable() throws Exception {
- extractor.setRegex("<value name=\"positioncount\">(.+?)</value>");
- extractor.setTemplate("$1$");
- extractor.setMatchNumber(1);
- extractor.setDefaultEmptyValue(false);
- extractor.process();
- assertNull(vars.get("regVal"));
- }
-
- @Test
- public void testVariableExtraction0() throws Exception {
- extractor.setRegex("<(value) field=\"");
- extractor.setTemplate("$1$");
- extractor.setMatchNumber(0);
- extractor.process();
- assertEquals("value", vars.get("regVal"));
- }
-
- @Test
- public void testVariableExtraction() throws Exception {
- extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
- extractor.setTemplate("$2$");
- extractor.setMatchNumber(2);
- extractor.process();
- assertEquals("5", vars.get("regVal"));
- assertEquals("pinposition2", vars.get("regVal_g1"));
- assertEquals("5", vars.get("regVal_g2"));
- assertEquals("<value field=\"pinposition2\">5</value>", vars.get("regVal_g0"));
- assertNull(vars.get("regVal_g3"));
- assertEquals("2",vars.get("regVal_g"));
- }
-
- private static void templateSetup(RegexExtractor rex, String tmp) {
- rex.setRegex("<company-(\\w+?)-(\\w+?)-(\\w+?)>");
- rex.setMatchNumber(1);
- rex.setTemplate(tmp);
- rex.process();
- }
-
- @Test
- public void testTemplate1() throws Exception {
- templateSetup(extractor, "");
- assertEquals("<company-xmlext-query-ret>", vars.get("regVal_g0"));
- assertEquals("xmlext", vars.get("regVal_g1"));
- assertEquals("query", vars.get("regVal_g2"));
- assertEquals("ret", vars.get("regVal_g3"));
- assertEquals("", vars.get("regVal"));
- assertEquals("3",vars.get("regVal_g"));
- }
-
- @Test
- public void testTemplate2() throws Exception {
- templateSetup(extractor, "ABC");
- assertEquals("ABC", vars.get("regVal"));
- }
-
- @Test
- public void testTemplate3() throws Exception {
- templateSetup(extractor, "$2$");
- assertEquals("query", vars.get("regVal"));
- }
-
- @Test
- public void testTemplate4() throws Exception {
- templateSetup(extractor, "PRE$2$");
- assertEquals("PREquery", vars.get("regVal"));
- }
-
- @Test
- public void testTemplate5() throws Exception {
- templateSetup(extractor, "$2$POST");
- assertEquals("queryPOST", vars.get("regVal"));
- }
-
- @Test
- public void testTemplate6() throws Exception {
- templateSetup(extractor, "$2$$1$");
- assertEquals("queryxmlext", vars.get("regVal"));
- }
-
- @Test
- public void testTemplate7() throws Exception {
- templateSetup(extractor, "$2$MID$1$");
- assertEquals("queryMIDxmlext", vars.get("regVal"));
- }
-
- @Test
- public void testVariableExtraction2() throws Exception {
- extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
- extractor.setTemplate("$1$");
- extractor.setMatchNumber(3);
- extractor.process();
- assertEquals("pinposition3", vars.get("regVal"));
- }
-
- @Test
- public void testVariableExtraction6() throws Exception {
- extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
- extractor.setTemplate("$2$");
- extractor.setMatchNumber(4);
- extractor.setDefaultValue("default");
- extractor.process();
- assertEquals("default", vars.get("regVal"));
- }
-
- @Test
- public void testVariableExtraction3() throws Exception {
- extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
- extractor.setTemplate("_$1$");
- extractor.setMatchNumber(2);
- extractor.process();
- assertEquals("_pinposition2", vars.get("regVal"));
- }
-
- @Test
- public void testVariableExtraction5() throws Exception {
- extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
- extractor.setTemplate("$1$");
- extractor.setMatchNumber(1);// Set up the non-wild variables
- extractor.process();
- assertNotNull(vars.get("regVal"));
- assertEquals("2",vars.get("regVal_g"));
- assertNotNull(vars.get("regVal_g0"));
- assertNotNull(vars.get("regVal_g1"));
- assertNotNull(vars.get("regVal_g2"));
-
- extractor.setMatchNumber(-1);
- extractor.process();
- assertNotNull(vars.get("regVal"));// Should not clear this?
- assertNull(vars.get("regVal_g"));
- assertNull(vars.get("regVal_g1"));
- assertNull(vars.get("regVal_g2"));
- assertEquals("3", vars.get("regVal_matchNr"));
- assertEquals("pinposition1", vars.get("regVal_1"));
- assertEquals("pinposition2", vars.get("regVal_2"));
- assertEquals("pinposition3", vars.get("regVal_3"));
- assertEquals("2", vars.get("regVal_1_g"));
- assertEquals("pinposition1", vars.get("regVal_1_g1"));
- assertEquals("1", vars.get("regVal_1_g2"));
- assertEquals("6", vars.get("regVal_3_g2"));
- assertEquals("<value field=\"pinposition1\">1</value>", vars.get("regVal_1_g0"));
- assertNull(vars.get("regVal_4"));
-
- // Check old values don't hang around:
- extractor.setRegex("(\\w+)count"); // fewer matches
- extractor.process();
- assertEquals("2", vars.get("regVal_matchNr"));
- assertEquals("position", vars.get("regVal_1"));
- assertEquals("1", vars.get("regVal_1_g"));
- assertEquals("position", vars.get("regVal_1_g1"));
- assertNull("Unused variables should be null", vars.get("regVal_1_g2"));
- assertEquals("invalidpin", vars.get("regVal_2"));
- assertEquals("1", vars.get("regVal_2_g"));
- assertEquals("invalidpin", vars.get("regVal_2_g1"));
- assertNull("Unused variables should be null", vars.get("regVal_2_g2"));
- assertEquals("1", vars.get("regVal_1_g"));
- assertNull("Unused variables should be null", vars.get("regVal_3"));
- assertNull("Unused variables should be null", vars.get("regVal_3_g"));
- assertNull("Unused variables should be null", vars.get("regVal_3_g0"));
- assertNull("Unused variables should be null", vars.get("regVal_3_g1"));
- assertNull("Unused variables should be null", vars.get("regVal_3_g2"));
-
- // Check when match fails
- extractor.setRegex("xxxx(.)(.)");
- extractor.process();
- assertEquals("0", vars.get("regVal_matchNr"));
- assertNull("Unused variables should be null", vars.get("regVal_1"));
- assertNull("Unused variables should be null", vars.get("regVal_1_g0"));
- assertNull("Unused variables should be null", vars.get("regVal_1_g1"));
- assertNull("Unused variables should be null", vars.get("regVal_1_g2"));
- }
-
- @Test
- public void testVariableExtraction7() throws Exception {
- extractor.setRegex("Header1: (\\S+)");
- extractor.setTemplate("$1$");
- extractor.setMatchNumber(1);
- assertTrue("useBody should be true", extractor.useBody());
- assertFalse("useHdrs should be false", extractor.useHeaders());
- assertFalse("useURL should be false", extractor.useUrl());
- extractor.setUseField(RegexExtractor.USE_BODY);
- assertTrue("useBody should be true", extractor.useBody());
- assertFalse("useHdrs should be false", extractor.useHeaders());
- assertFalse("useURL should be false", extractor.useUrl());
- extractor.setUseField(RegexExtractor.USE_HDRS);
- assertTrue("useHdrs should be true", extractor.useHeaders());
- assertFalse("useBody should be false", extractor.useBody());
- assertFalse("useURL should be false", extractor.useUrl());
- extractor.process();
- assertEquals("Value1", vars.get("regVal"));
- extractor.setUseField(RegexExtractor.USE_URL);
- assertFalse("useHdrs should be false", extractor.useHeaders());
- assertFalse("useBody should be false", extractor.useBody());
- assertTrue("useURL should be true", extractor.useUrl());
- }
-
- @Test
- public void testVariableExtraction8() throws Exception {
- extractor.setRegex("http://jakarta\\.apache\\.org/(\\w+)");
- extractor.setTemplate("$1$");
- extractor.setMatchNumber(1);
- extractor.setUseField(RegexExtractor.USE_URL);
- assertFalse("useHdrs should be false", extractor.useHeaders());
- assertFalse("useBody should be false", extractor.useBody());
- assertTrue("useURL should be true", extractor.useUrl());
- extractor.process();
- assertNull(vars.get("regVal"));
- result.setURL(new URL("http://jakarta.apache.org/index.html?abcd"));
- extractor.process();
- assertEquals("index",vars.get("regVal"));
- }
-
- @Test
- public void testVariableExtraction9() throws Exception {
- extractor.setRegex("(\\w+)");
- extractor.setTemplate("$1$");
- extractor.setMatchNumber(1);
- extractor.setUseField(RegexExtractor.USE_CODE);
- assertFalse("useHdrs should be false", extractor.useHeaders());
- assertFalse("useBody should be false", extractor.useBody());
- assertFalse("useURL should be false", extractor.useUrl());
- assertFalse("useMessage should be false", extractor.useMessage());
- assertTrue("useCode should be true", extractor.useCode());
- extractor.process();
- assertEquals("abcd",vars.get("regVal"));
- extractor.setUseField(RegexExtractor.USE_MESSAGE);
- assertFalse("useHdrs should be false", extractor.useHeaders());
- assertFalse("useBody should be false", extractor.useBody());
- assertFalse("useURL should be false", extractor.useUrl());
- assertTrue("useMessage should be true", extractor.useMessage());
- assertFalse("useCode should be false", extractor.useCode());
- extractor.setMatchNumber(3);
- extractor.process();
- assertEquals("brown",vars.get("regVal"));
- }
-
- @Test
- public void testNoDefault() throws Exception {
- extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
- extractor.setTemplate("$2$");
- extractor.setMatchNumber(4);
- vars.put("regVal", "initial");
- assertEquals("initial", vars.get("regVal"));
- extractor.process();
- assertEquals("initial", vars.get("regVal"));
- }
-
- @Test
- public void testDefault() throws Exception {
- extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
- extractor.setTemplate("$2$");
- extractor.setMatchNumber(999);
- extractor.setDefaultValue("default");
- vars.put("regVal", "initial");
- assertEquals("initial", vars.get("regVal"));
- extractor.process();
- assertEquals("default", vars.get("regVal"));
- assertNull(vars.get("regVal_g0"));
- assertNull(vars.get("regVal_g1"));
- }
-
- @Test
- public void testStaleVariables() throws Exception {
- extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
- extractor.setTemplate("$2$");
- extractor.setMatchNumber(1);
- extractor.setDefaultValue("default");
- extractor.process();
- assertEquals("1", vars.get("regVal"));
- assertEquals("1", vars.get("regVal_g2"));
- assertEquals("2", vars.get("regVal_g"));
- assertNotNull(vars.get("regVal_g0"));
- assertNotNull(vars.get("regVal_g1"));
- // Now rerun with match fail
- extractor.setMatchNumber(10);
- extractor.process();
- assertEquals("default", vars.get("regVal"));
- assertNull(vars.get("regVal_g0"));
- assertNull(vars.get("regVal_g1"));
- assertNull(vars.get("regVal_g"));
- }
+ private RegexExtractor extractor;
+ private SampleResult result;
+ private JMeterVariables vars;
+ private JMeterContext jmctx;
+
+ @Before
+ public void setUp() {
+ jmctx = JMeterContextService.getContext();
+ extractor = new RegexExtractor();
+ // This would be done by the run command
+ extractor.setThreadContext(jmctx);
+ extractor.setRefName("regVal");
+ result = new SampleResult();
+ String data = "<company-xmlext-query-ret><row><value field=\"RetCode\">LIS_OK</value>\n" +
+ "<value field=\"RetCodeExtension\"></value><value field=\"alias\"></value>\n" +
+ "<value field=\"positioncount\"></value><value field=\"invalidpincount\">0</value>\n" +
+ "<value field=\"pinposition1\">1</value><value field=\"pinpositionvalue1\"></value>\n" +
+ "<value field=\"pinposition2\">5</value><value field=\"pinpositionvalue2\"></value>\n" +
+ "<value field=\"pinposition3\">6</value><value field=\"pinpositionvalue3\"></value>\n" +
+ "</row></company-xmlext-query-ret>";
+ result.setResponseData(data, null);
+ result.setResponseHeaders("Header1: Value1\nHeader2: Value2");
+ result.setResponseCode("abcd");
+ result.setResponseMessage("The quick brown fox");
+ vars = new JMeterVariables();
+ jmctx.setVariables(vars);
+ jmctx.setPreviousResult(result);
+ }
+
+ @Test
+ public void testProcessAllElementsSingleMatch() {
+ vars.put("content", "one");
+ extractor.setMatchNumber(-1);
+ extractor.setRefName("varname");
+ extractor.setRegex("(\\w+)");
+ extractor.setScopeVariable("content");
+ extractor.setThreadContext(jmctx);
+ extractor.setTemplate("$1$");
+ extractor.process();
+ assertThat(vars.get("varname"), CoreMatchers.is(CoreMatchers.nullValue()));
+ assertThat(vars.get("varname_1"), CoreMatchers.is("one"));
+ assertThat(vars.get("varname_matchNr"), CoreMatchers.is("1"));
+ }
+
+ @Test
+ public void testProcessAllElementsMultipleMatches() {
+ vars.put("content", "one, two");
+ extractor.setMatchNumber(-1);
+ extractor.setRefName("varname");
+ extractor.setRegex("(\\w+)");
+ extractor.setScopeVariable("content");
+ extractor.setThreadContext(jmctx);
+ extractor.setTemplate("$1$");
+ extractor.process();
+ assertThat(vars.get("varname"), CoreMatchers.is(CoreMatchers.nullValue()));
+ assertThat(vars.get("varname_1"), CoreMatchers.is("one"));
+ assertThat(vars.get("varname_2"), CoreMatchers.is("two"));
+ assertThat(vars.get("varname_matchNr"), CoreMatchers.is("2"));
+ }
+
+ @Test
+ public void testEmptyDefaultVariable() {
+ extractor.setRegex("<value name=\"positioncount\">(.+?)</value>");
+ extractor.setTemplate("$1$");
+ extractor.setMatchNumber(1);
+ extractor.setDefaultEmptyValue(true);
+ extractor.process();
+ assertEquals("", vars.get("regVal"));
+ }
+
+ @Test
+ public void testNotEmptyDefaultVariable() {
+ extractor.setRegex("<value name=\"positioncount\">(.+?)</value>");
+ extractor.setTemplate("$1$");
+ extractor.setMatchNumber(1);
+ extractor.setDefaultEmptyValue(false);
+ extractor.process();
+ assertNull(vars.get("regVal"));
+ }
+
+ @Test
+ public void testVariableExtraction0() {
+ extractor.setRegex("<(value) field=\"");
+ extractor.setTemplate("$1$");
+ extractor.setMatchNumber(0);
+ extractor.process();
+ assertEquals("value", vars.get("regVal"));
+ }
@Test
- public void testScope1() throws Exception {
+ public void testVariableExtraction() {
+ extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
+ extractor.setTemplate("$2$");
+ extractor.setMatchNumber(2);
+ extractor.process();
+ assertEquals("5", vars.get("regVal"));
+ assertEquals("pinposition2", vars.get("regVal_g1"));
+ assertEquals("5", vars.get("regVal_g2"));
+ assertEquals("<value field=\"pinposition2\">5</value>", vars.get("regVal_g0"));
+ assertNull(vars.get("regVal_g3"));
+ assertEquals("2", vars.get("regVal_g"));
+ }
+
+ private static void templateSetup(RegexExtractor rex, String tmp) {
+ rex.setRegex("<company-(\\w+?)-(\\w+?)-(\\w+?)>");
+ rex.setMatchNumber(1);
+ rex.setTemplate(tmp);
+ rex.process();
+ }
+
+ @Test
+ public void testTemplate1() {
+ templateSetup(extractor, "");
+ assertEquals("<company-xmlext-query-ret>", vars.get("regVal_g0"));
+ assertEquals("xmlext", vars.get("regVal_g1"));
+ assertEquals("query", vars.get("regVal_g2"));
+ assertEquals("ret", vars.get("regVal_g3"));
+ assertEquals("", vars.get("regVal"));
+ assertEquals("3", vars.get("regVal_g"));
+ }
+
+ @Test
+ public void testTemplate2() {
+ templateSetup(extractor, "ABC");
+ assertEquals("ABC", vars.get("regVal"));
+ }
+
+ @Test
+ public void testTemplate3() {
+ templateSetup(extractor, "$2$");
+ assertEquals("query", vars.get("regVal"));
+ }
+
+ @Test
+ public void testTemplate4() {
+ templateSetup(extractor, "PRE$2$");
+ assertEquals("PREquery", vars.get("regVal"));
+ }
+
+ @Test
+ public void testTemplate5() {
+ templateSetup(extractor, "$2$POST");
+ assertEquals("queryPOST", vars.get("regVal"));
+ }
+
+ @Test
+ public void testTemplate6() {
+ templateSetup(extractor, "$2$$1$");
+ assertEquals("queryxmlext", vars.get("regVal"));
+ }
+
+ @Test
+ public void testTemplate7() {
+ templateSetup(extractor, "$2$MID$1$");
+ assertEquals("queryMIDxmlext", vars.get("regVal"));
+ }
+
+ @Test
+ public void testVariableExtraction2() {
+ extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
+ extractor.setTemplate("$1$");
+ extractor.setMatchNumber(3);
+ extractor.process();
+ assertEquals("pinposition3", vars.get("regVal"));
+ }
+
+ @Test
+ public void testVariableExtraction6() {
+ extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
+ extractor.setTemplate("$2$");
+ extractor.setMatchNumber(4);
+ extractor.setDefaultValue("default");
+ extractor.process();
+ assertEquals("default", vars.get("regVal"));
+ }
+
+ @Test
+ public void testVariableExtraction3() {
+ extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
+ extractor.setTemplate("_$1$");
+ extractor.setMatchNumber(2);
+ extractor.process();
+ assertEquals("_pinposition2", vars.get("regVal"));
+ }
+
+ @Test
+ public void testVariableExtraction5() {
+ extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
+ extractor.setTemplate("$1$");
+ extractor.setMatchNumber(1);// Set up the non-wild variables
+ extractor.process();
+ assertNotNull(vars.get("regVal"));
+ assertEquals("2", vars.get("regVal_g"));
+ assertNotNull(vars.get("regVal_g0"));
+ assertNotNull(vars.get("regVal_g1"));
+ assertNotNull(vars.get("regVal_g2"));
+
+ extractor.setMatchNumber(-1);
+ extractor.process();
+ assertNotNull(vars.get("regVal"));// Should not clear this?
+ assertNull(vars.get("regVal_g"));
+ assertNull(vars.get("regVal_g1"));
+ assertNull(vars.get("regVal_g2"));
+ assertEquals("3", vars.get("regVal_matchNr"));
+ assertEquals("pinposition1", vars.get("regVal_1"));
+ assertEquals("pinposition2", vars.get("regVal_2"));
+ assertEquals("pinposition3", vars.get("regVal_3"));
+ assertEquals("2", vars.get("regVal_1_g"));
+ assertEquals("pinposition1", vars.get("regVal_1_g1"));
+ assertEquals("1", vars.get("regVal_1_g2"));
+ assertEquals("6", vars.get("regVal_3_g2"));
+ assertEquals("<value field=\"pinposition1\">1</value>", vars.get("regVal_1_g0"));
+ assertNull(vars.get("regVal_4"));
+
+ // Check old values don't hang around:
+ extractor.setRegex("(\\w+)count"); // fewer matches
+ extractor.process();
+ assertEquals("2", vars.get("regVal_matchNr"));
+ assertEquals("position", vars.get("regVal_1"));
+ assertEquals("1", vars.get("regVal_1_g"));
+ assertEquals("position", vars.get("regVal_1_g1"));
+ assertNull("Unused variables should be null", vars.get("regVal_1_g2"));
+ assertEquals("invalidpin", vars.get("regVal_2"));
+ assertEquals("1", vars.get("regVal_2_g"));
+ assertEquals("invalidpin", vars.get("regVal_2_g1"));
+ assertNull("Unused variables should be null", vars.get("regVal_2_g2"));
+ assertEquals("1", vars.get("regVal_1_g"));
+ assertNull("Unused variables should be null", vars.get("regVal_3"));
+ assertNull("Unused variables should be null", vars.get("regVal_3_g"));
+ assertNull("Unused variables should be null", vars.get("regVal_3_g0"));
+ assertNull("Unused variables should be null", vars.get("regVal_3_g1"));
+ assertNull("Unused variables should be null", vars.get("regVal_3_g2"));
+
+ // Check when match fails
+ extractor.setRegex("xxxx(.)(.)");
+ extractor.process();
+ assertEquals("0", vars.get("regVal_matchNr"));
+ assertNull("Unused variables should be null", vars.get("regVal_1"));
+ assertNull("Unused variables should be null", vars.get("regVal_1_g0"));
+ assertNull("Unused variables should be null", vars.get("regVal_1_g1"));
+ assertNull("Unused variables should be null", vars.get("regVal_1_g2"));
+ }
+
+ @Test
+ public void testVariableExtraction7() {
+ extractor.setRegex("Header1: (\\S+)");
+ extractor.setTemplate("$1$");
+ extractor.setMatchNumber(1);
+ assertTrue("useBody should be true", extractor.useBody());
+ assertFalse("useHdrs should be false", extractor.useHeaders());
+ assertFalse("useURL should be false", extractor.useUrl());
+ extractor.setUseField(RegexExtractor.USE_BODY);
+ assertTrue("useBody should be true", extractor.useBody());
+ assertFalse("useHdrs should be false", extractor.useHeaders());
+ assertFalse("useURL should be false", extractor.useUrl());
+ extractor.setUseField(RegexExtractor.USE_HDRS);
+ assertTrue("useHdrs should be true", extractor.useHeaders());
+ assertFalse("useBody should be false", extractor.useBody());
+ assertFalse("useURL should be false", extractor.useUrl());
+ extractor.process();
+ assertEquals("Value1", vars.get("regVal"));
+ extractor.setUseField(RegexExtractor.USE_URL);
+ assertFalse("useHdrs should be false", extractor.useHeaders());
+ assertFalse("useBody should be false", extractor.useBody());
+ assertTrue("useURL should be true", extractor.useUrl());
+ }
+
+ @Test
+ public void testVariableExtraction8() throws Exception {
+ extractor.setRegex("http://jakarta\\.apache\\.org/(\\w+)");
+ extractor.setTemplate("$1$");
+ extractor.setMatchNumber(1);
+ extractor.setUseField(RegexExtractor.USE_URL);
+ assertFalse("useHdrs should be false", extractor.useHeaders());
+ assertFalse("useBody should be false", extractor.useBody());
+ assertTrue("useURL should be true", extractor.useUrl());
+ extractor.process();
+ assertNull(vars.get("regVal"));
+ result.setURL(new URL("http://jakarta.apache.org/index.html?abcd"));
+ extractor.process();
+ assertEquals("index", vars.get("regVal"));
+ }
+
+ @Test
+ public void testVariableExtraction9() {
+ extractor.setRegex("(\\w+)");
+ extractor.setTemplate("$1$");
+ extractor.setMatchNumber(1);
+ extractor.setUseField(RegexExtractor.USE_CODE);
+ assertFalse("useHdrs should be false", extractor.useHeaders());
+ assertFalse("useBody should be false", extractor.useBody());
+ assertFalse("useURL should be false", extractor.useUrl());
+ assertFalse("useMessage should be false", extractor.useMessage());
+ assertTrue("useCode should be true", extractor.useCode());
+ extractor.process();
+ assertEquals("abcd", vars.get("regVal"));
+ extractor.setUseField(RegexExtractor.USE_MESSAGE);
+ assertFalse("useHdrs should be false", extractor.useHeaders());
+ assertFalse("useBody should be false", extractor.useBody());
+ assertFalse("useURL should be false", extractor.useUrl());
+ assertTrue("useMessage should be true", extractor.useMessage());
+ assertFalse("useCode should be false", extractor.useCode());
+ extractor.setMatchNumber(3);
+ extractor.process();
+ assertEquals("brown", vars.get("regVal"));
+ }
+
+ @Test
+ public void testNoDefault() {
+ extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
+ extractor.setTemplate("$2$");
+ extractor.setMatchNumber(4);
+ vars.put("regVal", "initial");
+ assertEquals("initial", vars.get("regVal"));
+ extractor.process();
+ assertEquals("initial", vars.get("regVal"));
+ }
+
+ @Test
+ public void testDefault() {
+ extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
+ extractor.setTemplate("$2$");
+ extractor.setMatchNumber(999);
+ extractor.setDefaultValue("default");
+ vars.put("regVal", "initial");
+ assertEquals("initial", vars.get("regVal"));
+ extractor.process();
+ assertEquals("default", vars.get("regVal"));
+ assertNull(vars.get("regVal_g0"));
+ assertNull(vars.get("regVal_g1"));
+ }
+
+ @Test
+ public void testStaleVariables() {
+ extractor.setRegex("<value field=\"(pinposition\\d+)\">(\\d+)</value>");
+ extractor.setTemplate("$2$");
+ extractor.setMatchNumber(1);
+ extractor.setDefaultValue("default");
+ extractor.process();
+ assertEquals("1", vars.get("regVal"));
+ assertEquals("1", vars.get("regVal_g2"));
+ assertEquals("2", vars.get("regVal_g"));
+ assertNotNull(vars.get("regVal_g0"));
+ assertNotNull(vars.get("regVal_g1"));
+ // Now rerun with match fail
+ extractor.setMatchNumber(10);
+ extractor.process();
+ assertEquals("default", vars.get("regVal"));
+ assertNull(vars.get("regVal_g0"));
+ assertNull(vars.get("regVal_g1"));
+ assertNull(vars.get("regVal_g"));
+ }
+
+ @Test
+ public void testScope1() {
result.setResponseData("<title>ONE</title>", "ISO-8859-1");
extractor.setScopeParent();
extractor.setTemplate("$1$");
@@ -413,7 +410,7 @@ public class TestRegexExtractor {
}
@Test
- public void testScope2() throws Exception {
+ public void testScope2() {
result.sampleStart();
result.setResponseData("<title>PARENT</title>", "ISO-8859-1");
result.sampleEnd();
@@ -484,5 +481,4 @@ public class TestRegexExtractor {
final String found = vars.get("regVal");
assertTrue(found.equals("ONE") || found.equals("TWO"));
}
-
}
diff --git a/src/core/src/main/java/org/apache/jmeter/report/dashboard/AbstractDataExporter.java b/src/core/src/main/java/org/apache/jmeter/report/dashboard/AbstractDataExporter.java
index 7625b5f..e0ea757 100644
--- a/src/core/src/main/java/org/apache/jmeter/report/dashboard/AbstractDataExporter.java
+++ b/src/core/src/main/java/org/apache/jmeter/report/dashboard/AbstractDataExporter.java
@@ -32,9 +32,7 @@ public abstract class AbstractDataExporter implements DataExporter {
private String name;
- /**
- * Instantiates a new abstract data exporter.
- */
+ /** Instantiates a new abstract data exporter. */
protected AbstractDataExporter() {
}
@@ -52,8 +50,7 @@ public abstract class AbstractDataExporter implements DataExporter {
* type of value to be found
* @return the value matching the data name
*/
- protected static <T> T findValue(Class<T> clazz, String data,
- ResultData root) {
+ protected static <T> T findValue(Class<T> clazz, String data, ResultData root) {
T value = null;
ResultData result = findData(data, root);
if (result instanceof ValueResultData) {
@@ -77,23 +74,23 @@ public abstract class AbstractDataExporter implements DataExporter {
* @return the ResultData matching the data name
*/
protected static ResultData findData(String data, ResultData root) {
- ResultData result = null;
String[] pathItems = StringUtils.split(data, '.');
- if (pathItems != null) {
- if (root instanceof MapResultData) {
- int count = pathItems.length;
- int index = 0;
- MapResultData map = (MapResultData) root;
- while (index < count && result == null) {
- ResultData current = map.getResult(pathItems[index]);
- if (index == count - 1) {
- result = current;
- } else {
- if (current instanceof MapResultData) {
- map = (MapResultData) current;
- index++;
- }
- }
+ if (pathItems == null || !(root instanceof MapResultData)) {
+ return null;
+ }
+
+ ResultData result = null;
+ int count = pathItems.length;
+ int index = 0;
+ MapResultData map = (MapResultData) root;
+ while (index < count && result == null) {
+ ResultData current = map.getResult(pathItems[index]);
+ if (index == count - 1) {
+ result = current;
+ } else {
+ if (current instanceof MapResultData) {
+ map = (MapResultData) current;
+ index++;
}
}
}
@@ -121,9 +118,9 @@ public abstract class AbstractDataExporter implements DataExporter {
this.name = name;
}
- protected <TProperty> TProperty getPropertyFromConfig(SubConfiguration cfg,
- String property, TProperty defaultValue, Class<TProperty> clazz)
- throws ExportException {
+ protected <TProperty> TProperty getPropertyFromConfig(
+ SubConfiguration cfg, String property, TProperty defaultValue, Class<TProperty> clazz)
+ throws ExportException {
try {
return cfg.getProperty(property, defaultValue, clazz);
} catch (ConfigurationException ex) {
diff --git a/src/core/src/main/java/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java b/src/core/src/main/java/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java
index acd8515..0512954 100644
--- a/src/core/src/main/java/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java
+++ b/src/core/src/main/java/org/apache/jmeter/report/dashboard/HtmlTemplateExporter.java
@@ -18,7 +18,6 @@
package org.apache.jmeter.report.dashboard;
import java.io.File;
-import java.io.FileFilter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.HashMap;
@@ -60,13 +59,6 @@ import freemarker.template.TemplateExceptionHandler;
* @since 3.0
*/
public class HtmlTemplateExporter extends AbstractDataExporter {
- private static final FileFilter HTML_REPORT_FILE_FILTER =
- file ->
- (file.isFile() &&
- "index.html".equals(file.getName()))
- || (file.isDirectory() &&
- ("content".equals(file.getName()) ||
- file.getName().startsWith("sbadmin2-")));
private static final String CUSTOM_GRAPH_PREFIX = "custom_";
/** Format used for non null check of parameters. */
@@ -114,7 +106,6 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
/**
* This class allows to customize data before exporting them
- *
*/
private interface ResultCustomizer {
ResultData customizeResult(ResultData result);
@@ -122,7 +113,6 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
/**
* This class allows to inject graph_options properties to the exported data
- *
*/
private static class ExtraOptionsResultCustomizer implements ResultCustomizer {
private SubConfiguration extraOptions;
@@ -147,32 +137,26 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
public ResultData customizeResult(ResultData result) {
MapResultData customizedResult = new MapResultData();
customizedResult.setResult(DATA_CTX_RESULT, result);
- if (extraOptions != null) {
- MapResultData extraResult = new MapResultData();
- for (Map.Entry<String, String> extraEntry : extraOptions
- .getProperties().entrySet()) {
- extraResult.setResult(extraEntry.getKey(),
- new ValueResultData(extraEntry.getValue()));
- }
- customizedResult.setResult(DATA_CTX_EXTRA_OPTIONS, extraResult);
+
+ if (extraOptions == null) {
+ return customizedResult;
}
+
+ MapResultData extraResult = new MapResultData();
+ extraOptions.getProperties().forEach((key, value) ->
+ extraResult.setResult(key, new ValueResultData(value)));
+ customizedResult.setResult(DATA_CTX_EXTRA_OPTIONS, extraResult);
+
return customizedResult;
}
-
}
- /**
- * This class allows to check exported data
- *
- */
+ /** This class allows to check exported data */
private interface ResultChecker {
boolean checkResult(DataContext dataContext, ResultData result);
}
- /**
- * This class allows to detect empty graphs
- *
- */
+ /** This class allows to detect empty graphs */
private static class EmptyGraphChecker implements ResultChecker {
private final boolean filtersOnlySampleSeries;
@@ -204,140 +188,104 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
this.filterPattern = filterPattern;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.jmeter.report.dashboard.HtmlTemplateExporter.ResultChecker
- * #checkResult( org.apache.jmeter.report.core.DataContext dataContext, org.apache.jmeter.report.processor.ResultData)
- */
+ /** @see ResultChecker#checkResult(DataContext, ResultData) */
@Override
public boolean checkResult(DataContext dataContext, ResultData result) {
- Boolean supportsControllerDiscrimination = findValue(Boolean.class,
+ boolean supportsControllerDiscrimination = findValue(Boolean.class,
AbstractGraphConsumer.RESULT_SUPPORTS_CONTROLLERS_DISCRIMINATION,
- result);
+ result).booleanValue();
- if (supportsControllerDiscrimination.booleanValue() && showControllerSeriesOnly
+ if (supportsControllerDiscrimination
+ && showControllerSeriesOnly
&& excludesControllers) {
// Exporter shows controller series only
// whereas the current graph support controller
- // discrimination and excludes
- // controllers
+ // discrimination and excludes controllers
log.warn("{} is set while the graph {} excludes controllers.",
ReportGeneratorConfiguration.EXPORTER_KEY_SHOW_CONTROLLERS_ONLY, graphId);
return false;
- } else {
- if (filterPattern != null) {
- // Detect whether none series matches
- // the series filter.
- ResultData seriesResult = findData(
- AbstractGraphConsumer.RESULT_SERIES, result);
- if (seriesResult instanceof ListResultData) {
-
- // Try to find at least one pattern matching
- ListResultData seriesList = (ListResultData) seriesResult;
- int count = seriesList.getSize();
- int index = 0;
- boolean matches = false;
- while (index < count && !matches) {
- ResultData currentResult = seriesList.get(index);
- if (currentResult instanceof MapResultData) {
- MapResultData seriesData = (MapResultData) currentResult;
- String name = findValue(String.class,
- AbstractGraphConsumer.RESULT_SERIES_NAME,
- seriesData);
-
- // Is the current series a controller series ?
- boolean isController = findValue(Boolean.class,
- AbstractGraphConsumer.RESULT_SERIES_IS_CONTROLLER,
- seriesData).booleanValue();
-
- matches = filterPattern.matcher(name).matches();
- if (matches) {
- // If the name matches pattern, other
- // properties can discard the series
- matches = !filtersOnlySampleSeries
- || !supportsControllerDiscrimination.booleanValue()
- || isController
- || !showControllerSeriesOnly;
- if(log.isDebugEnabled()) {
- log.debug(
- "name:{} matches pattern:{}, supportsControllerDiscrimination:{}, "
- + "isController:{}, showControllerSeriesOnly:{}",
- name, filterPattern.pattern(),
- supportsControllerDiscrimination,
- isController,
- showControllerSeriesOnly);
- }
- } else {
- // If the name does not match the pattern,
- // other properties can hold the series
- matches = filtersOnlySampleSeries
- && !supportsControllerDiscrimination.booleanValue();
- if(log.isDebugEnabled()) {
- log.debug("name:{} does not match pattern:{}, filtersOnlySampleSeries:{},"
- + " supportsControllerDiscrimination:{}",
- name, filterPattern.pattern(),
- filtersOnlySampleSeries,
- supportsControllerDiscrimination);
- }
- }
- }
- index++;
+ }
+
+ if (filterPattern == null) {
+ return true;
+ }
+
+ // Detect whether none series matches the series filter.
+ ResultData seriesResult = findData(AbstractGraphConsumer.RESULT_SERIES, result);
+ if (!(seriesResult instanceof ListResultData)) {
+ return true;
+ }
+
+ // Try to find at least one pattern matching
+ ListResultData seriesList = (ListResultData) seriesResult;
+ int count = seriesList.getSize();
+ int index = 0;
+ boolean matches = false;
+ while (index < count && !matches) {
+ ResultData currentResult = seriesList.get(index);
+ if (currentResult instanceof MapResultData) {
+ MapResultData seriesData = (MapResultData) currentResult;
+ String name = findValue(String.class,
+ AbstractGraphConsumer.RESULT_SERIES_NAME,
+ seriesData);
+
+ // Is the current series a controller series ?
+ boolean isController = findValue(Boolean.class,
+ AbstractGraphConsumer.RESULT_SERIES_IS_CONTROLLER,
+ seriesData).booleanValue();
+
+ matches = filterPattern.matcher(name).matches();
+ if (matches) {
+ // If the name matches pattern, other
+ // properties can discard the series
+ matches = !filtersOnlySampleSeries
+ || !supportsControllerDiscrimination
+ || isController
+ || !showControllerSeriesOnly;
+ if(log.isDebugEnabled()) {
+ log.debug(
+ "name:{} matches pattern:{}, supportsControllerDiscrimination:{}, "
+ + "isController:{}, showControllerSeriesOnly:{}",
+ name, filterPattern.pattern(),
+ supportsControllerDiscrimination,
+ isController,
+ showControllerSeriesOnly);
}
- if (!matches) {
- // None series matches the pattern
- log.warn("No serie matches the series_filter: {} in graph: {}",
- ReportGeneratorConfiguration.EXPORTER_KEY_SERIES_FILTER, graphId);
- return false;
+ } else {
+ // If the name does not match the pattern,
+ // other properties can hold the series
+ matches = filtersOnlySampleSeries
+ && !supportsControllerDiscrimination;
+ if (log.isDebugEnabled()) {
+ log.debug("name:{} does not match pattern:{}, filtersOnlySampleSeries:{},"
+ + " supportsControllerDiscrimination:{}",
+ name, filterPattern.pattern(),
+ filtersOnlySampleSeries,
+ supportsControllerDiscrimination);
}
}
}
+ index++;
+ }
+ if (!matches) {
+ log.warn("No series matches the series_filter: {} in graph: {}",
+ ReportGeneratorConfiguration.EXPORTER_KEY_SERIES_FILTER, graphId);
+ return false;
}
return true;
}
}
- private <TVisit> void addResultToContext(String resultKey,
- Map<String, Object> storage, DataContext dataContext,
- ResultDataVisitor<TVisit> visitor) {
- addResultToContext(resultKey, storage, dataContext, visitor, null,
- null);
- }
-
- private <TVisit> void addResultToContext(String resultKey,
- Map<String, Object> storage, DataContext dataContext,
- ResultDataVisitor<TVisit> visitor, ResultCustomizer customizer,
- ResultChecker checker) {
- Object data = storage.get(resultKey);
- if (data instanceof ResultData) {
- ResultData result = (ResultData) data;
- if (checker != null) {
- checker.checkResult(dataContext, result);
- }
- if (customizer != null) {
- result = customizer.customizeResult(result);
- }
- dataContext.put(resultKey, result.accept(visitor));
- }
- }
+ private boolean htmlReportFileFilter(File file) {
+ String fileName = file.getName();
+ boolean isIndexHtmlFile = file.isFile() && fileName.equals("index.html");
+ boolean isContentOrAdmin = fileName.equals("content") || fileName.startsWith("sbadmin2-");
- private long formatTimestamp(String key, DataContext context) {
- // FIXME Why convert to double then long (rounding ?)
- double result = Double.parseDouble((String) context.get(key));
- long timestamp = (long) result;
- // Quote the string to respect Json spec.
- context.put(key, '"' + TimeHelper.formatTimeStamp(timestamp) + '"');
- return timestamp;
+ return isIndexHtmlFile || (file.isDirectory() && isContentOrAdmin);
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.jmeter.report.dashboard.DataExporter#Export(org.apache.jmeter
- * .report.processor.SampleContext,
- * org.apache.jmeter.report.config.ReportGeneratorConfiguration)
+ /**
+ * @see DataExporter#export(SampleContext, File, ReportGeneratorConfiguration)
*/
@Override
public void export(SampleContext context, File file,
@@ -352,14 +300,18 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
DataContext dataContext = new DataContext();
// Get the configuration of the current exporter
- final ExporterConfiguration exportCfg = configuration
- .getExportConfigurations().get(getName());
+ final ExporterConfiguration exportCfg =
+ configuration.getExportConfigurations().get(getName());
// Get template directory property value
- File templateDirectory = getPropertyFromConfig(exportCfg, TEMPLATE_DIR,
- new File(JMeterUtils.getJMeterBinDir(), TEMPLATE_DIR_NAME_DEFAULT), File.class);
+ File templateDirectory = getPropertyFromConfig(
+ exportCfg,
+ TEMPLATE_DIR,
+ new File(JMeterUtils.getJMeterBinDir(), TEMPLATE_DIR_NAME_DEFAULT),
+ File.class);
if (!templateDirectory.isDirectory()) {
- String message = String.format(INVALID_TEMPLATE_DIRECTORY_FMT,
+ String message = String.format(
+ INVALID_TEMPLATE_DIRECTORY_FMT,
templateDirectory.getAbsolutePath());
log.error(message);
throw new ExportException(message);
@@ -373,18 +325,18 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
outputDir = new File(globallyDefinedOutputDir);
}
- JOrphanUtils.canSafelyWriteToFolder(outputDir, HTML_REPORT_FILE_FILTER);
+ JOrphanUtils.canSafelyWriteToFolder(outputDir, this::htmlReportFileFilter);
if (log.isInfoEnabled()) {
log.info("Will generate dashboard in folder: {}", outputDir.getAbsolutePath());
}
- // Add the flag defining whether only sample series are filtered to the
- // context
- final boolean filtersOnlySampleSeries = exportCfg
- .filtersOnlySampleSeries();
- addToContext(DATA_CTX_FILTERS_ONLY_SAMPLE_SERIES,
- Boolean.valueOf(filtersOnlySampleSeries), dataContext);
+ // Add a flag defining if only sample series are filtered to the context
+ final boolean filtersOnlySampleSeries = exportCfg.filtersOnlySampleSeries();
+ addToContext(
+ DATA_CTX_FILTERS_ONLY_SAMPLE_SERIES,
+ Boolean.valueOf(filtersOnlySampleSeries),
+ dataContext);
// Add the series filter to the context
final String seriesFilter = exportCfg.getSeriesFilter();
@@ -399,76 +351,73 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
addToContext(DATA_CTX_SERIES_FILTER, seriesFilter, dataContext);
// Add the flag defining whether only controller series are displayed
- final boolean showControllerSeriesOnly = exportCfg
- .showControllerSeriesOnly();
- addToContext(DATA_CTX_SHOW_CONTROLLERS_ONLY,
- Boolean.valueOf(showControllerSeriesOnly), dataContext);
+ final boolean showControllerSeriesOnly = exportCfg.showControllerSeriesOnly();
+ addToContext(
+ DATA_CTX_SHOW_CONTROLLERS_ONLY,
+ Boolean.valueOf(showControllerSeriesOnly),
+ dataContext);
JsonizerVisitor jsonizer = new JsonizerVisitor();
Map<String, Object> storedData = context.getData();
// Add begin date consumer result to the data context
- addResultToContext(ReportGenerator.BEGIN_DATE_CONSUMER_NAME, storedData,
- dataContext, jsonizer);
+ addResultToContext(
+ ReportGenerator.BEGIN_DATE_CONSUMER_NAME, storedData, dataContext, jsonizer);
// Add end date summary consumer result to the data context
- addResultToContext(ReportGenerator.END_DATE_CONSUMER_NAME, storedData,
- dataContext, jsonizer);
+ addResultToContext(
+ ReportGenerator.END_DATE_CONSUMER_NAME, storedData, dataContext, jsonizer);
// Add Apdex summary consumer result to the data context
- addResultToContext(ReportGenerator.APDEX_SUMMARY_CONSUMER_NAME,
- storedData, dataContext, jsonizer);
+ addResultToContext(
+ ReportGenerator.APDEX_SUMMARY_CONSUMER_NAME, storedData, dataContext, jsonizer);
// Add errors summary consumer result to the data context
- addResultToContext(ReportGenerator.ERRORS_SUMMARY_CONSUMER_NAME,
- storedData, dataContext, jsonizer);
+ addResultToContext(
+ ReportGenerator.ERRORS_SUMMARY_CONSUMER_NAME, storedData, dataContext, jsonizer);
// Add requests summary consumer result to the data context
- addResultToContext(ReportGenerator.REQUESTS_SUMMARY_CONSUMER_NAME,
- storedData, dataContext, jsonizer);
+ addResultToContext(
+ ReportGenerator.REQUESTS_SUMMARY_CONSUMER_NAME, storedData, dataContext, jsonizer);
// Add statistics summary consumer result to the data context
- addResultToContext(ReportGenerator.STATISTICS_SUMMARY_CONSUMER_NAME,
- storedData, dataContext, jsonizer);
+ addResultToContext(
+ ReportGenerator.STATISTICS_SUMMARY_CONSUMER_NAME, storedData, dataContext, jsonizer);
// Add Top 5 errors by sampler consumer result to the data context
- addResultToContext(ReportGenerator.TOP5_ERRORS_BY_SAMPLER_CONSUMER_NAME,
- storedData, dataContext, jsonizer);
+ addResultToContext(
+ ReportGenerator.TOP5_ERRORS_BY_SAMPLER_CONSUMER_NAME, storedData, dataContext, jsonizer);
// Collect graph results from sample context and transform them into
// Json strings to inject in the data context
ExtraOptionsResultCustomizer customizer = new ExtraOptionsResultCustomizer();
- EmptyGraphChecker checker = new EmptyGraphChecker(
- filtersOnlySampleSeries, showControllerSeriesOnly,
- filterPattern);
- DataContext customGraphs = new DataContext();
+ EmptyGraphChecker checker =
+ new EmptyGraphChecker(filtersOnlySampleSeries, showControllerSeriesOnly, filterPattern);
Map<String, GraphConfiguration> mapConfiguration = new HashMap<>();
- for (Map.Entry<String, GraphConfiguration> graphEntry : configuration
- .getGraphConfigurations().entrySet()) {
+ DataContext customGraphs = new DataContext();
+
+ for (Map.Entry<String, GraphConfiguration> graphEntry : configuration.getGraphConfigurations().entrySet()) {
final String graphId = graphEntry.getKey();
final GraphConfiguration graphConfiguration = graphEntry.getValue();
- final SubConfiguration extraOptions = exportCfg.getGraphExtraConfigurations().get(graphId);
// Initialize customizer and checker
- customizer.setExtraOptions(extraOptions);
- checker.setExcludesControllers(
- graphConfiguration.excludesControllers());
+ customizer.setExtraOptions(exportCfg.getGraphExtraConfigurations().get(graphId));
+ checker.setExcludesControllers(graphConfiguration.excludesControllers());
checker.setGraphId(graphId);
mapConfiguration.put(graphId, graphConfiguration);
- if(graphId.startsWith(CUSTOM_GRAPH_PREFIX)) {
- addResultToContext(graphId, storedData, customGraphs, jsonizer,
- customizer, checker);
+ if (graphId.startsWith(CUSTOM_GRAPH_PREFIX)) {
+ addResultToContext(
+ graphId, storedData, customGraphs, jsonizer, customizer, checker);
} else {
// Export graph data
- addResultToContext(graphId, storedData, dataContext, jsonizer,
- customizer, checker);
+ addResultToContext(
+ graphId, storedData, dataContext, jsonizer, customizer, checker);
}
}
dataContext.put("graphConfigurations", mapConfiguration);
dataContext.put("customsGraphsData", customGraphs);
- // Replace the begin date with its formatted string and store the old
- // timestamp
+ // Replace the begin date with its formatted string and store the old timestamp
long oldTimestamp = formatTimestamp(
ReportGenerator.BEGIN_DATE_CONSUMER_NAME, dataContext);
@@ -477,11 +426,13 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
// Add time zone offset (that matches the begin date) to the context
TimeZone timezone = TimeZone.getDefault();
- addToContext(DATA_CTX_TIMEZONE_OFFSET,
- Integer.valueOf(timezone.getOffset(oldTimestamp)), dataContext);
+ addToContext(
+ DATA_CTX_TIMEZONE_OFFSET,
+ Integer.valueOf(timezone.getOffset(oldTimestamp)),
+ dataContext);
// Add report title to the context
- if(!StringUtils.isEmpty(configuration.getReportTitle())) {
+ if (StringUtils.isNotEmpty(configuration.getReportTitle())) {
dataContext.put(DATA_CTX_REPORT_TITLE, StringEscapeUtils.escapeHtml4(configuration.getReportTitle()));
}
@@ -489,22 +440,21 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
addToContext(DATA_CTX_TESTFILE, file.getName(), dataContext);
// Add the overall filter property to the context
- addToContext(DATA_CTX_OVERALL_FILTER, configuration.getSampleFilter(),
- dataContext);
+ addToContext(DATA_CTX_OVERALL_FILTER, configuration.getSampleFilter(), dataContext);
// Walk template directory to copy files and process templated ones
- Configuration templateCfg = new Configuration(
- Configuration.getVersion());
+ Configuration templateCfg = new Configuration(Configuration.getVersion());
try {
templateCfg.setDirectoryForTemplateLoading(templateDirectory);
- templateCfg.setTemplateExceptionHandler(
- TemplateExceptionHandler.RETHROW_HANDLER);
+ templateCfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
if (log.isInfoEnabled()) {
log.info("Report will be generated in: {}, creating folder structure", outputDir.getAbsolutePath());
}
FileUtils.forceMkdir(outputDir);
TemplateVisitor visitor = new TemplateVisitor(
- templateDirectory.toPath(), outputDir.toPath(), templateCfg,
+ templateDirectory.toPath(),
+ outputDir.toPath(),
+ templateCfg,
dataContext);
Files.walkFileTree(templateDirectory.toPath(), visitor);
} catch (IOException ex) {
@@ -512,6 +462,36 @@ public class HtmlTemplateExporter extends AbstractDataExporter {
}
log.debug("End of template processing");
+ }
+ private <TVisit> void addResultToContext(
+ String resultKey, Map<String, Object> storage,
+ DataContext dataContext, ResultDataVisitor<TVisit> visitor) {
+ addResultToContext(resultKey, storage, dataContext, visitor, null, null);
+ }
+
+ private <TVisit> void addResultToContext(
+ String resultKey, Map<String, Object> storage, DataContext dataContext,
+ ResultDataVisitor<TVisit> visitor, ResultCustomizer customizer, ResultChecker checker) {
+ Object data = storage.get(resultKey);
+ if (data instanceof ResultData) {
+ ResultData result = (ResultData) data;
+ if (checker != null) {
+ checker.checkResult(dataContext, result);
+ }
+ if (customizer != null) {
+ result = customizer.customizeResult(result);
+ }
+ dataContext.put(resultKey, result.accept(visitor));
+ }
+ }
+
+ private long formatTimestamp(String key, DataContext context) {
+ // FIXME Why convert to double then long (rounding ?)
+ double result = Double.parseDouble((String) context.get(key));
+ long timestamp = (long) result;
+ // Quote the string to respect Json spec.
+ context.put(key, '"' + TimeHelper.formatTimeStamp(timestamp) + '"');
+ return timestamp;
}
}
diff --git a/src/jorphan/src/main/java/org/apache/commons/cli/avalon/CLOption.java b/src/jorphan/src/main/java/org/apache/commons/cli/avalon/CLOption.java
index 0a1ef9a..c2bba64 100644
--- a/src/jorphan/src/main/java/org/apache/commons/cli/avalon/CLOption.java
+++ b/src/jorphan/src/main/java/org/apache/commons/cli/avalon/CLOption.java
@@ -58,7 +58,7 @@ public final class CLOption {
* @return the argument
*/
public final String getArgument(final int index) {
- if (null == this.arguments || index < 0 || index >= this.arguments.length) {
+ if (this.arguments == null || index < 0 || index >= this.arguments.length) {
return null;
} else {
return this.arguments[index];