Merge "Drop Felix Gogo"
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / MeterConfigStatsResponseConvertorTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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.openflowplugin.openflow.md.core.sal.convertor;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
14
15 import java.util.ArrayList;
16 import java.util.Collections;
17 import java.util.List;
18 import java.util.Optional;
19 import org.junit.Test;
20 import org.opendaylight.openflowplugin.api.OFConstants;
21 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
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.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDropBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemarkBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenterBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfigBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.BandsBuilder;
35 import org.opendaylight.yangtools.yang.binding.DataContainer;
36
37 public class MeterConfigStatsResponseConvertorTest {
38     private static final int PRESET_COUNT = 7;
39
40     private List<MeterConfig> createMeterConfigList(){
41         List<MeterConfig> meterConfigs = new ArrayList<>();
42         MeterConfigBuilder meterConfigBuilder = new MeterConfigBuilder();
43         for (int i = 0; i < PRESET_COUNT; i++) {
44             meterConfigBuilder.setMeterId(new MeterId((long) i));
45             List<Bands> bandses = new ArrayList<>();
46
47             BandsBuilder bandsBuilder = new BandsBuilder();
48             bandsBuilder.setMeterBand(new MeterBandDropCaseBuilder()
49                     .setMeterBandDrop(new MeterBandDropBuilder().build()).build());
50             bandses.add(bandsBuilder.build());
51
52             bandsBuilder = new BandsBuilder();
53             bandsBuilder.setMeterBand(new MeterBandDscpRemarkCaseBuilder()
54                     .setMeterBandDscpRemark(new MeterBandDscpRemarkBuilder().build()).build());
55             bandses.add(bandsBuilder.build());
56
57             bandsBuilder = new BandsBuilder();
58             bandsBuilder.setMeterBand(new MockMeterBandBuilder());
59             bandses.add(bandsBuilder.build());
60
61             bandsBuilder = new BandsBuilder();
62             bandsBuilder.setMeterBand(new MeterBandExperimenterCaseBuilder()
63                     .setMeterBandExperimenter(new MeterBandExperimenterBuilder().build()).build());
64             bandses.add(bandsBuilder.build());
65
66             meterConfigBuilder.setBands(bandses);
67             meterConfigBuilder.setFlags(new MeterFlags(true, false, true, false));
68             meterConfigs.add(meterConfigBuilder.build());
69         }
70
71         return meterConfigs;
72     }
73
74     @Test
75     /**
76      * Test of basic mapping functionality of {@link MeterConfigStatsResponseConvertor#convert(java.util.List)} }
77      */
78     public void testToSALMeterConfigList() {
79         final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager();
80         Optional<List<MeterConfigStats>> meterConfigsOptional = convertorManager.convert(createMeterConfigList(), new VersionConvertorData(OFConstants.OFP_VERSION_1_3));
81         List<MeterConfigStats> meterConfigs = meterConfigsOptional.orElse(Collections.emptyList());
82
83         assertEquals(PRESET_COUNT, meterConfigs.size());
84         int cnt = 0;
85         for (MeterConfigStats meterConfigStats: meterConfigs){
86             assertEquals(new Long(cnt), meterConfigStats.getMeterId().getValue());
87             assertTrue(meterConfigStats.getFlags().isMeterBurst());
88             assertFalse(meterConfigStats.getFlags().isMeterKbps());
89             assertTrue(meterConfigStats.getFlags().isMeterPktps());
90             assertFalse(meterConfigStats.getFlags().isMeterStats());
91
92             cnt++;
93         }
94     }
95
96
97     private final class MockMeterBandBuilder implements org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.MeterBand {
98
99         @Override
100         public Class<? extends DataContainer> getImplementedInterface() {
101             return MockMeterBandBuilder.class;
102         }
103     }
104
105 }