mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-10-04 19:42:01 +08:00
215 lines
8.8 KiB
Java
215 lines
8.8 KiB
Java
package logicface;
|
||
|
||
import component.ComponentException;
|
||
import component.Identifier;
|
||
import encoding.BlockException;
|
||
import encoding.EncoderException;
|
||
import encoding.SelfEncodingBase;
|
||
import mgmt.MgmtException;
|
||
import mgmt.RegisterPrefixHelper;
|
||
import minsecurity.Common;
|
||
import minsecurity.certificate.cert.CertUtils;
|
||
import minsecurity.certificate.cert.Certificate;
|
||
import minsecurity.crypto.sm2.SM2KeyPair;
|
||
import minsecurity.identity.Identity;
|
||
import minsecurity.identity.KeyParam;
|
||
import org.junit.Test;
|
||
import packet.CPacket;
|
||
import packet.PacketException;
|
||
import security.KeyChain;
|
||
|
||
import java.util.Arrays;
|
||
import java.util.Date;
|
||
|
||
/*
|
||
* @Author: Wang Feng
|
||
* @Description: 测试Face的传输速率
|
||
* @Version: 1.0.0
|
||
* @Date: 9:19 2021/5/27
|
||
* @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室
|
||
*/
|
||
public class FaceTransmissionSpeedTest {
|
||
/**
|
||
* 随机生成身份数据
|
||
* @return Identity
|
||
*/
|
||
private Identity createRandomIdentity() throws Exception{
|
||
// 测试PersistIdentity
|
||
SM2KeyPair pair = SM2KeyPair.generateKeyPair();
|
||
Identity identity = new Identity();
|
||
identity.setName("/wzq"+Math.random()); // 身份名称必须以/开头 Identifier规定
|
||
KeyParam keyParam = new KeyParam();
|
||
keyParam.PublicKeyAlgorithm = 0;
|
||
keyParam.SignatureAlgorithm = 0;
|
||
identity.setKeyParam(keyParam);
|
||
identity.setPrikey(pair.getSm2PrivateKey());
|
||
identity.setPubkey(pair.getSm2PublicKey());
|
||
identity.setPasswd("2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99");
|
||
// identity.lock("0123456789abcdef", Common.SM4ECB);
|
||
Certificate cert = new Certificate();
|
||
cert.setVersion(1);
|
||
cert.setSerialNumber(1);
|
||
cert.setPublicKey(pair.getSm2PublicKey());
|
||
cert.setSignatureAlgorithm(Common.SM3withSM2); // TODO 名字有误? SM2withSM3?
|
||
cert.setPublicKeyAlgorithm(Common.SM2);
|
||
cert.setIssueTo("root");
|
||
cert.setIssuer("root");
|
||
long timestamp = System.currentTimeMillis() / 1000;
|
||
cert.setTimestamp(timestamp); // 10bit timestamp
|
||
cert.setNotAfter(timestamp); // 10bit timestamp
|
||
cert.setNotBefore(timestamp + 1000); // 10bit timestamp
|
||
cert.setKeyUsage(Common.CertSign);
|
||
cert.setCA(true);
|
||
CertUtils.signCert(cert, pair.getSm2PrivateKey());
|
||
|
||
identity.setCert(cert);
|
||
return identity;
|
||
}
|
||
|
||
/**
|
||
* 测试方法:
|
||
* UDP发送未签名的推式网络包(CPacket);
|
||
* 每次测试发包100w个;
|
||
* 控制变量为不同负载:1300、8000。
|
||
* 负载-1300
|
||
*
|
||
* @throws ComponentException
|
||
* @throws LogicFaceException
|
||
*/
|
||
@Test
|
||
public void testSendCPacketByUdp_UnSign() throws ComponentException, LogicFaceException {
|
||
int size=8000; //发包负载
|
||
long npackets=1000000;
|
||
// 初始化face
|
||
LogicFace face = new LogicFace();
|
||
face.initWithUdp("127.0.0.1", 13899);
|
||
// 记录时间
|
||
long startTime=System.currentTimeMillis();
|
||
// 循环构造包、发包
|
||
for (int i = 0; i < npackets; i++) {
|
||
// 构造CPacket
|
||
CPacket cPacket = new CPacket();
|
||
byte[] value = new byte[size];
|
||
cPacket.payload.setValue(value);
|
||
Identifier name = new Identifier("/wefree");
|
||
Identifier nameTo = new Identifier("/wf");
|
||
cPacket.setSrcIdentifier(name);
|
||
cPacket.setDstIdentifier(nameTo);
|
||
// 发包
|
||
face.sendCPacket(cPacket);
|
||
}
|
||
long endTime=System.currentTimeMillis();
|
||
// 计算发包速率 cpacket头部长度约为80
|
||
long bitNums= npackets *(size+80)*8; // 总传输比特数
|
||
long times=(endTime-startTime)/1000; // 总耗时(/s)
|
||
double speed1=((double) bitNums)/(double)(times*1024*1024);// 网速
|
||
int speed2= (int) (npackets/times);
|
||
System.out.println("**************************");
|
||
System.out.println("发包类型:CPacket");
|
||
System.out.println("发包负载:"+size+" byte, 总长度:"+(size+80)+" byte");
|
||
System.out.println("发包个数:"+npackets);
|
||
Date date=new Date();
|
||
date.setTime(startTime);
|
||
System.out.println("发包开始时间:"+date);
|
||
date.setTime(endTime);
|
||
System.out.println("发包结束时间:"+date);
|
||
System.out.println("发包总耗时:"+times+" s");
|
||
System.out.println("发包速率1:"+speed1+"Mbps");
|
||
System.out.println("发包速率2:"+speed2+"个CPacket/s");
|
||
System.out.println("**************************");
|
||
}
|
||
|
||
@Test
|
||
public void testSendCPacketByUdp_Sign() throws Exception {
|
||
int size=8000; //发包负载
|
||
long npackets=1000000;
|
||
// 初始化face
|
||
LogicFace face = new LogicFace();
|
||
face.initWithUdp("127.0.0.1", 13899);
|
||
// 初始化keychain
|
||
KeyChain keyChain=new KeyChain("./");
|
||
// Identity id = createRandomIdentity();
|
||
// keyChain.getIdentifyManager().setDefaultIdentity(id, true);
|
||
// 记录时间
|
||
long startTime=System.currentTimeMillis();
|
||
// 循环构造包、签名包、发包
|
||
for (int i = 0; i < 10; i++) {
|
||
// 构造CPacket
|
||
CPacket cPacket = new CPacket();
|
||
byte[] value = new byte[size];
|
||
cPacket.payload.setValue(value);
|
||
Identifier name = new Identifier("/wefree");
|
||
Identifier nameTo = new Identifier("/wf");
|
||
cPacket.setSrcIdentifier(name);
|
||
cPacket.setDstIdentifier(nameTo);
|
||
// 对该包进行签名签名
|
||
keyChain.signCPacket(cPacket);
|
||
// 发包
|
||
face.sendCPacket(cPacket);
|
||
}
|
||
long endTime=System.currentTimeMillis();
|
||
// 计算发包速率 cpacket头部长度约为80
|
||
long bitNums= npackets *(size+80)*8; // 总传输比特数
|
||
long times=(endTime-startTime)/1000; // 总耗时(/s)
|
||
double speed1=((double) bitNums)/(double)(times*1024*1024);// 网速
|
||
int speed2= (int) (npackets/times);
|
||
System.out.println("**************************");
|
||
System.out.println("发包类型:Signed CPacket");
|
||
System.out.println("发包负载:"+size+" byte, 总长度:"+(size+80)+" byte");
|
||
System.out.println("发包个数:"+npackets);
|
||
Date date=new Date();
|
||
date.setTime(startTime);
|
||
System.out.println("发包开始时间:"+date);
|
||
date.setTime(endTime);
|
||
System.out.println("发包结束时间:"+date);
|
||
System.out.println("发包总耗时:"+times+" s");
|
||
System.out.println("发包速率1:"+speed1+"Mbps");
|
||
System.out.println("发包速率2:"+speed2+"个CPacket/s");
|
||
System.out.println("**************************");
|
||
}
|
||
|
||
@Test
|
||
public void testSendCPacketByTCP_UnSign() throws ComponentException, LogicFaceException {
|
||
int size=8000; //发包负载
|
||
long npackets=1000000;
|
||
// 初始化face
|
||
LogicFace face = new LogicFace();
|
||
face.initWithTcp("127.0.0.1", 13899);
|
||
// 记录时间
|
||
long startTime=System.currentTimeMillis();
|
||
// 循环构造包、发包
|
||
for (int i = 0; i < npackets; i++) {
|
||
// 构造CPacket
|
||
CPacket cPacket = new CPacket();
|
||
byte[] value = new byte[size];
|
||
cPacket.payload.setValue(value);
|
||
Identifier name = new Identifier("/wefree");
|
||
Identifier nameTo = new Identifier("/wf");
|
||
cPacket.setSrcIdentifier(name);
|
||
cPacket.setDstIdentifier(nameTo);
|
||
// 发包
|
||
face.sendCPacket(cPacket);
|
||
System.out.println(i);
|
||
}
|
||
long endTime=System.currentTimeMillis();
|
||
// 计算发包速率 cpacket头部长度约为80
|
||
long bitNums= npackets *(size+80)*8; // 总传输比特数
|
||
long times=(endTime-startTime)/1000; // 总耗时(/s)
|
||
double speed1=((double) bitNums)/(double)(times*1024*1024);// 网速
|
||
int speed2= (int) (npackets/times);
|
||
System.out.println("*************TCP*************");
|
||
System.out.println("发包类型:CPacket");
|
||
System.out.println("发包负载:"+size+" byte, 总长度:"+(size+80)+" byte");
|
||
System.out.println("发包个数:"+npackets);
|
||
Date date=new Date();
|
||
date.setTime(startTime);
|
||
System.out.println("发包开始时间:"+date);
|
||
date.setTime(endTime);
|
||
System.out.println("发包结束时间:"+date);
|
||
System.out.println("发包总耗时:"+times+" s");
|
||
System.out.println("发包速率1:"+speed1+"Mbps");
|
||
System.out.println("发包速率2:"+speed2+"个CPacket/s");
|
||
System.out.println("*************TCP*************");
|
||
}
|
||
}
|