完善jmter

This commit is contained in:
yihzhou 2023-11-10 10:03:55 +08:00
parent 9af716e87d
commit 62598e0c89
6 changed files with 294 additions and 239 deletions

View File

@ -0,0 +1,217 @@
package com.jmeter.test;
import com.sunyard.SydApiException;
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 racal.sunyard.main.SydApiBuilder;
import java.nio.charset.StandardCharsets;
public class Test4Jemter extends AbstractJavaSamplerClient {
private String SM2dn ;
private String RSAdn ;
private String ip ;
private String ip2 ;
private String oData;
private String sign;
private byte[] orgData;
private int type;
private static ThreadLocal<SydApi4j> api;
/**
* 定义默认的参数在jmeter中会自动显示在这里定义的默认参数
* @return Arguments对象
*/
@Override
public Arguments getDefaultParameters() {
Arguments arguments = new Arguments();
arguments.addArgument("SM2dn", "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1");
arguments.addArgument("RSAdn", "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001");
arguments.addArgument("orgData", "12345678");
arguments.addArgument("ip", "192.168.0.166");
// arguments.addArgument("ip2", "172.16.17.161");
arguments.addArgument("type", "1");
arguments.addArgument("sign", "12345678");
return arguments;
}
/**
* 在执行测试之前执行只执行一次可以获取传递过来的参数一般用来做初始化操作
* @param context 可以获取jmeter传递过来的参数
*/
@Override
public void setupTest(JavaSamplerContext context) {
//对成员变量初始化
SM2dn = context.getParameter("SM2dn");
RSAdn = context.getParameter("RSAdn");
oData = context.getParameter("orgData");
ip = context.getParameter("ip");
// ip2 = context.getParameter("ip2");
type = context.getIntParameter("type");
sign = context.getParameter("sign");
System.setProperty("com.sunyard.dnsort", "false");
api = new ThreadLocal<SydApi4j>() {
public SydApi4j initialValue() {
SydApiBuilder builder = new SydApiBuilder().setIp(ip);
final SydApi4j api = (SydApi4j) builder.build();
return api;
}
};
}
/**
* 真正的测试代码块jmeter按照配置的逻辑执行该方法
* @param javaSamplerContext 上下文对象可以获取jmeter传递的参数
* @return SampleResult对象用于封装结果
*/
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult sr = new SampleResult();
//设置标签
sr.setSampleLabel("testDemo");
//设置开始标志否则无法统计tps等
sr.sampleStart();
try {
orgData = oData.getBytes(); //SM2裸签
//执行业务逻辑
switch(type){
case 1:
api.get().SYD_NakedSign(SM2dn, orgData, (byte[]) null);
sr.setResponseCodeOK();
//sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName());
break;
case 2:
api.get().SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ;
sr.setResponseCodeOK();
//sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName());
break;
case 3:
//RSA裸签
api.get().SYD_NakedSign(1, RSAdn,orgData,(byte[])null);
sr.setResponseCodeOK();
//sr.setResponseData(Util.encodeBase64(nakedSign2), StandardCharsets.UTF_8.displayName());
break;
case 4:
api.get().SYD_NakedVerify(1, RSAdn,Util.decodeBase64(sign),orgData ,(byte[])null);
sr.setResponseCodeOK();
//sr.setResponseData(String.valueOf(nakedVerify2), StandardCharsets.UTF_8.displayName());
break;
case 5:
api.get().detachedSign(1, orgData, SM2dn);
sr.setResponseCodeOK();
//sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName());
break;
case 6:
api.get().detachedVerify(1, orgData, sign);
sr.setResponseCodeOK();
//sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName());
break;
case 7:
api.get().detachedSign(2,1, orgData, RSAdn);
sr.setResponseCodeOK();
//sr.setResponseData(detSign2, StandardCharsets.UTF_8.displayName());
break;
case 8:
api.get().detachedVerify(2,2, orgData, sign);
sr.setResponseCodeOK();
//sr.setResponseData(String.valueOf(detV2), StandardCharsets.UTF_8.displayName());
break;
case 9:
api.get().attachedSignHsm(orgData, SM2dn);
sr.setResponseCodeOK();
//sr.setResponseData(attSign1, StandardCharsets.UTF_8.displayName());
break;
case 10:
api.get().attachedVerify( sign.getBytes());
sr.setResponseCodeOK();
// sr.setResponseData(String.valueOf(attV1), StandardCharsets.UTF_8.displayName());
break;
case 11:
api.get().attachedSignRSAHsm(2, orgData, RSAdn);
sr.setResponseCodeOK();
// sr.setResponseData(attSign2, StandardCharsets.UTF_8.displayName());
break;
case 12:
api.get().attachedVerifyRSA(2, sign);
sr.setResponseCodeOK();
// sr.setResponseData(String.valueOf(attV2), StandardCharsets.UTF_8.displayName());
break;
case 13:
api.get().generateDE(SM2dn.getBytes(), 3, 1, orgData);
// byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY);
sr.setResponseCodeOK();
// sr.setResponseData(new String(cipherKey), StandardCharsets.UTF_8.displayName());
break;
case 14:
api.get().decryptDE(true, 1, SM2dn.getBytes(), sign);;
// byte[] oData = (byte[]) denSM2.get("oData");
sr.setResponseCodeOK();
// sr.setResponseData(new String(oData), StandardCharsets.UTF_8.displayName());
break;
case 15:
api.get(). generateDE(RSAdn.getBytes(), 4, 1, orgData);
// byte[] cipherKeyRSA = (byte[]) genRSA.get(SydApi.RET_CIPHER_KEY);
sr.setResponseCodeOK();
//sr.setResponseData(new String(cipherKeyRSA), StandardCharsets.UTF_8.displayName());
break;
case 16:
api.get().decryptDERSA(true, 1, RSAdn.getBytes(), sign);
// byte[] oDataRSA = (byte[]) denRSA.get("oData");
sr.setResponseCodeOK();
//sr.setResponseData(new String(oDataRSA), StandardCharsets.UTF_8.displayName());
break;
default:
sr.setResponseCodeOK();
sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName());
break;
}
sr.setSuccessful(true);
}catch (SydApiException e){
e.printStackTrace();
sr.setResponseCode(String.valueOf(e.getRetCode()));
sr.setResponseData(e.getMessage(), StandardCharsets.UTF_8.displayName());
sr.setSuccessful(false);
}finally {
sr.sampleEnd();
}
return sr;
}
/**
* 测试完成后执行一般用于关闭资源
* @param context 上下文对象可用于获取jmeter传递的参数
*/
@Override
public void teardownTest(JavaSamplerContext context) {
System.runFinalization();
}
}

