diff --git a/src/test/java/logicface/FaceTransmissionSpeedTest.java b/src/test/java/logicface/FaceTransmissionSpeedTest.java new file mode 100644 index 0000000..39e6e97 --- /dev/null +++ b/src/test/java/logicface/FaceTransmissionSpeedTest.java @@ -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*************"); + } +}