1 package org.openflow.codec.protocol;
3 import java.util.ArrayList;
6 import junit.framework.TestCase;
8 import org.openflow.codec.io.DataBuffers;
9 import org.openflow.codec.io.IDataBuffer;
10 import org.openflow.codec.protocol.OFBMatchFields;
11 import org.openflow.codec.protocol.OFPFlowMod;
12 import org.openflow.codec.protocol.OFPFlowModCommand;
13 import org.openflow.codec.protocol.OFPMatch;
14 import org.openflow.codec.protocol.OFPType;
15 import org.openflow.codec.protocol.OXMClass;
16 import org.openflow.codec.protocol.OXMField;
17 import org.openflow.codec.protocol.action.OFPAction;
18 import org.openflow.codec.protocol.action.OFPActionOutput;
19 import org.openflow.codec.protocol.factory.OFPBasicFactoryImpl;
20 import org.openflow.codec.protocol.factory.OFPInstructionFactory;
21 import org.openflow.codec.protocol.instruction.OFPInstruction;
22 import org.openflow.codec.protocol.instruction.OFPInstructionApplyActions;
23 import org.openflow.codec.protocol.instruction.OFPInstructionGoToTable;
26 * test class to verify OFPFlowMod message
31 public class OFPFlowModTest extends TestCase {
33 private OFPInstructionFactory instrFactory = new OFPBasicFactoryImpl();
35 private IDataBuffer buffer = DataBuffers.allocate(1024);
37 protected void tearDown() throws Exception {
41 public void testFlowModCreation() {
42 OFPFlowMod flowMod = this.getDefaultFlowMod();
43 assertTrue(flowMod.type.equals(OFPType.FLOW_MOD));
47 private OFPFlowMod getDefaultFlowMod() {
48 OFPFlowMod flowMod = new OFPFlowMod();
49 flowMod.setCookie(25L);
50 flowMod.setCookieMask(25L);
51 flowMod.setTableId((byte) 0);
52 flowMod.setBufferId(1);
53 flowMod.setIdleTimeout((short) 2000);
54 flowMod.setHardTimeout((short) 25000);
55 flowMod.setPriority((short) 1);
56 flowMod.setCommand(OFPFlowModCommand.OFPFC_ADD);
57 flowMod.setOutPort(1000);
58 flowMod.setOutGroup(1);
59 flowMod.setFlags((short) 1);
60 OFPMatch match = new OFPMatch();
61 flowMod.setMatch(match);
62 OFPInstruction instr = new OFPInstructionGoToTable();
63 List<OFPInstruction> instrList = new ArrayList<OFPInstruction>();
65 flowMod.setInstructions(instrList);
66 flowMod.setInstructionFactory(instrFactory);
70 public void testClone() {
71 OFPFlowMod flowMod = this.getDefaultFlowMod();
72 OFPFlowMod flowModCloned = flowMod.clone();
73 TestCase.assertEquals(flowMod, flowModCloned);
75 OXMField matchField = new OXMField(OXMClass.OPENFLOW_BASIC, OFBMatchFields.IPV4_SRC, false, new byte[] { 1, 2,
77 flowMod.getMatch().addMatchField(matchField);
78 TestCase.assertNotSame(flowMod, flowModCloned);
80 flowMod = flowModCloned.clone();
81 TestCase.assertEquals(flowMod, flowModCloned);
84 public void testReadWriteSuccess() {
85 OFPFlowMod flowModWriter = this.getDefaultFlowMod();
86 OFPFlowMod flowModReader = new OFPFlowMod();
87 OXMField matchField = new OXMField(OXMClass.OPENFLOW_BASIC, OFBMatchFields.IPV4_SRC, false, new byte[] { 1, 2,
89 flowModWriter.getMatch().addMatchField(matchField);
90 flowModWriter.writeTo(buffer);
92 flowModReader.setInstructionFactory(instrFactory);
93 flowModReader.readFrom(buffer);
94 TestCase.assertEquals(flowModWriter, flowModReader);
98 public void testReadWriteFailed() {
99 OFPFlowMod flowModWriter = this.getDefaultFlowMod();
100 OFPFlowMod flowModReader = new OFPFlowMod();
101 OXMField matchField = new OXMField(OXMClass.OPENFLOW_BASIC, OFBMatchFields.IPV4_SRC, false, new byte[] { 1, 2,
103 flowModWriter.getMatch().addMatchField(matchField);
104 flowModWriter.writeTo(buffer);
106 boolean result = false;
108 flowModReader.readFrom(buffer);
109 } catch (RuntimeException ex) {
112 TestCase.assertTrue(result);
115 public void testLength() {
116 OFPFlowMod flowModWriter = this.getDefaultFlowMod();
117 OFPFlowMod flowModReader = new OFPFlowMod();
118 OXMField matchField = new OXMField(OXMClass.OPENFLOW_BASIC, OFBMatchFields.IPV4_SRC, false, new byte[] { 1, 2,
120 flowModWriter.getMatch().addMatchField(matchField);
121 flowModWriter.writeTo(buffer);
123 flowModReader.setInstructionFactory(instrFactory);
124 flowModReader.readFrom(buffer);
125 TestCase.assertEquals(flowModWriter.getLength(), flowModReader.getLength());
129 public void testToString() {
130 OFPFlowMod flowModWriter = this.getDefaultFlowMod();
131 OFPFlowMod flowModReader = new OFPFlowMod();
132 OXMField matchField = new OXMField(OXMClass.OPENFLOW_BASIC, OFBMatchFields.IPV4_SRC, false, new byte[] { 1, 2,
134 flowModWriter.getMatch().addMatchField(matchField);
135 flowModWriter.writeTo(buffer);
137 flowModReader.setInstructionFactory(instrFactory);
138 flowModReader.readFrom(buffer);
139 TestCase.assertEquals(flowModWriter.toString(), flowModReader.toString());
142 public void testEqualHashcode() {
144 OFPFlowMod flowModWriter = this.getDefaultFlowMod();
145 OFPFlowMod flowModReader = new OFPFlowMod();
146 OXMField matchField = new OXMField(OXMClass.OPENFLOW_BASIC, OFBMatchFields.IPV4_SRC, false, new byte[] { 1, 2,
148 flowModWriter.getMatch().addMatchField(matchField);
149 OXMField matchField1 = new OXMField(OXMClass.OPENFLOW_BASIC, OFBMatchFields.IPV4_DST, false, new byte[] { 1, 2,
151 flowModWriter.getMatch().addMatchField(matchField1);
152 flowModWriter.writeTo(buffer);
154 flowModReader.setInstructionFactory(instrFactory);
155 flowModReader.readFrom(buffer);
156 TestCase.assertTrue(flowModWriter.equals(flowModReader));
157 TestCase.assertEquals(flowModWriter.hashCode(), flowModReader.hashCode());
160 public void testFlowModInstrActions() {
161 OFPFlowMod flowModWriter = this.getDefaultFlowMod();
162 OFPInstructionApplyActions instr = new OFPInstructionApplyActions();
163 List<OFPInstruction> instrList = new ArrayList<OFPInstruction>();
164 instrList.add(instr);
165 OFPAction action = new OFPActionOutput();
166 List<OFPAction> actionList = new ArrayList<OFPAction>();
167 actionList.add(action);
168 instr.setActions(actionList);
169 instr.setActionFactory(new OFPBasicFactoryImpl());
170 flowModWriter.setInstructions(instrList);
171 flowModWriter.writeTo(buffer);
173 OFPFlowMod flowModReader = new OFPFlowMod();
174 flowModReader.setInstructionFactory(instrFactory);
175 flowModReader.readFrom(buffer);
176 assertEquals(flowModWriter, flowModReader);