View File

@ -1,210 +0,0 @@
//package com.jmeter.test;
//
//import com.sunyard.RetWrap;
//import com.sunyard.SydApi;
//import com.sunyard.SydApiException;
//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 racal.sunyard.main.SydApiBuilder;
//import sun.nio.cs.StandardCharsets;
//
//
//public class Test4ZS extends AbstractJavaSamplerClient {
//
// private String SM2dn ;
// private String RSAdn ;
// private String ip ;
// private String ip2 ;
// private String oData;
// private String sign;
// private byte[] orgData;
//
// private int type;
//
//
// /**
// * 定义默认的参数在jmeter中会自动显示在这里定义的默认参数
// * @return Arguments对象
// */
// @Override
// public Arguments getDefaultParameters() {
// Arguments arguments = new Arguments();
// arguments.addArgument("SM2dn", "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1");
// arguments.addArgument("RSAdn", "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001");
// arguments.addArgument("orgData", "12345678");
// arguments.addArgument("ip", "172.16.17.161");
// arguments.addArgument("ip2", "172.16.17.161");
// arguments.addArgument("type", "1");
// arguments.addArgument("sign", "12345678");
// return arguments;
// }
//
// /**
// * 在执行测试之前执行只执行一次可以获取传递过来的参数一般用来做初始化操作
// * @param context 可以获取jmeter传递过来的参数
// */
// @Override
// public void setupTest(JavaSamplerContext context) {
// //对成员变量初始化
// SM2dn = context.getParameter("SM2dn");
// RSAdn = context.getParameter("RSAdn");
// oData = context.getParameter("orgData");
// ip = context.getParameter("ip");
// ip2 = context.getParameter("ip2");
// type = context.getIntParameter("type");
// sign = context.getParameter("sign");
// System.setProperty("com.sunyard.dnsort", "false");
//
// }
//
// /**
// * 真正的测试代码块jmeter按照配置的逻辑执行该方法
// * @param javaSamplerContext 上下文对象可以获取jmeter传递的参数
// * @return SampleResult对象用于封装结果
// */
// @Override
// public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
// SampleResult sr = new SampleResult();
// //设置标签
// sr.setSampleLabel("testDemo");
// //设置开始标志否则无法统计tps等
// sr.sampleStart();
// try {
// SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000);
// SydApi4j api = (SydApi4j) new SydApi4j();
// orgData = oData.getBytes(); //SM2裸签
// //执行业务逻辑
// switch(type){
// case 1:
// api.SYD_NakedSign(SM2dn, orgData, (byte[])null);
// sr.setResponseCodeOK();
// //sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName());
// break;
//
//
// case 2:
// api.SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ;
// sr.setResponseCodeOK();
// //sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName());
// break;
//
// case 3:
// //RSA裸签
// api.SYD_NakedSign(1, RSAdn,orgData,(byte[])null);
// sr.setResponseCodeOK();
// //sr.setResponseData(Util.encodeBase64(nakedSign2), StandardCharsets.UTF_8.displayName());
// break;
//
// case 4:
// api.SYD_NakedVerify(1, RSAdn,Util.decodeBase64(sign),orgData ,(byte[])null);
// sr.setResponseCodeOK();
// //sr.setResponseData(String.valueOf(nakedVerify2), StandardCharsets.UTF_8.displayName());
// break;
//
// case 5:
// api.detachedSign(1, orgData, SM2dn);
// sr.setResponseCodeOK();
// //sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName());
// break;
//
// case 6:
// api.detachedVerify(1, orgData, sign);
// sr.setResponseCodeOK();
// //sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName());
// break;
//
// case 7:
// api.detachedSign(2,1, orgData, RSAdn);
// sr.setResponseCodeOK();
// //sr.setResponseData(detSign2, StandardCharsets.UTF_8.displayName());
// break;
//
// case 8:
// api.detachedVerify(2,2, orgData, sign);
// sr.setResponseCodeOK();
// //sr.setResponseData(String.valueOf(detV2), StandardCharsets.UTF_8.displayName());
// break;
//
// case 9:
// api.attachedSignHsm(orgData, SM2dn);
// sr.setResponseCodeOK();
// //sr.setResponseData(attSign1, StandardCharsets.UTF_8.displayName());
// break;
//
// case 10:
// api.attachedVerify( sign.getBytes());
// sr.setResponseCodeOK();
// // sr.setResponseData(String.valueOf(attV1), StandardCharsets.UTF_8.displayName());
// break;
//
// case 11:
// api.attachedSignRSAHsm(2, orgData, RSAdn);
// sr.setResponseCodeOK();
// // sr.setResponseData(attSign2, StandardCharsets.UTF_8.displayName());
// break;
//
// case 12:
// api.attachedVerifyRSA(2, sign);
// sr.setResponseCodeOK();
// // sr.setResponseData(String.valueOf(attV2), StandardCharsets.UTF_8.displayName());
// break;
//
// case 13:
// api.generateDE(SM2dn.getBytes(), 3, 1, orgData);
// // byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY);
// sr.setResponseCodeOK();
// // sr.setResponseData(new String(cipherKey), StandardCharsets.UTF_8.displayName());
// break;
//
// case 14:
// api.decryptDE(true, 1, SM2dn.getBytes(), sign);;
// // byte[] oData = (byte[]) denSM2.get("oData");
// sr.setResponseCodeOK();
// // sr.setResponseData(new String(oData), StandardCharsets.UTF_8.displayName());
// break;
//
//
// case 15:
// api. generateDE(RSAdn.getBytes(), 4, 1, orgData);
// // byte[] cipherKeyRSA = (byte[]) genRSA.get(SydApi.RET_CIPHER_KEY);
// sr.setResponseCodeOK();
// //sr.setResponseData(new String(cipherKeyRSA), StandardCharsets.UTF_8.displayName());
// break;
//
// case 16:
// api.decryptDERSA(true, 1, RSAdn.getBytes(), sign);
// // byte[] oDataRSA = (byte[]) denRSA.get("oData");
// sr.setResponseCodeOK();
// //sr.setResponseData(new String(oDataRSA), StandardCharsets.UTF_8.displayName());
// break;
//
// default:
// sr.setResponseCodeOK();
// sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName());
// break;
// }
// sr.setSuccessful(true);
// }catch (SydApiException e){
// e.printStackTrace();
// sr.setResponseCode(String.valueOf(e.getRetCode()));
// sr.setResponseData(e.getMessage(), StandardCharsets.UTF_8.displayName());
// sr.setSuccessful(false);
// }finally {
// sr.sampleEnd();
// }
// return sr;
// }
//
// /**
// * 测试完成后执行一般用于关闭资源
// * @param context 上下文对象可用于获取jmeter传递的参数
// */
// @Override
// public void teardownTest(JavaSamplerContext context) {
// System.runFinalization();
// }
//}

