3 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
5 * This program and the accompanying materials are made available under the
6 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7 * and is available at http://www.eclipse.org/legal/epl-v10.html
10 package org.openflow.protocol;
12 import junit.framework.TestCase;
14 public class OFMatchTest extends TestCase {
15 public void testFromString() {
16 OFMatch correct = new OFMatch();
17 OFMatch tester = new OFMatch();
19 // Various combinations of "all"/"any"
20 tester.fromString("OFMatch[]");
21 // correct is already wildcarded
22 TestCase.assertEquals(correct, tester);
23 tester.fromString("all");
24 TestCase.assertEquals(correct, tester);
25 tester.fromString("ANY");
26 TestCase.assertEquals(correct, tester);
27 tester.fromString("");
28 TestCase.assertEquals(correct, tester);
29 tester.fromString("[]");
30 TestCase.assertEquals(correct, tester);
33 correct.setWildcards(~OFMatch.OFPFW_NW_SRC_MASK);
34 correct.setNetworkSource(0x01010203);
35 tester.fromString("nw_src=1.1.2.3");
36 TestCase.assertEquals(correct.getNetworkSourceMaskLen(), tester
37 .getNetworkSourceMaskLen());
38 TestCase.assertEquals(correct, tester);
39 tester.fromString("IP_sRc=1.1.2.3");
40 TestCase.assertEquals(correct.getNetworkSourceMaskLen(), tester
41 .getNetworkSourceMaskLen());
42 TestCase.assertEquals(correct, tester);
45 public void testToString() {
46 OFMatch match = new OFMatch();
47 match.fromString("nw_dst=3.4.5.6/8");
48 TestCase.assertEquals(8, match.getNetworkDestinationMaskLen());
49 String correct = "OFMatch[nw_dst=3.0.0.0/8]";
50 String tester = match.toString();
52 TestCase.assertEquals(correct, tester);
53 tester = "OFMatch[dl_type=35020]";
54 correct = "OFMatch[dl_type=0x88cc]";
55 match = new OFMatch();
56 match.fromString(tester);
57 TestCase.assertEquals(correct, match.toString());
58 OFMatch match2 = new OFMatch();
59 match2.fromString(correct);
60 TestCase.assertEquals(match, match2);
63 public void testClone() {
64 OFMatch match1 = new OFMatch();
65 OFMatch match2 = match1.clone();
66 TestCase.assertEquals(match1, match2);
67 match2.setNetworkProtocol((byte) 4);
68 match2.setWildcards(match2.getWildcards() & ~OFMatch.OFPFW_NW_PROTO);
69 TestCase.assertNotSame(match1, match2);
72 public void testIpToString() {
73 String test = OFMatch.ipToString(-1);
74 TestCase.assertEquals("255.255.255.255", test);
77 public void testReverse() {
78 OFMatch match1 = new OFMatch();
79 OFMatch match2 = match1.reverse((short)0, true);
80 TestCase.assertEquals(match1, match2);
82 match1.fromString("dl_dst=00:11:22:33:44:55");
83 match2 = match1.reverse((short)0, true);
84 OFMatch match3 = new OFMatch();
85 match3.fromString("dl_src=00:11:22:33:44:55");
86 TestCase.assertEquals(match2, match3);
88 match1.fromString("nw_dst=192.168.0.0/24");
89 match2 = match1.reverse((short)0, true);
90 match3.fromString("nw_src=192.168.0.0/24");
91 TestCase.assertEquals(match2, match3);
93 match1.fromString("in_port=1");
94 match2 = match1.reverse((short)2, false);
95 match3.fromString("in_port=2");
96 TestCase.assertEquals(match2, match3);
99 public void testSubsumes() {
100 OFMatch match1 = new OFMatch();
101 OFMatch match2 = new OFMatch();
102 match2.fromString("dl_dst=00:11:22:33:44:55");
103 TestCase.assertTrue(match1.subsumes(match2));
104 TestCase.assertFalse(match2.subsumes(match1));
106 match1.fromString("nw_dst=192.168.0.0/16");
107 match2.fromString("nw_dst=192.168.0.0/24");
108 TestCase.assertTrue(match1.subsumes(match2));
109 TestCase.assertFalse(match2.subsumes(match1));