5c576e0839a754ab4b43f33c83326eb45c563738
[openflowjava.git] / third-party / openflow-codec / src / test / java / org / openflow / codec / protocol / OFPFlowModTest.java
1 package org.openflow.codec.protocol;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import junit.framework.TestCase;
7
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;
24
25 /**
26  * test class to verify OFPFlowMod message
27  *
28  * @author AnilGujele
29  *
30  */
31 public class OFPFlowModTest extends TestCase {
32
33     private OFPInstructionFactory instrFactory = new OFPBasicFactoryImpl();
34
35     private IDataBuffer buffer = DataBuffers.allocate(1024);
36
37     protected void tearDown() throws Exception {
38         buffer.clear();
39     }
40
41     public void testFlowModCreation() {
42         OFPFlowMod flowMod = this.getDefaultFlowMod();
43         assertTrue(flowMod.type.equals(OFPType.FLOW_MOD));
44
45     }
46
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>();
64         instrList.add(instr);
65         flowMod.setInstructions(instrList);
66         flowMod.setInstructionFactory(instrFactory);
67         return flowMod;
68     }
69
70     public void testClone() {
71         OFPFlowMod flowMod = this.getDefaultFlowMod();
72         OFPFlowMod flowModCloned = flowMod.clone();
73         TestCase.assertEquals(flowMod, flowModCloned);
74
75         OXMField matchField = new OXMField(OXMClass.OPENFLOW_BASIC, OFBMatchFields.IPV4_SRC, false, new byte[] { 1, 2,
76                 3, 4 });
77         flowMod.getMatch().addMatchField(matchField);
78         TestCase.assertNotSame(flowMod, flowModCloned);
79
80         flowMod = flowModCloned.clone();
81         TestCase.assertEquals(flowMod, flowModCloned);
82     }
83
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,
88                 3, 4 });
89         flowModWriter.getMatch().addMatchField(matchField);
90         flowModWriter.writeTo(buffer);
91         buffer.flip();
92         flowModReader.setInstructionFactory(instrFactory);
93         flowModReader.readFrom(buffer);
94         TestCase.assertEquals(flowModWriter, flowModReader);
95
96     }
97
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,
102                 3, 4 });
103         flowModWriter.getMatch().addMatchField(matchField);
104         flowModWriter.writeTo(buffer);
105         buffer.flip();
106         boolean result = false;
107         try {
108             flowModReader.readFrom(buffer);
109         } catch (RuntimeException ex) {
110             result = true;
111         }
112         TestCase.assertTrue(result);
113     }
114
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,
119                 3, 4 });
120         flowModWriter.getMatch().addMatchField(matchField);
121         flowModWriter.writeTo(buffer);
122         buffer.flip();
123         flowModReader.setInstructionFactory(instrFactory);
124         flowModReader.readFrom(buffer);
125         TestCase.assertEquals(flowModWriter.getLength(), flowModReader.getLength());
126
127     }
128
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,
133                 3, 4 });
134         flowModWriter.getMatch().addMatchField(matchField);
135         flowModWriter.writeTo(buffer);
136         buffer.flip();
137         flowModReader.setInstructionFactory(instrFactory);
138         flowModReader.readFrom(buffer);
139         TestCase.assertEquals(flowModWriter.toString(), flowModReader.toString());
140     }
141
142     public void testEqualHashcode() {
143
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,
147                 3, 4 });
148         flowModWriter.getMatch().addMatchField(matchField);
149         OXMField matchField1 = new OXMField(OXMClass.OPENFLOW_BASIC, OFBMatchFields.IPV4_DST, false, new byte[] { 1, 2,
150                 3, 4 });
151         flowModWriter.getMatch().addMatchField(matchField1);
152         flowModWriter.writeTo(buffer);
153         buffer.flip();
154         flowModReader.setInstructionFactory(instrFactory);
155         flowModReader.readFrom(buffer);
156         TestCase.assertTrue(flowModWriter.equals(flowModReader));
157         TestCase.assertEquals(flowModWriter.hashCode(), flowModReader.hashCode());
158     }
159
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);
172         buffer.flip();
173         OFPFlowMod flowModReader = new OFPFlowMod();
174         flowModReader.setInstructionFactory(instrFactory);
175         flowModReader.readFrom(buffer);
176         assertEquals(flowModWriter, flowModReader);
177
178     }
179
180 }