89f10225cd3dcb308fa1bc43ad3b480c1db73c09
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / HelloMessageFactoryTest.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.deserialization.factories;
10
11 import io.netty.buffer.ByteBuf;
12
13 import java.util.ArrayList;
14 import java.util.List;
15
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;
21 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
22 import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;
23 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
24 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloElementType;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloMessage;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.Elements;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.ElementsBuilder;
29
30 /**
31  * @author michal.polkorab
32  * @author timotej.kubas
33  * @author madamjak
34  */
35 public class HelloMessageFactoryTest {
36
37     private OFDeserializer<HelloMessage> helloFactory;
38
39     /**
40      * Initializes deserializer registry and lookups correct deserializer
41      */
42     @Before
43     public void startUp() {
44         DeserializerRegistry registry = new DeserializerRegistryImpl();
45         registry.init();
46         helloFactory = registry.getDeserializer(
47                 new MessageCodeKey(EncodeConstants.OF13_VERSION_ID, 0, HelloMessage.class));
48     }
49
50     /**
51      * Testing {@link HelloMessageFactory} for correct length without padding
52      */
53     @Test
54     public void testWithoutPadding() {
55         ByteBuf bb = BufferHelper.buildBuffer("00 01 " // type
56                                             + "00 08 " // length
57                                             + "00 00 00 11" // bitmap 1
58                                             );
59         HelloMessage builtByFactory = BufferHelper.deserialize(helloFactory, bb);
60         BufferHelper.checkHeaderV13(builtByFactory);
61         List<Elements> element = createElement(4,HelloElementType.VERSIONBITMAP.getIntValue());
62         Assert.assertEquals("Wrong type", element.get(0).getType(), builtByFactory.getElements().get(0).getType());
63         Assert.assertEquals("Wrong versionBitmap", element.get(0).getVersionBitmap(), builtByFactory.getElements().get(0).getVersionBitmap());
64     }
65
66     /**
67      * Testing {@link HelloMessageFactory} for correct length with padding
68      */
69     @Test
70     public void testWithPadding() {
71         ByteBuf bb = BufferHelper.buildBuffer("00 01 " // type
72                                             + "00 0c " // length
73                                             + "00 00 00 11 " // bitmap 1
74                                             + "00 00 00 00 " // bitmap 2
75                                             + "00 00 00 00"  // padding
76                                             );
77         HelloMessage builtByFactory = BufferHelper.deserialize(helloFactory, bb);
78         BufferHelper.checkHeaderV13(builtByFactory);
79         List<Elements> element = createElement(8,HelloElementType.VERSIONBITMAP.getIntValue());
80         Assert.assertEquals("Wrong type", element.get(0).getType(), builtByFactory.getElements().get(0).getType());
81         Assert.assertEquals("Wrong versionBitmap", element.get(0).getVersionBitmap(), builtByFactory.getElements().get(0).getVersionBitmap());
82     }
83  
84     /**
85      * Testing {@link HelloMessageFactory} if incorrect version is set
86      */
87     @Test
88     public void testBadType(){
89         ByteBuf bb = BufferHelper.buildBuffer("00 02 " // type
90                                             + "00 0c " // length
91                                             + "00 00 00 11 " // bitmap 1
92                                             + "00 00 00 00 " // bitmap 2
93                                             + "00 00 00 00"  // padding
94                                             );
95         HelloMessage builtByFactory = BufferHelper.deserialize(helloFactory, bb);
96         BufferHelper.checkHeaderV13(builtByFactory);
97         Assert.assertEquals("Wrong - no element has been expected", 0, builtByFactory.getElements().size());
98     }
99
100     private static List<Elements> createElement(int lengthInByte, int type) {
101         ElementsBuilder elementsBuilder = new ElementsBuilder();
102         List<Elements> elementsList = new ArrayList<>();
103         List<Boolean> booleanList = new ArrayList<>();
104         booleanList.add(true);
105         booleanList.add(false);
106         booleanList.add(false);
107         booleanList.add(false);
108         booleanList.add(true);
109         int inSize = booleanList.size();
110         for (int i = 1; i < ((lengthInByte * 8) - inSize + 1); i++) {
111             booleanList.add(false);
112         }
113         elementsBuilder.setType(HelloElementType.forValue(type));
114         elementsBuilder.setVersionBitmap(booleanList);
115         elementsList.add(elementsBuilder.build());
116         return elementsList;
117     }
118 }