5bf8d12314a070bc301a8ffda6a36ad02ff7d6a0
[openflowjava.git] / third-party / openflowj_netty / src / test / java / org / openflow / protocol / WildcardsTest.java
1 package org.openflow.protocol;
2
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;
7
8 import java.util.EnumSet;
9
10 import org.junit.Test;
11 import org.openflow.protocol.Wildcards.Flag;
12
13 public class WildcardsTest {
14
15     @Test
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());
21         }
22     }
23
24     @Test
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());
30     }
31
32     @Test
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());
39
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);
44
45         // so is setting a >= 32 netmask
46
47         stillAll = all.withNwSrcMask(0);
48         assertTrue(stillAll.isFull());
49         assertEquals(all, stillAll);
50
51         stillAll = all.withNwDstMask(0);
52         assertTrue(stillAll.isFull());
53         assertEquals(all, stillAll);
54     }
55
56     @Test
57     public void testNone() {
58         Wildcards none = Wildcards.EXACT;
59         assertTrue(none.isExact());
60         assertEquals(32, none.getNwDstMask());
61         assertEquals(32, none.getNwSrcMask());
62
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);
67
68         // so is setting a >= 32 netmask
69         stillNone = none.withNwSrcMask(32);
70         assertTrue(stillNone.isExact());
71         assertEquals(none, stillNone);
72
73         stillNone = none.withNwDstMask(32);
74         assertTrue(stillNone.isExact());
75         assertEquals(none, stillNone);
76     }
77
78     @Test
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());
88     }
89
90     @Test
91     public void testSetTwoFlags() {
92         Wildcards none = Wildcards.EXACT;
93
94         // set two flags
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());
101
102         // unset dl_dst
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());
109     }
110
111     @Test
112     public void testSetNwSrc() {
113         Wildcards none = Wildcards.EXACT;
114         assertEquals(32, none.getNwSrcMask());
115
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());
122     }
123
124     @Test
125     public void testSetNwDst() {
126         Wildcards none = Wildcards.EXACT;
127         assertEquals(32, none.getNwDstMask());
128
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());
135     }
136
137     @Test
138     public void testToString() {
139         String s = Wildcards.FULL.toString();
140         assertNotNull(s);
141         assertTrue(s.length() > 0);
142     }
143
144     @Test
145     public void testInvert() {
146         assertEquals(Wildcards.FULL, Wildcards.EXACT.inverted());
147
148         Wildcards some = Wildcards.of(Flag.DL_VLAN, Flag.DL_VLAN_PCP);
149         Wildcards inv = some.inverted();
150
151         for(Flag f : Flag.values()) {
152             boolean shouldBeSet = (f == Flag.DL_VLAN || f == Flag.DL_VLAN_PCP);
153
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));
158         }
159         assertEquals(0, inv.getNwDstMask());
160         assertEquals(0, inv.getNwSrcMask());
161     }
162 }