Merge "Terminate SLAVE task before sending role change"
[openflowplugin.git] / applications / topology-manager / src / test / java / org / opendaylight / openflowplugin / applications / topology / manager / FlowCapableTopologyProviderTest.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.applications.topology.manager;
10
11 import static org.mockito.Mockito.doReturn;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.verify;
14 import static org.mockito.Mockito.when;
15
16 import com.google.common.base.Optional;
17 import com.google.common.collect.ClassToInstanceMap;
18 import com.google.common.util.concurrent.Futures;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.mockito.Matchers;
23 import org.mockito.Mock;
24 import org.mockito.invocation.InvocationOnMock;
25 import org.mockito.runners.MockitoJUnitRunner;
26 import org.mockito.stubbing.Answer;
27 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
28 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
29 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
30 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
31 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
32 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
33 import org.opendaylight.controller.sal.binding.api.BindingAwareService;
34 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
35 import org.opendaylight.controller.sal.binding.api.NotificationProviderService.NotificationInterestListener;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
37 import org.opendaylight.yangtools.concepts.ListenerRegistration;
38 import org.opendaylight.yangtools.yang.binding.DataObject;
39 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
40 import org.opendaylight.yangtools.yang.binding.NotificationListener;
41
42 /**
43  * Test for {@link FlowCapableTopologyProvider}.
44  */
45 @RunWith(MockitoJUnitRunner.class)
46 public class FlowCapableTopologyProviderTest {
47
48     private FlowCapableTopologyProvider provider;
49
50     @Mock
51     private BindingAwareBroker.ProviderContext providerContext;
52     @Mock
53     private DataBroker dataBroker;
54     @Mock
55     private NotificationProviderService notificationProviderService;
56     @Mock
57     private BindingAwareProvider bindingAwareProvider;
58     @Mock
59     private ClassToInstanceMap<BindingAwareService> serviceProvider;
60     @Mock
61     private BindingAwareService bindingAwareService;
62     @Mock
63     private Node mockNode;
64     @Mock
65     private ReadOnlyTransaction rTx;
66     @Mock
67     private ReadWriteTransaction wTx;
68
69     @Before
70     public void setUp() throws Exception {
71         when(providerContext.getSALService(Matchers.<Class<? extends BindingAwareService>>any()))
72         .thenAnswer(new Answer<BindingAwareService>() {
73             @Override
74             public BindingAwareService answer(InvocationOnMock invocation) throws Throwable {
75                 Object[] arguments = invocation.getArguments();
76                 if (arguments != null && arguments.length > 0 && arguments[0] != null) {
77                     if(arguments[0].equals(DataBroker.class)) {
78                         return dataBroker;
79                     } else if(arguments[0].equals(NotificationProviderService.class)){
80                         return notificationProviderService;
81                     }
82                 }
83                 return null;
84             }
85         });
86
87         doReturn(rTx).when(dataBroker).newReadOnlyTransaction();
88         doReturn(wTx).when(dataBroker).newReadWriteTransaction();
89
90         when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
91
92         OperationProcessor operationProcessor = new OperationProcessor(dataBroker);
93         provider = new FlowCapableTopologyProvider(dataBroker, notificationProviderService, operationProcessor);
94     }
95
96     @Test
97     public void testRun() throws Exception {
98         when(rTx.read(Matchers.<LogicalDatastoreType>any(), Matchers.<InstanceIdentifier<DataObject>>any()))
99                 .thenReturn(Futures.immediateCheckedFuture(Optional.of(mockNode)));
100         provider.start();
101         verify(rTx).read(Matchers.<LogicalDatastoreType>any(), Matchers.<InstanceIdentifier<DataObject>>any());
102     }
103
104     @Test
105     public void testRunWithoutTopology() throws Exception {
106         when(rTx.read(Matchers.<LogicalDatastoreType>any(), Matchers.<InstanceIdentifier<DataObject>>any()))
107                 .thenReturn(Futures.immediateCheckedFuture(Optional.absent()));
108         provider.start();
109         verify(wTx).submit();
110     }
111
112     @Test
113     public void testClose() throws Exception {
114         when(rTx.read(Matchers.<LogicalDatastoreType>any(), Matchers.<InstanceIdentifier<DataObject>>any()))
115                 .thenReturn(Futures.immediateCheckedFuture(Optional.of(mockNode)));
116
117         final ListenerRegistration<NotificationInterestListener> listenerRegistration = mock(ListenerRegistration.class);
118         doReturn(listenerRegistration).when(notificationProviderService).registerNotificationListener(Matchers.<NotificationListener>any());
119
120         provider.start();
121         provider.close();
122
123         verify(listenerRegistration).close();
124     }
125
126 }