diff --git a/src/main/java/mgmt/CommandExecutor.java b/src/main/java/mgmt/CommandExecutor.java index 121b748..93eaf14 100644 --- a/src/main/java/mgmt/CommandExecutor.java +++ b/src/main/java/mgmt/CommandExecutor.java @@ -261,6 +261,7 @@ public class CommandExecutor { // 等待兴趣包应答 MINPacket minPacket=this.logicFace.receivePacket(commandInterest.interestLifeTime.getInterestLifeTime()); + System.out.println(); // 判断收到的是什么包 if(minPacket==null){ diff --git a/src/main/java/mgmt/ControlResponse.java b/src/main/java/mgmt/ControlResponse.java index 50dd545..32f1795 100644 --- a/src/main/java/mgmt/ControlResponse.java +++ b/src/main/java/mgmt/ControlResponse.java @@ -108,7 +108,6 @@ public class ControlResponse { /** * UnmarshalJSON 自定义 JSON 反序列化逻辑,可以根据不同类型,Data 反序列化为对应的子类型 - * todo: 本方法的实现可能存在一定问题,后期使用时需要进行进一步的测试和修改。暂时用不到。 * @param data * @return */ diff --git a/src/main/java/util/JSONHelper.java b/src/main/java/util/JSONHelper.java index b7b33cd..82b2444 100644 --- a/src/main/java/util/JSONHelper.java +++ b/src/main/java/util/JSONHelper.java @@ -1,7 +1,6 @@ package util; import com.fasterxml.jackson.databind.ObjectMapper; -import mgmt.ControlResponse; import java.io.IOException; diff --git a/src/test/java/mgmt/CommandBaseTest.java b/src/test/java/mgmt/CommandBaseTest.java index c77b731..6e0891e 100644 --- a/src/test/java/mgmt/CommandBaseTest.java +++ b/src/test/java/mgmt/CommandBaseTest.java @@ -30,7 +30,7 @@ public class CommandBaseTest { Interest interest = CommandBase.createCommandIdentifierInterest(parameters, "/cp1/test"); ControlParameters cp = CommandBase.parseControlParameters(interest); - System.out.println(cp); + System.out.println(cp.controlParameterPrefix.getPrefix().toUri()); }catch (Exception ex){ LoggerHelper.info(ex.getMessage()); } diff --git a/src/test/java/mgmt/CommandExecutorTest.java b/src/test/java/mgmt/CommandExecutorTest.java index bd0e427..d9dbd06 100644 --- a/src/test/java/mgmt/CommandExecutorTest.java +++ b/src/test/java/mgmt/CommandExecutorTest.java @@ -1,5 +1,27 @@ package mgmt; +import component.ComponentException; +import component.ControlParameterPrefix; +import component.Identifier; +import encoding.BlockException; +import encoding.EncoderException; +import encoding.SelfEncodingBase; +import logicface.LogicFace; +import logicface.LogicFaceException; +import mgmt.FibCommands.FibAddCommand; +import org.junit.Test; +import packet.Data; +import packet.LpPacket; +import packet.PacketException; +import util.ByteHelper; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.SocketAddress; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; + /* * @Author: Wang Feng * @Description: @@ -8,5 +30,101 @@ package mgmt; * @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 */ public class CommandExecutorTest { + /** + * 测试结果: + * server receive:[-15, 0, -6, -127, -52, 108, + * 5, 106, + * 50, 76, 103, 74, 101, 72, 100, 7, 0, 119, 101, 102, 114, 101, 101, 100, 9, 0, 102, 105, 98, 45, 109, 103, 109, 116, 100, 4, 0, 97, 100, 100, 100, 44, 2, -36, 41, -30, 1, 1, -31, 1, 1, -32, 1, 1, -26, 6, 47, 108, 111, 99, 97, 108, -34, 7, 47, 112, 107, 117, 47, 115, 122, -27, 1, 1, -28, 1, 1, -29, 1, 1, -33, 1, 1, -35, 1, 1, + * 52, 14, -49, 2, 23, 112, -48, 8, 44, -117, 107, 18, -96, -46, -31, 34, + * 53, 10, 54, 3, -45, 1, 0, 55, 3, -44, 1, 1, + * -15, 0, -5, 15, -15, 0, -4, 1, 0, -15, 0, -3, 1, 1, -15, 0, -2, 1, 0] + * @throws LogicFaceException + * @throws MgmtException + */ + @Test + public void testFibAddCommand() throws LogicFaceException, MgmtException { + // init + CommandExecutor commandExecutor = new CommandExecutor(); + ControlParameters parameters=new ControlParameters(); + ControlParameterPrefix controlParameterPrefix = new ControlParameterPrefix(); + parameters.controlParameterPrefix = controlParameterPrefix; + parameters.controlParameterLogicFaceId.setLogicFaceId(1); + parameters.controlParameterCost.setCost(1); + parameters.controlParameterCapacity.setCapacity(1); + parameters.controlParameterCount.setCount(1); + parameters.controlParameterExpireTime.setExpireTime(1); + parameters.controlParameterUri.setUri("/pku/sz"); + parameters.controlParameterLocalUri.setLocalUri("/local"); + parameters.controlParameterLogicFacePersistency.setPersistency(1); + parameters.controlParameterUriScheme.setUriScheme(1); + parameters.controlParameterMtu.setMtu(1); + FibAddCommand fibAddCommand = FibAddCommand.createFibAddCommand("/wefree", + parameters); + LogicFace face=new LogicFace(); + face.initWithUdp("127.0.0.1",50000); + commandExecutor.init(fibAddCommand,face); + commandExecutor.interestLifeTime=6000; + // start + ControlResponse response=commandExecutor.start(); + System.out.println(response.type); + System.out.println(response.msg); + System.out.println(response.code); + System.out.println(response.data); + } + + /** + * 创建一个UDPServer,从而打印出来udp face发送的数据。端口号为50000 + * 模拟MIR应答:伪造一个包含ControlResponse类型的Data包,然后把这个data包放入LpPacket包里面。 + */ + @Test + public void startUDPServer() throws IOException, ComponentException, EncoderException, BlockException, MgmtException, PacketException { + while(true){ + //1.创建服务端+端口 + DatagramSocket server = new DatagramSocket(50000); + //2.准备接受容器 + byte[] container = new byte[1024]; + //3.封装成包 + DatagramPacket packet = new DatagramPacket(container, container.length); + //4.接受数据 + server.receive(packet); + //5.分析数据 + byte[] data = packet.getData(); + int len = packet.getLength(); + System.out.println("server receive:" + + Arrays.toString(ByteHelper.getLenBytes(data, 0, len))); + + SocketAddress remoteHost=packet.getSocketAddress(); + System.out.println("remote host: "+packet.getSocketAddress()); + // 睡眠5s + try { + System.out.println("start 5s sleeping ... "); + Thread.sleep(5000); + System.out.println("After 5s, wake up now!"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + // 做数据应答:伪造数据包 + server.connect(remoteHost); + // 1. 最内层的应答包 + String responseString = "{\"Code\": 1, \"Type\": \"int\", \"Msg\": \"bbb\", \"Data\": \"abc\"}"; + // 2. 次之的数据包 + Data newData=new Data(); + Identifier identifier=new Identifier("/response"); + newData.setName(identifier); + newData.payload.setValue(responseString.getBytes(StandardCharsets.UTF_8)); + byte[] dataBytes=new SelfEncodingBase().selfWireEncode(newData).getRaw(); + // 3. 最外层的LpPacket + LpPacket lpPacket=new LpPacket(); + lpPacket.setValue(dataBytes); + lpPacket.setFragmentNum(1); + lpPacket.setId(0); + lpPacket.setFragmentSeq(0); + byte[] lpBytes=new SelfEncodingBase().selfWireEncode(lpPacket).getRaw(); + DatagramPacket newPacket=new DatagramPacket(lpBytes,lpBytes.length); + server.send(newPacket); + //6.释放 + server.close(); + } + } } diff --git a/src/test/java/mgmt/ControlResponseTest.java b/src/test/java/mgmt/ControlResponseTest.java index c0bd7ac..7320b30 100644 --- a/src/test/java/mgmt/ControlResponseTest.java +++ b/src/test/java/mgmt/ControlResponseTest.java @@ -11,7 +11,7 @@ public class ControlResponseTest { public void testUnmarshal(){ try{ ControlResponse response = new ControlResponse(); - String jsonString = "{\"Code\": 1, \"Type\": \"string\", \"Msg\": \"bbb\", \"Data\": \"abcd\"}"; + String jsonString = "{\"Code\": 1, \"Type\": \"int\", \"Msg\": \"bbb\", \"Data\": 1}"; // Data无法解析 System.out.println(response.UnmarshalJSON(jsonString.getBytes())); System.out.println(response.type); @@ -21,6 +21,5 @@ public class ControlResponseTest { }catch (Exception ex){ LoggerHelper.info(ex.getMessage()); } - } }