OPNFLWPLUG-1032: Neon-MRI: Bump odlparent, yangtools, mdsal
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / core / OFEncoderStatisticsTest.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 package org.opendaylight.openflowjava.protocol.impl.core;
9
10 import static org.mockito.ArgumentMatchers.any;
11 import static org.mockito.ArgumentMatchers.anyShort;
12 import static org.mockito.Mockito.doThrow;
13 import static org.mockito.Mockito.when;
14
15 import io.netty.buffer.ByteBuf;
16 import io.netty.channel.ChannelHandlerContext;
17 import io.netty.util.concurrent.Future;
18 import io.netty.util.concurrent.GenericFutureListener;
19 import org.junit.After;
20 import org.junit.Assert;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.mockito.Mock;
24 import org.mockito.MockitoAnnotations;
25 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
26 import org.opendaylight.openflowjava.protocol.impl.core.connection.MessageListenerWrapper;
27 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializationFactory;
28 import org.opendaylight.openflowjava.statistics.CounterEventTypes;
29 import org.opendaylight.openflowjava.statistics.StatisticsCounters;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
32 import org.opendaylight.yangtools.yang.binding.DataObject;
33
34 /**
35  * Test counters for encoding (at least DS_ENCODE_SUCCESS, DS_ENCODE_FAIL and DS_FLOW_MODS_SENT counters have to
36  * be enabled).
37  *
38  * @author madamjak
39  */
40 public class OFEncoderStatisticsTest {
41
42     @Mock ChannelHandlerContext mockChHndlrCtx ;
43     @Mock SerializationFactory mockSerializationFactory ;
44     @Mock MessageListenerWrapper wrapper;
45     @Mock OfHeader mockMsg ;
46     @Mock ByteBuf mockOut ;
47     @Mock Future<Void> future;
48     @Mock GenericFutureListener<Future<Void>> listener;
49     @Mock FlowModInput mockFlowModInput;
50
51     private StatisticsCounters statCounters;
52     private OFEncoder ofEncoder;
53
54     /**
55      * Initialize tests, start and reset counters before each test.
56      */
57     @Before
58     public void initTlest() {
59         MockitoAnnotations.initMocks(this);
60         ofEncoder = new OFEncoder() ;
61         ofEncoder.setSerializationFactory(mockSerializationFactory) ;
62         statCounters = StatisticsCounters.getInstance();
63         statCounters.startCounting(false, 0);
64     }
65
66     /**
67      * Stop counting after each test.
68      */
69     @After
70     public void tierDown() {
71         statCounters.stopCounting();
72     }
73
74     /**
75      * Test counting of success encode (counter DS_ENCODE_SUCCESS has to be enabled).
76      */
77     @Test
78     public void testEncodeSuccessCounter() throws Exception {
79         CounterEventTypes cet = CounterEventTypes.DS_ENCODE_SUCCESS;
80         if (!statCounters.isCounterEnabled(cet)) {
81             Assert.fail("Counter " + cet + " is not enabled.");
82         }
83
84         when(mockOut.readableBytes()).thenReturn(1);
85         when(wrapper.getMsg()).thenReturn(mockMsg);
86         when(wrapper.getMsg().getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);
87
88         int count = 4;
89         for (int i = 0; i < count; i++) {
90             ofEncoder.encode(mockChHndlrCtx, wrapper, mockOut);
91         }
92
93         Assert.assertEquals("Wrong - bad counter value for OFEncoder encode succesfully ", count,
94                 statCounters.getCounter(cet).getCounterValue());
95     }
96
97     /**
98      * Test counting of flow-mod sent (counter DS_FLOW_MODS_SENT has to be enabled).
99      */
100     @Test
101     public void testFlowModSentCounter() throws Exception {
102         CounterEventTypes cet = CounterEventTypes.DS_FLOW_MODS_SENT;
103         if (!statCounters.isCounterEnabled(cet)) {
104             Assert.fail("Counter " + cet + " is not enabled.");
105         }
106         when(mockOut.readableBytes()).thenReturn(1);
107         when(wrapper.getMsg()).thenReturn(mockFlowModInput);
108         when(wrapper.getMsg().getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);
109
110         int count = 4;
111         for (int i = 0; i < count; i++) {
112             ofEncoder.encode(mockChHndlrCtx, wrapper, mockOut);
113         }
114
115         Assert.assertEquals("Wrong - bad counter value for OFEncoder flow-mod sent", count,
116                 statCounters.getCounter(cet).getCounterValue());
117     }
118
119     /**
120      * Test counting of encode fail (counter DS_ENCODE_FAIL has to be enabled).
121      */
122     @Test
123     public void testEncodeEncodeFailCounter() throws Exception {
124         CounterEventTypes cet = CounterEventTypes.DS_ENCODE_FAIL;
125         if (!statCounters.isCounterEnabled(cet)) {
126             Assert.fail("Counter " + cet + " is not enabled.");
127         }
128
129         when(wrapper.getMsg()).thenReturn(mockMsg);
130         when(wrapper.getListener()).thenReturn(listener);
131         when(wrapper.getMsg().getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);
132         doThrow(new IllegalArgumentException()).when(mockSerializationFactory).messageToBuffer(anyShort(),
133                 any(ByteBuf.class), any(DataObject.class));
134
135         int count = 2;
136         for (int i = 0; i < count; i++) {
137             ofEncoder.encode(mockChHndlrCtx, wrapper, mockOut);
138         }
139
140         Assert.assertEquals("Wrong - bad counter value for OFEncoder fail encode", count,
141                 statCounters.getCounter(cet).getCounterValue());
142     }
143 }