2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.openflowplugin.applications.topology.manager;
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;
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;
43 * Test for {@link FlowCapableTopologyProvider}.
45 @RunWith(MockitoJUnitRunner.class)
46 public class FlowCapableTopologyProviderTest {
48 private FlowCapableTopologyProvider provider;
51 private BindingAwareBroker.ProviderContext providerContext;
53 private DataBroker dataBroker;
55 private NotificationProviderService notificationProviderService;
57 private BindingAwareProvider bindingAwareProvider;
59 private ClassToInstanceMap<BindingAwareService> serviceProvider;
61 private BindingAwareService bindingAwareService;
63 private Node mockNode;
65 private ReadOnlyTransaction rTx;
67 private ReadWriteTransaction wTx;
70 public void setUp() throws Exception {
71 when(providerContext.getSALService(Matchers.<Class<? extends BindingAwareService>>any()))
72 .thenAnswer(new Answer<BindingAwareService>() {
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)) {
79 } else if(arguments[0].equals(NotificationProviderService.class)){
80 return notificationProviderService;
87 doReturn(rTx).when(dataBroker).newReadOnlyTransaction();
88 doReturn(wTx).when(dataBroker).newReadWriteTransaction();
90 when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
92 OperationProcessor operationProcessor = new OperationProcessor(dataBroker);
93 provider = new FlowCapableTopologyProvider(dataBroker, notificationProviderService, operationProcessor);
97 public void testRun() throws Exception {
98 when(rTx.read(Matchers.<LogicalDatastoreType>any(), Matchers.<InstanceIdentifier<DataObject>>any()))
99 .thenReturn(Futures.immediateCheckedFuture(Optional.of(mockNode)));
101 verify(rTx).read(Matchers.<LogicalDatastoreType>any(), Matchers.<InstanceIdentifier<DataObject>>any());
105 public void testRunWithoutTopology() throws Exception {
106 when(rTx.read(Matchers.<LogicalDatastoreType>any(), Matchers.<InstanceIdentifier<DataObject>>any()))
107 .thenReturn(Futures.immediateCheckedFuture(Optional.absent()));
109 verify(wTx).submit();
113 public void testClose() throws Exception {
114 when(rTx.read(Matchers.<LogicalDatastoreType>any(), Matchers.<InstanceIdentifier<DataObject>>any()))
115 .thenReturn(Futures.immediateCheckedFuture(Optional.of(mockNode)));
117 final ListenerRegistration<NotificationInterestListener> listenerRegistration = mock(ListenerRegistration.class);
118 doReturn(listenerRegistration).when(notificationProviderService).registerNotificationListener(Matchers.<NotificationListener>any());
123 verify(listenerRegistration).close();