blob: ca942069e13d151029078503b36b1b34c3f25281 [file] [log] [blame]
Jonathan Hart23701d12014-04-03 10:45:48 -07001package net.onrc.onos.core.util;
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +09002
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertTrue;
Ray Milkey269ffb92014-04-03 14:43:30 -07005
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +09006import net.floodlightcontroller.util.MACAddress;
7
8import org.junit.Before;
9import org.junit.Test;
10
11public class FlowEntryTest {
12
Ray Milkey269ffb92014-04-03 14:43:30 -070013 FlowEntry entry;
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090014
Ray Milkey269ffb92014-04-03 14:43:30 -070015 FlowId flowId = new FlowId(0x1234);
16 FlowEntryId flowEntryId = new FlowEntryId(0x5678);
17 int idleTimeout = 5;
18 int hardTimeout = 10;
19 int priority = 15;
20 FlowEntryMatch match;
21 FlowEntryActions actions;
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090022
Ray Milkey269ffb92014-04-03 14:43:30 -070023 Dpid dpid = new Dpid(0xCAFE);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090024
Ray Milkey269ffb92014-04-03 14:43:30 -070025 Port inport = new Port((short) 1);
26 byte[] byte1 = {1, 2, 3, 4, 5, 6};
27 byte[] byte2 = {6, 5, 4, 3, 2, 1};
28 MACAddress mac1 = new MACAddress(byte1);
29 MACAddress mac2 = new MACAddress(byte2);
30 Short ether = Short.valueOf((short) 2);
31 Short vlanid = Short.valueOf((short) 3);
32 Byte vlanprio = Byte.valueOf((byte) 4);
33 IPv4Net ip1 = new IPv4Net("127.0.0.1/32");
34 IPv4Net ip2 = new IPv4Net(new IPv4("127.0.0.2"), (short) 32);
35 IPv4 ipaddr1 = new IPv4("127.0.0.3");
36 IPv4 ipaddr2 = new IPv4("127.0.0.4");
37 Byte ipproto = Byte.valueOf((byte) 5);
38 Byte ipToS = Byte.valueOf((byte) 6);
39 Short tport1 = Short.valueOf((short) 7);
40 Short tport2 = Short.valueOf((short) 8);
41 Port outport = new Port((short) 9);
42 Port queueport = new Port((short) 10);
43 int queueId = 11;
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -080044
Ray Milkey269ffb92014-04-03 14:43:30 -070045 FlowEntryErrorState errorState = new FlowEntryErrorState((short) 12, (short) 13);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090046
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090047
Ray Milkey269ffb92014-04-03 14:43:30 -070048 @Before
49 public void setUp() throws Exception {
50 entry = new FlowEntry();
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090051
Ray Milkey269ffb92014-04-03 14:43:30 -070052 flowId = new FlowId("0x1234");
53 entry.setFlowId(flowId);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090054
Ray Milkey269ffb92014-04-03 14:43:30 -070055 flowEntryId = new FlowEntryId("0x5678");
56 entry.setFlowEntryId(flowEntryId);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090057
Ray Milkey269ffb92014-04-03 14:43:30 -070058 entry.setIdleTimeout(5);
59 entry.setHardTimeout(10);
60 entry.setPriority(15);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090061
Ray Milkey269ffb92014-04-03 14:43:30 -070062 dpid = new Dpid("CA:FE");
63 entry.setDpid(dpid);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090064
Ray Milkey269ffb92014-04-03 14:43:30 -070065 entry.setInPort(inport);
66 entry.setOutPort(outport);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090067
Ray Milkey269ffb92014-04-03 14:43:30 -070068 match = new FlowEntryMatch();
69 match.enableInPort(inport);
70 match.enableSrcMac(mac1);
71 match.enableDstMac(mac2);
72 match.enableEthernetFrameType(ether);
73 match.enableVlanId(vlanid);
74 match.enableVlanPriority(vlanprio);
75 match.enableSrcIPv4Net(ip1);
76 match.enableDstIPv4Net(ip2);
77 match.enableIpProto(ipproto);
78 match.enableIpToS(ipToS);
79 match.enableSrcTcpUdpPort(tport1);
80 match.enableDstTcpUdpPort(tport2);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090081
Ray Milkey269ffb92014-04-03 14:43:30 -070082 entry.setFlowEntryMatch(match);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090083
Ray Milkey269ffb92014-04-03 14:43:30 -070084 FlowEntryAction action = null;
85 actions = entry.flowEntryActions();
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090086
Ray Milkey269ffb92014-04-03 14:43:30 -070087 action = new FlowEntryAction();
88 action.setActionOutput(outport);
89 actions.addAction(action);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090090
Ray Milkey269ffb92014-04-03 14:43:30 -070091 action = new FlowEntryAction();
92 action.setActionOutputToController((short) 0);
93 actions.addAction(action);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090094
Ray Milkey269ffb92014-04-03 14:43:30 -070095 action = new FlowEntryAction();
96 action.setActionSetVlanId(vlanid);
97 actions.addAction(action);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +090098
Ray Milkey269ffb92014-04-03 14:43:30 -070099 action = new FlowEntryAction();
100 action.setActionSetVlanPriority(vlanprio);
101 actions.addAction(action);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900102
Ray Milkey269ffb92014-04-03 14:43:30 -0700103 action = new FlowEntryAction();
104 action.setActionStripVlan(true);
105 actions.addAction(action);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900106
Ray Milkey269ffb92014-04-03 14:43:30 -0700107 action = new FlowEntryAction();
108 action.setActionSetEthernetSrcAddr(mac1);
109 actions.addAction(action);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900110
Ray Milkey269ffb92014-04-03 14:43:30 -0700111 action = new FlowEntryAction();
112 action.setActionSetEthernetDstAddr(mac2);
113 actions.addAction(action);
Pavlin Radoslavov062c72d2013-10-30 12:42:15 -0700114
Ray Milkey269ffb92014-04-03 14:43:30 -0700115 action = new FlowEntryAction();
116 action.setActionSetIPv4SrcAddr(ipaddr1);
117 actions.addAction(action);
Pavlin Radoslavov062c72d2013-10-30 12:42:15 -0700118
Ray Milkey269ffb92014-04-03 14:43:30 -0700119 action = new FlowEntryAction();
120 action.setActionSetIPv4DstAddr(ipaddr2);
121 actions.addAction(action);
Pavlin Radoslavov062c72d2013-10-30 12:42:15 -0700122
Ray Milkey269ffb92014-04-03 14:43:30 -0700123 action = new FlowEntryAction();
124 action.setActionSetIpToS(ipToS);
125 actions.addAction(action);
Pavlin Radoslavov062c72d2013-10-30 12:42:15 -0700126
Ray Milkey269ffb92014-04-03 14:43:30 -0700127 action = new FlowEntryAction();
128 action.setActionSetTcpUdpSrcPort(tport1);
129 actions.addAction(action);
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900130
Ray Milkey269ffb92014-04-03 14:43:30 -0700131 action = new FlowEntryAction();
132 action.setActionSetTcpUdpDstPort(tport2);
133 actions.addAction(action);
Pavlin Radoslavovb1309e82013-10-30 12:18:28 -0700134
Ray Milkey269ffb92014-04-03 14:43:30 -0700135 action = new FlowEntryAction();
136 action.setActionEnqueue(queueport, queueId);
137 actions.addAction(action);
Pavlin Radoslavovb1309e82013-10-30 12:18:28 -0700138
Ray Milkey269ffb92014-04-03 14:43:30 -0700139 entry.setFlowEntryUserState(FlowEntryUserState.FE_USER_ADD);
140 entry.setFlowEntrySwitchState(FlowEntrySwitchState.FE_SWITCH_UPDATED);
141 entry.setFlowEntryErrorState(errorState);
Pavlin Radoslavovb1309e82013-10-30 12:18:28 -0700142
Ray Milkey269ffb92014-04-03 14:43:30 -0700143 }
Pavlin Radoslavovb1309e82013-10-30 12:18:28 -0700144
Ray Milkey269ffb92014-04-03 14:43:30 -0700145 @Test
146 public void testFlowEntry() {
147 FlowEntry e = new FlowEntry();
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800148
Ray Milkey269ffb92014-04-03 14:43:30 -0700149 assertTrue(e.flowEntryActions().isEmpty());
150 assertEquals("flowEntryUserState", FlowEntryUserState.FE_USER_UNKNOWN, e.flowEntryUserState());
151 assertEquals("flowEntrySwitchState", FlowEntrySwitchState.FE_SWITCH_UNKNOWN, e.flowEntrySwitchState());
152 }
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800153
Ray Milkey269ffb92014-04-03 14:43:30 -0700154 @Test
155 public void testFlowId() {
156 assertEquals("flowId", flowId, entry.flowId());
157 }
Pavlin Radoslavovafbf1032014-02-04 10:37:52 -0800158
Ray Milkey269ffb92014-04-03 14:43:30 -0700159 @Test
160 public void testIsValidFlowId() {
161 FlowEntry e = new FlowEntry();
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900162
Ray Milkey269ffb92014-04-03 14:43:30 -0700163 // Test a Flow Entry with empty Flow ID
164 assertEquals("isValidFlowId", false, e.isValidFlowId());
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900165
Ray Milkey269ffb92014-04-03 14:43:30 -0700166 // Test a Flow Entry with invalid Flow ID
167 e.setFlowId(new FlowId());
168 assertEquals("isValidFlowId", false, e.isValidFlowId());
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900169
Ray Milkey269ffb92014-04-03 14:43:30 -0700170 // Test a Flow Entry with valid Flow ID
171 e.setFlowId(new FlowId(0x1));
172 assertEquals("isValidFlowId", true, e.isValidFlowId());
173 assertEquals("isValidFlowId", true, entry.isValidFlowId());
174 }
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900175
Ray Milkey269ffb92014-04-03 14:43:30 -0700176 @Test
177 public void testFlowEntryId() {
178 assertEquals("flowEntryId", flowEntryId, entry.flowEntryId());
179 }
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900180
Ray Milkey269ffb92014-04-03 14:43:30 -0700181 @Test
182 public void testIsValidFlowEntryId() {
183 FlowEntry e = new FlowEntry();
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900184
Ray Milkey269ffb92014-04-03 14:43:30 -0700185 // Test a Flow Entry with empty Flow Entry ID
186 assertEquals("isValidFlowEntryId", false, e.isValidFlowEntryId());
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900187
Ray Milkey269ffb92014-04-03 14:43:30 -0700188 // Test a Flow Entry with invalid Flow Entry ID
189 e.setFlowEntryId(new FlowEntryId());
190 assertEquals("isValidFlowEntryId", false, e.isValidFlowEntryId());
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900191
Ray Milkey269ffb92014-04-03 14:43:30 -0700192 // Test a Flow Entry with valid Flow Entry ID
193 e.setFlowEntryId(new FlowEntryId(0x1));
194 assertEquals("isValidFlowEntryId", true, e.isValidFlowEntryId());
195 assertEquals("isValidFlowEntryId", true, entry.isValidFlowEntryId());
196 }
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900197
Ray Milkey269ffb92014-04-03 14:43:30 -0700198 @Test
199 public void testIdleTimeout() {
200 assertEquals("idleTimeout", idleTimeout, entry.idleTimeout());
201 }
202
203 @Test
204 public void testHardTimeout() {
205 assertEquals("hardTimeout", hardTimeout, entry.hardTimeout());
206 }
207
208 @Test
209 public void testPriority() {
210 assertEquals("priority", priority, entry.priority());
211 }
212
213 @Test
214 public void testFlowEntryMatch() {
215 assertEquals("flowEntryMatch", match, entry.flowEntryMatch());
216 }
217
218 @Test
219 public void testFlowEntryActions() {
220 assertEquals("flowEntryActions", actions, entry.flowEntryActions());
221 }
222
223 @Test
224 public void testSetFlowEntryActions() {
Yuta HIGUCHI44a0b352014-05-14 21:32:48 -0700225 FlowEntryActions acts = new FlowEntryActions();
226 entry.setFlowEntryActions(acts);
227 assertEquals("flowEntryActions", acts, entry.flowEntryActions());
Ray Milkey269ffb92014-04-03 14:43:30 -0700228 }
229
230 @Test
231 public void testDpid() {
232 assertEquals("dpid", dpid, entry.dpid());
233 }
234
235 @Test
236 public void testInPort() {
237 assertEquals("inPort", inport, entry.inPort());
238 }
239
240 @Test
241 public void testOutPort() {
242 assertEquals("outPort", outport, entry.outPort());
243 }
244
245 @Test
246 public void testFlowEntryUserState() {
247 assertEquals("flowEntryUserState", FlowEntryUserState.FE_USER_ADD, entry.flowEntryUserState());
248 }
249
250 @Test
251 public void testFlowEntrySwitchState() {
252 assertEquals("flowEntrySwitchState", FlowEntrySwitchState.FE_SWITCH_UPDATED, entry.flowEntrySwitchState());
253 }
254
255 @Test
256 public void testFlowEntryErrorState() {
257 assertEquals("flowEntryErrorState", errorState, entry.flowEntryErrorState());
258 }
259
260 @Test
261 public void testToString() {
262 FlowEntry def = new FlowEntry();
263 assertEquals("toString", def.toString(), "[ idleTimeout=0 hardTimeout=0 priority=32768 flowEntryActions=[] flowEntryUserState=FE_USER_UNKNOWN flowEntrySwitchState=FE_SWITCH_UNKNOWN]");
264 assertEquals("toString", entry.toString(), "[flowEntryId=0x5678 flowId=0x1234 idleTimeout=5 hardTimeout=10 priority=15 flowEntryMatch=[inPort=1 srcMac=01:02:03:04:05:06 dstMac=06:05:04:03:02:01 ethernetFrameType=2 vlanId=3 vlanPriority=4 srcIPv4Net=127.0.0.1/32 dstIPv4Net=127.0.0.2/32 ipProto=5 ipToS=6 srcTcpUdpPort=7 dstTcpUdpPort=8] flowEntryActions=[[type=ACTION_OUTPUT action=[port=9 maxLen=0]];[type=ACTION_OUTPUT action=[port=-3 maxLen=0]];[type=ACTION_SET_VLAN_VID action=[vlanId=3]];[type=ACTION_SET_VLAN_PCP action=[vlanPriority=4]];[type=ACTION_STRIP_VLAN action=[stripVlan=true]];[type=ACTION_SET_DL_SRC action=[addr=01:02:03:04:05:06]];[type=ACTION_SET_DL_DST action=[addr=06:05:04:03:02:01]];[type=ACTION_SET_NW_SRC action=[addr=127.0.0.3]];[type=ACTION_SET_NW_DST action=[addr=127.0.0.4]];[type=ACTION_SET_NW_TOS action=[ipToS=6]];[type=ACTION_SET_TP_SRC action=[port=7]];[type=ACTION_SET_TP_DST action=[port=8]];[type=ACTION_ENQUEUE action=[port=10 queueId=11]];] dpid=00:00:00:00:00:00:ca:fe inPort=1 outPort=9 flowEntryUserState=FE_USER_ADD flowEntrySwitchState=FE_SWITCH_UPDATED flowEntryErrorState=[type=12 code=13]]");
265 }
HIGUCHI Yutad8dc9c02013-08-04 06:16:30 +0900266
267}