错误码优化

This commit is contained in:
jiangr.wu@sunyard.com 2025-08-11 18:18:36 +08:00
parent 08ddb35bc3
commit 4ad5250026
5 changed files with 333 additions and 206 deletions

View File

@ -6,7 +6,7 @@
<groupId>com.sunyard.sge.database</groupId> <groupId>com.sunyard.sge.database</groupId>
<artifactId>sydapi-database</artifactId> <artifactId>sydapi-database</artifactId>
<version>1.26</version> <version>1.28</version>
<name>sydapi-database</name> <name>sydapi-database</name>
<properties> <properties>

View File

@ -152,7 +152,7 @@ public class SydApi4Database extends SydApiBaseFunction {
} }
if ( iKeyIndex.length != pcData.size() ) { if ( iKeyIndex.length != pcData.size() ) {
throw new IllegalArgumentException("批量输入数据密钥和数据数量不等"); throw new SydApiException("批量输入数据密钥和数据数量不等", 0x01000001);
} }
if ( 0 == iKeyIndex.length ) { if ( 0 == iKeyIndex.length ) {

View File

@ -20,6 +20,8 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import static com.sunyard.sge.database.SydApiConfig.BATCH_SIZE;
/** /**
* 上海黄金交易所 - 数据库加密方案 * 上海黄金交易所 - 数据库加密方案
*/ */
@ -575,80 +577,7 @@ public class SydApiBaseFunction implements SydApi {
@Override @Override
public List<byte[]> SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) { public List<byte[]> SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
return sm4Mac_BatchData(iKeyIndex, pcData, true);
if (log.isDebugEnabled()) {
log.debug("SYD_SM4Mac_BatchDataiKeyIndex{},pcData元素个数为{}", iKeyIndex, pcData.size());
}
if (pcData.isEmpty()) {
return new ArrayList<>();
}
if (null == this.hsms || this.hsms.length < 1) {
throw new SydApiException(-1);
}
String[] keys = new String[iKeyIndex.length];
updateLastUseTime();
for (int i = 0; i < iKeyIndex.length; i++) {
if (iKeyIndex[i] < 0) {
throw new SydApiException(0x01000001);
}
keys[i] = "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", String.format("%08d", iKeyIndex[i]));
}
SydApiException le = new SydApiException(-1);
for (SydApi4j api : this.hsms) {
if (null == api) {
continue;
}
if (isShortLinkMode) {
try {
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
List<byte[]> ret = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
ret.add(mac);
}
return ret;
} catch (SydApiException e) {
le = e;
if (e.getRetCode() < 0) {
log.error("HA 重试");
continue;
}
throw e;
}
} else {
synchronized (api) {
try {
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
List<byte[]> ret = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
ret.add(mac);
}
return ret;
} catch (SydApiException e) {
le = e;
if (e.getRetCode() < 0) {
log.error("HA 重试");
continue;
}
throw e;
}
}
}
}
if (!this.isShortLinkMode) {
this.oip.setError();
}
throw le;
} }
@Override @Override
@ -662,6 +591,12 @@ public class SydApiBaseFunction implements SydApi {
return new boolean[0]; return new boolean[0];
} }
for (byte[] pcdata : pcData) {
if (pcdata.length > 1040) {
throw new SydApiException("数据长度错误",0x01000001);
}
}
if (null == this.hsms || this.hsms.length < 1) { if (null == this.hsms || this.hsms.length < 1) {
throw new SydApiException(-1); throw new SydApiException(-1);
} }
@ -1095,8 +1030,8 @@ public class SydApiBaseFunction implements SydApi {
return new ArrayList<>(); return new ArrayList<>();
} }
List<byte[]> enDatas = SYD_SM4_BatchData(iEncKeyIndex, pcData, Consts.ECB_ENC); List<byte[]> enDatas = my_SYD_SM4_BatchData(iEncKeyIndex, pcData, Consts.ECB_ENC);
List<byte[]> macs = SYD_SM4Mac_BatchData(iMacKeyIndex, enDatas); List<byte[]> macs = my_SYD_SM4Mac_BatchData(iMacKeyIndex, enDatas);
List<DataAndMac> ret = new ArrayList<DataAndMac>(); List<DataAndMac> ret = new ArrayList<DataAndMac>();
for (int i = 0; i < enDatas.size(); i++) { for (int i = 0; i < enDatas.size(); i++) {
DataAndMac dam = new DataAndMac(enDatas.get(i), macs.get(i)); DataAndMac dam = new DataAndMac(enDatas.get(i), macs.get(i));
@ -1105,6 +1040,278 @@ public class SydApiBaseFunction implements SydApi {
return ret; return ret;
} }
private List<byte[]> my_SYD_SM4_BatchData(int[] iKeyIndex, List<byte[]> pcData, int iFlag) {
if ( null == iKeyIndex || null == pcData ) {
throw new IllegalArgumentException("批量输入数据为 null");
}
if ( iKeyIndex.length != pcData.size() ) {
throw new SydApiException("批量输入数据密钥和数据数量不等", 0x01000001);
}
if ( 0 == iKeyIndex.length ) {
return new ArrayList<>();
}
// 将数据进行分组防止超长
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> curKeyGroup = new ArrayList<>();
for (int i = 0; i < pcData.size(); i++) {
byte[] data = pcData.get(i);
if (null == data) {
data = new byte[0];
}
if (
curDataGroup.size() > 9 // 分组小于等于 9
|| (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
) { // 扩展包
dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup);
curDataGroup = new ArrayList<>();
curKeyGroup = new ArrayList<>();
totalLen = 0;
}
curDataGroup.add(data);
curKeyGroup.add(iKeyIndex[i]);
totalLen += data.length;
}
dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup);
// 排队处理
List<byte[]> ret = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
ret.addAll(SYD_SM4_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i), iFlag));
}
return ret;
}
private List<byte[]> my_SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData) {
if ( null == iKeyIndex || null == pcData ) {
throw new IllegalArgumentException("批量输入数据为 null");
}
if ( iKeyIndex.length != pcData.size() ) {
throw new IllegalArgumentException("批量输入数据密钥和数据数量不等");
}
if ( 0 == iKeyIndex.length ) {
return new ArrayList<>();
}
// 将数据进行分组防止超长
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> curKeyGroup = new ArrayList<>();
for (int i = 0; i < pcData.size(); i++) {
byte[] data = pcData.get(i);
if (null == data) {
data = new byte[0];
}
if (
curDataGroup.size() > 9 // 分组小于等于 9
|| (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
) {// 扩展包
dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup);
curDataGroup = new ArrayList<>();
curKeyGroup = new ArrayList<>();
totalLen = 0;
}
curDataGroup.add(data);
curKeyGroup.add(iKeyIndex[i]);
totalLen += data.length;
}
dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup);
// 排队处理
List<byte[]> ret = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
List<byte[]> macs = sm4Mac_BatchData(toIntArray(keyGroups.get(i)), dataGroups.get(i), false);
ret.addAll(macs);
}
return ret;
}
private boolean[] my_SYD_SM4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, List<byte[]> pcMac) {
if ( null == iKeyIndex || null == pcData ) {
throw new IllegalArgumentException("批量输入数据为 null");
}
if ( iKeyIndex.length != pcData.size() ) {
throw new IllegalArgumentException("批量输入数据密钥和数据数量不等");
}
if ( 0 == iKeyIndex.length ) {
return new boolean[0];
}
// 将数据进行分组防止超长
List<List<byte[]>> dataGroups = new ArrayList<>();
List<List<Integer>> keyGroups = new ArrayList<>();
List<List<byte[]>> macGroups = new ArrayList<>();
int totalLen = 0;
List<byte[]> curDataGroup = new ArrayList<>();
List<Integer> curKeyGroup = new ArrayList<>();
List<byte[]> curMacGroup = new ArrayList<>();
for (int i = 0; i < pcData.size(); i++) {
byte[] data = pcData.get(i);
if (null == data) {
data = new byte[0];
}
if (
curDataGroup.size() > 9 // 分组小于等于 9
|| (totalLen + data.length > BATCH_SIZE) // 总大小小于 BATCH_SIZE
) {
// 扩展包
dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup);
macGroups.add(curMacGroup);
curDataGroup = new ArrayList<>();
curKeyGroup = new ArrayList<>();
curMacGroup = new ArrayList<>();
totalLen = 0;
}
curDataGroup.add(data);
curKeyGroup.add(iKeyIndex[i]);
curMacGroup.add(pcMac.get(i));
totalLen += data.length;
}
dataGroups.add(curDataGroup);
keyGroups.add(curKeyGroup);
macGroups.add(curMacGroup);
// 排队处理
List<Boolean> ret = new ArrayList<>();
for (int i = 0; i < dataGroups.size(); i++) {
boolean[] rets = SYD_SM4Mac_BatchData(
toIntArray(keyGroups.get(i)),
dataGroups.get(i),
macGroups.get(i)
);
for (boolean r : rets) {
ret.add(r);
}
}
return toBoolArray(ret);
}
private List<byte[]> sm4Mac_BatchData(int[] iKeyIndex, List<byte[]> pcData, boolean isLimit) {
if (log.isDebugEnabled()) {
log.debug("SYD_SM4Mac_BatchDataiKeyIndex{},pcData元素个数为{}", iKeyIndex, pcData.size());
}
if (pcData.isEmpty()) {
return new ArrayList<>();
}
//是否限制1024字节长度
if(isLimit){
for(byte[] data : pcData){
if (data.length > 1024) {
throw new SydApiException("数据长度超过限制", 0x01000001);
}
}
}
if (null == this.hsms || this.hsms.length < 1) {
throw new SydApiException(-1);
}
String[] keys = new String[iKeyIndex.length];
updateLastUseTime();
for (int i = 0; i < iKeyIndex.length; i++) {
if (iKeyIndex[i] < 0) {
throw new SydApiException(0x01000001);
}
keys[i] = "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", String.format("%08d", iKeyIndex[i]));
}
SydApiException le = new SydApiException(-1);
for (SydApi4j api : this.hsms) {
if (null == api) {
continue;
}
if (isShortLinkMode) {
try {
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
List<byte[]> ret = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
ret.add(mac);
}
return ret;
} catch (SydApiException e) {
le = e;
if (e.getRetCode() < 0) {
log.error("HA 重试");
continue;
}
throw e;
}
} else {
synchronized (api) {
try {
List<byte[]> list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData);
List<byte[]> ret = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
byte[] mac = new byte[16];
byte[] buff = list.get(i);
System.arraycopy(buff, buff.length - 16, mac, 0, 16);
ret.add(mac);
}
return ret;
} catch (SydApiException e) {
le = e;
if (e.getRetCode() < 0) {
log.error("HA 重试");
continue;
}
throw e;
}
}
}
}
if (!this.isShortLinkMode) {
this.oip.setError();
}
throw le;
}
@Override @Override
public List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<DataAndMac> pcData) { public List<DataAndMacCheck> SYD_SM4_CheckMacAndDecrypt_BatchData(int[] iEncKeyIndex, int[] iMacKeyIndex, List<DataAndMac> pcData) {
@ -1142,7 +1349,7 @@ public class SydApiBaseFunction implements SydApi {
// } // }
// 批量执行MAC校验 // 批量执行MAC校验
boolean[] macCheck = SYD_SM4Mac_BatchData(iMacKeyIndex, datas, macs); boolean[] macCheck = my_SYD_SM4Mac_BatchData(iMacKeyIndex, datas, macs);
// 分离通过和未通过MAC校验的数据 // 分离通过和未通过MAC校验的数据
List<Integer> validIndices = new ArrayList<>(); List<Integer> validIndices = new ArrayList<>();
@ -1167,7 +1374,7 @@ public class SydApiBaseFunction implements SydApi {
.mapToInt(Integer::intValue) .mapToInt(Integer::intValue)
.toArray(); .toArray();
// 使用过滤后的密钥索引和数据 // 使用过滤后的密钥索引和数据
decryptedData = SYD_SM4_BatchData(validKeysArray, validData, Consts.ECB_DEC); decryptedData = my_SYD_SM4_BatchData(validKeysArray, validData, Consts.ECB_DEC);
} }
// 构建结果集 // 构建结果集

View File

@ -7,7 +7,6 @@ import com.sunyard.proto.Util;
import com.sunyard.sge.database.*; import com.sunyard.sge.database.*;
import com.sunyard.sge.log.LogbackFactory; import com.sunyard.sge.log.LogbackFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -1049,7 +1048,7 @@ public class FuncTest {
} catch (SydApiException e){ } catch (SydApiException e){
printException("数据长度大于1024,校验失败", e); printException("数据长度大于1024,校验失败", e);
} catch (Exception e){ } catch (Exception e){
System.out.println("数据长度大于1024 异常: " + e.getMessage()); e.printStackTrace();
} }
printEnd(); printEnd();
@ -1060,7 +1059,7 @@ public class FuncTest {
} catch (SydApiException e){ } catch (SydApiException e){
printException("pcMac为空,校验失败", e); printException("pcMac为空,校验失败", e);
} catch (Exception e){ } catch (Exception e){
System.out.println("pcMac为空 异常: " + e.getMessage()); e.printStackTrace();
} }
printEnd(); printEnd();
@ -1341,7 +1340,7 @@ public class FuncTest {
} catch (SydApiException e){ } catch (SydApiException e){
printException("包序号为2时pcProcData无输入SM4MAC长数据校验失败",e); printException("包序号为2时pcProcData无输入SM4MAC长数据校验失败",e);
} catch (Exception e){ } catch (Exception e){
System.out.println("包序号为2时pcProcData无输入 异常: " + e.getMessage()); e.printStackTrace();
} }
try{ try{
@ -1360,7 +1359,7 @@ public class FuncTest {
} catch (SydApiException e){ } catch (SydApiException e){
printException("包序号为3时pcProcData无输入SM4MAC长数据校验失败",e); printException("包序号为3时pcProcData无输入SM4MAC长数据校验失败",e);
} catch (Exception e){ } catch (Exception e){
System.out.println("包序号为3时pcProcData无输入 异常: " + e.getMessage()); e.printStackTrace();
} }
printEnd(); printEnd();
@ -1445,7 +1444,7 @@ public class FuncTest {
} catch (SydApiException e){ } catch (SydApiException e){
printException("输入包序号不为0-3SM4MAC长数据计算失败",e); printException("输入包序号不为0-3SM4MAC长数据计算失败",e);
} catch (Exception e){ } catch (Exception e){
System.out.println("输入包序号不为0-3 异常: " + e.getMessage()); e.printStackTrace();
} }
printEnd(); printEnd();
@ -1463,7 +1462,7 @@ public class FuncTest {
} catch (SydApiException e){ } catch (SydApiException e){
printException("输入包序号不为0-3SM4MAC长数据校验失败",e); printException("输入包序号不为0-3SM4MAC长数据校验失败",e);
} catch (Exception e){ } catch (Exception e){
System.out.println("输入包序号不为0-3 异常: " + e.getMessage()); e.printStackTrace();
} }
printEnd(); printEnd();
@ -1476,7 +1475,7 @@ public class FuncTest {
} catch (SydApiException e){ } catch (SydApiException e){
printException("输入大于4064的数据长度SM4MAC长数据计算失败",e); printException("输入大于4064的数据长度SM4MAC长数据计算失败",e);
} catch (Exception e){ } catch (Exception e){
System.out.println("输入大于4064的数据长度 异常: " + e.getMessage()); e.printStackTrace();
} }
printEnd(); printEnd();
@ -1496,7 +1495,7 @@ public class FuncTest {
} catch (SydApiException e){ } catch (SydApiException e){
printException("输入大于4064的数据长度SM4MAC长数据校验失败",e); printException("输入大于4064的数据长度SM4MAC长数据校验失败",e);
} catch (Exception e){ } catch (Exception e){
System.out.println("输入大于4064的数据长度 异常: " + e.getMessage()); e.printStackTrace();
} }
printEnd(); printEnd();
@ -1985,7 +1984,7 @@ public class FuncTest {
List<byte[]> s = api.SYD_SM4Mac_BatchData(keyIdx_insufficient, data); List<byte[]> s = api.SYD_SM4Mac_BatchData(keyIdx_insufficient, data);
System.out.println("索引个数与明文个数不一致mac计算成功"); System.out.println("索引个数与明文个数不一致mac计算成功");
} catch (Exception e){ } catch (Exception e){
System.out.println("索引个数与明文个数不一致mac计算 异常:" + e.getMessage()); System.out.println("索引个数与明文个数不一致mac计算失败 " + e.getMessage());
} }
printEnd(); printEnd();
@ -2052,6 +2051,8 @@ public class FuncTest {
} }
} catch (SydApiException e){ } catch (SydApiException e){
printException("输入正确入参,计算失败", e); printException("输入正确入参,计算失败", e);
} catch (Exception e){
e.printStackTrace();
} }
printEnd(); printEnd();
@ -2325,23 +2326,24 @@ public class FuncTest {
printBegin(); printBegin();
try{ try{
if(false){ int max = 1024;
int max = 7; List<byte[]> data_test = new ArrayList<>();
List<byte[]> data_test = new ArrayList<>(); int[] keytest = new int[max];
int[] keytest = new int[max]; for(int i=0; i<max; i++){
for(int i=0; i<max; i++){ data_test.add(new byte[1024]);
data_test.add(new byte[1024]);
}
List<DataAndMac> en_test = api.SYD_SM4_EncryptAndMac_BatchData(keytest, keytest, data_test);
System.out.println("计算成功!!! " + en_test.size());
} }
boolean isSuc = true; boolean isSuc = true;
List<DataAndMac> en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data); List<DataAndMac> en_data = api.SYD_SM4_EncryptAndMac_BatchData(keytest, keytest, data_test);
List<DataAndMacCheck> de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data); List<DataAndMacCheck> de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keytest, keytest, en_data);
for(int i=0; i<en_data.size(); i++) { for(int i=0; i<en_data.size(); i++) {
if(!(Util.bytes2HexString(data.get(i)).equals(Util.bytes2HexString(de_data.get(i).getData())))){ log("sm4BatchMacFunc___明文:" + Util.bytes2HexString(data_test.get(i)), false);
log("sm4BatchMacFunc___加密后:" + Util.bytes2HexString(en_data.get(i).getData()), false);
log("sm4BatchMacFunc___加密后mac:" + Util.bytes2HexString(en_data.get(i).getMac()), false);
log("sm4BatchMacFunc___解密后:" + Util.bytes2HexString(de_data.get(i).getData()), false);
log("sm4BatchMacFunc___校验:" + de_data.get(i).getMacCheck(), false);
if(!(Util.bytes2HexString(data_test.get(i)).equals(Util.bytes2HexString(de_data.get(i).getData())))){
isSuc = false; isSuc = false;
break; break;
} }
@ -2431,12 +2433,24 @@ public class FuncTest {
printBegin(); printBegin();
try{ try{
int max = 1024;
List<byte[]> data_test = new ArrayList<>();
int[] keytest = new int[max];
for(int i=0; i<max; i++){
data_test.add(new byte[1024]);
}
boolean isSuc = true; boolean isSuc = true;
List<DataAndMac> en_data = api.SYD_SM4_EncryptAndMac_BatchData(keyEnc, keyMac, data); List<DataAndMac> en_data = api.SYD_SM4_EncryptAndMac_BatchData(keytest, keytest, data_test);
List<DataAndMacCheck> de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keyEnc, keyMac, en_data); List<DataAndMacCheck> de_data = api.SYD_SM4_CheckMacAndDecrypt_BatchData(keytest, keytest, en_data);
for(int i=0; i<en_data.size(); i++) { for(int i=0; i<en_data.size(); i++) {
if(!(Util.bytes2HexString(data.get(i)).equals(Util.bytes2HexString(de_data.get(i).getData())))){ log("sm4BatchMacFunc_check___明文:" + Util.bytes2HexString(data_test.get(i)), false);
log("sm4BatchMacFunc_check___加密后:" + Util.bytes2HexString(en_data.get(i).getData()), false);
log("sm4BatchMacFunc_check___加密后mac:" + Util.bytes2HexString(en_data.get(i).getMac()), false);
log("sm4BatchMacFunc_check___解密后:" + Util.bytes2HexString(de_data.get(i).getData()), false);
log("sm4BatchMacFunc_check___校验:" + de_data.get(i).getMacCheck(), false);
if(!(Util.bytes2HexString(data_test.get(i)).equals(Util.bytes2HexString(de_data.get(i).getData())))){
isSuc = false; isSuc = false;
break; break;
} }
@ -2450,7 +2464,7 @@ public class FuncTest {
} else { } else {
System.out.println("输入正确入参,计算失败"); System.out.println("输入正确入参,计算失败");
} }
}catch(SydApiException e){ } catch(SydApiException e){
printException("输入正确入参,计算失败", e); printException("输入正确入参,计算失败", e);
} }
printEnd(); printEnd();
@ -2512,8 +2526,6 @@ public class FuncTest {
} }
}catch(SydApiException e){ }catch(SydApiException e){
printException("密文数据长度大于1024+16", e); printException("密文数据长度大于1024+16", e);
}catch (Exception e){
System.out.println("密文数据长度大于1024+16 异常: " + e.getMessage());
} }
printEnd(); printEnd();
@ -2541,7 +2553,7 @@ public class FuncTest {
}catch(SydApiException e){ }catch(SydApiException e){
printException("密文校验值长度不为16", e); printException("密文校验值长度不为16", e);
}catch (Exception e){ }catch (Exception e){
System.out.println("密文校验值长度不为16 异常: " + e.getMessage()); e.printStackTrace();
} }
printEnd(); printEnd();
@ -2687,34 +2699,6 @@ public class FuncTest {
} }
//稳定测试只测正常案例
public void zc_funcAll() {
List<Runnable> tests = Arrays.asList(
this::zc_sm3ShortFunc,
this::zc_sm3LongFunc,
this::zc_sm4ShortFunc,
this::zc_sm4LongFunc,
this::zc_sm4macShortFunc,
this::zc_sm4macLongFunc,
this::zc_sm4BatchFunc,
this::zc_sm4macBatchFunc,
this::zc_sm4ShortMacFunc,
this::zc_sm4BatchMacFunc,
this::zc_sm4ShortMacFunc_check,
this::zc_sm4BatchMacFunc_check,
this::zc_sm4macLongFunc_ISM4Mac,
this::zc_sm4LongFunc_ISM4,
this::zc_sm3LongFunc_ISM3
);
// this.changeConnect(true); //设置成短连接把相关功能测试下
// executeTestsWithIsolation(tests);
this.changeConnect(false); //设置成长连接把相关功能测试下
executeTestsWithIsolation(tests);
}
public void funcMenu(Config config, Choise choise, FuncTest test) throws Exception { public void funcMenu(Config config, Choise choise, FuncTest test) throws Exception {
boolean flag = true; boolean flag = true;

View File

@ -7,7 +7,10 @@ import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
public class TestAll { public class TestAll {
@ -867,73 +870,6 @@ public class TestAll {
} }
} }
public static void perfMenu_wending(Config config, Choise choise, TestAll testAll){
System.out.println("请输入想要运行的时间(小时)");
int time = choise.getAsInt();
System.out.println("请输入想要运行的线程数量");
int numThread = choise.getAsInt();
System.out.println("-------- 稳定性测试开始 --------");
boolean isSuc = true;
for(int i=0; i<100000; i++){
System.out.println("-------- 循环: --------" + i);
try {
FuncTest funcTest = new FuncTest(config);
funcTest.zc_funcAll();
} catch (Exception e){
//防止程序异常后运行结束
e.printStackTrace();
testAll.writeToPerformanceFile("Exception: " + e.getMessage());
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
testAll.writeToPerformanceFile("Exception: " + e.getMessage());
}
}
if(isSuc){
System.out.println("-------- 稳定性测试结束 --------");
return;
}
testAll.writeToPerformanceFile("time:" + time );
int num = 1;
long start = System.currentTimeMillis();
while (true){
testAll.writeToPerformanceFile("循环: " + (num++) + " " + testAll.getTime());
ExecutorService poolDec = Executors.newFixedThreadPool(numThread);
for (int i = 0; i < numThread; i++) {
poolDec.submit(() -> {
try {
FuncTest funcTest = new FuncTest(config);
funcTest.zc_funcAll();
} catch (Exception e){
//防止程序异常后运行结束
testAll.writeToPerformanceFile("Exception: " + e.getMessage());
}
});
}
poolDec.shutdown();
try {
poolDec.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
} catch (InterruptedException e) {
testAll.writeToPerformanceFile("Exception: " + e.getMessage());
}
long end = System.currentTimeMillis();
if( (end-start) > (time*60*60*1000) ){
break;
}
}
System.out.println("-------- 稳定性测试结束 --------");
}
public void sm4ShortEndes1() throws InterruptedException { public void sm4ShortEndes1() throws InterruptedException {
System.out.println("-------- SM4短数据加解密性能测试开始 --------"); System.out.println("-------- SM4短数据加解密性能测试开始 --------");
sm4ShortEnde1(1, config.getTotal(), 1024); sm4ShortEnde1(1, config.getTotal(), 1024);
@ -1606,7 +1542,7 @@ public class TestAll {
private static final AtomicInteger successCount = new AtomicInteger(0); private static final AtomicInteger successCount = new AtomicInteger(0);
private static final AtomicInteger errorCount = new AtomicInteger(0); private static final AtomicInteger errorCount = new AtomicInteger(0);
private static final int MAX_ERRORS = 100; private static final int MAX_ERRORS = 10;
private static final long TEST_DURATION_HOURS = 72; private static final long TEST_DURATION_HOURS = 72;
public static void longLinkTestWD(TestAll test){ public static void longLinkTestWD(TestAll test){