Skip to content

Commit bbce13d

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

File tree

8 files changed

+30
-38
lines changed

8 files changed

+30
-38
lines changed

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

Lines changed: 15 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,18 @@ 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(), property -> {
185+
Object value = property.getObjectValue();
186+
return value instanceof Argument && ((Argument) value).isEnabled();
187+
});
188+
}
189+
176190
/**
177191
* Create a string representation of the arguments.
178192
*

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 & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@
159159
import org.apache.jmeter.services.FileServer;
160160
import org.apache.jmeter.testelement.property.CollectionProperty;
161161
import org.apache.jmeter.testelement.property.JMeterProperty;
162-
import org.apache.jmeter.testelement.property.PropertyIterator;
163162
import org.apache.jmeter.threads.JMeterContextService;
164163
import org.apache.jmeter.threads.JMeterVariables;
165164
import org.apache.jmeter.util.JMeterUtils;
@@ -1571,15 +1570,12 @@ protected String setupHttpEntityEnclosingRequestData(HttpEntityEnclosingRequestB
15711570
}
15721571
// Create the parts
15731572
// Add any parameters
1574-
for (JMeterProperty jMeterProperty : getArguments()) {
1573+
for (JMeterProperty jMeterProperty : getArguments().getEnabledArguments()) {
15751574
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
15761575
String parameterName = arg.getName();
15771576
if (arg.isSkippable(parameterName)) {
15781577
continue;
15791578
}
1580-
if (!arg.isEnabled()) {
1581-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
1582-
}
15831579
ContentType contentType;
15841580
if (arg.getContentType().indexOf(';') >= 0) {
15851581
// assume, that the content type contains charset info
@@ -1656,11 +1652,8 @@ else if(ADD_CONTENT_TYPE_TO_POST_IF_MISSING) {
16561652

16571653
// Just append all the parameter values, and use that as the post body
16581654
StringBuilder postBody = new StringBuilder();
1659-
for (JMeterProperty jMeterProperty : getArguments()) {
1655+
for (JMeterProperty jMeterProperty : getArguments().getEnabledArguments()) {
16601656
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
1661-
if (!arg.isEnabled()) {
1662-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
1663-
}
16641657
postBody.append(arg.getEncodedValue(contentEncoding));
16651658
}
16661659
// Let StringEntity perform the encoding
@@ -1802,20 +1795,16 @@ else if(getSendParameterValuesAsPostBody()) {
18021795
private UrlEncodedFormEntity createUrlEncodedFormEntity(final String urlContentEncoding) throws UnsupportedEncodingException {
18031796
// It is a normal request, with parameter names and values
18041797
// Add the parameters
1805-
PropertyIterator args = getArguments().iterator();
18061798
List<NameValuePair> nvps = new ArrayList<>();
1807-
while (args.hasNext()) {
1808-
HTTPArgument arg = (HTTPArgument) args.next().getObjectValue();
1799+
for (JMeterProperty jMeterProperty: getArguments().getEnabledArguments()) {
1800+
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
18091801
// The HTTPClient always urlencodes both name and value,
18101802
// so if the argument is already encoded, we have to decode
18111803
// it before adding it to the post request
18121804
String parameterName = arg.getName();
18131805
if (arg.isSkippable(parameterName)) {
18141806
continue;
18151807
}
1816-
if (!arg.isEnabled()) {
1817-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
1818-
}
18191808
String parameterValue = arg.getValue();
18201809
if (!arg.isAlwaysEncoded()) {
18211810
// 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 & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@
8181
import org.apache.jmeter.testelement.ThreadListener;
8282
import org.apache.jmeter.testelement.property.CollectionProperty;
8383
import org.apache.jmeter.testelement.property.JMeterProperty;
84-
import org.apache.jmeter.testelement.property.PropertyIterator;
8584
import org.apache.jmeter.testelement.schema.PropertiesAccessor;
8685
import org.apache.jmeter.testelement.schema.PropertyDescriptor;
8786
import org.apache.jmeter.threads.JMeterContext;
@@ -409,7 +408,7 @@ public boolean getSendParameterValuesAsPostBody() {
409408
return true;
410409
} else {
411410
boolean hasArguments = false;
412-
for (JMeterProperty jMeterProperty : getArguments()) {
411+
for (JMeterProperty jMeterProperty : getArguments().getEnabledArguments()) {
413412
hasArguments = true;
414413
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
415414
if (arg.getName() != null && !arg.getName().isEmpty()) {
@@ -1155,9 +1154,10 @@ public String getQueryString() {
11551154
*/
11561155
public String getQueryString(final String contentEncoding) {
11571156

1158-
CollectionProperty arguments = getArguments().getArguments();
1157+
Arguments args = getArguments();
1158+
Iterator<JMeterProperty> iter = args.getEnabledArguments().iterator();
11591159
// Optimisation : avoid building useless objects if empty arguments
1160-
if(arguments.isEmpty()) {
1160+
if (!iter.hasNext()) {
11611161
return "";
11621162
}
11631163
String lContentEncoding = contentEncoding;
@@ -1167,8 +1167,7 @@ public String getQueryString(final String contentEncoding) {
11671167
lContentEncoding = EncoderCache.URL_ARGUMENT_ENCODING;
11681168
}
11691169

1170-
StringBuilder buf = new StringBuilder(arguments.size() * 15);
1171-
PropertyIterator iter = arguments.iterator();
1170+
StringBuilder buf = new StringBuilder(args.getArgumentCount() * 15);
11721171
boolean first = true;
11731172
while (iter.hasNext()) {
11741173
HTTPArgument item = null;
@@ -1189,9 +1188,6 @@ public String getQueryString(final String contentEncoding) {
11891188
if (encodedName.isEmpty()) {
11901189
continue; // Skip parameters with a blank name (allows use of optional variables in parameter lists)
11911190
}
1192-
if(!item.isEnabled()){
1193-
continue; // Skip parameters if they've been disabled from GUI using the checkbox
1194-
}
11951191
if (!first) {
11961192
buf.append(QRY_SEP);
11971193
} else {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ 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();
196196
if (arg.isSkippable(parameterName)) {
@@ -299,7 +299,7 @@ public void setHeaders(URLConnection connection, HTTPSamplerBase sampler) throws
299299

300300
// Just append all the parameter values, and use that as the post body
301301
StringBuilder postBodyBuffer = new StringBuilder();
302-
for (JMeterProperty jMeterProperty : sampler.getArguments()) {
302+
for (JMeterProperty jMeterProperty : sampler.getArguments().getEnabledArguments()) {
303303
HTTPArgument arg = (HTTPArgument) jMeterProperty.getObjectValue();
304304
postBodyBuffer.append(arg.getEncodedValue(contentEncoding));
305305
}

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

src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/util/HTTPArgument.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,14 @@ public HTTPArgument(String name, String value, boolean alreadyEncoded) {
134134
}
135135

136136
/**
137-
* Construct a new HTTPArgument instance; enabled and alwaysEncoded set to true.
137+
* Construct a new HTTPArgument instance; alwaysEncoded is set to true.
138138
*
139139
* @param name the name of the parameter
140140
* @param value the value of the parameter
141141
* @param alreadyEncoded true if the name and value is already encoded, in which case they are decoded before storage.
142142
* @param contentEncoding the encoding used for the parameter value
143143
*/
144144
public HTTPArgument(String name, String value, boolean alreadyEncoded, String contentEncoding) {
145-
setEnabled(true);
146145
setAlwaysEncoded(true);
147146
if (alreadyEncoded) {
148147
try {

0 commit comments

Comments
 (0)