Extend openflow-protocol-impl serialization
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / MeterModInputMessageFactoryTest.java
1 /*
2  * Copyright (c) 2015 NetIDE Consortium 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 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
9
10 import io.netty.buffer.ByteBuf;
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
17 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
18 import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
19 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
20 import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;
21 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDropBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemarkBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
33
34 /**
35  * @author giuseppex.petralia@intel.com
36  *
37  */
38 public class MeterModInputMessageFactoryTest {
39
40     private OFDeserializer<MeterModInput> factory;
41
42     @Before
43     public void startUp() {
44         DeserializerRegistry desRegistry = new DeserializerRegistryImpl();
45         desRegistry.init();
46         factory = desRegistry
47                 .getDeserializer(new MessageCodeKey(EncodeConstants.OF13_VERSION_ID, 29, MeterModInput.class));
48
49     }
50
51     @Test
52     public void test() {
53         ByteBuf bb = BufferHelper.buildBuffer("00 01 00 03 00 00 08 c8 00 "
54                 + "01 00 10 00 00 00 01 00 00 00 02 00 00 00 " + "00 00 02 00 10 00 00 00 01 00 00 00 02 03 00 00 00");
55         MeterModInput deserializedMessage = BufferHelper.deserialize(factory, bb);
56         BufferHelper.checkHeaderV13(deserializedMessage);
57
58         Assert.assertEquals("Wrong command", MeterModCommand.forValue(1), deserializedMessage.getCommand());
59         Assert.assertEquals("Wrong flags", new MeterFlags(false, true, true, false), deserializedMessage.getFlags());
60         Assert.assertEquals("Wrong meter id", new MeterId(2248L), deserializedMessage.getMeterId());
61         Assert.assertEquals("Wrong band", createBandsList().get(0), deserializedMessage.getBands().get(0));
62         Assert.assertEquals("Wrong band", createBandsList().get(1), deserializedMessage.getBands().get(1));
63     }
64
65     private static List<Bands> createBandsList() {
66         List<Bands> bandsList = new ArrayList<>();
67         BandsBuilder bandsBuilder = new BandsBuilder();
68         MeterBandDropCaseBuilder dropCaseBuilder = new MeterBandDropCaseBuilder();
69         MeterBandDropBuilder dropBand = new MeterBandDropBuilder();
70         dropBand.setType(MeterBandType.OFPMBTDROP);
71         dropBand.setRate(1L);
72         dropBand.setBurstSize(2L);
73         dropCaseBuilder.setMeterBandDrop(dropBand.build());
74         bandsList.add(bandsBuilder.setMeterBand(dropCaseBuilder.build()).build());
75         MeterBandDscpRemarkCaseBuilder dscpCaseBuilder = new MeterBandDscpRemarkCaseBuilder();
76         MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();
77         dscpRemarkBand.setType(MeterBandType.OFPMBTDSCPREMARK);
78         dscpRemarkBand.setRate(1L);
79         dscpRemarkBand.setBurstSize(2L);
80         dscpRemarkBand.setPrecLevel((short) 3);
81         dscpCaseBuilder.setMeterBandDscpRemark(dscpRemarkBand.build());
82         bandsList.add(bandsBuilder.setMeterBand(dscpCaseBuilder.build()).build());
83         return bandsList;
84     }
85 }