Merge "Coverage - ofp/impl/statistics/services"
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / services / SalFlowServiceImplTest.java
1 package org.opendaylight.openflowplugin.impl.services;
2
3
4 import org.junit.Before;
5 import org.junit.runner.RunWith;
6 import org.mockito.Mock;
7 import org.mockito.runners.MockitoJUnitRunner;
8 import org.opendaylight.openflowplugin.impl.registry.flow.DeviceFlowRegistryImpl;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.*;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlow;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlow;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
13 import junit.framework.TestCase;
14 import org.junit.Test;
15 import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter;
16 import org.opendaylight.openflowplugin.api.OFConstants;
17 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
18 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
19 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
20 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FeaturesReply;
22 import org.opendaylight.yangtools.yang.binding.DataObject;
23 import org.opendaylight.yangtools.yang.common.RpcResult;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
25
26 import java.math.BigInteger;
27 import java.util.concurrent.ExecutionException;
28 import java.util.concurrent.Future;
29
30 import static org.mockito.Mockito.mock;
31 import static org.mockito.Mockito.when;
32
33 @RunWith(MockitoJUnitRunner.class)
34 public class SalFlowServiceImplTest extends TestCase {
35
36     private static final BigInteger DUMMY_DATAPATH_ID = new BigInteger("444");
37     private static final Short DUMMY_VERSION = OFConstants.OFP_VERSION_1_3;
38
39     @Mock
40     RequestContextStack mockedRequestContextStack;
41     @Mock
42     DeviceContext mockedDeviceContext;
43     @Mock
44     ConnectionContext mockedPrimConnectionContext;
45     @Mock
46     FeaturesReply mockedFeatures;
47     @Mock
48     ConnectionAdapter mockedConnectionAdapter;
49     @Mock
50     MessageSpy mockedMessagSpy;
51
52
53     @Before
54     public void initialization() {
55         when(mockedFeatures.getDatapathId()).thenReturn(DUMMY_DATAPATH_ID);
56         when(mockedFeatures.getVersion()).thenReturn(DUMMY_VERSION);
57
58         when(mockedPrimConnectionContext.getFeatures()).thenReturn(mockedFeatures);
59         when(mockedPrimConnectionContext.getConnectionAdapter()).thenReturn(mockedConnectionAdapter);
60
61         when(mockedDeviceContext.getPrimaryConnectionContext()).thenReturn(mockedPrimConnectionContext);
62
63         when(mockedDeviceContext.getMessageSpy()).thenReturn(mockedMessagSpy);
64         when(mockedDeviceContext.getDeviceFlowRegistry()).thenReturn(new DeviceFlowRegistryImpl());
65     }
66
67     @Test
68     public void testAddFlow() throws Exception {
69         final SalFlowServiceImpl salFlowService = new SalFlowServiceImpl(mockedRequestContextStack, mockedDeviceContext);
70
71         AddFlowInput mockedAddFlowInput = mock(AddFlowInput.class);
72         when(mockedAddFlowInput.getMatch()).thenReturn(mock(Match.class));
73
74         verifyOutput(salFlowService.addFlow(mockedAddFlowInput));
75     }
76
77     @Test
78     public void testRemoveFlow() throws Exception {
79         final SalFlowServiceImpl salFlowService = new SalFlowServiceImpl(mockedRequestContextStack, mockedDeviceContext);
80
81         RemoveFlowInput mockedRemoveFlowInput = mock(RemoveFlowInput.class);
82         verifyOutput(salFlowService.removeFlow(mockedRemoveFlowInput));
83     }
84
85     @Test
86     public void testUpdateFlow() throws Exception {
87         final SalFlowServiceImpl salFlowService = new SalFlowServiceImpl(mockedRequestContextStack, mockedDeviceContext);
88
89         UpdateFlowInput mockedUpdateFlowInput = mock(UpdateFlowInput.class);
90
91
92         UpdatedFlow mockedUpdateFlow = mock(UpdatedFlow.class);
93         when(mockedUpdateFlow.getMatch()).thenReturn(mock(Match.class));
94         when(mockedUpdateFlowInput.getUpdatedFlow()).thenReturn(mockedUpdateFlow);
95
96
97         OriginalFlow mockedOriginalFlow = mock(OriginalFlow.class);
98         when(mockedOriginalFlow.getMatch()).thenReturn(mock(Match.class));
99         when(mockedUpdateFlowInput.getOriginalFlow()).thenReturn(mockedOriginalFlow);
100
101         verifyOutput(salFlowService.updateFlow(mockedUpdateFlowInput));
102     }
103
104     private <T extends DataObject> void verifyOutput(Future<RpcResult<T>> rpcResultFuture) throws ExecutionException, InterruptedException {
105         assertNotNull(rpcResultFuture);
106         final RpcResult<?> addFlowOutputRpcResult = rpcResultFuture.get();
107         assertNotNull(addFlowOutputRpcResult);
108         assertTrue(addFlowOutputRpcResult.isSuccessful());
109     }
110 }