9e38a5c656aafe47a36108c065a2d8e010369b5b
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / OF10StatsRequestInputFactoryTest.java
1 /*\r
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
9 \r
10 import io.netty.buffer.ByteBuf;\r
11 import io.netty.buffer.UnpooledByteBufAllocator;\r
12 \r
13 import org.junit.Assert;\r
14 import org.junit.Before;\r
15 import org.junit.Test;\r
16 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
17 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
18 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
19 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
20 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;\r
21 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
22 import org.opendaylight.openflowjava.util.ByteBufUtils;\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowWildcardsV10;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10Builder;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescCaseBuilder;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCaseBuilder;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCaseBuilder;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableCaseBuilder;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.desc._case.MultipartRequestDescBuilder;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStatsBuilder;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table._case.MultipartRequestTableBuilder;\r
41 \r
42 /**\r
43  * @author michal.polkorab\r
44  *\r
45  */\r
46 public class OF10StatsRequestInputFactoryTest {\r
47 \r
48     private SerializerRegistry registry;\r
49     private OFSerializer<MultipartRequestInput> multipartFactory;\r
50 \r
51     /**\r
52      * Initializes serializer registry and stores correct factory in field\r
53      */\r
54     @Before\r
55     public void startUp() {\r
56         registry = new SerializerRegistryImpl();\r
57         registry.init();\r
58         multipartFactory = registry.getSerializer(\r
59                 new MessageTypeKey<>(EncodeConstants.OF10_VERSION_ID, MultipartRequestInput.class));\r
60     }\r
61 \r
62     /**\r
63      * Testing OF10StatsRequestInputFactory (Desc) for correct serialization\r
64      * @throws Exception\r
65      */\r
66     @Test\r
67     public void testDesc() throws Exception {\r
68         MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
69         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);\r
70         builder.setType(MultipartType.OFPMPDESC);\r
71         builder.setFlags(new MultipartRequestFlags(false));\r
72         MultipartRequestDescCaseBuilder caseBuilder = new MultipartRequestDescCaseBuilder();\r
73         MultipartRequestDescBuilder descBuilder = new MultipartRequestDescBuilder();\r
74         caseBuilder.setMultipartRequestDesc(descBuilder.build());\r
75         builder.setMultipartRequestBody(caseBuilder.build());\r
76         MultipartRequestInput message = builder.build();\r
77         \r
78         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
79         multipartFactory.serialize(message, out);\r
80         \r
81         BufferHelper.checkHeaderV10(out, (byte) 16, 12);\r
82         Assert.assertEquals("Wrong type", 0, out.readUnsignedShort());\r
83         Assert.assertEquals("Wrong flags", 0, out.readUnsignedShort());\r
84         Assert.assertTrue("Unread data", out.readableBytes() == 0);\r
85     }\r
86     \r
87     /**\r
88      * Testing OF10StatsRequestInputFactory (Flow) for correct serialization\r
89      * @throws Exception\r
90      */\r
91     @Test\r
92     public void testFlow() throws Exception {\r
93         MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
94         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);\r
95         builder.setType(MultipartType.OFPMPFLOW);\r
96         builder.setFlags(new MultipartRequestFlags(false));\r
97         MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder();\r
98         MultipartRequestFlowBuilder flowBuilder = new MultipartRequestFlowBuilder();\r
99         MatchV10Builder matchBuilder = new MatchV10Builder();\r
100         matchBuilder.setWildcards(new FlowWildcardsV10(true, true, true, true, true, true,\r
101                 true, true, true, true));\r
102         matchBuilder.setNwSrcMask((short) 8);\r
103         matchBuilder.setNwDstMask((short) 16);\r
104         matchBuilder.setInPort(51);\r
105         matchBuilder.setDlSrc(new MacAddress("00:01:02:03:04:05"));\r
106         matchBuilder.setDlDst(new MacAddress("05:04:03:02:01:00"));\r
107         matchBuilder.setDlVlan(52);\r
108         matchBuilder.setDlVlanPcp((short) 53);\r
109         matchBuilder.setDlType(54);\r
110         matchBuilder.setNwTos((short) 55);\r
111         matchBuilder.setNwProto((short) 56);\r
112         matchBuilder.setNwSrc(new Ipv4Address("10.0.0.1"));\r
113         matchBuilder.setNwDst(new Ipv4Address("10.0.0.2"));\r
114         matchBuilder.setTpSrc(57);\r
115         matchBuilder.setTpDst(58);\r
116         flowBuilder.setMatchV10(matchBuilder.build());\r
117         flowBuilder.setTableId((short) 1);\r
118         flowBuilder.setOutPort(42L);\r
119         caseBuilder.setMultipartRequestFlow(flowBuilder.build());\r
120         builder.setMultipartRequestBody(caseBuilder.build());\r
121         MultipartRequestInput message = builder.build();\r
122         \r
123         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
124         multipartFactory.serialize(message, out);\r
125         \r
126         BufferHelper.checkHeaderV10(out, (byte) 16, 56);\r
127         Assert.assertEquals("Wrong type", 1, out.readUnsignedShort());\r
128         Assert.assertEquals("Wrong flags", 0, out.readUnsignedShort());\r
129         Assert.assertEquals("Wrong wildcards", 3414271, out.readUnsignedInt());\r
130         Assert.assertEquals("Wrong in-port", 51, out.readUnsignedShort());\r
131         byte[] dlSrc = new byte[6];\r
132         out.readBytes(dlSrc);\r
133         Assert.assertEquals("Wrong dl-src", "00:01:02:03:04:05", ByteBufUtils.macAddressToString(dlSrc));\r
134         byte[] dlDst = new byte[6];\r
135         out.readBytes(dlDst);\r
136         Assert.assertEquals("Wrong dl-dst", "05:04:03:02:01:00", ByteBufUtils.macAddressToString(dlDst));\r
137         Assert.assertEquals("Wrong dl-vlan", 52, out.readUnsignedShort());\r
138         Assert.assertEquals("Wrong dl-vlan-pcp", 53, out.readUnsignedByte());\r
139         out.skipBytes(1);\r
140         Assert.assertEquals("Wrong dl-type", 54, out.readUnsignedShort());\r
141         Assert.assertEquals("Wrong nw-tos", 55, out.readUnsignedByte());\r
142         Assert.assertEquals("Wrong nw-proto", 56, out.readUnsignedByte());\r
143         out.skipBytes(2);\r
144         Assert.assertEquals("Wrong nw-src", 167772161, out.readUnsignedInt());\r
145         Assert.assertEquals("Wrong nw-dst", 167772162, out.readUnsignedInt());\r
146         Assert.assertEquals("Wrong tp-src", 57, out.readUnsignedShort());\r
147         Assert.assertEquals("Wrong tp-dst", 58, out.readUnsignedShort());\r
148         Assert.assertEquals("Wrong table-id", 1, out.readUnsignedByte());\r
149         out.skipBytes(1);\r
150         Assert.assertEquals("Wrong out-port", 42, out.readUnsignedShort());\r
151         Assert.assertTrue("Unread data", out.readableBytes() == 0);\r
152     }\r
153     \r
154     /**\r
155      * Testing OF10StatsRequestInputFactory (Aggregate) for correct serialization\r
156      * @throws Exception\r
157      */\r
158     @Test\r
159     public void testAggregate() throws Exception {\r
160         MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
161         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);\r
162         builder.setType(MultipartType.OFPMPAGGREGATE);\r
163         builder.setFlags(new MultipartRequestFlags(false));\r
164         MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder();\r
165         MultipartRequestFlowBuilder flowBuilder = new MultipartRequestFlowBuilder();\r
166         MatchV10Builder matchBuilder = new MatchV10Builder();\r
167         matchBuilder.setWildcards(new FlowWildcardsV10(false, false, false, false,\r
168                 false, false, false, false, false, false));\r
169         matchBuilder.setNwSrcMask((short) 32);\r
170         matchBuilder.setNwDstMask((short) 32);\r
171         matchBuilder.setInPort(51);\r
172         matchBuilder.setDlSrc(new MacAddress("00:01:02:03:04:05"));\r
173         matchBuilder.setDlDst(new MacAddress("05:04:03:02:01:00"));\r
174         matchBuilder.setDlVlan(52);\r
175         matchBuilder.setDlVlanPcp((short) 53);\r
176         matchBuilder.setDlType(54);\r
177         matchBuilder.setNwTos((short) 55);\r
178         matchBuilder.setNwProto((short) 56);\r
179         matchBuilder.setNwSrc(new Ipv4Address("10.0.0.1"));\r
180         matchBuilder.setNwDst(new Ipv4Address("10.0.0.2"));\r
181         matchBuilder.setTpSrc(57);\r
182         matchBuilder.setTpDst(58);\r
183         flowBuilder.setMatchV10(matchBuilder.build());\r
184         flowBuilder.setTableId((short) 42);\r
185         flowBuilder.setOutPort(6653L);\r
186         caseBuilder.setMultipartRequestFlow(flowBuilder.build());\r
187         builder.setMultipartRequestBody(caseBuilder.build());\r
188         MultipartRequestInput message = builder.build();\r
189         \r
190         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
191         multipartFactory.serialize(message, out);\r
192         \r
193         BufferHelper.checkHeaderV10(out, (byte) 16, 56);\r
194         Assert.assertEquals("Wrong type", 2, out.readUnsignedShort());\r
195         Assert.assertEquals("Wrong flags", 0, out.readUnsignedShort());\r
196         Assert.assertEquals("Wrong wildcards", 0, out.readUnsignedInt());\r
197         Assert.assertEquals("Wrong in-port", 51, out.readUnsignedShort());\r
198         byte[] dlSrc = new byte[6];\r
199         out.readBytes(dlSrc);\r
200         Assert.assertEquals("Wrong dl-src", "00:01:02:03:04:05", ByteBufUtils.macAddressToString(dlSrc));\r
201         byte[] dlDst = new byte[6];\r
202         out.readBytes(dlDst);\r
203         Assert.assertEquals("Wrong dl-dst", "05:04:03:02:01:00", ByteBufUtils.macAddressToString(dlDst));\r
204         Assert.assertEquals("Wrong dl-vlan", 52, out.readUnsignedShort());\r
205         Assert.assertEquals("Wrong dl-vlan-pcp", 53, out.readUnsignedByte());\r
206         out.skipBytes(1);\r
207         Assert.assertEquals("Wrong dl-type", 54, out.readUnsignedShort());\r
208         Assert.assertEquals("Wrong nw-tos", 55, out.readUnsignedByte());\r
209         Assert.assertEquals("Wrong nw-proto", 56, out.readUnsignedByte());\r
210         out.skipBytes(2);\r
211         Assert.assertEquals("Wrong nw-src", 167772161, out.readUnsignedInt());\r
212         Assert.assertEquals("Wrong nw-dst", 167772162, out.readUnsignedInt());\r
213         Assert.assertEquals("Wrong tp-src", 57, out.readUnsignedShort());\r
214         Assert.assertEquals("Wrong tp-dst", 58, out.readUnsignedShort());\r
215         Assert.assertEquals("Wrong table-id", 42, out.readUnsignedByte());\r
216         out.skipBytes(1);\r
217         Assert.assertEquals("Wrong out-port", 6653, out.readUnsignedShort());\r
218         Assert.assertTrue("Unread data", out.readableBytes() == 0);\r
219     }\r
220     \r
221     /**\r
222      * Testing OF10StatsRequestInputFactory (Table) for correct serialization\r
223      * @throws Exception\r
224      */\r
225     @Test\r
226     public void testTable() throws Exception {\r
227         MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
228         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);\r
229         builder.setType(MultipartType.OFPMPTABLE);\r
230         builder.setFlags(new MultipartRequestFlags(false));\r
231         MultipartRequestTableCaseBuilder caseBuilder = new MultipartRequestTableCaseBuilder();\r
232         MultipartRequestTableBuilder tableBuilder = new MultipartRequestTableBuilder();\r
233         caseBuilder.setMultipartRequestTable(tableBuilder.build());\r
234         builder.setMultipartRequestBody(caseBuilder.build());\r
235         MultipartRequestInput message = builder.build();\r
236         \r
237         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
238         multipartFactory.serialize(message, out);\r
239         \r
240         BufferHelper.checkHeaderV10(out, (byte) 16, 12);\r
241         Assert.assertEquals("Wrong type", 3, out.readUnsignedShort());\r
242         Assert.assertEquals("Wrong flags", 0, out.readUnsignedShort());\r
243         Assert.assertTrue("Unread data", out.readableBytes() == 0);\r
244     }\r
245     \r
246     /**\r
247      * Testing OF10StatsRequestInputFactory (Port) for correct serialization\r
248      * @throws Exception\r
249      */\r
250     @Test\r
251     public void testPort() throws Exception {\r
252         MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
253         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);\r
254         builder.setType(MultipartType.OFPMPPORTSTATS);\r
255         builder.setFlags(new MultipartRequestFlags(false));\r
256         MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder();\r
257         MultipartRequestPortStatsBuilder portBuilder = new MultipartRequestPortStatsBuilder();\r
258         portBuilder.setPortNo(15L);\r
259         caseBuilder.setMultipartRequestPortStats(portBuilder.build());\r
260         builder.setMultipartRequestBody(caseBuilder.build());\r
261         MultipartRequestInput message = builder.build();\r
262         \r
263         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
264         multipartFactory.serialize(message, out);\r
265         \r
266         BufferHelper.checkHeaderV10(out, (byte) 16, 20);\r
267         Assert.assertEquals("Wrong type", 4, out.readUnsignedShort());\r
268         Assert.assertEquals("Wrong flags", 0, out.readUnsignedShort());\r
269         Assert.assertEquals("Wrong port-no", 15, out.readUnsignedShort());\r
270         out.skipBytes(6);\r
271         Assert.assertTrue("Unread data", out.readableBytes() == 0);\r
272     }\r
273 \r
274     /**\r
275      * Testing OF10StatsRequestInputFactory (Queue) for correct serialization\r
276      * @throws Exception\r
277      */\r
278     @Test\r
279     public void testQueue() throws Exception {\r
280         MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
281         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);\r
282         builder.setType(MultipartType.OFPMPQUEUE);\r
283         builder.setFlags(new MultipartRequestFlags(false));\r
284         MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();\r
285         MultipartRequestQueueBuilder queueBuilder = new MultipartRequestQueueBuilder();\r
286         queueBuilder.setPortNo(15L);\r
287         queueBuilder.setQueueId(16L);\r
288         caseBuilder.setMultipartRequestQueue(queueBuilder.build());\r
289         builder.setMultipartRequestBody(caseBuilder.build());\r
290         MultipartRequestInput message = builder.build();\r
291         \r
292         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
293         multipartFactory.serialize(message, out);\r
294         \r
295         BufferHelper.checkHeaderV10(out, (byte) 16, 20);\r
296         Assert.assertEquals("Wrong type", 5, out.readUnsignedShort());\r
297         Assert.assertEquals("Wrong flags", 0, out.readUnsignedShort());\r
298         Assert.assertEquals("Wrong port-no", 15, out.readUnsignedShort());\r
299         out.skipBytes(2);\r
300         Assert.assertEquals("Wrong queue-id", 16, out.readUnsignedInt());\r
301         Assert.assertTrue("Unread data", out.readableBytes() == 0);\r
302     }\r
303 }