Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
201 changes: 98 additions & 103 deletions src/protocol/java/org/apache/jmeter/protocol/java/sampler/S3Sampler.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,119 +3,114 @@
* Distrubuted under the same license as apache jmeter itself.
* http://www.apache.org/licenses/LICENSE-2.0
*/
package com.bigstep;
package protocol.java.org.apache.jmeter.protocol.java.sampler;

import java.io.File;
import java.io.Serializable;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jorphan.logging.LoggingManager;
import org.apache.log.Logger;

import java.io.File;
import java.io.Serializable;


public class S3Sampler extends AbstractJavaSamplerClient implements Serializable {
private static final long serialVersionUID = 1L;
private static final Logger log = LoggingManager.getLoggerForClass();

// set up default arguments for the JMeter GUI
@Override
public Arguments getDefaultParameters() {
Arguments defaultParameters = new Arguments();
defaultParameters.addArgument("method", "GET");
defaultParameters.addArgument("bucket", "");
defaultParameters.addArgument("object", "");
defaultParameters.addArgument("key_id", "");
defaultParameters.addArgument("secret_key", "");
defaultParameters.addArgument("local_file_path", "");
defaultParameters.addArgument("proxy_host", "");
defaultParameters.addArgument("proxy_port", "");
defaultParameters.addArgument("endpoint", "");
return defaultParameters;
}

@Override
public SampleResult runTest(JavaSamplerContext context) {
// pull parameters
String bucket = context.getParameter("bucket");
String object = context.getParameter("object");
String method = context.getParameter("method");
String local_file_path = context.getParameter("local_file_path");
String key_id = context.getParameter("key_id");
String secret_key = context.getParameter("secret_key");
String proxy_host = context.getParameter("proxy_host");
String proxy_port = context.getParameter("proxy_port");
String endpoint = context.getParameter("endpoint");

log.debug("runTest:method=" + method + " local_file_path=" + local_file_path + " bucket=" + bucket + " object=" + object);

SampleResult result = new SampleResult();
result.sampleStart(); // start stopwatch

try {
ClientConfiguration config = new ClientConfiguration();
if (proxy_host != null && !proxy_host.isEmpty()) {
config.setProxyHost(proxy_host);
}
if (proxy_port != null && !proxy_port.isEmpty()) {
config.setProxyPort(Integer.parseInt(proxy_port));
}
//config.setProtocol(Protocol.HTTP);

AWSCredentials credentials = new BasicAWSCredentials(key_id, secret_key);

AmazonS3 s3Client = new AmazonS3Client(credentials, config);
if (endpoint != null && !endpoint.isEmpty()) {
s3Client.setEndpoint(endpoint);
}
ObjectMetadata meta = null;

if (method.equals("GET")) {
File file = new File(local_file_path);
//meta= s3Client.getObject(new GetObjectRequest(bucket, object), file);
S3Object s3object = s3Client.getObject(bucket, object);
S3ObjectInputStream stream = s3object.getObjectContent();
//while(stream.skip(1024*1024)>0);
stream.close();
} else if (method.equals("PUT")) {
File file = new File(local_file_path);
s3Client.putObject(bucket, object, file);
}

result.sampleEnd(); // stop stopwatch
result.setSuccessful(true);
if (meta != null) {
result.setResponseMessage("OK on url:" + bucket + "/" + object + ". Length=" + meta.getContentLength());
} else {
result.setResponseMessage("OK on url:" + bucket + "/" + object + ".No metadata");
}
result.setResponseCodeOK(); // 200 code

} catch (Exception e) {
result.sampleEnd(); // stop stopwatch
result.setSuccessful(false);
result.setResponseMessage("Exception: " + e);

// get stack trace as a String to return as document data
java.io.StringWriter stringWriter = new java.io.StringWriter();
e.printStackTrace(new java.io.PrintWriter(stringWriter));
result.setResponseData(stringWriter.toString());
result.setDataType(org.apache.jmeter.samplers.SampleResult.TEXT);
result.setResponseCode("500");
}

return result;
}
private static final long serialVersionUID = 1L;
private static final Logger log = LoggingManager.getLoggerForClass();

// set up default arguments for the JMeter GUI
@Override
public Arguments getDefaultParameters() {
Arguments defaultParameters = new Arguments();
defaultParameters.addArgument("method", "GET");
defaultParameters.addArgument("bucket", "");
defaultParameters.addArgument("object", "");
defaultParameters.addArgument("key_id", "");
defaultParameters.addArgument("secret_key", "");
defaultParameters.addArgument("local_file_path", "");
defaultParameters.addArgument("proxy_host", "");
defaultParameters.addArgument("proxy_port", "");
defaultParameters.addArgument("endpoint", "");
return defaultParameters;
}

public SampleResult runTest(JavaSamplerContext context) {
// pull parameters
String bucket = context.getParameter("bucket");
String object = context.getParameter("object");
String method = context.getParameter("method");
String local_file_path = context.getParameter("local_file_path");
String key_id = context.getParameter("key_id");
String secret_key = context.getParameter("secret_key");
String proxy_host = context.getParameter("proxy_host");
String proxy_port = context.getParameter("proxy_port");
String endpoint = context.getParameter("endpoint");

log.debug("runTest:method=" + method + " local_file_path=" + local_file_path + " bucket=" + bucket + " object="
+ object);

SampleResult result = new SampleResult();
result.sampleStart(); // start stopwatch

try {
ClientConfiguration config = new ClientConfiguration();
if (proxy_host != null && !proxy_host.isEmpty()) {
config.setProxyHost(proxy_host);
}
if (proxy_port != null && !proxy_port.isEmpty()) {
config.setProxyPort(Integer.parseInt(proxy_port));
}
// config.setProtocol(Protocol.HTTP);

AWSCredentials credentials = new BasicAWSCredentials(key_id, secret_key);

AmazonS3 s3Client = new AmazonS3Client(credentials, config);
if (endpoint != null && !endpoint.isEmpty()) {
s3Client.setEndpoint(endpoint);
}
ObjectMetadata meta = null;

if (method.equals("GET")) {
S3Object s3object = s3Client.getObject(bucket, object);
S3ObjectInputStream stream = s3object.getObjectContent();
stream.close();
} else if (method.equals("PUT")) {
File file = new File(local_file_path);
s3Client.putObject(bucket, object, file);
}

result.sampleEnd(); // stop stopwatch
result.setSuccessful(true);
if (meta != null) {
result.setResponseMessage("OK on url:" + bucket + "/" + object + ". Length=" + meta.getContentLength());
} else {
result.setResponseMessage("OK on url:" + bucket + "/" + object + ".No metadata");
}
result.setResponseCodeOK(); // 200 code

} catch (Exception e) {
result.sampleEnd(); // stop stopwatch
result.setSuccessful(false);
result.setResponseMessage("Exception: " + e);

// get stack trace as a String to return as document data
java.io.StringWriter stringWriter = new java.io.StringWriter();
e.printStackTrace(new java.io.PrintWriter(stringWriter));
result.setResponseData(stringWriter.toString());
result.setDataType(org.apache.jmeter.samplers.SampleResult.TEXT);
result.setResponseCode("500");
}

return result;
}
}