Skip to content

Commit 3a066b8

Browse files
committed
refactor: factor out getEnabledArguments to avoid "isEnabled" check all over the place
1 parent 4ea8f7e commit 3a066b8

File tree

7 files changed

+32
-54
lines changed

7 files changed

+32
-54
lines changed

src/core/src/main/java/org/apache/jmeter/config/Arguments.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@
2323
import java.util.List;
2424
import java.util.Map;
2525

26+
import org.apache.commons.collections4.iterators.FilterIterator;
2627
import org.apache.jmeter.testelement.property.CollectionProperty;
2728
import org.apache.jmeter.testelement.property.JMeterProperty;
2829
import org.apache.jmeter.testelement.property.PropertyIterator;
2930
import org.apache.jmeter.testelement.property.TestElementProperty;
3031
import org.apache.jmeter.testelement.schema.PropertiesAccessor;
32+
import org.apiguardian.api.API;
3133

3234
/**
3335
* A set of Argument objects.
@@ -100,7 +102,7 @@ public Map<String, String> getArgumentsAsMap() {
100102
// that this element's values prevail over defaults provided by
101103
// configuration
102104
// elements:
103-
if (!argMap.containsKey(arg.getName())) {
105+
if (!argMap.containsKey(arg.getName()) && arg.isEnabled()) {
104106
argMap.put(arg.getName(), arg.getValue());
105107
}
106108
}
@@ -173,6 +175,21 @@ public PropertyIterator iterator() {
173175
return getArguments().iterator();
174176
}
175177

178+
/**
179+
* Returns the list of enabled arguments.
180+
* @return the list of enabled arguments
181+
*/
182+
@API(since = "5.6", status = API.Status.EXPERIMENTAL)
183+
public Iterable<JMeterProperty> getEnabledArguments() {
184+
return () -> new FilterIterator<>(iterator(), value -> {
185+
if (!(value instanceof Argument)) {
186+
return false;
187+
}
188+
Argument arg = (Argument) value;
189+
return !arg.isSkippable(value.getName()) && arg.isEnabled();
190+
});
191+
}
192+
176193
/**
177194
* Create a string representation of the arguments.
178195
*

src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/config/gui/UrlConfigGui.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,8 @@ private static String computePostBody(Arguments arguments) {
261261
*/
262262
private static String computePostBody(Arguments arguments, boolean crlfToLF) {
263263
StringBuilder postBody = new StringBuilder();
264-
for (JMeterProperty argument : arguments) {
264+
for (JMeterProperty argument : arguments.getEnabledArguments()) {
265265
HTTPArgument arg = (HTTPArgument) argument.getObjectValue();
266-
if (!arg.isEnabled()) {
267-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
268-
}
269266
String value = arg.getValue();
270267
if (crlfToLF) {
271268
value = value.replaceAll("\r\n", "\n"); // See modifyTestElement

src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/AjpSampler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ private String setConnectionHeaders(URL url, String host, String method)
279279
setString(HTTPConstants.APPLICATION_X_WWW_FORM_URLENCODED);
280280
StringBuilder sb = new StringBuilder();
281281
boolean first = true;
282-
for (JMeterProperty arg : getArguments()) {
282+
for (JMeterProperty arg : getArguments().getEnabledArguments()) {
283283
if (first) {
284284
first = false;
285285
} else {

src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1571,15 +1571,9 @@ protected String setupHttpEntityEnclosingRequestData(HttpEntityEnclosingRequestB
15711571
}
15721572
// Create the parts
15731573
// Add any parameters
1574-
for (JMeterProperty jMeterProperty : getArguments()) {
1574+
for (JMeterProperty jMeterProperty : getArguments().getEnabledArguments()) {
15751575
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
15761576
String parameterName = arg.getName();
1577-
if (arg.isSkippable(parameterName)) {
1578-
continue;
1579-
}
1580-
if (!arg.isEnabled()) {
1581-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
1582-
}
15831577
ContentType contentType;
15841578
if (arg.getContentType().indexOf(';') >= 0) {
15851579
// assume, that the content type contains charset info
@@ -1656,11 +1650,8 @@ else if(ADD_CONTENT_TYPE_TO_POST_IF_MISSING) {
16561650

16571651
// Just append all the parameter values, and use that as the post body
16581652
StringBuilder postBody = new StringBuilder();
1659-
for (JMeterProperty jMeterProperty : getArguments()) {
1653+
for (JMeterProperty jMeterProperty : getArguments().getEnabledArguments()) {
16601654
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
1661-
if (!arg.isEnabled()) {
1662-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
1663-
}
16641655
postBody.append(arg.getEncodedValue(contentEncoding));
16651656
}
16661657
// Let StringEntity perform the encoding
@@ -1802,20 +1793,13 @@ else if(getSendParameterValuesAsPostBody()) {
18021793
private UrlEncodedFormEntity createUrlEncodedFormEntity(final String urlContentEncoding) throws UnsupportedEncodingException {
18031794
// It is a normal request, with parameter names and values
18041795
// Add the parameters
1805-
PropertyIterator args = getArguments().iterator();
18061796
List<NameValuePair> nvps = new ArrayList<>();
1807-
while (args.hasNext()) {
1808-
HTTPArgument arg = (HTTPArgument) args.next().getObjectValue();
1797+
for (JMeterProperty jMeterProperty: getArguments().getEnabledArguments()) {
1798+
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
18091799
// The HTTPClient always urlencodes both name and value,
18101800
// so if the argument is already encoded, we have to decode
18111801
// it before adding it to the post request
18121802
String parameterName = arg.getName();
1813-
if (arg.isSkippable(parameterName)) {
1814-
continue;
1815-
}
1816-
if (!arg.isEnabled()) {
1817-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
1818-
}
18191803
String parameterValue = arg.getValue();
18201804
if (!arg.isAlwaysEncoded()) {
18211805
// The value is already encoded by the user

src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/HTTPSamplerBase.java

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -408,15 +408,7 @@ public boolean getSendParameterValuesAsPostBody() {
408408
if (getPostBodyRaw()) {
409409
return true;
410410
} else {
411-
boolean hasArguments = false;
412-
for (JMeterProperty jMeterProperty : getArguments()) {
413-
hasArguments = true;
414-
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
415-
if (arg.getName() != null && !arg.getName().isEmpty()) {
416-
return false;
417-
}
418-
}
419-
return hasArguments;
411+
return getArguments().getEnabledArguments().iterator().hasNext();
420412
}
421413
}
422414

@@ -1155,9 +1147,10 @@ public String getQueryString() {
11551147
*/
11561148
public String getQueryString(final String contentEncoding) {
11571149

1158-
CollectionProperty arguments = getArguments().getArguments();
1150+
Arguments args = getArguments();
1151+
Iterator<JMeterProperty> iter = args.getEnabledArguments().iterator();
11591152
// Optimisation : avoid building useless objects if empty arguments
1160-
if(arguments.isEmpty()) {
1153+
if (!iter.hasNext()) {
11611154
return "";
11621155
}
11631156
String lContentEncoding = contentEncoding;
@@ -1167,8 +1160,7 @@ public String getQueryString(final String contentEncoding) {
11671160
lContentEncoding = EncoderCache.URL_ARGUMENT_ENCODING;
11681161
}
11691162

1170-
StringBuilder buf = new StringBuilder(arguments.size() * 15);
1171-
PropertyIterator iter = arguments.iterator();
1163+
StringBuilder buf = new StringBuilder(args.getArgumentCount() * 15);
11721164
boolean first = true;
11731165
while (iter.hasNext()) {
11741166
HTTPArgument item = null;
@@ -1186,12 +1178,6 @@ public String getQueryString(final String contentEncoding) {
11861178
item = new HTTPArgument((Argument) objectValue);
11871179
}
11881180
final String encodedName = item.getEncodedName();
1189-
if (encodedName.isEmpty()) {
1190-
continue; // Skip parameters with a blank name (allows use of optional variables in parameter lists)
1191-
}
1192-
if(!item.isEnabled()){
1193-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
1194-
}
11951181
if (!first) {
11961182
buf.append(QRY_SEP);
11971183
} else {

src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/PostWriter.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,9 @@ public void setHeaders(URLConnection connection, HTTPSamplerBase sampler) throws
190190
ByteArrayOutputStream bos = new ByteArrayOutputStream();
191191
OutputStreamWriter osw = new OutputStreamWriter(bos, contentEncoding);
192192
// Add any parameters
193-
for (JMeterProperty jMeterProperty : sampler.getArguments()) {
193+
for (JMeterProperty jMeterProperty : sampler.getArguments().getEnabledArguments()) {
194194
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
195195
String parameterName = arg.getName();
196-
if (arg.isSkippable(parameterName)) {
197-
continue;
198-
}
199196
// Write multipart for parameter
200197
writeFormMultipart(osw, contentEncoding, parameterName, arg.getValue(), sampler.getDoBrowserCompatibleMultipart());
201198
}
@@ -299,7 +296,7 @@ public void setHeaders(URLConnection connection, HTTPSamplerBase sampler) throws
299296

300297
// Just append all the parameter values, and use that as the post body
301298
StringBuilder postBodyBuffer = new StringBuilder();
302-
for (JMeterProperty jMeterProperty : sampler.getArguments()) {
299+
for (JMeterProperty jMeterProperty : sampler.getArguments().getEnabledArguments()) {
303300
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
304301
postBodyBuffer.append(arg.getEncodedValue(contentEncoding));
305302
}

src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/sampler/PutWriter.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,8 @@ else if(sampler.getSendParameterValuesAsPostBody()) {
8484

8585
// Just append all the parameter values, and use that as the put body
8686
StringBuilder putBodyBuffer = new StringBuilder();
87-
for (JMeterProperty jMeterProperty : sampler.getArguments()) {
87+
for (JMeterProperty jMeterProperty : sampler.getArguments().getEnabledArguments()) {
8888
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
89-
if (!arg.isEnabled()) {
90-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
91-
}
9289
putBodyBuffer.append(arg.getEncodedValue(contentEncoding));
9390
}
9491

0 commit comments

Comments
 (0)