OPNFLWPLUG-1032: Neon-MRI: Bump odlparent, yangtools, mdsal
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / multipart / OF10StatsRequestExperimenterTest.java
1 /*
2  * Copyright (c) 2014 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.serialization.factories.multipart;
10
11 import io.netty.buffer.ByteBuf;
12 import io.netty.buffer.UnpooledByteBufAllocator;
13 import org.junit.Assert;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.mockito.ArgumentMatchers;
17 import org.mockito.Mock;
18 import org.mockito.Mockito;
19 import org.mockito.runners.MockitoJUnitRunner;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
21 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
22 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdTypeSerializerKey;
23 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
24 import org.opendaylight.openflowjava.protocol.impl.serialization.factories.OF10StatsRequestInputFactory;
25 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.experimenter._case.MultipartRequestExperimenterBuilder;
34
35 /**
36  * Unit tests for OF10StatsRequestExperimenter.
37  *
38  * @author michal.polkorab
39  */
40 @RunWith(MockitoJUnitRunner.class)
41 public class OF10StatsRequestExperimenterTest {
42
43     @Mock SerializerRegistry mockRegistry;
44     @Mock OFSerializer<ExperimenterDataOfChoice> serializer;
45     @Mock
46     private ExperimenterDataOfChoice vendorData;
47
48     /**
49      * Testing OF10StatsRequestInputFactory (Experimenter) for correct serialization.
50      */
51     @Test
52     public void testExperimenter() throws Exception {
53         Mockito.when(mockRegistry.getSerializer(
54                 ArgumentMatchers.<ExperimenterIdTypeSerializerKey<ExperimenterDataOfChoice>>any()))
55                 .thenReturn(serializer);
56         OF10StatsRequestInputFactory multipartFactory = new OF10StatsRequestInputFactory();
57         multipartFactory.injectSerializerRegistry(mockRegistry);
58         MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
59         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);
60         builder.setType(MultipartType.OFPMPEXPERIMENTER);
61         builder.setFlags(new MultipartRequestFlags(false));
62         final MultipartRequestExperimenterCaseBuilder caseBuilder = new MultipartRequestExperimenterCaseBuilder();
63         MultipartRequestExperimenterBuilder expBuilder = new MultipartRequestExperimenterBuilder();
64         expBuilder.setExperimenter(new ExperimenterId(42L));
65         expBuilder.setExpType(21L);
66         expBuilder.setExperimenterDataOfChoice(vendorData);
67         caseBuilder.setMultipartRequestExperimenter(expBuilder.build());
68         builder.setMultipartRequestBody(caseBuilder.build());
69         MultipartRequestInput message = builder.build();
70
71         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
72         multipartFactory.serialize(message, out);
73
74         BufferHelper.checkHeaderV10(out, (byte) 16, 16);
75         Assert.assertEquals("Wrong type", 65535, out.readUnsignedShort());
76         Assert.assertEquals("Wrong flags", 0, out.readUnsignedShort());
77         Mockito.verify(serializer, Mockito.times(1)).serialize(vendorData, out);
78     }
79 }