1 package org.openflow.protocol;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertNotNull;
6 import static org.junit.Assert.assertTrue;
8 import java.util.EnumSet;
10 import org.junit.Test;
11 import org.openflow.protocol.Wildcards.Flag;
13 public class WildcardsTest {
16 public void testBasic() {
17 int[] intMasks = { 0, 0x3820e0, OFMatch.OFPFW_ALL_SANITIZED };
18 for (int i : intMasks) {
19 Wildcards w = Wildcards.of(i);
20 assertEquals(i, w.getInt());
25 public void testAllSanitize() {
26 Wildcards w = Wildcards.of(OFMatch.OFPFW_ALL);
27 assertEquals(OFMatch.OFPFW_ALL_SANITIZED, w.getInt());
28 assertTrue(w.isFull());
29 assertFalse(w.isExact());
33 public void testAll() {
34 Wildcards all = Wildcards.FULL;
35 assertTrue(all.isFull());
36 assertFalse(all.isExact());
37 assertEquals(0, all.getNwDstMask());
38 assertEquals(0, all.getNwSrcMask());
40 // unsetting flags from NONE is a no-op
41 Wildcards stillAll = all.wildcard(Flag.IN_PORT);
42 assertTrue(stillAll.isFull());
43 assertEquals(all, stillAll);
45 // so is setting a >= 32 netmask
47 stillAll = all.withNwSrcMask(0);
48 assertTrue(stillAll.isFull());
49 assertEquals(all, stillAll);
51 stillAll = all.withNwDstMask(0);
52 assertTrue(stillAll.isFull());
53 assertEquals(all, stillAll);
57 public void testNone() {
58 Wildcards none = Wildcards.EXACT;
59 assertTrue(none.isExact());
60 assertEquals(32, none.getNwDstMask());
61 assertEquals(32, none.getNwSrcMask());
63 // unsetting flags from NONE is a no-op
64 Wildcards stillNone = none.matchOn(Flag.IN_PORT);
65 assertTrue(stillNone.isExact());
66 assertEquals(none, stillNone);
68 // so is setting a >= 32 netmask
69 stillNone = none.withNwSrcMask(32);
70 assertTrue(stillNone.isExact());
71 assertEquals(none, stillNone);
73 stillNone = none.withNwDstMask(32);
74 assertTrue(stillNone.isExact());
75 assertEquals(none, stillNone);
79 public void testSetOneFlag() {
80 Wildcards none = Wildcards.EXACT;
81 assertTrue(none.isExact());
82 assertFalse(none.isWildcarded(Flag.DL_SRC));
83 Wildcards one = none.wildcard(Flag.DL_SRC);
84 assertFalse(one.isExact());
85 assertTrue(one.isWildcarded(Flag.DL_SRC));
86 assertEquals(OFMatch.OFPFW_DL_SRC, one.getInt());
87 assertEquals(EnumSet.of(Flag.DL_SRC), one.getWildcardedFlags());
91 public void testSetTwoFlags() {
92 Wildcards none = Wildcards.EXACT;
95 Wildcards two = none.wildcard(Flag.DL_SRC, Flag.DL_DST);
96 assertFalse(two.isExact());
97 assertTrue(two.isWildcarded(Flag.DL_SRC));
98 assertTrue(two.isWildcarded(Flag.DL_DST));
99 assertEquals(OFMatch.OFPFW_DL_SRC | OFMatch.OFPFW_DL_DST, two.getInt());
100 assertEquals(EnumSet.of(Flag.DL_SRC, Flag.DL_DST), two.getWildcardedFlags());
103 Wildcards gone = two.matchOn(Flag.DL_DST);
104 assertFalse(gone.isExact());
105 assertTrue(gone.isWildcarded(Flag.DL_SRC));
106 assertFalse(gone.isWildcarded(Flag.DL_DST));
107 assertEquals(OFMatch.OFPFW_DL_SRC, gone.getInt());
108 assertEquals(EnumSet.of(Flag.DL_SRC), gone.getWildcardedFlags());
112 public void testSetNwSrc() {
113 Wildcards none = Wildcards.EXACT;
114 assertEquals(32, none.getNwSrcMask());
116 // unsetting flags from NONE is a no-op
117 Wildcards nwSet = none.withNwSrcMask(8);
118 assertFalse(nwSet.isExact());
119 assertEquals(EnumSet.noneOf(Flag.class), nwSet.getWildcardedFlags());
120 assertEquals(8, nwSet.getNwSrcMask());
121 assertEquals((32 - 8) << OFMatch.OFPFW_NW_SRC_SHIFT, nwSet.getInt());
125 public void testSetNwDst() {
126 Wildcards none = Wildcards.EXACT;
127 assertEquals(32, none.getNwDstMask());
129 // unsetting flags from NONE is a no-op
130 Wildcards nwSet = none.withNwDstMask(8);
131 assertFalse(nwSet.isExact());
132 assertEquals(EnumSet.noneOf(Flag.class), nwSet.getWildcardedFlags());
133 assertEquals(8, nwSet.getNwDstMask());
134 assertEquals((32 - 8) << OFMatch.OFPFW_NW_DST_SHIFT, nwSet.getInt());
138 public void testToString() {
139 String s = Wildcards.FULL.toString();
141 assertTrue(s.length() > 0);
145 public void testInvert() {
146 assertEquals(Wildcards.FULL, Wildcards.EXACT.inverted());
148 Wildcards some = Wildcards.of(Flag.DL_VLAN, Flag.DL_VLAN_PCP);
149 Wildcards inv = some.inverted();
151 for(Flag f : Flag.values()) {
152 boolean shouldBeSet = (f == Flag.DL_VLAN || f == Flag.DL_VLAN_PCP);
154 assertEquals("Flag " + f + " "
155 + (shouldBeSet ? "should be set " : "should not be set"),
156 shouldBeSet, some.isWildcarded(f));
157 assertEquals(!(f == Flag.DL_VLAN || f == Flag.DL_VLAN_PCP), inv.isWildcarded(f));
159 assertEquals(0, inv.getNwDstMask());
160 assertEquals(0, inv.getNwSrcMask());