add test: FaceSpeedTest

This commit is contained in:
free will committed 2021-05-27 22:19:00 +08:00
1 parent 3898220a5c
commit 1249ead5ee
1 file changed
+214
@@ -0,0 +1,214 @@
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*************");
}
}