Remove EncodeConstants.SIZE_OF_{BYTE,SHORT,INT,LONG}_IN_BYTES
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / protocol / serialization / multipart / tablefeatures / matchfield / MatchFieldSerializerTest.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.openflowplugin.impl.protocol.serialization.multipart.tablefeatures.matchfield;
10
11 import static org.junit.Assert.assertEquals;
12
13 import com.google.common.collect.ImmutableList;
14 import org.junit.Test;
15 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
16 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
17 import org.opendaylight.openflowplugin.impl.protocol.serialization.multipart.tablefeatures.AbstractTablePropertySerializerTest;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableFeaturesPropType;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpOp;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSha;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSpa;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTha;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTpa;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthType;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv4Code;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv4Type;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv6Code;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv6Type;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPhyPort;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPort;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpDscp;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpEcn;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpProto;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Dst;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Src;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Dst;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Exthdr;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Flabel;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdSll;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdTarget;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdTll;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Src;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Metadata;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsBos;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsLabel;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsTc;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.PbbIsid;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.SctpDst;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.SctpSrc;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpDst;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpFlags;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpSrc;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelId;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpSrc;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanPcp;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanVid;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatch;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatchBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.TableFeaturePropType;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.MatchBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.match.MatchSetfieldBuilder;
66
67 public class MatchFieldSerializerTest extends AbstractTablePropertySerializerTest {
68     @Test
69     public void testSerialize() {
70         final Match property = new MatchBuilder()
71                 .setMatchSetfield(new MatchSetfieldBuilder()
72                         .setSetFieldMatch(ImmutableList
73                                 .<SetFieldMatch>builder()
74                                 .add(new SetFieldMatchBuilder()
75                                         .setMatchType(ArpOp.class)
76                                         .setHasMask(false)
77                                         .build())
78                                 .add(new SetFieldMatchBuilder()
79                                         .setMatchType(ArpSha.class)
80                                         .setHasMask(false)
81                                         .build())
82                                 .add(new SetFieldMatchBuilder()
83                                         .setMatchType(ArpSpa.class)
84                                         .setHasMask(false)
85                                         .build())
86                                 .add(new SetFieldMatchBuilder()
87                                         .setMatchType(ArpTha.class)
88                                         .setHasMask(false)
89                                         .build())
90                                 .add(new SetFieldMatchBuilder()
91                                         .setMatchType(ArpTpa.class)
92                                         .setHasMask(false)
93                                         .build())
94                                 .add(new SetFieldMatchBuilder()
95                                         .setMatchType(EthDst.class)
96                                         .setHasMask(false)
97                                         .build())
98                                 .add(new SetFieldMatchBuilder()
99                                         .setMatchType(EthSrc.class)
100                                         .setHasMask(false)
101                                         .build())
102                                 .add(new SetFieldMatchBuilder()
103                                         .setMatchType(EthType.class)
104                                         .setHasMask(false)
105                                         .build())
106                                 .add(new SetFieldMatchBuilder()
107                                         .setMatchType(Icmpv4Code.class)
108                                         .setHasMask(false)
109                                         .build())
110                                 .add(new SetFieldMatchBuilder()
111                                         .setMatchType(Icmpv4Type.class)
112                                         .setHasMask(false)
113                                         .build())
114                                 .add(new SetFieldMatchBuilder()
115                                         .setMatchType(Icmpv6Code.class)
116                                         .setHasMask(false)
117                                         .build())
118                                 .add(new SetFieldMatchBuilder()
119                                         .setMatchType(Icmpv6Type.class)
120                                         .setHasMask(false)
121                                         .build())
122                                 .add(new SetFieldMatchBuilder()
123                                         .setMatchType(InPhyPort.class)
124                                         .setHasMask(false)
125                                         .build())
126                                 .add(new SetFieldMatchBuilder()
127                                         .setMatchType(InPort.class)
128                                         .setHasMask(false)
129                                         .build())
130                                 .add(new SetFieldMatchBuilder()
131                                         .setMatchType(IpDscp.class)
132                                         .setHasMask(false)
133                                         .build())
134                                 .add(new SetFieldMatchBuilder()
135                                         .setMatchType(IpEcn.class)
136                                         .setHasMask(false)
137                                         .build())
138                                 .add(new SetFieldMatchBuilder()
139                                         .setMatchType(IpProto.class)
140                                         .setHasMask(false)
141                                         .build())
142                                 .add(new SetFieldMatchBuilder()
143                                         .setMatchType(Ipv4Dst.class)
144                                         .setHasMask(false)
145                                         .build())
146                                 .add(new SetFieldMatchBuilder()
147                                         .setMatchType(Ipv4Src.class)
148                                         .setHasMask(false)
149                                         .build())
150                                 .add(new SetFieldMatchBuilder()
151                                         .setMatchType(Ipv6Dst.class)
152                                         .setHasMask(false)
153                                         .build())
154                                 .add(new SetFieldMatchBuilder()
155                                         .setMatchType(Ipv6Exthdr.class)
156                                         .setHasMask(false)
157                                         .build())
158                                 .add(new SetFieldMatchBuilder()
159                                         .setMatchType(Ipv6Flabel.class)
160                                         .setHasMask(false)
161                                         .build())
162                                 .add(new SetFieldMatchBuilder()
163                                         .setMatchType(Ipv6NdSll.class)
164                                         .setHasMask(false)
165                                         .build())
166                                 .add(new SetFieldMatchBuilder()
167                                         .setMatchType(Ipv6NdTarget.class)
168                                         .setHasMask(false)
169                                         .build())
170                                 .add(new SetFieldMatchBuilder()
171                                         .setMatchType(Ipv6NdTll.class)
172                                         .setHasMask(false)
173                                         .build())
174                                 .add(new SetFieldMatchBuilder()
175                                         .setMatchType(Ipv6Src.class)
176                                         .setHasMask(false)
177                                         .build())
178                                 .add(new SetFieldMatchBuilder()
179                                         .setMatchType(Metadata.class)
180                                         .setHasMask(false)
181                                         .build())
182                                 .add(new SetFieldMatchBuilder()
183                                         .setMatchType(MplsBos.class)
184                                         .setHasMask(false)
185                                         .build())
186                                 .add(new SetFieldMatchBuilder()
187                                         .setMatchType(MplsLabel.class)
188                                         .setHasMask(false)
189                                         .build())
190                                 .add(new SetFieldMatchBuilder()
191                                         .setMatchType(MplsTc.class)
192                                         .setHasMask(false)
193                                         .build())
194                                 .add(new SetFieldMatchBuilder()
195                                         .setMatchType(PbbIsid.class)
196                                         .setHasMask(false)
197                                         .build())
198                                 .add(new SetFieldMatchBuilder()
199                                         .setMatchType(SctpDst.class)
200                                         .setHasMask(false)
201                                         .build())
202                                 .add(new SetFieldMatchBuilder()
203                                         .setMatchType(SctpSrc.class)
204                                         .setHasMask(false)
205                                         .build())
206                                 .add(new SetFieldMatchBuilder()
207                                         .setMatchType(TcpDst.class)
208                                         .setHasMask(false)
209                                         .build())
210                                 .add(new SetFieldMatchBuilder()
211                                         .setMatchType(TcpFlags.class)
212                                         .setHasMask(false)
213                                         .build())
214                                 .add(new SetFieldMatchBuilder()
215                                         .setMatchType(TcpSrc.class)
216                                         .setHasMask(true)
217                                         .build())
218                                 .add(new SetFieldMatchBuilder()
219                                         .setMatchType(TunnelId.class)
220                                         .setHasMask(false)
221                                         .build())
222                                 .add(new SetFieldMatchBuilder()
223                                         .setMatchType(UdpDst.class)
224                                         .setHasMask(false)
225                                         .build())
226                                 .add(new SetFieldMatchBuilder()
227                                         .setMatchType(UdpSrc.class)
228                                         .setHasMask(false)
229                                         .build())
230                                 .add(new SetFieldMatchBuilder()
231                                         .setMatchType(VlanPcp.class)
232                                         .setHasMask(false)
233                                         .build())
234                                 .add(new SetFieldMatchBuilder()
235                                         .setMatchType(VlanVid.class)
236                                         .setHasMask(false)
237                                         .build())
238                                 .build())
239                         .build())
240                 .build();
241
242         assertProperty(property, out -> {
243             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
244             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ARP_OP << 1);
245             out.skipBytes(Byte.BYTES);
246
247             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
248             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ARP_SHA << 1);
249             out.skipBytes(Byte.BYTES);
250
251             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
252             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ARP_SPA << 1);
253             out.skipBytes(Byte.BYTES);
254
255             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
256             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ARP_THA << 1);
257             out.skipBytes(Byte.BYTES);
258
259             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
260             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ARP_TPA << 1);
261             out.skipBytes(Byte.BYTES);
262
263             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
264             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ETH_DST << 1);
265             out.skipBytes(Byte.BYTES);
266
267             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
268             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ETH_SRC << 1);
269             out.skipBytes(Byte.BYTES);
270
271             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
272             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ETH_TYPE << 1);
273             out.skipBytes(Byte.BYTES);
274
275             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
276             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ICMPV4_CODE << 1);
277             out.skipBytes(Byte.BYTES);
278
279             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
280             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ICMPV4_TYPE << 1);
281             out.skipBytes(Byte.BYTES);
282
283             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
284             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ICMPV6_CODE << 1);
285             out.skipBytes(Byte.BYTES);
286
287             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
288             assertEquals(out.readUnsignedByte(), OxmMatchConstants.ICMPV6_TYPE << 1);
289             out.skipBytes(Byte.BYTES);
290
291             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
292             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IN_PHY_PORT << 1);
293             out.skipBytes(Byte.BYTES);
294
295             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
296             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IN_PORT << 1);
297             out.skipBytes(Byte.BYTES);
298
299             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
300             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IP_DSCP << 1);
301             out.skipBytes(Byte.BYTES);
302
303             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
304             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IP_ECN << 1);
305             out.skipBytes(Byte.BYTES);
306
307             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
308             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IP_PROTO << 1);
309             out.skipBytes(Byte.BYTES);
310
311             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
312             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IPV4_DST << 1);
313             out.skipBytes(Byte.BYTES);
314
315             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
316             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IPV4_SRC << 1);
317             out.skipBytes(Byte.BYTES);
318
319             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
320             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IPV6_DST << 1);
321             out.skipBytes(Byte.BYTES);
322
323             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
324             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IPV6_EXTHDR << 1);
325             out.skipBytes(Byte.BYTES);
326
327             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
328             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IPV6_FLABEL << 1);
329             out.skipBytes(Byte.BYTES);
330
331             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
332             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IPV6_ND_SLL << 1);
333             out.skipBytes(Byte.BYTES);
334
335             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
336             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IPV6_ND_TARGET << 1);
337             out.skipBytes(Byte.BYTES);
338
339             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
340             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IPV6_ND_TLL << 1);
341             out.skipBytes(Byte.BYTES);
342
343             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
344             assertEquals(out.readUnsignedByte(), OxmMatchConstants.IPV6_SRC << 1);
345             out.skipBytes(Byte.BYTES);
346
347             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
348             assertEquals(out.readUnsignedByte(), OxmMatchConstants.METADATA << 1);
349             out.skipBytes(Byte.BYTES);
350
351             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
352             assertEquals(out.readUnsignedByte(), OxmMatchConstants.MPLS_BOS << 1);
353             out.skipBytes(Byte.BYTES);
354
355             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
356             assertEquals(out.readUnsignedByte(), OxmMatchConstants.MPLS_LABEL << 1);
357             out.skipBytes(Byte.BYTES);
358
359             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
360             assertEquals(out.readUnsignedByte(), OxmMatchConstants.MPLS_TC << 1);
361             out.skipBytes(Byte.BYTES);
362
363             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
364             assertEquals(out.readUnsignedByte(), OxmMatchConstants.PBB_ISID << 1);
365             out.skipBytes(Byte.BYTES);
366
367             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
368             assertEquals(out.readUnsignedByte(), OxmMatchConstants.SCTP_DST << 1);
369             out.skipBytes(Byte.BYTES);
370
371             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
372             assertEquals(out.readUnsignedByte(), OxmMatchConstants.SCTP_SRC << 1);
373             out.skipBytes(Byte.BYTES);
374
375             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
376             assertEquals(out.readUnsignedByte(), OxmMatchConstants.TCP_DST << 1);
377             out.skipBytes(Byte.BYTES);
378
379             assertEquals(out.readUnsignedShort(), OxmMatchConstants.EXPERIMENTER_CLASS);
380             assertEquals(out.readUnsignedByte(), EncodeConstants.ONFOXM_ET_TCP_FLAGS << 1);
381             out.skipBytes(Byte.BYTES);
382
383             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
384             assertEquals(out.readUnsignedByte() >>> 1, OxmMatchConstants.TCP_SRC);
385             out.skipBytes(Byte.BYTES);
386
387             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
388             assertEquals(out.readUnsignedByte(), OxmMatchConstants.TUNNEL_ID << 1);
389             out.skipBytes(Byte.BYTES);
390
391             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
392             assertEquals(out.readUnsignedByte(), OxmMatchConstants.UDP_DST << 1);
393             out.skipBytes(Byte.BYTES);
394
395             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
396             assertEquals(out.readUnsignedByte(), OxmMatchConstants.UDP_SRC << 1);
397             out.skipBytes(Byte.BYTES);
398
399             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
400             assertEquals(out.readUnsignedByte(), OxmMatchConstants.VLAN_PCP << 1);
401             out.skipBytes(Byte.BYTES);
402
403             assertEquals(out.readUnsignedShort(), OxmMatchConstants.OPENFLOW_BASIC_CLASS);
404             assertEquals(out.readUnsignedByte(), OxmMatchConstants.VLAN_VID << 1);
405             out.skipBytes(Byte.BYTES);
406         });
407     }
408
409     @Override
410     protected Class<? extends TableFeaturePropType> getClazz() {
411         return Match.class;
412     }
413
414     @Override
415     protected int getType() {
416         return TableFeaturesPropType.OFPTFPTMATCH.getIntValue();
417     }
418 }