2 * Copyright (c) ${year} Brocade Communications 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.controller.sal.restconf.impl.test;
11 import static org.junit.Assert.*;
12 import static org.mockito.Mockito.*;
14 import java.util.Collections;
16 import java.util.concurrent.Future;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.mockito.InOrder;
21 import org.mockito.Mock;
22 import org.mockito.MockitoAnnotations;
23 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
24 import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession;
25 import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
26 import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
27 import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
28 import org.opendaylight.controller.sal.core.api.mount.MountInstance;
29 import org.opendaylight.controller.sal.rest.impl.XmlToCompositeNodeProvider;
30 import org.opendaylight.controller.sal.restconf.impl.BrokerFacade;
31 import org.opendaylight.controller.sal.restconf.impl.ResponseException;
32 import org.opendaylight.controller.sal.streams.listeners.ListenerAdapter;
33 import org.opendaylight.controller.sal.streams.listeners.Notificator;
34 import org.opendaylight.yangtools.concepts.ListenerRegistration;
35 import org.opendaylight.yangtools.yang.common.QName;
36 import org.opendaylight.yangtools.yang.common.RpcResult;
37 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
38 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
40 import com.google.common.collect.ImmutableMap;
41 import com.google.common.util.concurrent.Futures;
44 * Unit tests for BrokerFacade.
46 * @author Thomas Pantelis
48 public class BrokerFacadeTest {
51 DataBrokerService dataBroker;
54 DataModificationTransaction mockTransaction;
57 ConsumerSession mockConsumerSession;
60 MountInstance mockMountInstance;
62 BrokerFacade brokerFacade = BrokerFacade.getInstance();
64 CompositeNode dataNode = TestUtils.readInputToCnSn( "/parts/ietf-interfaces_interfaces.xml",
65 XmlToCompositeNodeProvider.INSTANCE );
67 QName qname = QName.create( "node" );
69 InstanceIdentifier instanceID = InstanceIdentifier.builder().node( qname ).toInstance();
72 public void setUp() throws Exception {
73 MockitoAnnotations.initMocks( this );
75 brokerFacade.setDataService( dataBroker );
76 brokerFacade.setContext( mockConsumerSession );
80 public void testReadConfigurationData() {
81 when( dataBroker.readConfigurationData( instanceID ) ).thenReturn( dataNode );
83 CompositeNode actualNode = brokerFacade.readConfigurationData( instanceID );
85 assertSame( "readConfigurationData", dataNode, actualNode );
89 public void testReadConfigurationDataBehindMountPoint() {
90 when( mockMountInstance.readConfigurationData( instanceID ) ).thenReturn( dataNode );
92 CompositeNode actualNode = brokerFacade.readConfigurationDataBehindMountPoint(
93 mockMountInstance, instanceID );
95 assertSame( "readConfigurationDataBehindMountPoint", dataNode, actualNode );
99 public void testReadOperationalData() {
100 when( dataBroker.readOperationalData( instanceID ) ).thenReturn( dataNode );
102 CompositeNode actualNode = brokerFacade.readOperationalData( instanceID );
104 assertSame( "readOperationalData", dataNode, actualNode );
108 public void testReadOperationalDataBehindMountPoint() {
109 when( mockMountInstance.readOperationalData( instanceID ) ).thenReturn( dataNode );
111 CompositeNode actualNode = brokerFacade.readOperationalDataBehindMountPoint(
112 mockMountInstance, instanceID );
114 assertSame( "readOperationalDataBehindMountPoint", dataNode, actualNode );
117 @Test(expected=ResponseException.class)
118 public void testReadOperationalDataWithNoDataBroker() {
119 brokerFacade.setDataService( null );
121 brokerFacade.readOperationalData( instanceID );
124 @SuppressWarnings("unchecked")
126 public void testInvokeRpc() {
127 RpcResult<CompositeNode> expResult = mock( RpcResult.class );
128 Future<RpcResult<CompositeNode>> future = Futures.immediateFuture( expResult );
129 when( mockConsumerSession.rpc( qname, dataNode ) ).thenReturn( future );
131 RpcResult<CompositeNode> actualResult = brokerFacade.invokeRpc( qname, dataNode );
133 assertSame( "invokeRpc", expResult, actualResult );
136 @Test(expected=ResponseException.class)
137 public void testInvokeRpcWithException() {
138 Exception mockEx = new Exception( "mock" );
139 Future<RpcResult<CompositeNode>> future = Futures.immediateFailedFuture( mockEx );
140 when( mockConsumerSession.rpc( qname, dataNode ) ).thenReturn( future );
142 brokerFacade.invokeRpc( qname, dataNode );
145 @Test(expected=ResponseException.class)
146 public void testInvokeRpcWithNoConsumerSession() {
147 brokerFacade.setContext( null );
149 brokerFacade.invokeRpc( qname, dataNode );
153 public void testCommitConfigurationDataPut() {
154 Future<RpcResult<TransactionStatus>> expFuture = Futures.immediateFuture( null );
156 when( dataBroker.beginTransaction() ).thenReturn( mockTransaction );
157 mockTransaction.putConfigurationData( instanceID, dataNode );
158 when( mockTransaction.commit() ).thenReturn( expFuture );
160 Future<RpcResult<TransactionStatus>> actualFuture =
161 brokerFacade.commitConfigurationDataPut( instanceID, dataNode );
163 assertSame( "invokeRpc", expFuture, actualFuture );
165 InOrder inOrder = inOrder( dataBroker, mockTransaction );
166 inOrder.verify( dataBroker ).beginTransaction();
167 inOrder.verify( mockTransaction ).putConfigurationData( instanceID, dataNode );
168 inOrder.verify( mockTransaction ).commit();
172 public void testCommitConfigurationDataPutBehindMountPoint() {
173 Future<RpcResult<TransactionStatus>> expFuture = Futures.immediateFuture( null );
175 when( mockMountInstance.beginTransaction() ).thenReturn( mockTransaction );
176 mockTransaction.putConfigurationData( instanceID, dataNode );
177 when( mockTransaction.commit() ).thenReturn( expFuture );
179 Future<RpcResult<TransactionStatus>> actualFuture =
180 brokerFacade.commitConfigurationDataPutBehindMountPoint(
181 mockMountInstance, instanceID, dataNode );
183 assertSame( "invokeRpc", expFuture, actualFuture );
185 InOrder inOrder = inOrder( mockMountInstance, mockTransaction );
186 inOrder.verify( mockMountInstance ).beginTransaction();
187 inOrder.verify( mockTransaction ).putConfigurationData( instanceID, dataNode );
188 inOrder.verify( mockTransaction ).commit();
192 public void testCommitConfigurationDataPost() {
193 Future<RpcResult<TransactionStatus>> expFuture = Futures.immediateFuture( null );
195 Map<InstanceIdentifier, CompositeNode> nodeMap =
196 new ImmutableMap.Builder<InstanceIdentifier,CompositeNode>()
197 .put( instanceID, dataNode ).build();
199 when( dataBroker.beginTransaction() ).thenReturn( mockTransaction );
200 mockTransaction.putConfigurationData( instanceID, dataNode );
201 when( mockTransaction.getCreatedConfigurationData() ).thenReturn( nodeMap );
202 when( mockTransaction.commit() ).thenReturn( expFuture );
204 Future<RpcResult<TransactionStatus>> actualFuture =
205 brokerFacade.commitConfigurationDataPost( instanceID, dataNode );
207 assertSame( "commitConfigurationDataPut", expFuture, actualFuture );
209 InOrder inOrder = inOrder( dataBroker, mockTransaction );
210 inOrder.verify( dataBroker ).beginTransaction();
211 inOrder.verify( mockTransaction ).putConfigurationData( instanceID, dataNode );
212 inOrder.verify( mockTransaction ).commit();
216 public void testCommitConfigurationDataPostAlreadyExists() {
217 when( dataBroker.beginTransaction() ).thenReturn( mockTransaction );
218 mockTransaction.putConfigurationData( instanceID, dataNode );
219 when( mockTransaction.getCreatedConfigurationData() )
220 .thenReturn( Collections.<InstanceIdentifier,CompositeNode>emptyMap() );
222 Future<RpcResult<TransactionStatus>> actualFuture =
223 brokerFacade.commitConfigurationDataPost( instanceID, dataNode );
225 assertNull( "Retruned non-null Future", actualFuture );
226 verify( mockTransaction, never() ).commit();
230 public void testCommitConfigurationDataPostBehindMountPoint() {
231 Future<RpcResult<TransactionStatus>> expFuture = Futures.immediateFuture( null );
233 Map<InstanceIdentifier, CompositeNode> nodeMap =
234 new ImmutableMap.Builder<InstanceIdentifier,CompositeNode>()
235 .put( instanceID, dataNode ).build();
237 when( mockMountInstance.beginTransaction() ).thenReturn( mockTransaction );
238 mockTransaction.putConfigurationData( instanceID, dataNode );
239 when( mockTransaction.getCreatedConfigurationData() ).thenReturn( nodeMap );
240 when( mockTransaction.commit() ).thenReturn( expFuture );
242 Future<RpcResult<TransactionStatus>> actualFuture =
243 brokerFacade.commitConfigurationDataPostBehindMountPoint( mockMountInstance,
244 instanceID, dataNode );
246 assertSame( "commitConfigurationDataPostBehindMountPoint", expFuture, actualFuture );
248 InOrder inOrder = inOrder( mockMountInstance, mockTransaction );
249 inOrder.verify( mockMountInstance ).beginTransaction();
250 inOrder.verify( mockTransaction ).putConfigurationData( instanceID, dataNode );
251 inOrder.verify( mockTransaction ).commit();
255 public void testCommitConfigurationDataPostBehindMountPointAlreadyExists() {
257 when( mockMountInstance.beginTransaction() ).thenReturn( mockTransaction );
258 mockTransaction.putConfigurationData( instanceID, dataNode );
259 when( mockTransaction.getCreatedConfigurationData() )
260 .thenReturn( Collections.<InstanceIdentifier,CompositeNode>emptyMap() );
262 Future<RpcResult<TransactionStatus>> actualFuture =
263 brokerFacade.commitConfigurationDataPostBehindMountPoint( mockMountInstance,
264 instanceID, dataNode );
266 assertNull( "Retruned non-null Future", actualFuture );
267 verify( mockTransaction, never() ).commit();
271 public void testCommitConfigurationDataDelete() {
272 Future<RpcResult<TransactionStatus>> expFuture = Futures.immediateFuture( null );
274 when( dataBroker.beginTransaction() ).thenReturn( mockTransaction );
275 mockTransaction.removeConfigurationData( instanceID );
276 when( mockTransaction.commit() ).thenReturn( expFuture );
278 Future<RpcResult<TransactionStatus>> actualFuture =
279 brokerFacade.commitConfigurationDataDelete( instanceID );
281 assertSame( "commitConfigurationDataDelete", expFuture, actualFuture );
283 InOrder inOrder = inOrder( dataBroker, mockTransaction );
284 inOrder.verify( dataBroker ).beginTransaction();
285 inOrder.verify( mockTransaction ).removeConfigurationData( instanceID );
286 inOrder.verify( mockTransaction ).commit();
290 public void testCommitConfigurationDataDeleteBehindMountPoint() {
291 Future<RpcResult<TransactionStatus>> expFuture = Futures.immediateFuture( null );
293 when( mockMountInstance.beginTransaction() ).thenReturn( mockTransaction );
294 mockTransaction.removeConfigurationData( instanceID );
295 when( mockTransaction.commit() ).thenReturn( expFuture );
297 Future<RpcResult<TransactionStatus>> actualFuture =
298 brokerFacade.commitConfigurationDataDeleteBehindMountPoint(
299 mockMountInstance, instanceID );
301 assertSame( "commitConfigurationDataDeleteBehindMountPoint", expFuture, actualFuture );
303 InOrder inOrder = inOrder( mockMountInstance, mockTransaction );
304 inOrder.verify( mockMountInstance ).beginTransaction();
305 inOrder.verify( mockTransaction ).removeConfigurationData( instanceID );
306 inOrder.verify( mockTransaction ).commit();
309 @SuppressWarnings("unchecked")
311 public void testRegisterToListenDataChanges() {
312 ListenerAdapter listener = Notificator.createListener( instanceID, "stream" );
314 ListenerRegistration<DataChangeListener> mockRegistration = mock( ListenerRegistration.class );
315 when( dataBroker.registerDataChangeListener( instanceID, listener ) )
316 .thenReturn( mockRegistration );
318 brokerFacade.registerToListenDataChanges( listener );
320 verify( dataBroker ).registerDataChangeListener( instanceID, listener );
322 assertEquals( "isListening", true, listener.isListening() );
324 brokerFacade.registerToListenDataChanges( listener );
325 verifyNoMoreInteractions( dataBroker );