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/13 21:18:53 UTC
[jmeter] branch master updated: Http mirror refactor (#486)
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 974a3e8 Http mirror refactor (#486)
974a3e8 is described below
commit 974a3e85fd76039adbb34a5682bb522807e79e7f
Author: Graham Russell <gr...@ham1.co.uk>
AuthorDate: Fri Sep 13 22:18:49 2019 +0100
Http mirror refactor (#486)
* Formatted and renamed items and refactored code into smaller methods.
* Formatting and minor improvements to TestHTTPSamplersAgainstHttpMirrorServer
---
.../protocol/http/control/HttpMirrorServer.java | 188 +++++-----
.../TestHTTPSamplersAgainstHttpMirrorServer.java | 377 +++++++++------------
2 files changed, 257 insertions(+), 308 deletions(-)
diff --git a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/HttpMirrorServer.java b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/HttpMirrorServer.java
index 5d73d86..3cbe930 100644
--- a/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/HttpMirrorServer.java
+++ b/src/protocol/http/src/main/java/org/apache/jmeter/protocol/http/control/HttpMirrorServer.java
@@ -22,7 +22,6 @@ import java.io.InterruptedIOException;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
-import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -31,6 +30,7 @@ import org.apache.commons.cli.avalon.CLArgsParser;
import org.apache.commons.cli.avalon.CLOption;
import org.apache.commons.cli.avalon.CLOptionDescriptor;
import org.apache.commons.cli.avalon.CLUtil;
+import org.apache.commons.lang3.StringUtils;
import org.apache.jmeter.gui.Stoppable;
import org.apache.jmeter.testelement.NonTestElement;
import org.apache.jorphan.util.JOrphanUtils;
@@ -43,87 +43,74 @@ import org.slf4j.LoggerFactory;
* Server daemon thread.
* Creates main socket and listens on it.
* For each client request, creates a thread to handle the request.
- *
*/
public class HttpMirrorServer extends Thread implements Stoppable, NonTestElement {
- private static final int OPTIONS_OPT = '?';// $NON-NLS-1$
- private static final int PORT_OPT = 'P';// $NON-NLS-1$
- private static final int LOGLEVEL_OPT = 'L';// $NON-NLS-1$
+ private static final int HELP_OPT_ID = '?';// $NON-NLS-1$
+ private static final int PORT_OPT_ID = 'P';// $NON-NLS-1$
+ private static final int LOGLEVEL_OPT_ID = 'L';// $NON-NLS-1$
- /**
- * Define the understood options.
- */
- private static final CLOptionDescriptor D_OPTIONS_OPT =
- new CLOptionDescriptor("?", CLOptionDescriptor.ARGUMENT_DISALLOWED, OPTIONS_OPT,
- "print command line options and exit");
- private static final CLOptionDescriptor D_PORT_OPT =
- new CLOptionDescriptor("port", CLOptionDescriptor.ARGUMENT_REQUIRED, PORT_OPT,
+ /* Define the understood command line flags. */
+ private static final CLOptionDescriptor HELP_OPT =
+ new CLOptionDescriptor("?",
+ CLOptionDescriptor.ARGUMENT_DISALLOWED,
+ HELP_OPT_ID,
+ "print command line options and exit");
+ private static final CLOptionDescriptor PORT_OPT =
+ new CLOptionDescriptor("port",
+ CLOptionDescriptor.ARGUMENT_REQUIRED,
+ PORT_OPT_ID,
"Set server port for HttpMirrorServer to use");
- private static final CLOptionDescriptor D_LOGLEVEL_OPT =
- new CLOptionDescriptor("loglevel", CLOptionDescriptor.DUPLICATES_ALLOWED
- | CLOptionDescriptor.ARGUMENTS_REQUIRED_2, LOGLEVEL_OPT,
+ private static final CLOptionDescriptor LOGLEVEL_OPT =
+ new CLOptionDescriptor("loglevel",
+ CLOptionDescriptor.DUPLICATES_ALLOWED | CLOptionDescriptor.ARGUMENTS_REQUIRED_2,
+ LOGLEVEL_OPT_ID,
"[category=]level e.g. INFO or DEBUG");
- private static final CLOptionDescriptor[] options = new CLOptionDescriptor[] {
- D_OPTIONS_OPT,
- D_PORT_OPT,
- D_LOGLEVEL_OPT,
+ private static final CLOptionDescriptor[] options = new CLOptionDescriptor[]{
+ HELP_OPT,
+ PORT_OPT,
+ LOGLEVEL_OPT,
};
/**
* The time (in milliseconds) to wait when accepting a client connection.
* The accept will be retried until the Daemon is told to stop. So this
- * interval is the longest time that the Daemon will have to wait after
- * being told to stop.
+ * is the longest time that the Daemon will wait after being told to stop.
*/
private static final int ACCEPT_TIMEOUT = 1000;
private static final long KEEP_ALIVE_TIME = 10;
- /**
- * Initialization On Demand Holder pattern
- */
+ /** Initialization On Demand Holder pattern */
private static class LazyHolder {
public static final Logger LOGGER = LoggerFactory.getLogger(HttpMirrorServer.class);
}
- /** The port to listen on. */
- private final int daemonPort;
-
- /** True if the Daemon is currently running. */
- private volatile boolean running;
+ private volatile boolean isRunning;
// Saves the error if one occurs
private volatile Exception except;
- /**
- * Max Executor Pool size
- */
+ private final int daemonPort;
private int maxThreadPoolSize;
-
- /**
- * Max Queue size
- */
private int maxQueueSize;
/**
* Create a new Daemon with the specified port and target.
*
- * @param port
- * the port to listen on.
+ * @param port the port to listen on.
*/
public HttpMirrorServer(int port) {
- this(port, HttpMirrorControl.DEFAULT_MAX_POOL_SIZE, HttpMirrorControl.DEFAULT_MAX_QUEUE_SIZE);
+ this(port, HttpMirrorControl.DEFAULT_MAX_POOL_SIZE, HttpMirrorControl.DEFAULT_MAX_QUEUE_SIZE);
}
/**
* Create a new Daemon with the specified port and target.
*
- * @param port
- * the port to listen on.
+ * @param port the port to listen on.
* @param maxThreadPoolSize Max Thread pool size
- * @param maxQueueSize Max Queue size
+ * @param maxQueueSize Max Queue size
*/
public HttpMirrorServer(int port, int maxThreadPoolSize, int maxQueueSize) {
super("HttpMirrorServer");
@@ -139,29 +126,31 @@ public class HttpMirrorServer extends Thread implements Stoppable, NonTestElemen
@Override
public void run() {
except = null;
- running = true;
+ isRunning = true;
ServerSocket mainSocket = null;
ThreadPoolExecutor threadPoolExecutor = null;
- if(maxThreadPoolSize>0) {
- final ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(
- maxQueueSize);
+
+ if (maxThreadPoolSize > 0) {
threadPoolExecutor = new ThreadPoolExecutor(
- maxThreadPoolSize/2,
- maxThreadPoolSize, KEEP_ALIVE_TIME, TimeUnit.SECONDS, queue);
+ maxThreadPoolSize / 2, maxThreadPoolSize,
+ KEEP_ALIVE_TIME,
+ TimeUnit.SECONDS,
+ new ArrayBlockingQueue<>(maxQueueSize));
threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
}
+
try {
- getLogger().info("Creating HttpMirror ... on port {}", Integer.valueOf(daemonPort));
+ getLogger().info("Creating HttpMirror ... on port {}", daemonPort);
mainSocket = new ServerSocket(daemonPort);
mainSocket.setSoTimeout(ACCEPT_TIMEOUT);
getLogger().info("HttpMirror up and running!");
- while (running) {
+ while (isRunning) {
try {
// Listen on main socket
Socket clientSocket = mainSocket.accept();
- if (running) {
+ if (isRunning) {
// Pass request to new thread
- if(threadPoolExecutor != null) {
+ if (threadPoolExecutor != null) {
threadPoolExecutor.execute(new HttpMirrorThread(clientSocket));
} else {
Thread thd = new Thread(new HttpMirrorThread(clientSocket));
@@ -180,13 +169,14 @@ public class HttpMirrorServer extends Thread implements Stoppable, NonTestElemen
getLogger().info("HttpMirror Server stopped");
} catch (BindException e) {
except = e;
- getLogger().warn("Could not bind HttpMirror to port {}. Maybe there is already a HttpMirror running?",
- Integer.valueOf(daemonPort));
+ getLogger().warn(
+ "Could not bind HttpMirror to port {}. Maybe there is already a HttpMirror running?",
+ daemonPort);
} catch (Exception e) {
except = e;
getLogger().warn("HttpMirror Server stopped", e);
} finally {
- if(threadPoolExecutor != null) {
+ if (threadPoolExecutor != null) {
threadPoolExecutor.shutdownNow();
}
JOrphanUtils.closeQuietly(mainSocket);
@@ -195,16 +185,16 @@ public class HttpMirrorServer extends Thread implements Stoppable, NonTestElemen
@Override
public void stopServer() {
- running = false;
+ isRunning = false;
}
- public Exception getException(){
+ public Exception getException() {
return except;
}
public static void main(String[] args) {
- CLArgsParser parser = new CLArgsParser(args, options);
- String error = parser.getErrorString();
+ CLArgsParser clArgsParser = new CLArgsParser(args, options);
+ String error = clArgsParser.getErrorString();
if (error != null) {
System.err.println("Error: " + error);//NOSONAR
System.out.println("Usage");//NOSONAR
@@ -214,15 +204,27 @@ public class HttpMirrorServer extends Thread implements Stoppable, NonTestElemen
return;
}
- if (parser.getArgumentById(OPTIONS_OPT) != null) {
+ if (clArgsParser.getArgumentById(HELP_OPT_ID) != null) {
System.out.println(CLUtil.describeOptions(options).toString());//NOSONAR
return;
}
+ int port = getHttpPort(args, clArgsParser);
+
+ if (System.getProperty("log4j.configurationFile") == null) {// $NON-NLS-1$
+ Configurator.setRootLevel(Level.INFO);
+ }
+
+ setLogLevel(clArgsParser);
+
+ new HttpMirrorServer(port).start();
+ }
+
+ private static int getHttpPort(String[] args, CLArgsParser parser) {
int port = HttpMirrorControl.DEFAULT_PORT;
- if (parser.getArgumentById(PORT_OPT) != null) {
- CLOption option = parser.getArgumentById(PORT_OPT);
+ if (parser.getArgumentById(PORT_OPT_ID) != null) {
+ CLOption option = parser.getArgumentById(PORT_OPT_ID);
String value = option.getArgument(0);
try {
port = Integer.parseInt(value);
@@ -234,48 +236,38 @@ public class HttpMirrorServer extends Thread implements Stoppable, NonTestElemen
} catch (NumberFormatException ignored) {
}
}
+ return port;
+ }
- if (System.getProperty("log4j.configurationFile") == null) {// $NON-NLS-1$
- Configurator.setRootLevel(Level.INFO);
+ private static void setLogLevel(CLArgsParser parser) {
+ CLOption logLevelOption = parser.getArgumentById(LOGLEVEL_OPT_ID);
+
+ if (logLevelOption == null) {
+ return;
}
- List<CLOption> clOptions = parser.getArguments();
+ String name = logLevelOption.getArgument(0);
+ final Level logLevel = Level.getLevel(name);
- for (CLOption option : clOptions) {
- String name = option.getArgument(0);
- String value = option.getArgument(1);
+ if (logLevel == null) {
+ getLogger().warn("Invalid log level '{}'.", name);
+ return;
+ }
- switch (option.getDescriptor().getId()) {
- case LOGLEVEL_OPT:
- if (!value.isEmpty()) { // Set category
- final Level logLevel = Level.getLevel(value);
- if (logLevel != null) {
- String loggerName = name;
- if (name.startsWith("jmeter") || name.startsWith("jorphan")) {
- loggerName = "org.apache." + name;// $NON-NLS-1$
- }
- getLogger().info("Setting log level to '{}' for '{}'.", value, loggerName);// $NON-NLS-1$ // $NON-NLS-2$
- Configurator.setAllLevels(loggerName, logLevel);
- } else {
- getLogger().warn("Invalid log level, '{}' for '{}'.", value, name);// $NON-NLS-1$ // $NON-NLS-2$
- }
- } else { // Set root level
- final Level logLevel = Level.getLevel(name);
- if (logLevel != null) {
- getLogger().info("Setting root log level to '{}'", name);// $NON-NLS-1$
- Configurator.setRootLevel(logLevel);
- } else {
- getLogger().warn("Invalid log level, '{}' for the root logger.", name);// $NON-NLS-1$ // $NON-NLS-2$
- }
- }
- break;
- default:
- break;
+ String value = logLevelOption.getArgument(1);
+ if (StringUtils.isEmpty(value)) {
+ // Set root level
+ getLogger().info("Setting root log level to '{}'", name);// $NON-NLS-1$
+ Configurator.setRootLevel(logLevel);
+ } else {
+ // Set category
+ String loggerName = name;
+ if (name.startsWith("jmeter") || name.startsWith("jorphan")) {
+ loggerName = "org.apache." + name; // $NON-NLS-1$
}
+ getLogger().info("Setting log level to '{}' for '{}'.", value, loggerName); // $NON-NLS-1$
+ Configurator.setAllLevels(loggerName, logLevel);
}
-
- HttpMirrorServer serv = new HttpMirrorServer(port);
- serv.start();
}
private static Logger getLogger() {
diff --git a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/sampler/TestHTTPSamplersAgainstHttpMirrorServer.java b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/sampler/TestHTTPSamplersAgainstHttpMirrorServer.java
index 5bfa6c6..24143ce 100644
--- a/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/sampler/TestHTTPSamplersAgainstHttpMirrorServer.java
+++ b/src/protocol/http/src/test/java/org/apache/jmeter/protocol/http/sampler/TestHTTPSamplersAgainstHttpMirrorServer.java
@@ -26,6 +26,7 @@ import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.util.Locale;
import org.apache.jmeter.engine.util.ValueReplacer;
@@ -66,7 +67,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
private static final String CONTENT_TYPE_TEXT_PLAIN = "text/plain";
- private static final byte[] CRLF = { 0x0d, 0x0A };
+ private static final byte[] CRLF = {0x0d, 0x0A};
private static final int MIRROR_PORT = 8182; // Different from TestHTTPMirrorThread port and standard mirror server
private static byte[] TEST_FILE_CONTENT;
@@ -86,10 +87,10 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
}
// This is used to emulate @before class and @after class
- public static Test suite(){
+ public static Test suite() {
final TestSuite testSuite = new TestSuite(TestHTTPSamplersAgainstHttpMirrorServer.class);
// Add parameterised tests. For simplicity we assume each has cases 0-10
- for(int i=0; i<11; i++) {
+ for (int i = 0; i < 11; i++) {
testSuite.addTest(new TestHTTPSamplersAgainstHttpMirrorServer("itemised_testGetRequest_Parameters", i));
testSuite.addTest(new TestHTTPSamplersAgainstHttpMirrorServer("itemised_testGetRequest_Parameters3", i));
@@ -97,36 +98,35 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
testSuite.addTest(new TestHTTPSamplersAgainstHttpMirrorServer("itemised_testPostRequest_UrlEncoded3", i));
}
- TestSetup setup = new TestSetup(testSuite){
+ return new TestSetup(testSuite) {
private HttpMirrorServer httpServer;
+
@Override
protected void setUp() throws Exception {
- httpServer = TestHTTPMirrorThread.startHttpMirror(MIRROR_PORT);
- // Create the test file content
- TEST_FILE_CONTENT = "some foo content &?=01234+56789-\u007c\u2aa1\u266a\u0153\u20a1\u0115\u0364\u00c5\u2052\uc385%C3%85"
- .getBytes("UTF-8");
-
- // create a temporary file to make sure we always have a file to give to the PostWriter
- // Whereever we are or Whatever the current path is.
- temporaryFile = File.createTempFile("TestHTTPSamplersAgainstHttpMirrorServer", "tmp");
- OutputStream output = new FileOutputStream(temporaryFile);
- output.write(TEST_FILE_CONTENT);
- output.flush();
- output.close();
+ httpServer = TestHTTPMirrorThread.startHttpMirror(MIRROR_PORT);
+ // Create the test file content
+ TEST_FILE_CONTENT = "some foo content &?=01234+56789-\u007c\u2aa1\u266a\u0153\u20a1\u0115\u0364\u00c5\u2052\uc385%C3%85"
+ .getBytes(StandardCharsets.UTF_8);
+
+ // create a temporary file to make sure we always have a file to give to the PostWriter
+ // Wherever we are or whatever the current path is.
+ temporaryFile = File.createTempFile("TestHTTPSamplersAgainstHttpMirrorServer", "tmp");
+ OutputStream output = new FileOutputStream(temporaryFile);
+ output.write(TEST_FILE_CONTENT);
+ output.flush();
+ output.close();
}
@Override
- protected void tearDown() throws Exception {
- // Shutdown mirror server
- httpServer.stopServer();
- httpServer = null;
- // delete temporay file
- if(!temporaryFile.delete()) {
- Assert.fail("Could not delete file:"+temporaryFile.getAbsolutePath());
- }
+ protected void tearDown() {
+ // Shutdown mirror server
+ httpServer.stopServer();
+ httpServer = null;
+ if (!temporaryFile.delete()) {
+ Assert.fail("Could not delete file:" + temporaryFile.getAbsolutePath());
+ }
}
};
- return setup;
}
public void itemised_testPostRequest_UrlEncoded() throws Exception {
@@ -214,7 +214,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
HTTPSampleResult res;
String contentEncoding;
- switch(test) {
+ switch (test) {
case 0:
// Test sending data with default encoding
contentEncoding = "";
@@ -335,7 +335,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
case 10:
break;
default:
- fail("Unexpected switch value: "+test);
+ fail("Unexpected switch value: " + test);
}
}
@@ -509,19 +509,18 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
// Test sending data with default encoding
HTTPSamplerBase sampler = createHttpSampler(samplerType);
- String contentEncoding = "";
- setupUrl(sampler, contentEncoding);
+ setupUrl(sampler, "");
setupFormData(sampler, false, titleField, titleValue, descriptionField, descriptionValue);
((HTTPArgument)sampler.getArguments().getArgument(0)).setAlwaysEncoded(false);
((HTTPArgument)sampler.getArguments().getArgument(1)).setAlwaysEncoded(false);
HTTPSampleResult res = executeSampler(sampler);
String expectedPostBody = titleValue + descriptionValue;
- checkPostRequestBody(sampler, res, samplerDefaultEncoding, contentEncoding, expectedPostBody,
+ checkPostRequestBody(sampler, res, samplerDefaultEncoding, "", expectedPostBody,
CONTENT_TYPE_TEXT_PLAIN);
// Test sending data as ISO-8859-1
sampler = createHttpSampler(samplerType);
- contentEncoding = ISO_8859_1;
+ String contentEncoding = ISO_8859_1;
setupUrl(sampler, contentEncoding);
setupFormData(sampler, false, titleField, titleValue, descriptionField, descriptionValue);
((HTTPArgument)sampler.getArguments().getArgument(0)).setAlwaysEncoded(false);
@@ -555,7 +554,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
((HTTPArgument)sampler.getArguments().getArgument(1)).setAlwaysEncoded(false);
res = executeSampler(sampler);
expectedPostBody = titleValue + descriptionValue;
- checkPostRequestBody(sampler, res, samplerDefaultEncoding, contentEncoding, expectedPostBody,CONTENT_TYPE_TEXT_PLAIN);
+ checkPostRequestBody(sampler, res, samplerDefaultEncoding, contentEncoding, expectedPostBody, CONTENT_TYPE_TEXT_PLAIN);
// Test sending data as UTF-8, with values that will change when urlencoded, and where
// we tell the sampler to urlencode the parameter value
@@ -567,7 +566,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
setupFormData(sampler, true, titleField, titleValue, descriptionField, descriptionValue);
res = executeSampler(sampler);
expectedPostBody = URLEncoder.encode(titleValue + descriptionValue, contentEncoding);
- checkPostRequestBody(sampler, res, samplerDefaultEncoding, contentEncoding, expectedPostBody,CONTENT_TYPE_TEXT_PLAIN);
+ checkPostRequestBody(sampler, res, samplerDefaultEncoding, contentEncoding, expectedPostBody, CONTENT_TYPE_TEXT_PLAIN);
// Test sending data as UTF-8, with values that have been urlencoded
sampler = createHttpSampler(samplerType);
@@ -649,7 +648,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
res = executeSampler(sampler);
String expectedTitleValue = "a test\u00c5mytitle\u0153\u20a1\u0115\u00c5";
String expectedDescriptionValue = "mydescription\u0153\u20a1\u0115\u00c5the_end";
- expectedPostBody = expectedTitleValue+ expectedDescriptionValue;
+ expectedPostBody = expectedTitleValue + expectedDescriptionValue;
checkPostRequestBody(sampler, res, samplerDefaultEncoding, contentEncoding, expectedPostBody, CONTENT_TYPE_TEXT_PLAIN);
}
@@ -690,7 +689,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
HTTPSampleResult res;
URL executedUrl;
- switch(test) {
+ switch (test) {
case 0:
// Test sending simple HTTP get
// Test sending data with default encoding
@@ -792,9 +791,9 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
sampler.setRunningVersion(true);
executedUrl = sampler.getUrl();
sampler.setRunningVersion(false);
- checkGetRequest_Parameters(sampler, res, contentEncoding,
- executedUrl, titleField, expectedTitleValue,
- descriptionField, expectedDescriptionValue, false);
+ checkGetRequest_Parameters(sampler, res, contentEncoding,
+ executedUrl, titleField, expectedTitleValue,
+ descriptionField, expectedDescriptionValue, false);
break;
case 6:
break;
@@ -807,7 +806,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
case 10:
break;
default:
- fail("Unexpected switch value: "+test);
+ fail("Unexpected switch value: " + test);
}
}
@@ -830,28 +829,27 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
String descriptionField,
String descriptionValue,
boolean valuesAlreadyUrlEncoded) throws IOException {
- if(contentEncoding == null || contentEncoding.length() == 0) {
+ if (contentEncoding == null || contentEncoding.length() == 0) {
contentEncoding = samplerDefaultEncoding;
}
// Check URL
assertEquals(sampler.getUrl(), res.getURL());
String expectedPostBody = null;
- if(!valuesAlreadyUrlEncoded) {
+ if (!valuesAlreadyUrlEncoded) {
String expectedTitle = URLEncoder.encode(titleValue, contentEncoding);
String expectedDescription = URLEncoder.encode(descriptionValue, contentEncoding);
expectedPostBody = titleField + "=" + expectedTitle + "&" + descriptionField + "=" + expectedDescription;
- }
- else {
+ } else {
expectedPostBody = titleField + "=" + titleValue + "&" + descriptionField + "=" + descriptionValue;
}
// Check the request
checkPostRequestBody(
- sampler,
- res,
- samplerDefaultEncoding,
- contentEncoding,
- expectedPostBody,
- HTTPConstants.APPLICATION_X_WWW_FORM_URLENCODED);
+ sampler,
+ res,
+ samplerDefaultEncoding,
+ contentEncoding,
+ expectedPostBody,
+ HTTPConstants.APPLICATION_X_WWW_FORM_URLENCODED);
}
private void checkPostRequestFormMultipart(
@@ -863,16 +861,16 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
String titleValue,
String descriptionField,
String descriptionValue) throws IOException {
- if(contentEncoding == null || contentEncoding.length() == 0) {
+ if (contentEncoding == null || contentEncoding.length() == 0) {
contentEncoding = samplerDefaultEncoding;
}
// Check URL
assertEquals(sampler.getUrl(), res.getURL());
String boundaryString = getBoundaryStringFromContentType(res.getRequestHeaders());
assertNotNull(boundaryString);
- byte[] expectedPostBody = createExpectedFormdataOutput(boundaryString,
+ byte[] expectedPostBody = createExpectedFormDataOutput(boundaryString,
contentEncoding, titleField, titleValue, descriptionField,
- descriptionValue, true, true);
+ descriptionValue, true);
// Check request headers
checkHeaderContentType(res.getRequestHeaders(), "multipart/form-data" + "; boundary=" + boundaryString);
// Check post body from the result query string
@@ -883,15 +881,14 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
int posDividerHeadersAndBody = getPositionOfBody(dataSentToMirrorServer);
String headersSent = null;
String bodySent = "";
- if(posDividerHeadersAndBody >= 0) {
+ if (posDividerHeadersAndBody >= 0) {
headersSent = dataSentToMirrorServer.substring(0, posDividerHeadersAndBody);
// Skip the blank line with crlf dividing headers and body
- bodySent = dataSentToMirrorServer.substring(posDividerHeadersAndBody+2);
- }
- else {
+ bodySent = dataSentToMirrorServer.substring(posDividerHeadersAndBody + 2);
+ } else {
fail("No header and body section found");
}
- // Check response headers
+ // Check response headers
checkHeaderContentType(headersSent, "multipart/form-data" + "; boundary=" + boundaryString);
// Check post body which was sent to the mirror server, and
// sent back by the mirror server
@@ -913,7 +910,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
File fileValue,
String fileMimeType,
byte[] fileContent) throws IOException {
- if(contentEncoding == null || contentEncoding.length() == 0) {
+ if (contentEncoding == null || contentEncoding.length() == 0) {
contentEncoding = samplerDefaultEncoding;
}
// Check URL
@@ -932,7 +929,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
// Find the data sent to the mirror server, which the mirror server is sending back to us
String headersSent = getHeadersSent(res.getResponseData());
- if(headersSent == null) {
+ if (headersSent == null) {
fail("No header and body section found");
}
// Check response headers
@@ -953,18 +950,18 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
String contentEncoding,
String expectedPostBody,
String expectedContentType) throws IOException {
- if(contentEncoding == null || contentEncoding.length() == 0) {
+ if (contentEncoding == null || contentEncoding.length() == 0) {
contentEncoding = samplerDefaultEncoding;
}
// Check URL
assertEquals(sampler.getUrl(), res.getURL());
// Check request headers
- if(sampler instanceof HTTPSampler) {
+ if (sampler instanceof HTTPSampler) {
checkHeaderContentType(res.getRequestHeaders(), null);
} else {
checkHeaderContentType(res.getRequestHeaders(), expectedContentType);
}
- // Check post body from the result query string
+ // Check post body from the result query string
checkArraysHaveSameContent(expectedPostBody.getBytes(contentEncoding),
res.getQueryString().getBytes(contentEncoding), contentEncoding,
res);
@@ -974,16 +971,15 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
int posDividerHeadersAndBody = getPositionOfBody(dataSentToMirrorServer);
String headersSent = null;
String bodySent = "";
- if(posDividerHeadersAndBody >= 0) {
+ if (posDividerHeadersAndBody >= 0) {
headersSent = dataSentToMirrorServer.substring(0, posDividerHeadersAndBody);
// Skip the blank line with crlf dividing headers and body
- bodySent = dataSentToMirrorServer.substring(posDividerHeadersAndBody+2);
- }
- else {
+ bodySent = dataSentToMirrorServer.substring(posDividerHeadersAndBody + 2);
+ } else {
fail("No header and body section found");
}
// Check response headers
- if(sampler instanceof HTTPSampler) {
+ if (sampler instanceof HTTPSampler) {
checkHeaderContentType(res.getRequestHeaders(), null);
} else {
checkHeaderContentType(headersSent, expectedContentType);
@@ -999,7 +995,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
private void checkGetRequest(
HTTPSamplerBase sampler,
HTTPSampleResult res
- ) throws IOException {
+ ) throws IOException {
// Check URL
assertEquals(sampler.getUrl(), res.getURL());
// Check method
@@ -1012,12 +1008,11 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
int posDividerHeadersAndBody = getPositionOfBody(dataSentToMirrorServer);
String headersSent = null;
String bodySent = "";
- if(posDividerHeadersAndBody >= 0) {
+ if (posDividerHeadersAndBody >= 0) {
headersSent = dataSentToMirrorServer.substring(0, posDividerHeadersAndBody);
// Skip the blank line with crlf dividing headers and body
- bodySent = dataSentToMirrorServer.substring(posDividerHeadersAndBody+2);
- }
- else {
+ bodySent = dataSentToMirrorServer.substring(posDividerHeadersAndBody + 2);
+ } else {
fail("No header and body section found");
}
// No body should have been sent
@@ -1036,7 +1031,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
String descriptionField,
String descriptionValue,
boolean valuesAlreadyUrlEncoded) throws IOException {
- if(contentEncoding == null || contentEncoding.length() == 0) {
+ if (contentEncoding == null || contentEncoding.length() == 0) {
contentEncoding = EncoderCache.URL_ARGUMENT_ENCODING;
}
// Check URL
@@ -1047,12 +1042,11 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
// replies without including query string in URL
String expectedQueryString = null;
- if(!valuesAlreadyUrlEncoded) {
+ if (!valuesAlreadyUrlEncoded) {
String expectedTitle = URLEncoder.encode(titleValue, contentEncoding);
String expectedDescription = URLEncoder.encode(descriptionValue, contentEncoding);
expectedQueryString = titleField + "=" + expectedTitle + "&" + descriptionField + "=" + expectedDescription;
- }
- else {
+ } else {
expectedQueryString = titleField + "=" + titleValue + "&" + descriptionField + "=" + descriptionValue;
}
@@ -1061,13 +1055,12 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
int posDividerHeadersAndBody = getPositionOfBody(dataSentToMirrorServer);
String headersSent = null;
String bodySent = "";
- if(posDividerHeadersAndBody >= 0) {
+ if (posDividerHeadersAndBody >= 0) {
headersSent = dataSentToMirrorServer.substring(0, posDividerHeadersAndBody);
// Skip the blank line with crlf dividing headers and body
- bodySent = dataSentToMirrorServer.substring(posDividerHeadersAndBody+2);
- }
- else {
- fail("No header and body section found in: ["+dataSentToMirrorServer+"]");
+ bodySent = dataSentToMirrorServer.substring(posDividerHeadersAndBody + 2);
+ } else {
+ fail("No header and body section found in: [" + dataSentToMirrorServer + "]");
}
// No body should have been sent
assertEquals(bodySent.length(), 0);
@@ -1081,31 +1074,29 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
String expectedPath,
String expectedQueryString,
HTTPSampleResult res
- )
+ )
throws IOException {
// Check the Request URI sent to the mirror server, and
// sent back by the mirror server
int indexFirstSpace = headersSent.indexOf(' ');
int indexSecondSpace = headersSent.indexOf(' ', headersSent.length() > indexFirstSpace ? indexFirstSpace + 1 : indexFirstSpace);
- if(indexFirstSpace <= 0 && indexSecondSpace <= 0 || indexFirstSpace == indexSecondSpace) {
+ if (indexFirstSpace <= 0 && indexSecondSpace <= 0 || indexFirstSpace == indexSecondSpace) {
fail("Could not find method and URI sent");
}
String methodSent = headersSent.substring(0, indexFirstSpace);
assertEquals(expectedMethod, methodSent);
String uriSent = headersSent.substring(indexFirstSpace + 1, indexSecondSpace);
int indexQueryStart = uriSent.indexOf('?');
- if(expectedQueryString != null && expectedQueryString.length() > 0) {
+ if (expectedQueryString != null && expectedQueryString.length() > 0) {
// We should have a query string part
- if(indexQueryStart <= 0 || indexQueryStart == uriSent.length() - 1) {
+ if (indexQueryStart <= 0 || indexQueryStart == uriSent.length() - 1) {
fail("Could not find query string in URI");
}
- }
- else {
- if(indexQueryStart > 0) {
+ } else {
+ if (indexQueryStart > 0) {
// We should not have a query string part
fail("Query string present in URI");
- }
- else {
+ } else {
indexQueryStart = uriSent.length();
}
}
@@ -1113,7 +1104,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
String pathSent = uriSent.substring(0, indexQueryStart);
assertEquals(expectedPath, pathSent);
// Check query
- if(expectedQueryString != null && expectedQueryString.length() > 0) {
+ if (expectedQueryString != null && expectedQueryString.length() > 0) {
String queryStringSent = uriSent.substring(indexQueryStart + 1);
// Is it only the parameter values which are encoded in the specified
// content encoding, the rest of the query is encoded in UTF-8
@@ -1130,10 +1121,10 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
private String getHeadersSent(byte[] responseData) throws IOException {
// Find the data sent to the mirror server, which the mirror server is sending back to us
// We assume the headers are in ISO_8859_1, and the body can be in any content encoding.
- String dataSentToMirrorServer = new String(responseData, ISO_8859_1);
+ String dataSentToMirrorServer = new String(responseData, StandardCharsets.ISO_8859_1);
int posDividerHeadersAndBody = getPositionOfBody(dataSentToMirrorServer);
String headersSent = null;
- if(posDividerHeadersAndBody >= 0) {
+ if (posDividerHeadersAndBody >= 0) {
headersSent = dataSentToMirrorServer.substring(0, posDividerHeadersAndBody);
}
return headersSent;
@@ -1148,15 +1139,14 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
// sent as raw byte data
byte[] bodySent = null;
String headersSent = getHeadersSent(responseData);
- if(headersSent != null) {
+ if (headersSent != null) {
// Get the content length, it tells us how much data to read
// TODO : Maybe support chunked encoding, then we cannot rely on content length
String contentLengthValue = getSentRequestHeaderValue(headersSent, HTTPConstants.HEADER_CONTENT_LENGTH);
int contentLength = -1;
- if(contentLengthValue != null) {
+ if (contentLengthValue != null) {
contentLength = Integer.parseInt(contentLengthValue);
- }
- else {
+ } else {
fail("Did not receive any content-length header");
}
bodySent = new byte[contentLength];
@@ -1172,12 +1162,12 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
// Java 1.6.0_22+ no longer allows Content-Length to be set, so don't check it.
// See: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6996110
private void checkHeaderContentType(String requestHeaders, String contentType) {
- if(contentType == null) {
- boolean isPresent = checkRegularExpression(requestHeaders, HTTPConstants.HEADER_CONTENT_TYPE+": .*");
- assertFalse("Expected no Content-Type in request headers:\n"+ requestHeaders, isPresent);
+ if (contentType == null) {
+ boolean isPresent = checkRegularExpression(requestHeaders, HTTPConstants.HEADER_CONTENT_TYPE + ": .*");
+ assertFalse("Expected no Content-Type in request headers:\n" + requestHeaders, isPresent);
} else {
boolean typeOK = isInRequestHeaders(requestHeaders, HTTPConstants.HEADER_CONTENT_TYPE, contentType);
- assertTrue("Expected type:" + contentType + " in request headers:\n"+ requestHeaders, typeOK);
+ assertTrue("Expected type:" + contentType + " in request headers:\n" + requestHeaders, typeOK);
}
}
@@ -1188,7 +1178,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
Perl5Compiler.READ_ONLY_MASK
| Perl5Compiler.CASE_INSENSITIVE_MASK
| Perl5Compiler.SINGLELINE_MASK);
- if(localMatcher.matches(requestHeaders, pattern)) {
+ if (localMatcher.matches(requestHeaders, pattern)) {
// The value is in the first group, group 0 is the whole match
return localMatcher.getMatch().group(1);
}
@@ -1214,7 +1204,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
| Perl5Compiler.MULTILINE_MASK);
PatternMatcherInput input = new PatternMatcherInput(stringToCheck);
- while(localMatcher.contains(input, pattern)) {
+ while (localMatcher.contains(input, pattern)) {
MatchResult match = localMatcher.getMatch();
return match.beginOffset(0);
}
@@ -1229,18 +1219,17 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
Perl5Compiler.READ_ONLY_MASK
| Perl5Compiler.CASE_INSENSITIVE_MASK
| Perl5Compiler.MULTILINE_MASK);
- if(localMatcher.contains(requestHeaders, pattern)) {
+ if (localMatcher.contains(requestHeaders, pattern)) {
MatchResult match = localMatcher.getMatch();
- String matchString = match.group(1);
+ String matchString = match.group(1);
// Header may contain ;charset= , regexp extracts it so computed boundary is wrong
int indexOf = matchString.indexOf(';');
- if(indexOf>=0) {
+ if (indexOf >= 0) {
return matchString.substring(0, indexOf);
} else {
return matchString;
}
- }
- else {
+ } else {
return null;
}
}
@@ -1257,28 +1246,20 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
sampler.setContentEncoding(contentEncoding);
}
- /**
- * Setup the form data with specified values
- *
- * @param httpSampler
- */
- private void setupFormData(HTTPSamplerBase httpSampler, boolean isEncoded, String titleField,
- String titleValue, String descriptionField, String descriptionValue) {
- if(isEncoded) {
+ /** Setup the form data with specified values */
+ private void setupFormData(HTTPSamplerBase httpSampler, boolean isEncoded,
+ String titleField, String titleValue,
+ String descriptionField, String descriptionValue) {
+ if (isEncoded) {
httpSampler.addEncodedArgument(titleField, titleValue);
httpSampler.addEncodedArgument(descriptionField, descriptionValue);
- }
- else {
+ } else {
httpSampler.addArgument(titleField, titleValue);
httpSampler.addArgument(descriptionField, descriptionValue);
}
}
- /**
- * Setup the form data with specified values, and file to upload
- *
- * @param httpSampler
- */
+ /** Setup the form data with specified values, and file to upload */
private void setupFileUploadData(
HTTPSamplerBase httpSampler,
boolean isEncoded,
@@ -1297,34 +1278,28 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
}
- /**
- * Check that the two byte arrays have identical content
- *
- * @param expected
- * @param actual
- * @throws UnsupportedEncodingException
- */
- private void checkArraysHaveSameContent(byte[] expected, byte[] actual, String encoding,
- HTTPSampleResult res) throws UnsupportedEncodingException {
- if(expected != null && actual != null) {
- if(expected.length != actual.length) {
+ /** Check that the two byte arrays have identical content */
+ private void checkArraysHaveSameContent(byte[] expected, byte[] actual,
+ String encoding, HTTPSampleResult res)
+ throws UnsupportedEncodingException {
+ if (expected != null && actual != null) {
+ if (expected.length != actual.length) {
System.out.println("\n>>>>>>>>>>>>>>>>>>>> expected:");
System.out.println(new String(expected, encoding));
System.out.println("==================== actual:");
System.out.println(new String(actual, encoding));
System.out.println("<<<<<<<<<<<<<<<<<<<<");
if (res != null) {
- System.out.println("URL="+res.getUrlAsString());
+ System.out.println("URL=" + res.getUrlAsString());
}
fail("arrays have different length, expected is " + expected.length + ", actual is " + actual.length);
- }
- else {
- for(int i = 0; i < expected.length; i++) {
- if(expected[i] != actual[i]) {
+ } else {
+ for (int i = 0; i < expected.length; i++) {
+ if (expected[i] != actual[i]) {
System.out.println("\n>>>>>>>>>>>>>>>>>>>> expected:");
- System.out.println(new String(expected,0,i+1, encoding));
+ System.out.println(new String(expected, 0, i + 1, encoding));
System.out.println("==================== actual:");
- System.out.println(new String(actual,0,i+1, encoding));
+ System.out.println(new String(actual, 0, i + 1, encoding));
System.out.println("<<<<<<<<<<<<<<<<<<<<");
/*
// Useful to when debugging
@@ -1338,16 +1313,15 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
System.out.println();
*/
if (res != null) {
- System.out.println("URL="+res.getUrlAsString());
+ System.out.println("URL=" + res.getUrlAsString());
}
fail("byte at position " + i + " is different, expected is " + expected[i] + ", actual is " + actual[i]);
}
}
}
- }
- else {
+ } else {
if (res != null) {
- System.out.println("URL="+res.getUrlAsString());
+ System.out.println("URL=" + res.getUrlAsString());
}
fail("expected or actual byte arrays were null");
}
@@ -1360,70 +1334,68 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
*
* @param lastMultipart true if this is the last multipart in the request
*/
- private byte[] createExpectedFormdataOutput(
+ private byte[] createExpectedFormDataOutput(
String boundaryString,
String contentEncoding,
String titleField,
String titleValue,
String descriptionField,
String descriptionValue,
- boolean firstMultipart,
boolean lastMultipart) throws IOException {
// The encoding used for http headers and control information
- final byte[] DASH_DASH = "--".getBytes(ISO_8859_1);
+ final byte[] DASH_DASH = "--".getBytes(StandardCharsets.ISO_8859_1);
final ByteArrayOutputStream output = new ByteArrayOutputStream();
- if(firstMultipart) {
- output.write(DASH_DASH);
- output.write(boundaryString.getBytes(ISO_8859_1));
- output.write(CRLF);
- }
- output.write("Content-Disposition: form-data; name=\"".getBytes(ISO_8859_1));
- output.write(titleField.getBytes(ISO_8859_1));
- output.write("\"".getBytes(ISO_8859_1));
+
+ // First part multi-part
+ output.write(DASH_DASH);
+ output.write(boundaryString.getBytes(StandardCharsets.ISO_8859_1));
output.write(CRLF);
- output.write("Content-Type: text/plain".getBytes(ISO_8859_1));
- if(contentEncoding != null) {
- output.write("; charset=".getBytes(ISO_8859_1));
- output.write(contentEncoding.getBytes(ISO_8859_1));
+
+ output.write("Content-Disposition: form-data; name=\"".getBytes(StandardCharsets.ISO_8859_1));
+ output.write(titleField.getBytes(StandardCharsets.ISO_8859_1));
+ output.write("\"".getBytes(StandardCharsets.ISO_8859_1));
+ output.write(CRLF);
+ output.write("Content-Type: text/plain".getBytes(StandardCharsets.ISO_8859_1));
+ if (contentEncoding != null) {
+ output.write("; charset=".getBytes(StandardCharsets.ISO_8859_1));
+ output.write(contentEncoding.getBytes(StandardCharsets.ISO_8859_1));
}
output.write(CRLF);
- output.write("Content-Transfer-Encoding: 8bit".getBytes(ISO_8859_1));
+ output.write("Content-Transfer-Encoding: 8bit".getBytes(StandardCharsets.ISO_8859_1));
output.write(CRLF);
output.write(CRLF);
- if(contentEncoding != null) {
+ if (contentEncoding != null) {
output.write(titleValue.getBytes(contentEncoding));
- }
- else {
+ } else {
output.write(titleValue.getBytes()); // TODO - charset?
}
output.write(CRLF);
output.write(DASH_DASH);
- output.write(boundaryString.getBytes(ISO_8859_1));
+ output.write(boundaryString.getBytes(StandardCharsets.ISO_8859_1));
output.write(CRLF);
- output.write("Content-Disposition: form-data; name=\"".getBytes(ISO_8859_1));
- output.write(descriptionField.getBytes(ISO_8859_1));
- output.write("\"".getBytes(ISO_8859_1));
+ output.write("Content-Disposition: form-data; name=\"".getBytes(StandardCharsets.ISO_8859_1));
+ output.write(descriptionField.getBytes(StandardCharsets.ISO_8859_1));
+ output.write("\"".getBytes(StandardCharsets.ISO_8859_1));
output.write(CRLF);
- output.write("Content-Type: text/plain".getBytes(ISO_8859_1));
- if(contentEncoding != null) {
- output.write("; charset=".getBytes(ISO_8859_1));
- output.write(contentEncoding.getBytes(ISO_8859_1));
+ output.write("Content-Type: text/plain".getBytes(StandardCharsets.ISO_8859_1));
+ if (contentEncoding != null) {
+ output.write("; charset=".getBytes(StandardCharsets.ISO_8859_1));
+ output.write(contentEncoding.getBytes(StandardCharsets.ISO_8859_1));
}
output.write(CRLF);
- output.write("Content-Transfer-Encoding: 8bit".getBytes(ISO_8859_1));
+ output.write("Content-Transfer-Encoding: 8bit".getBytes(StandardCharsets.ISO_8859_1));
output.write(CRLF);
output.write(CRLF);
- if(contentEncoding != null) {
+ if (contentEncoding != null) {
output.write(descriptionValue.getBytes(contentEncoding));
- }
- else {
+ } else {
output.write(descriptionValue.getBytes()); // TODO - charset?
}
output.write(CRLF);
output.write(DASH_DASH);
- output.write(boundaryString.getBytes(ISO_8859_1));
- if(lastMultipart) {
+ output.write(boundaryString.getBytes(StandardCharsets.ISO_8859_1));
+ if (lastMultipart) {
output.write(DASH_DASH);
}
output.write(CRLF);
@@ -1434,46 +1406,32 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
return output.toByteArray();
}
- /**
- * Create the expected file multipart
- *
- * @param lastMultipart true if this is the last multipart in the request
- */
private byte[] createExpectedFilepartOutput(
String boundaryString,
String fileField,
File file,
String mimeType,
- byte[] fileContent,
- boolean firstMultipart,
- boolean lastMultipart) throws IOException {
- final byte[] DASH_DASH = "--".getBytes(ISO_8859_1);
+ byte[] fileContent) throws IOException {
+ final byte[] DASH_DASH = "--".getBytes(StandardCharsets.ISO_8859_1);
final ByteArrayOutputStream output = new ByteArrayOutputStream();
- if(firstMultipart) {
- output.write(DASH_DASH);
- output.write(boundaryString.getBytes(ISO_8859_1));
- output.write(CRLF);
- }
// replace all backslash with double backslash
String filename = file.getName();
- output.write("Content-Disposition: form-data; name=\"".getBytes(ISO_8859_1));
- output.write(fileField.getBytes(ISO_8859_1));
- output.write(("\"; filename=\"" + filename + "\"").getBytes(ISO_8859_1));
+ output.write("Content-Disposition: form-data; name=\"".getBytes(StandardCharsets.ISO_8859_1));
+ output.write(fileField.getBytes(StandardCharsets.ISO_8859_1));
+ output.write(("\"; filename=\"" + filename + "\"").getBytes(StandardCharsets.ISO_8859_1));
output.write(CRLF);
- output.write("Content-Type: ".getBytes(ISO_8859_1));
- output.write(mimeType.getBytes(ISO_8859_1));
+ output.write("Content-Type: ".getBytes(StandardCharsets.ISO_8859_1));
+ output.write(mimeType.getBytes(StandardCharsets.ISO_8859_1));
output.write(CRLF);
- output.write("Content-Transfer-Encoding: binary".getBytes(ISO_8859_1));
+ output.write("Content-Transfer-Encoding: binary".getBytes(StandardCharsets.ISO_8859_1));
output.write(CRLF);
output.write(CRLF);
output.write(fileContent);
output.write(CRLF);
output.write(DASH_DASH);
- output.write(boundaryString.getBytes(ISO_8859_1));
- if(lastMultipart) {
- output.write(DASH_DASH);
- }
+ output.write(boundaryString.getBytes(StandardCharsets.ISO_8859_1));
+ output.write(DASH_DASH); // Last part multi-part
output.write(CRLF);
output.flush();
@@ -1483,7 +1441,7 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
}
/**
- * Create the expected output post body for form data and file multiparts
+ * Create the expected output post body for form data and file multi-parts
* with specified values, when request is multipart
*/
private byte[] createExpectedFormAndUploadOutput(
@@ -1497,12 +1455,12 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
File fileValue,
String fileMimeType,
byte[] fileContent) throws IOException {
- // Create the multiparts
- byte[] formdataMultipart = createExpectedFormdataOutput(boundaryString,
+ // Create the multi-parts
+ byte[] formdataMultipart = createExpectedFormDataOutput(boundaryString,
contentEncoding, titleField, titleValue, descriptionField,
- descriptionValue, true, false);
+ descriptionValue, false);
byte[] fileMultipart = createExpectedFilepartOutput(boundaryString,
- fileField, fileValue, fileMimeType, fileContent, false, true);
+ fileField, fileValue, fileMimeType, fileContent);
// Join the two multiparts
ByteArrayOutputStream output = new ByteArrayOutputStream();
@@ -1516,14 +1474,13 @@ public class TestHTTPSamplersAgainstHttpMirrorServer extends JMeterTestCaseJUnit
}
private HTTPSamplerBase createHttpSampler(int samplerType) {
- switch(samplerType) {
+ switch (samplerType) {
case HTTP_SAMPLER:
return new HTTPSampler();
case HTTP_SAMPLER3:
return new HTTPSampler3();
default:
- break;
+ throw new IllegalArgumentException("Unexpected type: " + samplerType);
}
- throw new IllegalArgumentException("Unexpected type: "+samplerType);
}
}