Add match support for nsh_flags and nsh_ttl
[openflowplugin.git] / extension / openflowjava-extension-nicira / src / test / java / org / opendaylight / openflowjava / nx / codec / match / NxmHeaderTest.java
1 /**
2  * Copyright (c) 2016 Cisco Systems, Inc. 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.openflowjava.nx.codec.match;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
14
15 import java.math.BigInteger;
16 import org.junit.Test;
17
18 public class NxmHeaderTest {
19
20     private static final BigInteger NO_MASK_HEADER = new BigInteger("80000496", 16);
21     private static final BigInteger MASK_HEADER = new BigInteger("80000596", 16);
22     private static final BigInteger EXP_HEADER = new BigInteger("FFFFF4F300F2AB31", 16);
23
24     @Test
25     public void nxmHeaderNoMaskTest() {
26         NxmHeader nxmHeaderFromBigInt = new NxmHeader(NO_MASK_HEADER);
27
28         assertEquals(0x8000, nxmHeaderFromBigInt.getOxmClass());
29         assertEquals(0x2, nxmHeaderFromBigInt.getNxmField());
30         assertFalse(nxmHeaderFromBigInt.isHasMask());
31         assertEquals(0x96, nxmHeaderFromBigInt.getLength());
32         assertEquals(0x80000496L, nxmHeaderFromBigInt.toLong());
33         assertFalse(nxmHeaderFromBigInt.isExperimenter());
34
35         NxmHeader nxmHeaderFromFields = new NxmHeader(
36                 nxmHeaderFromBigInt.getOxmClass(),
37                 nxmHeaderFromBigInt.getNxmField(),
38                 nxmHeaderFromBigInt.isHasMask(),
39                 nxmHeaderFromBigInt.getLength());
40
41         assertEquals(NO_MASK_HEADER, nxmHeaderFromFields.toBigInteger());
42         assertEquals(0x80000496L, nxmHeaderFromFields.toLong());
43         assertFalse(nxmHeaderFromFields.isExperimenter());
44
45         NxmHeader nxmHeaderFromLong = new NxmHeader(NO_MASK_HEADER.longValue());
46
47         assertEquals(NO_MASK_HEADER, nxmHeaderFromLong.toBigInteger());
48         assertEquals(0x80000496L, nxmHeaderFromLong.toLong());
49         assertFalse(nxmHeaderFromLong.isExperimenter());
50
51         assertEquals(nxmHeaderFromBigInt, nxmHeaderFromFields);
52         assertEquals(nxmHeaderFromBigInt, nxmHeaderFromLong);
53         assertEquals(nxmHeaderFromLong, nxmHeaderFromFields);
54         assertEquals(nxmHeaderFromBigInt.hashCode(), nxmHeaderFromFields.hashCode());
55         assertEquals(nxmHeaderFromBigInt.hashCode(), nxmHeaderFromLong.hashCode());
56     }
57
58     @Test
59     public void nxmHeaderMaskTest() {
60         NxmHeader nxmHeaderFromBigInt = new NxmHeader(MASK_HEADER);
61
62         assertEquals(0x8000, nxmHeaderFromBigInt.getOxmClass());
63         assertEquals(0x2, nxmHeaderFromBigInt.getNxmField());
64         assertTrue(nxmHeaderFromBigInt.isHasMask());
65         assertEquals(0x96, nxmHeaderFromBigInt.getLength());
66         assertEquals(0x80000596L, nxmHeaderFromBigInt.toLong());
67         assertFalse(nxmHeaderFromBigInt.isExperimenter());
68
69         NxmHeader nxmHeaderFromFields = new NxmHeader(
70                 nxmHeaderFromBigInt.getOxmClass(),
71                 nxmHeaderFromBigInt.getNxmField(),
72                 nxmHeaderFromBigInt.isHasMask(),
73                 nxmHeaderFromBigInt.getLength());
74
75         assertEquals(MASK_HEADER, nxmHeaderFromFields.toBigInteger());
76         assertEquals(0x80000596L, nxmHeaderFromFields.toLong());
77         assertFalse(nxmHeaderFromFields.isExperimenter());
78
79         NxmHeader nxmHeaderFromLong = new NxmHeader(MASK_HEADER.longValue());
80
81         assertEquals(MASK_HEADER, nxmHeaderFromLong.toBigInteger());
82         assertEquals(0x80000596L, nxmHeaderFromLong.toLong());
83         assertFalse(nxmHeaderFromLong.isExperimenter());
84
85         assertEquals(nxmHeaderFromBigInt, nxmHeaderFromFields);
86         assertEquals(nxmHeaderFromBigInt, nxmHeaderFromLong);
87         assertEquals(nxmHeaderFromLong, nxmHeaderFromFields);
88         assertEquals(nxmHeaderFromBigInt.hashCode(), nxmHeaderFromFields.hashCode());
89         assertEquals(nxmHeaderFromBigInt.hashCode(), nxmHeaderFromLong.hashCode());
90     }
91
92     @Test
93     public void nxmHeaderExpTest() {
94         NxmHeader nxmHeaderFromBigInt = new NxmHeader(EXP_HEADER);
95
96         assertEquals(0xFFFF, nxmHeaderFromBigInt.getOxmClass());
97         assertEquals(0xF4 >>> 1, nxmHeaderFromBigInt.getNxmField());
98         assertFalse(nxmHeaderFromBigInt.isHasMask());
99         assertEquals(0xF3, nxmHeaderFromBigInt.getLength());
100         assertEquals(0xFFFFF4F300F2AB31L, nxmHeaderFromBigInt.toLong());
101         assertTrue(nxmHeaderFromBigInt.isExperimenter());
102         assertEquals(0x00F2AB31L, nxmHeaderFromBigInt.getExperimenterId());
103
104         NxmHeader nxmHeaderFromFields = new NxmHeader(
105                 nxmHeaderFromBigInt.getNxmField(),
106                 nxmHeaderFromBigInt.isHasMask(),
107                 nxmHeaderFromBigInt.getLength(),
108                 nxmHeaderFromBigInt.getExperimenterId());
109
110         assertEquals(EXP_HEADER, nxmHeaderFromFields.toBigInteger());
111         assertEquals(0xFFFFF4F300F2AB31L, nxmHeaderFromFields.toLong());
112         assertTrue(nxmHeaderFromFields.isExperimenter());
113         assertEquals(0x00F2AB31L, nxmHeaderFromFields.getExperimenterId());
114
115         NxmHeader nxmHeaderFromLong = new NxmHeader(EXP_HEADER.longValue());
116
117         assertEquals(EXP_HEADER, nxmHeaderFromLong.toBigInteger());
118         assertEquals(0xFFFFF4F300F2AB31L, nxmHeaderFromLong.toLong());
119         assertTrue(nxmHeaderFromLong.isExperimenter());
120         assertEquals(0x00F2AB31L, nxmHeaderFromLong.getExperimenterId());
121
122         assertEquals(nxmHeaderFromBigInt, nxmHeaderFromFields);
123         assertEquals(nxmHeaderFromBigInt, nxmHeaderFromLong);
124         assertEquals(nxmHeaderFromLong, nxmHeaderFromFields);
125         assertEquals(nxmHeaderFromBigInt.hashCode(), nxmHeaderFromFields.hashCode());
126         assertEquals(nxmHeaderFromBigInt.hashCode(), nxmHeaderFromLong.hashCode());
127     }
128
129 }