Files
min-dev-java/src/test/java/logicface/FaceTransmissionSpeedTest.java
T
2021-05-27 22:19:00 +08:00

215 lines
8.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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*************");
}
}