View File

@ -1821,22 +1821,24 @@ public class SydApi4j implements SydApi {
buff = new byte[bb.position()]; buff = new byte[bb.position()];
System.arraycopy(bb.array(), 0, buff, 0, buff.length); System.arraycopy(bb.array(), 0, buff, 0, buff.length);
} }
if(debug){
println("\n\n发送数据");
println("\n\n发送数据");
// print("原始数据: \t"); // print("原始数据: \t");
// println(Arrays.toString(buff)); // println(Arrays.toString(buff));
print("HEX数据: \t"); print("HEX数据: \t");
println(Util.bytes2HexString(buff));
if (null != builder && builder.isUseEBCDMode()) {
// 对十个字节之后的进行 EBCD 转码
buff = CoderUtil.ASCIIToEBCDICFIX(buff, 10);
print("EBCD 数据: \t");
println(Util.bytes2HexString(buff)); println(Util.bytes2HexString(buff));
if (null != builder && builder.isUseEBCDMode()) {
// 对十个字节之后的进行 EBCD 转码
buff = CoderUtil.ASCIIToEBCDICFIX(buff, 10);
print("EBCD 数据: \t");
println(Util.bytes2HexString(buff));
}
} }
testSocket();
//testSocket();
try { try {
socket.getOutputStream().write(buff); socket.getOutputStream().write(buff);
@ -1918,12 +1920,14 @@ public class SydApi4j implements SydApi {
len += 2; len += 2;
print("H\t"); if(debug){
println(Integer.toHexString(high)); print("H\t");
print("L\t"); println(Integer.toHexString(high));
println(Integer.toHexString(low)); print("L\t");
print("Len\t"); println(Integer.toHexString(low));
println(len); print("Len\t");
println(len);
}
ByteBuffer bb = ByteBuffer.allocate(len); ByteBuffer bb = ByteBuffer.allocate(len);
@ -1950,16 +1954,24 @@ public class SydApi4j implements SydApi {
} }
if (null != builder && builder.isUseEBCDMode()) { if (null != builder && builder.isUseEBCDMode()) {
print("EBCD 数据: \t"); // print("EBCD 数据: \t");
println(Util.bytes2HexString(bb.array())); // println(Util.bytes2HexString(bb.array()));
byte[] b = bb.array(); byte[] b = bb.array();
CoderUtil.EBCDICToASCIIFIX(b, 10); CoderUtil.EBCDICToASCIIFIX(b, 10);
} }
if(debug){
print("EBCD 数据: \t");
println(Util.bytes2HexString(bb.array()));
print("HEX数据: \t");
println(Util.bytes2HexString(bb.array()));
}
print("HEX数据: \t"); // print("HEX数据: \t");
println(Util.bytes2HexString(bb.array())); // println(Util.bytes2HexString(bb.array()));
return bb; return bb;
} }
@ -1971,7 +1983,7 @@ public class SydApi4j implements SydApi {
* @buffer 如果出错需要补发的数据 * @buffer 如果出错需要补发的数据
*/ */
protected ByteBuffer syncRead(byte[] buffer) { protected ByteBuffer syncRead(byte[] buffer) {
println("\n\n接收数据"); // println("\n\n接收数据");
try { try {
// 正常接收 // 正常接收
ByteBuffer bb = read(socket); ByteBuffer bb = read(socket);

View File

@ -1,6 +1,7 @@
package sample; package sample;
import com.sunyard.SydApi; import com.sunyard.SydApi;
import com.sunyard.proto.Util;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -40,4 +41,12 @@ public class HashTest {
public void sha256(){ public void sha256(){
api.itHash( 1, new byte[ 5 * 1024 * 1024 ]); api.itHash( 1, new byte[ 5 * 1024 * 1024 ]);
} }
@Test
public void hex(){
String s = "MEQCICECex9ZSh6PktFDu3rkszxJ++miqXBs5uCJS2VL8lhUAiBgZSLbJAMgrpTpmRL2L/5XsWBHSoFbKI6ToSzDnbPCaQ==";
System.out.println(Util.bytes2HexString(Util.decodeBase64(s)));
System.out.println(new String(Util.decodeBase64(s)));
}
} }

View File

@ -4,6 +4,7 @@ import com.sunyard.RetWrap;
import com.sunyard.SydApi; import com.sunyard.SydApi;
import com.sunyard.SydApiException; import com.sunyard.SydApiException;
import com.sunyard.proto.Util; import com.sunyard.proto.Util;
import org.junit.Test;
import racal.sunyard.main.SydApi4j; import racal.sunyard.main.SydApi4j;
import racal.sunyard.main.SydApiBuilder; import racal.sunyard.main.SydApiBuilder;
@ -23,11 +24,11 @@ public class Sample4ZS {
String ip2 = "172.16.17.161"; String ip2 = "172.16.17.161";
//主备模式连接 //主备模式连接
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000); // SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000);
SydApi4j api = (SydApi4j) new SydApi4j(); // SydApi4j api = (SydApi4j) new SydApi4j();
//设置连接 //设置连接
// SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161"); SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161");
// SydApi4j api = (SydApi4j) builder.build(); SydApi4j api = (SydApi4j) builder.build();
try { try {
long startTime = System.currentTimeMillis(); //获取开始时间 long startTime = System.currentTimeMillis(); //获取开始时间
// //SM2裸签 // //SM2裸签
@ -94,4 +95,25 @@ public class Sample4ZS {
} }
@Test
public void importCert(){
//调试模式控制台会打印发送报文
System.setProperty("com.sunyard.sydapi4j.debug", "true");
//证书是否反序校验
//System.setProperty("com.sunyard.dnsort", "false");
String ip = "172.16.17.1";
String ip2 = "172.16.17.161";
//主备模式连接
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000);
SydApi4j api = (SydApi4j) new SydApi4j();
//证书导入
String cert = "";
api.importCert(cert.getBytes(),null);
api.SYD_NakedSign(SM2dn, orgData, (byte[])null);
}
} }

View File

@ -16,17 +16,22 @@ import java.util.List;
public class Test4Nongxin { public class Test4Nongxin {
private static final String SM2dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; private static final String SM2dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
private static final String RSAdn = "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001"; private static final String RSAdn = "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001";
private static final byte[] orgData = new byte[ 10*1024 ]; private static final byte[] orgData = new byte[ 2*1024 ];
private static final byte[] orgDataBig = new byte[ 10*1024 ]; private static final byte[] orgDataBig = new byte[ 10*1024 ];
public static void main(String[] args) { public static void main(String[] args) {
//System.setProperty("com.sunyard.sydapi4j.debug", "true"); //System.setProperty("com.sunyard.sydapi4j.debug", "true");
//设置连接 //设置连接
SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161"); SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.200");
SydApi4j api = (SydApi4j) builder.build(); SydApi4j api = (SydApi4j) builder.build();
try { try {
//SM2裸签 //SM2裸签
byte[] nakedSign = api.SYD_NakedSign(SM2dn, orgData, null);
boolean b1 = api.SYD_NakedVerify(SM2dn, nakedSign, orgData, null);
System.out.println(b1);
byte[] nakedSign1 = api.SYD_NakedSignAll(4,orgData, SM2dn); byte[] nakedSign1 = api.SYD_NakedSignAll(4,orgData, SM2dn);
System.out.println("SM2大数据裸签"+ Util.bytes2HexString(nakedSign1)); System.out.println("SM2大数据裸签"+ Util.bytes2HexString(nakedSign1));
boolean nakedVerify1 = api.SYD_NakedVerifyAll(4,orgData, nakedSign1, SM2dn); boolean nakedVerify1 = api.SYD_NakedVerifyAll(4,orgData, nakedSign1, SM2dn);