156 lines
5.6 KiB
Java
156 lines
5.6 KiB
Java
package cmbpoc;
|
|
|
|
|
|
import com.sunyard.SydApi;
|
|
import com.sunyard.proto.Util;
|
|
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 racal.sunyard.main.SydApi4j;
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
public class JmeterTest extends AbstractJavaSamplerClient {
|
|
|
|
private byte[] publicKey;
|
|
private byte[] plainData;
|
|
private byte[] encryptedData;
|
|
private String sign;
|
|
private int sleep = 1;
|
|
|
|
private byte[] privateKey4Sign;
|
|
private byte[] publicKey4Sign;
|
|
private byte[] privateKey4Ende;
|
|
private byte[] publicKey4Ende;
|
|
|
|
private String ip ;
|
|
private int port;
|
|
private int timeout;
|
|
private String ip2 ;
|
|
|
|
private ThreadLocal<SydApi4j> api;
|
|
|
|
@Override
|
|
public Arguments getDefaultParameters() {
|
|
Arguments params = new Arguments();
|
|
params.addArgument("function", "sleep");
|
|
params.addArgument("sleep", "1");
|
|
params.addArgument("plainDataLen", "1024");
|
|
params.addArgument("publicKey4Ende", "", "加密用的公钥");
|
|
params.addArgument("privateKey4Ende", "", "解密用的公钥");
|
|
params.addArgument("publicKey4Sign", "", "验签用的公钥");
|
|
params.addArgument("privateKey4Sign", "", "签名用的公钥");
|
|
params.addArgument("ip", "192.168.100.145");
|
|
params.addArgument("ip2", "172.1.41.96");
|
|
params.addArgument("port", "8889");
|
|
params.addArgument("timeout", "3000");
|
|
return params;
|
|
}
|
|
|
|
@Override
|
|
public void setupTest(JavaSamplerContext context) {
|
|
// 签名密钥对
|
|
String publicKey4Sign = context.getParameter("publicKey4Sign");
|
|
if ( null != publicKey4Sign && !publicKey4Sign.isEmpty()) {
|
|
this.publicKey4Sign = Util.hexString2Bytes(publicKey4Sign);
|
|
}
|
|
String privateKey4Sign = context.getParameter("privateKey4Sign");
|
|
if ( null != privateKey4Sign && !privateKey4Sign.isEmpty()) {
|
|
this.privateKey4Sign = Util.hexString2Bytes(privateKey4Sign);
|
|
}
|
|
|
|
// 加密密钥对
|
|
String publicKey4Ende = context.getParameter("publicKey4Ende");
|
|
if ( null != publicKey4Ende && !publicKey4Ende.isEmpty()) {
|
|
this.publicKey4Ende = Util.hexString2Bytes(publicKey4Ende);
|
|
}
|
|
String privateKey4Ende = context.getParameter("privateKey4Ende");
|
|
if ( null != privateKey4Ende && !privateKey4Ende.isEmpty()) {
|
|
this.privateKey4Ende = Util.hexString2Bytes(privateKey4Ende);
|
|
}
|
|
|
|
// 原始数据
|
|
int plainDataLen = context.getIntParameter("plainDataLen");
|
|
plainData = new byte[plainDataLen];
|
|
new Random().nextBytes(plainData);
|
|
System.out.println("原始数据长度:" + plainDataLen);
|
|
|
|
// 校准测试
|
|
sleep = context.getIntParameter("sleep", 1);
|
|
|
|
// api
|
|
ip = context.getParameter("ip");
|
|
ip2 = context.getParameter("ip2");
|
|
port = context.getIntParameter("port");
|
|
timeout = context.getIntParameter("timeout");
|
|
api = new ThreadLocal<SydApi4j>() {
|
|
@Override
|
|
public SydApi4j initialValue() {
|
|
return (SydApi4j) new SydApi4j().connect(ip, port, null, timeout);
|
|
}
|
|
};
|
|
|
|
// 线程开始时准备解密、验签数据
|
|
String function = context.getParameter("function");
|
|
switch (function) {
|
|
case "SYD_SM2_Decrypt":
|
|
this.encryptedData = this.api.get().SYD_SM2Encrypt(this.publicKey4Ende, this.plainData);
|
|
break;
|
|
case "SYD_SM2_Verify":
|
|
this.sign = this.api.get().SYD_SM2_Sign_HA(SydApi.DATA_HASH, this.privateKey4Sign, this.publicKey4Sign, this.plainData);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public SampleResult runTest(JavaSamplerContext context) {
|
|
SampleResult result = new SampleResult();
|
|
// 调用待测函数
|
|
String function = context.getParameter("function");
|
|
|
|
result.sampleStart(); // 开始计时
|
|
try {
|
|
switch (function) {
|
|
case "SYD_SM2_Encrypt":
|
|
this.api.get().SYD_SM2Encrypt(publicKey4Ende, this.plainData);
|
|
break;
|
|
case "SYD_SM2_Decrypt":
|
|
this.api.get().SYD_SM2Decrypt(privateKey4Ende, this.encryptedData);
|
|
break;
|
|
case "SYD_SM2_Sign":
|
|
this.api.get().SYD_SM2_Sign_HA(SydApi.DATA_HASH, privateKey4Sign, publicKey4Sign, this.plainData);
|
|
break;
|
|
case "SYD_SM2_Verify":
|
|
this.api.get().SYD_SM2_Verify_HA(SydApi.DATA_HASH, publicKey4Sign, this.plainData, this.sign);
|
|
break;
|
|
case "sleep":
|
|
Thread.sleep( this.sleep );
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
// result.setResponseData(encrypted); // 可选
|
|
result.setSuccessful(true);
|
|
result.setResponseCodeOK();
|
|
result.setResponseMessage( function + "执行成功" );
|
|
} catch (Exception e) {
|
|
result.setSuccessful(false);
|
|
result.setResponseCode("500");
|
|
result.setResponseMessage( function + "执行失败。" + e.getMessage());
|
|
} finally {
|
|
result.sampleEnd(); // 结束计时
|
|
}
|
|
return result;
|
|
}
|
|
|
|
@Override
|
|
public void teardownTest(JavaSamplerContext context) {
|
|
// 释放资源(如有)
|
|
}
|
|
} |