1 package org.opendaylight.openflowplugin.impl.services;
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;
26 import java.math.BigInteger;
27 import java.util.concurrent.ExecutionException;
28 import java.util.concurrent.Future;
30 import static org.mockito.Mockito.mock;
31 import static org.mockito.Mockito.when;
33 @RunWith(MockitoJUnitRunner.class)
34 public class SalFlowServiceImplTest extends TestCase {
36 private static final BigInteger DUMMY_DATAPATH_ID = new BigInteger("444");
37 private static final Short DUMMY_VERSION = OFConstants.OFP_VERSION_1_3;
40 RequestContextStack mockedRequestContextStack;
42 DeviceContext mockedDeviceContext;
44 ConnectionContext mockedPrimConnectionContext;
46 FeaturesReply mockedFeatures;
48 ConnectionAdapter mockedConnectionAdapter;
50 MessageSpy mockedMessagSpy;
54 public void initialization() {
55 when(mockedFeatures.getDatapathId()).thenReturn(DUMMY_DATAPATH_ID);
56 when(mockedFeatures.getVersion()).thenReturn(DUMMY_VERSION);
58 when(mockedPrimConnectionContext.getFeatures()).thenReturn(mockedFeatures);
59 when(mockedPrimConnectionContext.getConnectionAdapter()).thenReturn(mockedConnectionAdapter);
61 when(mockedDeviceContext.getPrimaryConnectionContext()).thenReturn(mockedPrimConnectionContext);
63 when(mockedDeviceContext.getMessageSpy()).thenReturn(mockedMessagSpy);
64 when(mockedDeviceContext.getDeviceFlowRegistry()).thenReturn(new DeviceFlowRegistryImpl());
68 public void testAddFlow() throws Exception {
69 final SalFlowServiceImpl salFlowService = new SalFlowServiceImpl(mockedRequestContextStack, mockedDeviceContext);
71 AddFlowInput mockedAddFlowInput = mock(AddFlowInput.class);
72 when(mockedAddFlowInput.getMatch()).thenReturn(mock(Match.class));
74 verifyOutput(salFlowService.addFlow(mockedAddFlowInput));
78 public void testRemoveFlow() throws Exception {
79 final SalFlowServiceImpl salFlowService = new SalFlowServiceImpl(mockedRequestContextStack, mockedDeviceContext);
81 RemoveFlowInput mockedRemoveFlowInput = mock(RemoveFlowInput.class);
82 verifyOutput(salFlowService.removeFlow(mockedRemoveFlowInput));
86 public void testUpdateFlow() throws Exception {
87 final SalFlowServiceImpl salFlowService = new SalFlowServiceImpl(mockedRequestContextStack, mockedDeviceContext);
89 UpdateFlowInput mockedUpdateFlowInput = mock(UpdateFlowInput.class);
92 UpdatedFlow mockedUpdateFlow = mock(UpdatedFlow.class);
93 when(mockedUpdateFlow.getMatch()).thenReturn(mock(Match.class));
94 when(mockedUpdateFlowInput.getUpdatedFlow()).thenReturn(mockedUpdateFlow);
97 OriginalFlow mockedOriginalFlow = mock(OriginalFlow.class);
98 when(mockedOriginalFlow.getMatch()).thenReturn(mock(Match.class));
99 when(mockedUpdateFlowInput.getOriginalFlow()).thenReturn(mockedOriginalFlow);
101 verifyOutput(salFlowService.updateFlow(mockedUpdateFlowInput));
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());