2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
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
9 package org.opendaylight.openflowjava.protocol.impl.util;
11 import io.netty.buffer.ByteBuf;
12 import io.netty.buffer.UnpooledByteBufAllocator;
14 import java.util.ArrayList;
15 import java.util.List;
17 import org.junit.Assert;
18 import org.junit.Test;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntryBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntryBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Nxm0Class;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Nxm1Class;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.MatchEntries;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.MatchEntriesBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.Match;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.match.grouping.MatchBuilder;
39 * @author michal.polkorab
42 public class MatchSerializerTest {
45 * Test for correct serialization of Ipv4Address match entry
49 MatchBuilder builder = new MatchBuilder();
50 builder.setType(OxmMatchType.class);
51 List<MatchEntries> entries = new ArrayList<>();
52 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
53 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
54 entriesBuilder.setOxmMatchField(Ipv4Src.class);
55 entriesBuilder.setHasMask(false);
56 Ipv4AddressMatchEntryBuilder addressBuilder = new Ipv4AddressMatchEntryBuilder();
57 addressBuilder.setIpv4Address(new Ipv4Address("1.2.3.4"));
58 entriesBuilder.addAugmentation(Ipv4AddressMatchEntry.class, addressBuilder.build());
59 entries.add(entriesBuilder.build());
60 builder.setMatchEntries(entries);
61 Match match = builder.build();
63 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
64 MatchSerializer.encodeMatch(match, out);
66 Assert.assertEquals("Wrong type", 1, out.readUnsignedShort());
67 out.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
68 Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
69 Assert.assertEquals("Wrong field and mask", 22, out.readUnsignedByte());
70 out.skipBytes(EncodeConstants.SIZE_OF_BYTE_IN_BYTES);
71 Assert.assertEquals("Wrong ip address (first number)", 1, out.readUnsignedByte());
72 Assert.assertEquals("Wrong ip address (second number)", 2, out.readUnsignedByte());
73 Assert.assertEquals("Wrong ip address (third number)", 3, out.readUnsignedByte());
74 Assert.assertEquals("Wrong ip address (fourth number)", 4, out.readUnsignedByte());
78 * Test for correct serialization of Ipv6Address match entry
82 MatchBuilder builder = new MatchBuilder();
83 builder.setType(OxmMatchType.class);
84 List<MatchEntries> entries = new ArrayList<>();
85 // ipv6 match entry with correct Ipv6 address
86 MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();
87 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
88 entriesBuilder.setOxmMatchField(Ipv6Src.class);
89 entriesBuilder.setHasMask(false);
90 Ipv6AddressMatchEntryBuilder addressBuilder = new Ipv6AddressMatchEntryBuilder();
91 addressBuilder.setIpv6Address(new Ipv6Address("1:2:3:4:5:6:7:8"));
92 entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
93 entries.add(entriesBuilder.build());
94 // ipv6 match entry with abbreviated Ipv6 address
95 entriesBuilder = new MatchEntriesBuilder();
96 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
97 entriesBuilder.setOxmMatchField(Ipv6NdTarget.class);
98 entriesBuilder.setHasMask(false);
99 addressBuilder = new Ipv6AddressMatchEntryBuilder();
100 addressBuilder.setIpv6Address(new Ipv6Address("1:2::6:7:8"));
101 entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
102 entries.add(entriesBuilder.build());
103 // ipv6 match entry with abbreviated Ipv6 address
104 entriesBuilder = new MatchEntriesBuilder();
105 entriesBuilder.setOxmClass(Nxm1Class.class);
106 entriesBuilder.setOxmMatchField(Ipv6Dst.class);
107 entriesBuilder.setHasMask(false);
108 addressBuilder = new Ipv6AddressMatchEntryBuilder();
109 addressBuilder.setIpv6Address(new Ipv6Address("1::8"));
110 entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
111 entries.add(entriesBuilder.build());
112 // ipv6 match entry with abbreviated Ipv6 address
113 entriesBuilder = new MatchEntriesBuilder();
114 entriesBuilder.setOxmClass(Nxm1Class.class);
115 entriesBuilder.setOxmMatchField(Ipv6Dst.class);
116 entriesBuilder.setHasMask(false);
117 addressBuilder = new Ipv6AddressMatchEntryBuilder();
118 addressBuilder.setIpv6Address(new Ipv6Address("::1"));
119 entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
120 entries.add(entriesBuilder.build());
121 // ipv6 match entry with abbreviated Ipv6 address
122 entriesBuilder = new MatchEntriesBuilder();
123 entriesBuilder.setOxmClass(Nxm0Class.class);
124 entriesBuilder.setOxmMatchField(Ipv6Dst.class);
125 entriesBuilder.setHasMask(false);
126 addressBuilder = new Ipv6AddressMatchEntryBuilder();
127 addressBuilder.setIpv6Address(new Ipv6Address("::"));
128 entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
129 entries.add(entriesBuilder.build());
130 // ipv6 match entry with incorrect Ipv6 address (longer)
131 entriesBuilder = new MatchEntriesBuilder();
132 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
133 entriesBuilder.setOxmMatchField(Ipv6Dst.class);
134 entriesBuilder.setHasMask(false);
135 addressBuilder = new Ipv6AddressMatchEntryBuilder();
136 addressBuilder.setIpv6Address(new Ipv6Address("1:2:3:4:5:6:7:8:9"));
137 entriesBuilder.addAugmentation(Ipv6AddressMatchEntry.class, addressBuilder.build());
138 entries.add(entriesBuilder.build());
139 builder.setMatchEntries(entries);
140 Match match = builder.build();
141 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
142 MatchSerializer.encodeMatch(match, out);
144 Assert.assertEquals("Wrong type", 1, out.readUnsignedShort());
145 out.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);
146 Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
147 Assert.assertEquals("Wrong field and mask", 52, out.readUnsignedByte());
148 Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
149 Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
150 Assert.assertEquals("Wrong ipv6 address", 2, out.readUnsignedShort());
151 Assert.assertEquals("Wrong ipv6 address", 3, out.readUnsignedShort());
152 Assert.assertEquals("Wrong ipv6 address", 4, out.readUnsignedShort());
153 Assert.assertEquals("Wrong ipv6 address", 5, out.readUnsignedShort());
154 Assert.assertEquals("Wrong ipv6 address", 6, out.readUnsignedShort());
155 Assert.assertEquals("Wrong ipv6 address", 7, out.readUnsignedShort());
156 Assert.assertEquals("Wrong ipv6 address", 8, out.readUnsignedShort());
157 Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
158 Assert.assertEquals("Wrong field and mask", 62, out.readUnsignedByte());
159 Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
160 Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
161 Assert.assertEquals("Wrong ipv6 address", 2, out.readUnsignedShort());
162 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
163 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
164 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
165 Assert.assertEquals("Wrong ipv6 address", 6, out.readUnsignedShort());
166 Assert.assertEquals("Wrong ipv6 address", 7, out.readUnsignedShort());
167 Assert.assertEquals("Wrong ipv6 address", 8, out.readUnsignedShort());
168 Assert.assertEquals("Wrong class", 0x0001, out.readUnsignedShort());
169 Assert.assertEquals("Wrong field and mask", 54, out.readUnsignedByte());
170 Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
171 Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
172 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
173 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
174 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
175 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
176 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
177 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
178 Assert.assertEquals("Wrong ipv6 address", 8, out.readUnsignedShort());
179 Assert.assertEquals("Wrong class", 0x0001, out.readUnsignedShort());
180 Assert.assertEquals("Wrong field and mask", 54, out.readUnsignedByte());
181 Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
182 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
183 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
184 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
185 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
186 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
187 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
188 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
189 Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
190 Assert.assertEquals("Wrong class", 0x0000, out.readUnsignedShort());
191 Assert.assertEquals("Wrong field and mask", 54, out.readUnsignedByte());
192 Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
193 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
194 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
195 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
196 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
197 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
198 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
199 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
200 Assert.assertEquals("Wrong ipv6 address", 0, out.readUnsignedShort());
201 Assert.assertEquals("Wrong class", 0x8000, out.readUnsignedShort());
202 Assert.assertEquals("Wrong field and mask", 54, out.readUnsignedByte());
203 Assert.assertEquals("Wrong entry length", 16, out.readUnsignedByte());
204 Assert.assertEquals("Wrong ipv6 address", 1, out.readUnsignedShort());
205 Assert.assertEquals("Wrong ipv6 address", 2, out.readUnsignedShort());
206 Assert.assertEquals("Wrong ipv6 address", 3, out.readUnsignedShort());
207 Assert.assertEquals("Wrong ipv6 address", 4, out.readUnsignedShort());
208 Assert.assertEquals("Wrong ipv6 address", 5, out.readUnsignedShort());
209 Assert.assertEquals("Wrong ipv6 address", 6, out.readUnsignedShort());
210 Assert.assertEquals("Wrong ipv6 address", 7, out.readUnsignedShort());
211 Assert.assertEquals("Wrong ipv6 address", 8, out.readUnsignedShort());