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/19 12:01:53 UTC
[jmeter] branch master updated: ProxyControl: Format, renaming,
removed invalid throws and comment fixes (#492)
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 1f7f6b4 ProxyControl: Format, renaming, removed invalid throws and comment fixes (#492)
1f7f6b4 is described below
commit 1f7f6b4a3b05b7c7a63a9f531b93c2dd5723090b
Author: Graham Russell <gr...@ham1.co.uk>
AuthorDate: Thu Sep 19 13:01:48 2019 +0100
ProxyControl: Format, renaming, removed invalid throws and comment fixes (#492)
Contributed by Graham Russell
---
.../jmeter/protocol/http/proxy/ProxyControl.java | 277 ++++++++-------------
.../protocol/http/proxy/TestProxyControl.java | 251 ++++++++++---------
2 files changed, 225 insertions(+), 303 deletions(-)
diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/ProxyControl.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
index f301f91..c534752 100644
--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
+++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
@@ -23,7 +23,6 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
@@ -106,11 +105,7 @@ import org.apache.oro.text.regex.Perl5Compiler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
-/**
- * Class handles storing of generated samples, etc
- * For unit tests, see TestProxyControl
- */
+/** Class handles storing of generated samples etc. */
public class ProxyControl extends GenericController implements NonTestElement {
private static final Logger log = LoggerFactory.getLogger(ProxyControl.class);
@@ -118,67 +113,39 @@ public class ProxyControl extends GenericController implements NonTestElement {
private static final long serialVersionUID = 240L;
private static final String ASSERTION_GUI = AssertionGui.class.getName();
-
-
private static final String TRANSACTION_CONTROLLER_GUI = TransactionControllerGui.class.getName();
-
private static final String LOGIC_CONTROLLER_GUI = LogicControllerGui.class.getName();
-
private static final String AUTH_PANEL = AuthPanel.class.getName();
-
private static final String AUTH_MANAGER = AuthManager.class.getName();
public static final int DEFAULT_PORT = 8888;
-
// and as a string
- public static final String DEFAULT_PORT_S =
- Integer.toString(DEFAULT_PORT);// Used by GUI
+ public static final String DEFAULT_PORT_S = Integer.toString(DEFAULT_PORT);
//+ JMX file attributes
private static final String PORT = "ProxyControlGui.port"; // $NON-NLS-1$
-
private static final String DOMAINS = "ProxyControlGui.domains"; // $NON-NLS-1$
-
private static final String EXCLUDE_LIST = "ProxyControlGui.exclude_list"; // $NON-NLS-1$
-
private static final String INCLUDE_LIST = "ProxyControlGui.include_list"; // $NON-NLS-1$
-
private static final String CAPTURE_HTTP_HEADERS = "ProxyControlGui.capture_http_headers"; // $NON-NLS-1$
-
private static final String ADD_ASSERTIONS = "ProxyControlGui.add_assertion"; // $NON-NLS-1$
-
private static final String GROUPING_MODE = "ProxyControlGui.grouping_mode"; // $NON-NLS-1$
-
private static final String SAMPLER_TYPE_NAME = "ProxyControlGui.sampler_type_name"; // $NON-NLS-1$
-
private static final String SAMPLER_REDIRECT_AUTOMATICALLY = "ProxyControlGui.sampler_redirect_automatically"; // $NON-NLS-1$
-
private static final String SAMPLER_FOLLOW_REDIRECTS = "ProxyControlGui.sampler_follow_redirects"; // $NON-NLS-1$
-
private static final String USE_KEEPALIVE = "ProxyControlGui.use_keepalive"; // $NON-NLS-1$
-
private static final String SAMPLER_DOWNLOAD_IMAGES = "ProxyControlGui.sampler_download_images"; // $NON-NLS-1$
-
private static final String HTTP_SAMPLER_NAMING_MODE = "ProxyControlGui.proxy_http_sampler_naming_mode"; // $NON-NLS-1$
-
private static final String PREFIX_HTTP_SAMPLER_NAME = "ProxyControlGui.proxy_prefix_http_sampler_name"; // $NON-NLS-1$
-
private static final String PROXY_PAUSE_HTTP_SAMPLER = "ProxyControlGui.proxy_pause_http_sampler"; // $NON-NLS-1$
-
private static final String DEFAULT_ENCODING_PROPERTY = "ProxyControlGui.default_encoding"; // $NON-NLS-1$
-
private static final String REGEX_MATCH = "ProxyControlGui.regex_match"; // $NON-NLS-1$
-
private static final String CONTENT_TYPE_EXCLUDE = "ProxyControlGui.content_type_exclude"; // $NON-NLS-1$
-
private static final String CONTENT_TYPE_INCLUDE = "ProxyControlGui.content_type_include"; // $NON-NLS-1$
-
private static final String NOTIFY_CHILD_SAMPLER_LISTENERS_FILTERED = "ProxyControlGui.notify_child_sl_filtered"; // $NON-NLS-1$
- private static final String BEARER_AUTH = "Bearer";
-
+ private static final String BEARER_AUTH = "Bearer"; // $NON-NLS-1$
private static final String BASIC_AUTH = "Basic"; // $NON-NLS-1$
-
private static final String DIGEST_AUTH = "Digest"; // $NON-NLS-1$
//- JMX file attributes
@@ -190,27 +157,25 @@ public class ProxyControl extends GenericController implements NonTestElement {
private static final int GROUPING_STORE_FIRST_ONLY = 3;
private static final int GROUPING_IN_TRANSACTION_CONTROLLERS = 4;
-
// Original numeric order (we now use strings)
private static final String SAMPLER_TYPE_HTTP_SAMPLER_JAVA = "0";
private static final String SAMPLER_TYPE_HTTP_SAMPLER_HC3_1 = "1";
private static final String SAMPLER_TYPE_HTTP_SAMPLER_HC4 = "2";
- private long sampleGap; // $NON-NLS-1$
- // Detect if user has pressed a new link
+ private long sampleGap;
// for ssl connection
private static final String KEYSTORE_TYPE =
- JMeterUtils.getPropDefault("proxy.cert.type", "JKS"); // $NON-NLS-1$ $NON-NLS-2$
+ JMeterUtils.getPropDefault("proxy.cert.type", "JKS"); // $NON-NLS-1$ $NON-NLS-2$
// Proxy configuration SSL
private static final String CERT_DIRECTORY =
- JMeterUtils.getPropDefault("proxy.cert.directory", JMeterUtils.getJMeterBinDir()); // $NON-NLS-1$
+ JMeterUtils.getPropDefault("proxy.cert.directory", JMeterUtils.getJMeterBinDir()); // $NON-NLS-1$
private static final String CERT_FILE_DEFAULT = "proxyserver.jks";// $NON-NLS-1$
private static final String CERT_FILE =
- JMeterUtils.getPropDefault("proxy.cert.file", CERT_FILE_DEFAULT); // $NON-NLS-1$
+ JMeterUtils.getPropDefault("proxy.cert.file", CERT_FILE_DEFAULT); // $NON-NLS-1$
private static final File CERT_PATH = new File(CERT_DIRECTORY, CERT_FILE);
@@ -218,19 +183,12 @@ public class ProxyControl extends GenericController implements NonTestElement {
private static final String DEFAULT_PASSWORD = "password"; // $NON-NLS-1$ NOSONAR only default password, if user has not defined one
- /**
- * Keys for user preferences
- */
+ /** Keys for user preferences */
private static final String USER_PASSWORD_KEY = "proxy_cert_password"; // NOSONAR not a hardcoded password
- /**
- * Note: Windows user preferences are stored relative to: HKEY_CURRENT_USER\Software\JavaSoft\Prefs
- */
+ // Note: Windows user preferences are stored relative to: HKEY_CURRENT_USER\Software\JavaSoft\Prefs
private static final Preferences PREFERENCES = Preferences.userNodeForPackage(ProxyControl.class);
- /**
- * Whether to use dynamic key generation (if supported)
- */
private static final boolean USE_DYNAMIC_KEYS = JMeterUtils.getPropDefault("proxy.cert.dynamic_keys", true); // $NON-NLS-1$
// The alias to be used if dynamic host names are not possible
@@ -244,7 +202,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
public enum KeystoreMode {
USER_KEYSTORE, // user-provided keystore
JMETER_KEYSTORE, // keystore generated by JMeter; single entry
- DYNAMIC_KEYSTORE, // keystore generated by JMeter; dynamic entries
+ DYNAMIC_KEYSTORE,// keystore generated by JMeter; dynamic entries
NONE // cannot use keystore
}
@@ -276,19 +234,12 @@ public class ProxyControl extends GenericController implements NonTestElement {
/**
* Whether to use the redirect disabling feature (can be switched off if it does not work)
*/
- private static final boolean ATTEMPT_REDIRECT_DISABLING =
+ private static final boolean USE_REDIRECT_DISABLING =
JMeterUtils.getPropDefault("proxy.redirect.disabling", true); // $NON-NLS-1$
- /**
- * Although this field is mutable, it is only accessed within the synchronized method deliverSampler()
- */
+ // Although this field is mutable, it is only accessed within the synchronized method deliverSampler()
private static String LAST_REDIRECT = null;
- /*
- * TODO this assumes that the redirected response will always immediately follow the original response.
- * This may not always be true.
- * Is there a better way to do this?
- */
private transient Daemon server;
private long lastTime = 0;// When was the last sample seen?
@@ -309,7 +260,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
private volatile boolean notifyChildSamplerListenersOfFilteredSamples = true;
- private volatile boolean regexMatch = false;// Should we match using regexes?
+ private volatile boolean regexMatch = false;
private Set<Class<?>> addableInterfaces = new HashSet<>(
Arrays.asList(Visualizer.class, ConfigElement.class,
@@ -318,7 +269,6 @@ public class ProxyControl extends GenericController implements NonTestElement {
/**
* Tree node where the samples should be stored.
- * <p>
* This property is not persistent.
*/
private JMeterTreeNode target;
@@ -341,9 +291,8 @@ public class ProxyControl extends GenericController implements NonTestElement {
* in a non-GUI environment, where the {@link JMeterTreeModel} can't be
* acquired through {@link GuiPackage#getTreeModel()}
*
- * @param treeModel
- * the {@link JMeterTreeModel} to be used, or {@code null} when
- * the GUI model should be used
+ * @param treeModel the {@link JMeterTreeModel} to be used, or {@code null} when
+ * the GUI model should be used
*/
public void setNonGuiTreeModel(JMeterTreeModel treeModel) {
this.nonGuiTreeModel = treeModel;
@@ -362,7 +311,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
public String getSslDomains() {
- return getPropertyAsString(DOMAINS,"");
+ return getPropertyAsString(DOMAINS, "");
}
public void setCaptureHttpHeaders(boolean capture) {
@@ -382,6 +331,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
public void setSamplerTypeName(String samplerTypeName) {
setProperty(new StringProperty(SAMPLER_TYPE_NAME, samplerTypeName));
}
+
public void setSamplerRedirectAutomatically(boolean b) {
samplerRedirectAutomatically = b;
setProperty(new BooleanProperty(SAMPLER_REDIRECT_AUTOMATICALLY, b));
@@ -392,9 +342,6 @@ public class ProxyControl extends GenericController implements NonTestElement {
setProperty(new BooleanProperty(SAMPLER_FOLLOW_REDIRECTS, b));
}
- /**
- * @param b flag whether keep alive should be used
- */
public void setUseKeepAlive(boolean b) {
useKeepAlive = b;
setProperty(new BooleanProperty(USE_KEEPALIVE, b));
@@ -412,6 +359,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
public String getDefaultEncoding() {
return getPropertyAsString(DEFAULT_ENCODING_PROPERTY, StandardCharsets.UTF_8.name());
}
+
public void setDefaultEncoding(String defaultEncoding) {
setProperty(DEFAULT_ENCODING_PROPERTY, defaultEncoding);
}
@@ -437,9 +385,6 @@ public class ProxyControl extends GenericController implements NonTestElement {
setProperty(new CollectionProperty(EXCLUDE_LIST, new HashSet<>(list)));
}
- /**
- * @param b flag whether regex matching should be used
- */
public void setRegexMatch(boolean b) {
regexMatch = b;
setProperty(new BooleanProperty(REGEX_MATCH, b));
@@ -480,11 +425,11 @@ public class ProxyControl extends GenericController implements NonTestElement {
public String getSamplerTypeName() {
// Convert the old numeric types - just in case someone wants to reload the workbench
String type = getPropertyAsString(SAMPLER_TYPE_NAME);
- if (SAMPLER_TYPE_HTTP_SAMPLER_JAVA.equals(type)){
+ if (SAMPLER_TYPE_HTTP_SAMPLER_JAVA.equals(type)) {
type = HTTPSamplerFactory.IMPL_JAVA;
- } else if (SAMPLER_TYPE_HTTP_SAMPLER_HC3_1.equals(type)){
+ } else if (SAMPLER_TYPE_HTTP_SAMPLER_HC3_1.equals(type)) {
type = HTTPSamplerFactory.IMPL_HTTP_CLIENT4;
- } else if (SAMPLER_TYPE_HTTP_SAMPLER_HC4.equals(type)){
+ } else if (SAMPLER_TYPE_HTTP_SAMPLER_HC4.equals(type)) {
type = HTTPSamplerFactory.IMPL_HTTP_CLIENT4;
}
return type;
@@ -597,16 +542,13 @@ public class ProxyControl extends GenericController implements NonTestElement {
getIncludePatterns().clear();
}
- /**
- * @return the target controller node
- */
+ /** @return the target controller node */
public JMeterTreeNode getTarget() {
return target;
}
/**
- * Sets the target node where the samples generated by the proxy have to be
- * stored.
+ * Sets the target node where samples generated by the proxy are to be stored.
*
* @param target target node to store generated samples
*/
@@ -619,16 +561,17 @@ public class ProxyControl extends GenericController implements NonTestElement {
* test tree; this is skipped if the sampler is null (e.g. for recording SSL errors)
* Always sends the result to any registered sample listeners.
*
- * @param sampler the sampler, may be null
+ * @param sampler the sampler, may be null
* @param testElements the test elements to be added (e.g. header manager) under the Sampler
- * @param result the sample result, not null
- * TODO param serverResponse to be added to allow saving of the
- * server's response while recording.
+ * @param result the sample result, not null
+ * TODO param serverResponse to be added to allow saving of the
+ * server's response while recording.
*/
public synchronized void deliverSampler(final HTTPSamplerBase sampler, final TestElement[] testElements, final SampleResult result) {
boolean notifySampleListeners = true;
if (sampler != null) {
- if (ATTEMPT_REDIRECT_DISABLING && (samplerRedirectAutomatically || samplerFollowRedirects)
+ if (USE_REDIRECT_DISABLING
+ && (samplerRedirectAutomatically || samplerFollowRedirects)
&& result instanceof HTTPSampleResult) {
final HTTPSampleResult httpSampleResult = (HTTPSampleResult) result;
final String urlAsString = httpSampleResult.getUrlAsString();
@@ -668,16 +611,16 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
placeSampler(sampler, testElements, myTarget);
} else {
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(
"Sample excluded based on url or content-type: {} - {}",
result.getUrlAsString(), result.getContentType());
}
notifySampleListeners = notifyChildSamplerListenersOfFilteredSamples;
- result.setSampleLabel("["+result.getSampleLabel()+"]");
+ result.setSampleLabel("[" + result.getSampleLabel() + "]");
}
}
- if(notifySampleListeners) {
+ if (notifySampleListeners) {
// SampleEvent is not passed JMeterVariables, because they don't make sense for Proxy Recording
notifySampleListeners(new SampleEvent(result, "WorkBench"));
} else {
@@ -693,8 +636,8 @@ public class ProxyControl extends GenericController implements NonTestElement {
* Construct Authentication object
* Removes Authorization if present
*
- * @param subConfigs {@link TestElement}[]
- * @param sampler {@link HTTPSamplerBase}
+ * @param testElements {@link TestElement}[]
+ * @param sampler {@link HTTPSamplerBase}
* @return {@link Authorization}
*/
private Authorization createAuthorization(final TestElement[] testElements, HTTPSamplerBase sampler) {
@@ -809,6 +752,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
return new String[0]; // should not happen
}
+
// Package protected to allow test case access
boolean filterUrl(HTTPSamplerBase sampler) {
String domain = sampler.getDomain();
@@ -831,6 +775,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
// Package protected to allow test case access
+
/**
* Filter the response based on the content type.
* If no include nor exclude filter is specified, the result will be included
@@ -841,6 +786,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
boolean filterContentType(SampleResult result) {
String includeExp = getContentTypeInclude();
String excludeExp = getContentTypeExclude();
+
// If no expressions are specified, we let the sample pass
if((includeExp == null || includeExp.length() == 0) &&
(excludeExp == null || excludeExp.length() == 0)
@@ -851,15 +797,15 @@ public class ProxyControl extends GenericController implements NonTestElement {
// Check that we have a content type
String sampleContentType = result.getContentType();
- if(sampleContentType == null || sampleContentType.length() == 0) {
- if(log.isDebugEnabled()) {
+ if (sampleContentType == null || sampleContentType.length() == 0) {
+ if (log.isDebugEnabled()) {
log.debug("No Content-type found for : {}", result.getUrlAsString());
}
return true;
}
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug("Content-type to filter : {}", sampleContentType);
}
@@ -880,8 +826,9 @@ public class ProxyControl extends GenericController implements NonTestElement {
/**
* Returns true if matching pattern was different from expectedToMatch
- * @param expression Expression to match
- * @param sampleContentType
+ *
+ * @param expression Expression to match
+ * @param sampleContentType content to check
* @return boolean true if Matching expression
*/
private boolean testPattern(String expression, String sampleContentType, boolean expectedToMatch) {
@@ -909,8 +856,9 @@ public class ProxyControl extends GenericController implements NonTestElement {
* Find if there is any AuthManager in JMeterTreeModel
* If there is no one, create and add it to tree
* Add authorization object to AuthManager
+ *
* @param authorization {@link Authorization}
- * @param target {@link JMeterTreeNode}
+ * @param target {@link JMeterTreeNode}
*/
private void setAuthorization(Authorization authorization, JMeterTreeNode target) {
JMeterTreeModel jmeterTreeModel = getJmeterTreeModel();
@@ -923,8 +871,8 @@ public class ProxyControl extends GenericController implements NonTestElement {
} catch (IllegalUserActionException e) {
log.error("Failed to add Authorization Manager to target node: {}", target.getName(), e);
}
- } else{
- AuthManager authManager=(AuthManager)authManagerNodes.get(0).getTestElement();
+ } else {
+ AuthManager authManager = (AuthManager) authManagerNodes.get(0).getTestElement();
authManager.addAuth(authorization);
}
}
@@ -948,13 +896,8 @@ public class ProxyControl extends GenericController implements NonTestElement {
model.addComponent(ra, node);
}
- /**
- * Construct AuthManager
- * @param authorization
- * @return AuthManager
- * @throws IllegalUserActionException
- */
- private AuthManager newAuthorizationManager(Authorization authorization) throws IllegalUserActionException {
+ /** Construct a new AuthManager with the provided authorization */
+ private AuthManager newAuthorizationManager(Authorization authorization) {
AuthManager authManager = new AuthManager();
authManager.setProperty(TestElement.GUI_CLASS, AUTH_PANEL);
authManager.setProperty(TestElement.TEST_CLASS, AUTH_MANAGER);
@@ -991,17 +934,12 @@ public class ProxyControl extends GenericController implements NonTestElement {
/**
* Helper method to add a Simple Controller to contain the samplers.
* Called from Application Thread that needs to update GUI (JMeterTreeModel)
- * @param model
- * Test component tree model
- * @param node
- * Node in the tree where we will add the Controller
- * @param name
- * A name for the Controller
- * @throws InvocationTargetException
- * @throws InterruptedException
+ *
+ * @param model Test component tree model
+ * @param node Node in the tree where we will add the Controller
+ * @param name A name for the Controller
*/
- private void addSimpleController(final JMeterTreeModel model, final JMeterTreeNode node, String name)
- throws InterruptedException, InvocationTargetException {
+ private void addSimpleController(final JMeterTreeModel model, final JMeterTreeNode node, String name) {
final GenericController sc = new GenericController();
sc.setProperty(TestElement.GUI_CLASS, LOGIC_CONTROLLER_GUI);
sc.setName(name);
@@ -1011,34 +949,28 @@ public class ProxyControl extends GenericController implements NonTestElement {
/**
* Helper method to add a Transaction Controller to contain the samplers.
* Called from Application Thread that needs to update GUI (JMeterTreeModel)
- * @param model
- * Test component tree model
- * @param node
- * Node in the tree where we will add the Controller
- * @param name
- * A name for the Controller
- * @throws InvocationTargetException
- * @throws InterruptedException
+ *
+ * @param model Test component tree model
+ * @param node Node in the tree where we will add the Controller
+ * @param name A name for the Controller
*/
- private void addTransactionController(final JMeterTreeModel model, final JMeterTreeNode node, String name)
- throws InterruptedException, InvocationTargetException {
+ private void addTransactionController(final JMeterTreeModel model, final JMeterTreeNode node, String name) {
final TransactionController sc = new TransactionController();
sc.setIncludeTimers(false);
sc.setProperty(TestElement.GUI_CLASS, TRANSACTION_CONTROLLER_GUI);
sc.setName(name);
safelyAddComponent(model, node, sc);
}
+
/**
* Helper method to replicate any timers found within the Proxy Controller
* into the provided sampler, while replacing any occurrences of string _T_
* in the timer's configuration with the provided deltaT.
* Called from AWT Event thread
- * @param model
- * Test component tree model
- * @param node
- * Sampler node in where we will add the timers
- * @param deltaT
- * Time interval from the previous request
+ *
+ * @param model Test component tree model
+ * @param node Sampler node in where we will add the timers
+ * @param deltaT Time interval from the previous request
*/
private void addTimers(JMeterTreeModel model, JMeterTreeNode node, long deltaT) {
TestPlan variables = new TestPlan();
@@ -1073,11 +1005,9 @@ public class ProxyControl extends GenericController implements NonTestElement {
/**
* Finds the first enabled node of a given type in the tree.
*
- * @param type
- * class of the node to be found
- *
+ * @param type class of the node to be found
* @return the first node of the given type in the test component tree, or
- * <code>null</code> if none was found.
+ * <code>null</code> if none was found.
*/
private JMeterTreeNode findFirstNodeOfType(Class<?> type) {
JMeterTreeModel treeModel = getJmeterTreeModel();
@@ -1129,14 +1059,10 @@ public class ProxyControl extends GenericController implements NonTestElement {
* including the Test Plan itself (lowest priority).
* </ul>
*
- * @param myTarget
- * tree node for the recording target controller.
- * @param myClass
- * Class of the elements to be found.
- * @param ascending
- * true if returned elements should be ordered in ascending
- * priority, false if they should be in descending priority.
- *
+ * @param myTarget tree node for the recording target controller.
+ * @param myClass Class of the elements to be found.
+ * @param ascending true if returned elements should be ordered in ascending
+ * priority, false if they should be in descending priority.
* @return a collection of applicable objects of the given class.
*/
// TODO - could be converted to generic class?
@@ -1146,7 +1072,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
// Look for elements directly within the HTTP proxy:
JMeterTreeNode node = treeModel.getNodeOf(this);
- if(node != null) {
+ if (node != null) {
Enumeration<?> kids = node.children();
while (kids.hasMoreElements()) {
JMeterTreeNode subNode = (JMeterTreeNode) kids.nextElement();
@@ -1163,8 +1089,9 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
}
// Look for arguments elements in the target controller or higher up:
- for (JMeterTreeNode controller = myTarget; controller != null; controller = (JMeterTreeNode) controller
- .getParent()) {
+ for (JMeterTreeNode controller = myTarget;
+ controller != null;
+ controller = (JMeterTreeNode) controller.getParent()) {
Enumeration<?> kids = controller.children();
while (kids.hasMoreElements()) {
JMeterTreeNode subNode = (JMeterTreeNode) kids.nextElement();
@@ -1198,8 +1125,8 @@ public class ProxyControl extends GenericController implements NonTestElement {
return elements;
}
- private void placeSampler(final HTTPSamplerBase sampler, final TestElement[] testElements,
- JMeterTreeNode myTarget) {
+ private void placeSampler(
+ HTTPSamplerBase sampler, TestElement[] testElements, JMeterTreeNode myTarget) {
try {
final JMeterTreeModel treeModel = getJmeterTreeModel();
@@ -1261,7 +1188,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
if (testElements != null) {
- for (TestElement testElement: testElements) {
+ for (TestElement testElement : testElements) {
if (isAddableTestElement(testElement)) {
treeModel.addComponent(testElement, newNode);
}
@@ -1313,19 +1240,19 @@ public class ProxyControl extends GenericController implements NonTestElement {
* first configuration in the given collection which provides a value for
* that property.
*
- * @param sampler
- * Sampler to remove values from.
- * @param configurations
- * ConfigTestElements in descending priority.
+ * @param sampler Sampler to remove values from.
+ * @param configurations ConfigTestElements in descending priority.
*/
private void removeValuesFromSampler(HTTPSamplerBase sampler, Collection<ConfigTestElement> configurations) {
- for (PropertyIterator props = sampler.propertyIterator(); props.hasNext();) {
+ for (PropertyIterator props = sampler.propertyIterator(); props.hasNext(); ) {
JMeterProperty prop = props.next();
String name = prop.getName();
String value = prop.getStringValue();
// There's a few properties which are excluded from this processing:
- if (name.equals(TestElement.ENABLED) || name.equals(TestElement.GUI_CLASS) || name.equals(TestElement.NAME)
+ if (name.equals(TestElement.ENABLED)
+ || name.equals(TestElement.GUI_CLASS)
+ || name.equals(TestElement.NAME)
|| name.equals(TestElement.TEST_CLASS)) {
continue; // go on with next property.
}
@@ -1339,7 +1266,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
// Property was found in a config element. Whether or not
// it matched the value in the sampler, we're done with
- // this property -- don't look at lower-priority configs:
+ // this property -- don't look at lower-priority configs
break;
}
}
@@ -1378,13 +1305,10 @@ public class ProxyControl extends GenericController implements NonTestElement {
* Scan all test elements passed in for values matching the value of any of
* the variables in any of the variable-holding elements in the collection.
*
- * @param sampler
- * A TestElement to replace values on
- * @param configs
- * More TestElements to replace values on
- * @param variables
- * Collection of Arguments to use to do the replacement, ordered
- * by ascending priority.
+ * @param sampler A TestElement to replace values on
+ * @param configs More TestElements to replace values on
+ * @param variables Collection of Arguments to use to do the replacement, ordered
+ * by ascending priority.
*/
private void replaceValues(TestElement sampler, TestElement[] configs, Collection<Arguments> variables) {
// Build the replacer from all the variables in the collection:
@@ -1414,8 +1338,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
* sampling that just occurred -- so that we have a means to record the
* server's responses as we go.
*
- * @param event
- * sampling event to be delivered
+ * @param event sampling event to be delivered
*/
private void notifySampleListeners(SampleEvent event) {
JMeterTreeModel treeModel = getJmeterTreeModel();
@@ -1463,10 +1386,10 @@ public class ProxyControl extends GenericController implements NonTestElement {
private void notifyTestListenersOfEnd() {
JMeterTreeModel treeModel = getJmeterTreeModel();
JMeterTreeNode myNode = treeModel.getNodeOf(this);
- if(myNode != null) {
+ if (myNode != null) {
Enumeration<?> kids = myNode.children();
while (kids.hasMoreElements()) {
- JMeterTreeNode subNode = (JMeterTreeNode)kids.nextElement();
+ JMeterTreeNode subNode = (JMeterTreeNode) kids.nextElement();
if (subNode.isEnabled()) {
TestElement testElement = subNode.getTestElement();
if (testElement instanceof TestStateListener) { // TL - TE
@@ -1483,7 +1406,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
}
private void initKeyStore() throws IOException, GeneralSecurityException {
- switch(KEYSTORE_MODE) {
+ switch (KEYSTORE_MODE) {
case DYNAMIC_KEYSTORE:
storePassword = getPassword();
keyPassword = getPassword();
@@ -1513,12 +1436,12 @@ public class ProxyControl extends GenericController implements NonTestElement {
private void initUserKeyStore() {
try {
keyStore = getKeyStore(storePassword.toCharArray());
- X509Certificate caCert = (X509Certificate) keyStore.getCertificate(CERT_ALIAS);
+ X509Certificate caCert = (X509Certificate) keyStore.getCertificate(CERT_ALIAS);
if (caCert == null) {
log.error("Could not find key with alias {}", CERT_ALIAS);
keyStore = null;
} else {
- caCert.checkValidity(new Date(System.currentTimeMillis()+DateUtils.MILLIS_PER_DAY));
+ caCert.checkValidity(new Date(System.currentTimeMillis() + DateUtils.MILLIS_PER_DAY));
}
} catch (Exception e) {
keyStore = null;
@@ -1588,7 +1511,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
if (sslDomains.length() > 0) {
final String[] domains = sslDomains.split(",");
// The subject may be either a host or a domain
- for(String subject : domains) {
+ for (String subject : domains) {
if (isValid(subject)) {
if (!keyStore.containsAlias(subject)) {
log.info("Creating entry {} in {}", subject, CERT_PATH_ABS);
@@ -1612,7 +1535,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
// This should only be called for a specific host
KeyStore updateKeyStore(String port, String host) throws IOException, GeneralSecurityException {
- synchronized(CERT_PATH) { // ensure Proxy threads cannot interfere with each other
+ synchronized (CERT_PATH) { // ensure Proxy threads cannot interfere with each other
if (!keyStore.containsAlias(host)) {
log.info("{} Creating entry {} in {}", port, host, CERT_PATH_ABS);
KeyToolUtils.generateHostCert(CERT_PATH, storePassword, host, CERT_VALIDITY);
@@ -1626,11 +1549,11 @@ public class ProxyControl extends GenericController implements NonTestElement {
* Initialise the single key JMeter keystore (original behaviour)
*/
private void initJMeterKeyStore() throws IOException, GeneralSecurityException {
- if (storePassword != null) { // Assume we have already created the store
+ if (storePassword != null) { // Assume we have already created the store
try {
keyStore = getKeyStore(storePassword.toCharArray());
- X509Certificate caCert = (X509Certificate) keyStore.getCertificate(JMETER_SERVER_ALIAS);
- caCert.checkValidity(new Date(System.currentTimeMillis()+DateUtils.MILLIS_PER_DAY));
+ X509Certificate caCert = (X509Certificate) keyStore.getCertificate(JMETER_SERVER_ALIAS);
+ caCert.checkValidity(new Date(System.currentTimeMillis() + DateUtils.MILLIS_PER_DAY));
} catch (Exception e) { // store is faulty, we need to recreate it
keyStore = null; // if cert is not valid, flag up to recreate it
log.warn(
@@ -1643,7 +1566,7 @@ public class ProxyControl extends GenericController implements NonTestElement {
keyPassword = storePassword; // we use same password for both
setPassword(storePassword);
log.info("Generating standard keypair in {}", CERT_PATH_ABS);
- if(!CERT_PATH.delete()){ // safer to start afresh
+ if (!CERT_PATH.delete()) { // safer to start afresh
log.warn(
"Could not delete {}, this could create issues, stop jmeter, ensure file is deleted and restart again",
CERT_PATH.getAbsolutePath());
diff --git a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/proxy/TestProxyControl.java b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/proxy/TestProxyControl.java
index a67feec..254532a 100644
--- a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/proxy/TestProxyControl.java
+++ b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/proxy/TestProxyControl.java
@@ -28,130 +28,129 @@ import org.junit.Before;
import org.junit.Test;
public class TestProxyControl {
- private HTTPSamplerBase sampler;
-
- private ProxyControl control;
-
-
- @Before
- public void setUp() {
- control = new ProxyControl();
- control.addIncludedPattern(".*\\.jsp");
- control.addExcludedPattern(".*apache.org.*");
- sampler = new HTTPNullSampler();
- }
-
- @Test
- public void testFilter1() throws Exception {
- sampler.setDomain("jakarta.org");
- sampler.setPath("index.jsp");
- assertTrue("Should find jakarta.org/index.jsp", control.filterUrl(sampler));
- }
-
- @Test
- public void testFilter2() throws Exception {
- sampler.setPath("index.jsp");
- sampler.setDomain("www.apache.org");
- assertFalse("Should not match www.apache.org", control.filterUrl(sampler));
- }
-
- @Test
- public void testFilter3() throws Exception {
- sampler.setPath("header.gif");
- sampler.setDomain("jakarta.org");
- assertFalse("Should not match header.gif", control.filterUrl(sampler));
- }
-
- @Test
- public void testContentTypeNoFilters() throws Exception {
- SampleResult result = new SampleResult();
- // No filters
- control.setContentTypeInclude(null);
- control.setContentTypeExclude(null);
-
- result.setContentType(null);
- assertTrue("Should allow if no content-type present", control.filterContentType(result));
- result.setContentType("text/html; charset=utf-8");
- assertTrue("Should allow text/html", control.filterContentType(result));
- result.setContentType("image/png");
- assertTrue("Should allow image/png", control.filterContentType(result));
-
- // Empty filters
- control.setContentTypeInclude("");
- control.setContentTypeExclude("");
-
- result.setContentType(null);
- assertTrue("Should allow if no content-type present", control.filterContentType(result));
- result.setContentType("text/html; charset=utf-8");
- assertTrue("Should allow text/html", control.filterContentType(result));
- result.setContentType("image/png");
- assertTrue("Should allow image/png", control.filterContentType(result));
-
- // Non empty filters
- control.setContentTypeInclude(" ");
- control.setContentTypeExclude(" ");
-
- result.setContentType(null);
- assertTrue("Should allow if no content-type present", control.filterContentType(result));
- result.setContentType("text/html; charset=utf-8");
- assertFalse("Should not allow text/html", control.filterContentType(result));
- result.setContentType("image/png");
- assertFalse("Should not allow image/png", control.filterContentType(result));
- }
-
- @Test
- public void testContentTypeInclude() throws Exception {
- SampleResult result = new SampleResult();
- control.setContentTypeInclude("text/html|text/ascii");
-
- result.setContentType(null);
- assertTrue("Should allow if no content-type present", control.filterContentType(result));
- result.setContentType("text/html; charset=utf-8");
- assertTrue("Should allow text/html", control.filterContentType(result));
- result.setContentType("text/css");
- assertFalse("Should not allow text/css", control.filterContentType(result));
- }
-
- @Test
- public void testContentTypeExclude() throws Exception {
- SampleResult result = new SampleResult();
- control.setContentTypeExclude("text/css");
-
- result.setContentType(null);
- assertTrue("Should allow if no content-type present", control.filterContentType(result));
- result.setContentType("text/html; charset=utf-8");
- assertTrue("Should allow text/html", control.filterContentType(result));
- result.setContentType("text/css");
- assertFalse("Should not allow text/css", control.filterContentType(result));
- }
-
- @Test
- public void testContentTypeIncludeAndExclude() throws Exception {
- SampleResult result = new SampleResult();
- // Simple inclusion and exclusion filter
- control.setContentTypeInclude("text/html|text/ascii");
- control.setContentTypeExclude("text/css");
-
- result.setContentType(null);
- assertTrue("Should allow if no content-type present", control.filterContentType(result));
- result.setContentType("text/html; charset=utf-8");
- assertTrue("Should allow text/html", control.filterContentType(result));
- result.setContentType("text/css");
- assertFalse("Should not allow text/css", control.filterContentType(result));
- result.setContentType("image/png");
- assertFalse("Should not allow image/png", control.filterContentType(result));
-
- // Allow all but images
- control.setContentTypeInclude(null);
- control.setContentTypeExclude("image/.*");
-
- result.setContentType(null);
- assertTrue("Should allow if no content-type present", control.filterContentType(result));
- result.setContentType("text/html; charset=utf-8");
- assertTrue("Should allow text/html", control.filterContentType(result));
- result.setContentType("text/css");
- assertTrue("Should allow text/css", control.filterContentType(result));
- result.setContentType("image/png");
- assertFalse("Should not allow image/png", control.filterContentType(result));
- }
+ private HTTPSamplerBase sampler;
+
+ private ProxyControl control;
+
+ @Before
+ public void setUp() {
+ control = new ProxyControl();
+ control.addIncludedPattern(".*\\.jsp");
+ control.addExcludedPattern(".*apache.org.*");
+ sampler = new HTTPNullSampler();
+ }
+
+ @Test
+ public void testFilter1() throws Exception {
+ sampler.setDomain("jakarta.org");
+ sampler.setPath("index.jsp");
+ assertTrue("Should find jakarta.org/index.jsp", control.filterUrl(sampler));
+ }
+
+ @Test
+ public void testFilter2() throws Exception {
+ sampler.setPath("index.jsp");
+ sampler.setDomain("www.apache.org");
+ assertFalse("Should not match www.apache.org", control.filterUrl(sampler));
+ }
+
+ @Test
+ public void testFilter3() throws Exception {
+ sampler.setPath("header.gif");
+ sampler.setDomain("jakarta.org");
+ assertFalse("Should not match header.gif", control.filterUrl(sampler));
+ }
+
+ @Test
+ public void testContentTypeNoFilters() throws Exception {
+ SampleResult result = new SampleResult();
+ // No filters
+ control.setContentTypeInclude(null);
+ control.setContentTypeExclude(null);
+
+ result.setContentType(null);
+ assertTrue("Should allow if no content-type present", control.filterContentType(result));
+ result.setContentType("text/html; charset=utf-8");
+ assertTrue("Should allow text/html", control.filterContentType(result));
+ result.setContentType("image/png");
+ assertTrue("Should allow image/png", control.filterContentType(result));
+
+ // Empty filters
+ control.setContentTypeInclude("");
+ control.setContentTypeExclude("");
+
+ result.setContentType(null);
+ assertTrue("Should allow if no content-type present", control.filterContentType(result));
+ result.setContentType("text/html; charset=utf-8");
+ assertTrue("Should allow text/html", control.filterContentType(result));
+ result.setContentType("image/png");
+ assertTrue("Should allow image/png", control.filterContentType(result));
+
+ // Non empty filters
+ control.setContentTypeInclude(" ");
+ control.setContentTypeExclude(" ");
+
+ result.setContentType(null);
+ assertTrue("Should allow if no content-type present", control.filterContentType(result));
+ result.setContentType("text/html; charset=utf-8");
+ assertFalse("Should not allow text/html", control.filterContentType(result));
+ result.setContentType("image/png");
+ assertFalse("Should not allow image/png", control.filterContentType(result));
+ }
+
+ @Test
+ public void testContentTypeInclude() throws Exception {
+ SampleResult result = new SampleResult();
+ control.setContentTypeInclude("text/html|text/ascii");
+
+ result.setContentType(null);
+ assertTrue("Should allow if no content-type present", control.filterContentType(result));
+ result.setContentType("text/html; charset=utf-8");
+ assertTrue("Should allow text/html", control.filterContentType(result));
+ result.setContentType("text/css");
+ assertFalse("Should not allow text/css", control.filterContentType(result));
+ }
+
+ @Test
+ public void testContentTypeExclude() throws Exception {
+ SampleResult result = new SampleResult();
+ control.setContentTypeExclude("text/css");
+
+ result.setContentType(null);
+ assertTrue("Should allow if no content-type present", control.filterContentType(result));
+ result.setContentType("text/html; charset=utf-8");
+ assertTrue("Should allow text/html", control.filterContentType(result));
+ result.setContentType("text/css");
+ assertFalse("Should not allow text/css", control.filterContentType(result));
+ }
+
+ @Test
+ public void testContentTypeIncludeAndExclude() throws Exception {
+ SampleResult result = new SampleResult();
+ // Simple inclusion and exclusion filter
+ control.setContentTypeInclude("text/html|text/ascii");
+ control.setContentTypeExclude("text/css");
+
+ result.setContentType(null);
+ assertTrue("Should allow if no content-type present", control.filterContentType(result));
+ result.setContentType("text/html; charset=utf-8");
+ assertTrue("Should allow text/html", control.filterContentType(result));
+ result.setContentType("text/css");
+ assertFalse("Should not allow text/css", control.filterContentType(result));
+ result.setContentType("image/png");
+ assertFalse("Should not allow image/png", control.filterContentType(result));
+
+ // Allow all but images
+ control.setContentTypeInclude(null);
+ control.setContentTypeExclude("image/.*");
+
+ result.setContentType(null);
+ assertTrue("Should allow if no content-type present", control.filterContentType(result));
+ result.setContentType("text/html; charset=utf-8");
+ assertTrue("Should allow text/html", control.filterContentType(result));
+ result.setContentType("text/css");
+ assertTrue("Should allow text/css", control.filterContentType(result));
+ result.setContentType("image/png");
+ assertFalse("Should not allow image/png", control.filterContentType(result));
+ }
}