测试代码整理

This commit is contained in:
cheney
2026-06-10 10:25:53 +08:00
parent 48d9719fbc
commit 12b53a2e0f
8 changed files with 35 additions and 288 deletions
+378
View File
@@ -0,0 +1,378 @@
package jmeter;
import sample.SydUtils;
import com.google.gson.Gson;
import com.sunyard.SydApiException;
import com.sunyard.entity.ImportResult;
import com.sunyard.proto.Util;
import org.apache.commons.lang3.StringUtils;
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.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.util.*;
public class Test4Jmeter extends AbstractJavaSamplerClient {
private String SM2dn ;
private String RSAdn ;
private String ip ;
private int port;
private String ip2 ;
private String oData;
private String sign;
private String detachedSign;
private byte[] orgData;
private int type;
private static ThreadLocal<SydApi4j> api;
private int dataLength;
private String cert;
private String nodes;
private String snmpIP;
private String snmpPort;
private String snmpOID;
private String snmpCommunity;
private int timeout;
private int logSwitch;
/**
* 定义默认的参数,在jmeter中会自动显示在这里定义的默认参数
* @return Arguments对象
*/
@Override
public Arguments getDefaultParameters() {
Arguments arguments = new Arguments();
arguments.addArgument("SM2dn", "C=CN,ST=zz,L=zz,O=zzz,CN=zzzzz");
arguments.addArgument("RSAdn", "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001");
arguments.addArgument("orgData", "null");
arguments.addArgument("ip", "172.1.41.139");
arguments.addArgument("ip2", "172.1.41.96");
arguments.addArgument("port", "8889");
arguments.addArgument("timeout", "3000");
arguments.addArgument("logSwitch", "1");
// arguments.addArgument("ip2", "172.16.17.161");
arguments.addArgument("dataLength", "1024");
arguments.addArgument("type", "1");
arguments.addArgument("sign", "12345678");
arguments.addArgument("detachedSign", "12345678");
arguments.addArgument("cert", "");
arguments.addArgument("nodes", "172.1.41.139:8889;172.1.41.96:8889");
arguments.addArgument("snmpIP", "172.1.41.139");
arguments.addArgument("snmpPort", "162");
arguments.addArgument("snmpOID", "1.3.6.1.4.1.9999");
arguments.addArgument("snmpCommunity", "public");
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");
port = context.getIntParameter("port");
timeout = context.getIntParameter("timeout");
logSwitch = context.getIntParameter("logSwitch");
// ip2 = context.getParameter("ip2");
dataLength = context.getIntParameter("dataLength");
type = context.getIntParameter("type");
sign = context.getParameter("sign");
detachedSign = context.getParameter("detachedSign");
cert = context.getParameter("cert");
nodes = context.getParameter("nodes");
snmpIP = context.getParameter("snmpIP");
snmpPort = context.getParameter("snmpPort");
snmpOID = context.getParameter("snmpOID");
snmpCommunity = context.getParameter("snmpCommunity");
System.getProperty("com.sunyard.sydapi4j.debug", "false");
System.setProperty("com.sunyard.dnsort", "false");
api = new ThreadLocal<SydApi4j>() {
@Override
public SydApi4j initialValue() {
//
// SydApiBuilder builder = new SydApiBuilder().setIp(ip);
// final SydApi4j api = (SydApi4j) builder.build();
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, port, timeout);
final SydApi4j api1 = (SydApi4j) new SydApi4j();
return api1;
}
};
}
/**
* 真正的测试代码块,jmeter按照配置的逻辑执行该方法
* @param javaSamplerContext 上下文对象,可以获取jmeter传递的参数
* @return SampleResult对象用于封装结果
*/
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult sr = new SampleResult();
//设置标签
sr.setSampleLabel("testDemo");
//设置开始标志,否则无法统计tps等
sr.sampleStart();
SydUtils sydUtils = null;
try {
if ("null".equals(oData)) {
orgData = null;
} else {
orgData = oData.getBytes(); //SM2裸签
}
sydUtils = new SydUtils(ip, ip2, port, timeout);
// orgData = new byte[dataLength];
//执行业务逻辑
switch(type){
case 1:
// api.get().SYD_NakedSign(SM2dn, orgData, (byte[]) null);
// byte[] nakedSign = api.get().SYD_NakedSign(orgData,SM2dn);
byte[] nakedSign = sydUtils.SYD_NakedSign(orgData,SM2dn);
if (logSwitch == 1) {
System.out.println("p1签名(hex):"+ Util.bytes2HexString(nakedSign));
}
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) ;
// boolean flag = api.get().SYD_NakedVerify(orgData,Util.hexString2Bytes(sign), SM2dn);
boolean flag = sydUtils.SYD_NakedVerify(orgData,Util.hexString2Bytes(sign), SM2dn);
if (logSwitch == 1) {
System.out.println("p1验签:"+ flag);
}
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);
//p7 detached签名
String detachedSign1 = sydUtils.detachedSign(orgData, SM2dn);
if (logSwitch == 1) {
System.out.println("p7 detach签名:"+ detachedSign1);
}
sr.setResponseCodeOK();
//sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName());
break;
case 6:
// api.get().detachedVerify(1, orgData, sign);
//p7 detached验签
// boolean ver = api.get().detachedVerify(orgData, detachedSign);
boolean ver = sydUtils.detachedVerify(orgData, detachedSign);
if (logSwitch == 1) {
System.out.println("p7 detach验签:"+ ver);
}
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;
case 17:
String cert1 = api.get().getCertBySign(detachedSign);
System.out.println("根据p7签名值获取的证书为:" + cert1);
sr.setResponseCodeOK();
break;
case 18:
testAhnx(sydUtils);
sr.setResponseCodeOK();
break;
case 19:
testImportCert();
sr.setResponseCodeOK();
break;
case 20:
boolean delFlag = api.get().deleteCert(SM2dn);
System.out.println("删除证书成功:"+ delFlag);
break;
case 21:
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, port, timeout);
break;
case 22:
api.get().connect(ip, port, "", timeout);
break;
case 23:
api.get().disconnect();
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 {
if (sydUtils != null) {
sydUtils.disconnect();
}
sr.sampleEnd();
}
return sr;
}
public void testAhnx(SydUtils sydUtils) {
//裸签
byte[] nakedSign = sydUtils.SYD_NakedSign(orgData,SM2dn);
//裸签验签
boolean ver = sydUtils.SYD_NakedVerify(orgData,nakedSign, SM2dn);
//detach签名
String detachedSign = sydUtils.detachedSign(orgData, SM2dn);
//detach验签
boolean ver1 = sydUtils.detachedVerify(orgData, detachedSign);
// testImportCert();
}
private void testImportCert(){
List<String> masterNodes = Arrays.asList(StringUtils.split(nodes, ";"));
Map<String, String> map = new HashMap<>();
map.put("snmp.target.ip", snmpIP);
map.put("snmp.target.port", snmpPort);
map.put("enterprise.oid", snmpOID);
map.put("snmp.community", snmpCommunity);
map.put("snmp.version", "1");
Gson gson = new Gson();
String snmpConfig = gson.toJson(map);
SydApi4j sydApi4j = new SydApi4j();
String cert21 = convertToPem(Base64.getDecoder().decode(cert));
ImportResult importResult = sydApi4j.importCertToServers(masterNodes, timeout, cert21, "12345678", snmpConfig);
System.out.println("证书导入结果:" + gson.toJson(importResult));
}
private String convertToPem(byte[] derCert){
// 使用Base64编码器(兼容RFC 4648,每行64字符)
StringWriter writer = new StringWriter();
writer.write("-----BEGIN CERTIFICATE-----\n");
// 将DER转换为Base64并分割为每行64字符
String base64Cert = Base64.getMimeEncoder(64, "\n".getBytes()).encodeToString(derCert);
writer.write(base64Cert);
// 如果Base64编码的字符串没有以换行结束,则添加换行
if (!base64Cert.endsWith("\n")) {
writer.write("\n");
}
writer.write("-----END CERTIFICATE-----\n");
return writer.toString();
}
/**
* 测试完成后执行,一般用于关闭资源
* @param context 上下文对象,可用于获取jmeter传递的参数
*/
@Override
public void teardownTest(JavaSamplerContext context) {
System.runFinalization();
if (api != null) {
api.get().disconnect();
api.remove();
}
}
}