220e7bcefb92a2da0252b2af477c07448e4c7393
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / util / MatchSerializerTest.java
1 /*
2  * Copyright (c) 2013 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.openflowjava.protocol.impl.util;
10
11 import io.netty.buffer.ByteBuf;
12 import io.netty.buffer.UnpooledByteBufAllocator;
13
14 import java.util.ArrayList;
15 import java.util.List;
16
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;
37
38 /**
39  * @author michal.polkorab
40  *
41  */
42 public class MatchSerializerTest {
43
44     /**
45      * Test for correct serialization of Ipv4Address match entry
46      */
47     @Test
48     public void test() {
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();
62         
63         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
64         MatchSerializer.encodeMatch(match, out);
65         
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());
75     }
76     
77     /**
78      * Test for correct serialization of Ipv6Address match entry
79      */
80     @Test
81     public void test2() {
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);
143         
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());
212     }
213
214 }