Reduce the use of AttrBuilders
[netconf.git] / restconf / restconf-nb-bierman02 / src / test / java / org / opendaylight / controller / sal / restconf / impl / test / BrokerFacadeTest.java
index 8f68f91622fc72bfa8e8b8ede97bdb8929bc4a9c..aa49c0bdc1588fb7cd2f3379a7f736879fa52cb4 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.controller.sal.restconf.impl.test;
 
 import static org.junit.Assert.assertEquals;
@@ -14,8 +13,8 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
@@ -23,48 +22,51 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateBooleanFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateTrueFluentFuture;
 
-import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.Futures;
-import java.util.concurrent.Future;
+import com.google.common.util.concurrent.FluentFuture;
+import java.util.ArrayList;
+import java.util.Optional;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.InOrder;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcException;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
-import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.common.api.ReadFailedException;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMNotificationService;
+import org.opendaylight.mdsal.dom.api.DOMRpcResult;
+import org.opendaylight.mdsal.dom.api.DOMRpcService;
+import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade;
 import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
-import org.opendaylight.netconf.sal.restconf.impl.PatchContext;
-import org.opendaylight.netconf.sal.restconf.impl.PatchStatusContext;
 import org.opendaylight.netconf.sal.restconf.impl.PutResult;
-import org.opendaylight.netconf.sal.restconf.impl.RestconfDocumentedException;
-import org.opendaylight.netconf.sal.restconf.impl.RestconfError;
-import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorTag;
-import org.opendaylight.netconf.sal.restconf.impl.RestconfError.ErrorType;
 import org.opendaylight.netconf.sal.streams.listeners.ListenerAdapter;
 import org.opendaylight.netconf.sal.streams.listeners.NotificationListenerAdapter;
 import org.opendaylight.netconf.sal.streams.listeners.Notificator;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
-import org.opendaylight.restconf.handlers.SchemaContextHandler;
-import org.opendaylight.restconf.handlers.TransactionChainHandler;
+import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
+import org.opendaylight.restconf.common.errors.RestconfError;
+import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag;
+import org.opendaylight.restconf.common.errors.RestconfError.ErrorType;
+import org.opendaylight.restconf.common.patch.PatchContext;
+import org.opendaylight.restconf.common.patch.PatchStatusContext;
+import org.opendaylight.restconf.common.util.DataChangeScope;
 import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -93,40 +95,42 @@ public class BrokerFacadeTest {
     @Mock
     private DOMMountPoint mockMountInstance;
     @Mock
-    private DOMDataReadOnlyTransaction readTransaction;
+    private DOMDataTreeReadTransaction readTransaction;
     @Mock
-    private DOMDataWriteTransaction writeTransaction;
+    private DOMDataTreeWriteTransaction writeTransaction;
     @Mock
-    private DOMDataReadWriteTransaction rwTransaction;
+    private DOMDataTreeReadWriteTransaction rwTransaction;
 
-    private final BrokerFacade brokerFacade = BrokerFacade.getInstance();
+    private BrokerFacade brokerFacade;
     private final NormalizedNode<?, ?> dummyNode = createDummyNode("test:module", "2014-01-09", "interfaces");
-    private final CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> dummyNodeInFuture =
-            wrapDummyNode(this.dummyNode);
+    private final FluentFuture<Optional<NormalizedNode<?, ?>>> dummyNodeInFuture = wrapDummyNode(this.dummyNode);
     private final QName qname = TestUtils.buildQName("interfaces","test:module", "2014-01-09");
     private final SchemaPath type = SchemaPath.create(true, this.qname);
     private final YangInstanceIdentifier instanceID = YangInstanceIdentifier.builder().node(this.qname).build();
+    private ControllerContext controllerContext;
 
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        this.brokerFacade.setDomDataBroker(this.domDataBroker);
-        this.brokerFacade.setDomNotificationService(this.domNotification);
-        this.brokerFacade.setRpcService(this.mockRpcService);
+
+        controllerContext = TestRestconfUtils.newControllerContext(
+                TestUtils.loadSchemaContext("/full-versions/test-module", "/modules"));
+
+        brokerFacade = BrokerFacade.newInstance(mockRpcService, domDataBroker, domNotification, controllerContext);
+
         when(this.domDataBroker.newReadOnlyTransaction()).thenReturn(this.readTransaction);
         when(this.domDataBroker.newWriteOnlyTransaction()).thenReturn(this.writeTransaction);
         when(this.domDataBroker.newReadWriteTransaction()).thenReturn(this.rwTransaction);
-
-        ControllerContext.getInstance().setSchemas(TestUtils.loadSchemaContext("/full-versions/test-module"));
+        when(this.domDataBroker.getExtensions()).thenReturn(ImmutableClassToInstanceMap.of(
+            DOMDataTreeChangeService.class, Mockito.mock(DOMDataTreeChangeService.class)));
     }
 
-    private static CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> wrapDummyNode(
-            final NormalizedNode<?, ?> dummyNode) {
-        return Futures.immediateCheckedFuture(Optional.<NormalizedNode<?, ?>>of(dummyNode));
+    private static FluentFuture<Optional<NormalizedNode<?, ?>>> wrapDummyNode(final NormalizedNode<?, ?> dummyNode) {
+        return immediateFluentFuture(Optional.of(dummyNode));
     }
 
-    private static CheckedFuture<Boolean, ReadFailedException> wrapExistence(final Boolean exists) {
-        return Futures.immediateCheckedFuture(exists);
+    private static FluentFuture<Boolean> wrapExistence(final boolean exists) {
+        return immediateBooleanFluentFuture(exists);
     }
 
     /**
@@ -158,21 +162,13 @@ public class BrokerFacadeTest {
         assertSame("readOperationalData", this.dummyNode, actualNode);
     }
 
-    @Test(expected = RestconfDocumentedException.class)
-    public void testReadOperationalDataWithNoDataBroker() {
-        this.brokerFacade.setDomDataBroker(null);
-
-        this.brokerFacade.readOperationalData(this.instanceID);
-    }
-
     @Test
     public void test503() throws Exception {
         final RpcError error = RpcResultBuilder.newError(
                 RpcError.ErrorType.TRANSPORT,
                 ErrorTag.RESOURCE_DENIED.getTagValue(),
                 "Master is down. Please try again.");
-        final ReadFailedException exception503 = new ReadFailedException("Read from transaction failed", error);
-        doReturn(Futures.immediateFailedCheckedFuture(exception503))
+        doReturn(immediateFailedFluentFuture(new ReadFailedException("Read from transaction failed", error)))
                 .when(readTransaction).read(any(LogicalDatastoreType.class), any(YangInstanceIdentifier.class));
         try {
             brokerFacade.readConfigurationData(this.instanceID, "explicit");
@@ -188,75 +184,55 @@ public class BrokerFacadeTest {
     @Test
     public void testInvokeRpc() throws Exception {
         final DOMRpcResult expResult = mock(DOMRpcResult.class);
-        final CheckedFuture<DOMRpcResult, DOMRpcException> future = Futures.immediateCheckedFuture(expResult);
-        when(this.mockRpcService.invokeRpc(this.type, this.dummyNode)).thenReturn(future);
+        doReturn(immediateFluentFuture(expResult)).when(this.mockRpcService).invokeRpc(this.type, this.dummyNode);
 
-        final CheckedFuture<DOMRpcResult, DOMRpcException> actualFuture = this.brokerFacade
-                .invokeRpc(this.type, this.dummyNode);
+        final FluentFuture<DOMRpcResult> actualFuture = this.brokerFacade.invokeRpc(this.type, this.dummyNode);
         assertNotNull("Future is null", actualFuture);
         final DOMRpcResult actualResult = actualFuture.get();
         assertSame("invokeRpc", expResult, actualResult);
     }
 
-    @Test(expected = RestconfDocumentedException.class)
-    public void testInvokeRpcWithNoConsumerSession() {
-        brokerFacade.setDomDataBroker(null);
-        this.brokerFacade.invokeRpc(this.type, this.dummyNode);
-    }
-
     @Test
     public void testCommitConfigurationDataPut() throws Exception {
-        @SuppressWarnings("unchecked")
-        final CheckedFuture<Void, TransactionCommitFailedException> expFuture = mock(CheckedFuture.class);
-        when(this.rwTransaction.submit()).thenReturn(expFuture);
-
-        final Optional<NormalizedNode<?, ?>> optionalMock = mock(Optional.class);
-        when(optionalMock.get()).thenReturn(null);
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit();
 
-        final CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> readFuture = Futures
-                .immediateCheckedFuture(optionalMock);
-        when(this.rwTransaction.read(LogicalDatastoreType.CONFIGURATION, this.instanceID)).thenReturn(readFuture);
+        doReturn(immediateFluentFuture(Optional.of(mock(NormalizedNode.class)))).when(this.rwTransaction)
+        .read(LogicalDatastoreType.CONFIGURATION, this.instanceID);
 
         final PutResult result = this.brokerFacade.commitConfigurationDataPut(mock(SchemaContext.class),
                 this.instanceID, this.dummyNode, null, null);
 
-        final Future<Void> actualFuture = result.getFutureOfPutData();
-
-        assertSame("commitConfigurationDataPut", expFuture, actualFuture);
+        assertSame("commitConfigurationDataPut", CommitInfo.emptyFluentFuture(), result.getFutureOfPutData());
 
         final InOrder inOrder = inOrder(this.domDataBroker, this.rwTransaction);
         inOrder.verify(this.domDataBroker).newReadWriteTransaction();
         inOrder.verify(this.rwTransaction).put(LogicalDatastoreType.CONFIGURATION, this.instanceID, this.dummyNode);
-        inOrder.verify(this.rwTransaction).submit();
+        inOrder.verify(this.rwTransaction).commit();
     }
 
     @Test
     public void testCommitConfigurationDataPost() {
-        @SuppressWarnings("unchecked")
-        final CheckedFuture<Void, TransactionCommitFailedException> expFuture = mock(CheckedFuture.class);
-
         when(this.rwTransaction.exists(LogicalDatastoreType.CONFIGURATION, this.instanceID))
                 .thenReturn(wrapExistence(false));
 
-        when(this.rwTransaction.submit()).thenReturn(expFuture);
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit();
 
-        final CheckedFuture<Void, TransactionCommitFailedException> actualFuture = this.brokerFacade
+        final FluentFuture<? extends CommitInfo> actualFuture = this.brokerFacade
                 .commitConfigurationDataPost(mock(SchemaContext.class), this.instanceID, this.dummyNode, null, null);
 
-        assertSame("commitConfigurationDataPost", expFuture, actualFuture);
+        assertSame("commitConfigurationDataPost", CommitInfo.emptyFluentFuture(), actualFuture);
 
         final InOrder inOrder = inOrder(this.domDataBroker, this.rwTransaction);
         inOrder.verify(this.domDataBroker).newReadWriteTransaction();
         inOrder.verify(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION, this.instanceID);
         inOrder.verify(this.rwTransaction).put(LogicalDatastoreType.CONFIGURATION, this.instanceID, this.dummyNode);
-        inOrder.verify(this.rwTransaction).submit();
+        inOrder.verify(this.rwTransaction).commit();
     }
 
     @Test(expected = RestconfDocumentedException.class)
     public void testCommitConfigurationDataPostAlreadyExists() {
-        final CheckedFuture<Boolean, ReadFailedException> successFuture = Futures.immediateCheckedFuture(Boolean.TRUE);
         when(this.rwTransaction.exists(eq(LogicalDatastoreType.CONFIGURATION), any(YangInstanceIdentifier.class)))
-                .thenReturn(successFuture);
+                .thenReturn(immediateTrueFluentFuture());
         try {
             // Schema context is only necessary for ensuring parent structure
             this.brokerFacade.commitConfigurationDataPost((SchemaContext) null, this.instanceID, this.dummyNode, null,
@@ -276,22 +252,20 @@ public class BrokerFacadeTest {
         prepareDataForDelete(true);
 
         // expected result
-        @SuppressWarnings("unchecked")
-        final CheckedFuture<Void, TransactionCommitFailedException> expFuture = mock(CheckedFuture.class);
-        when(this.rwTransaction.submit()).thenReturn(expFuture);
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit();
 
         // test
-        final CheckedFuture<Void, TransactionCommitFailedException> actualFuture = this.brokerFacade
+        final FluentFuture<? extends CommitInfo> actualFuture = this.brokerFacade
                 .commitConfigurationDataDelete(this.instanceID);
 
         // verify result and interactions
-        assertSame("commitConfigurationDataDelete", expFuture, actualFuture);
+        assertSame("commitConfigurationDataDelete", CommitInfo.emptyFluentFuture(), actualFuture);
 
         // check exists, delete, submit
         final InOrder inOrder = inOrder(this.domDataBroker, this.rwTransaction);
         inOrder.verify(this.rwTransaction).exists(LogicalDatastoreType.CONFIGURATION, this.instanceID);
         inOrder.verify(this.rwTransaction).delete(LogicalDatastoreType.CONFIGURATION, this.instanceID);
-        inOrder.verify(this.rwTransaction).submit();
+        inOrder.verify(this.rwTransaction).commit();
     }
 
     /**
@@ -320,31 +294,32 @@ public class BrokerFacadeTest {
      */
     private void prepareDataForDelete(final boolean assumeDataExists) {
         when(this.rwTransaction.exists(LogicalDatastoreType.CONFIGURATION, this.instanceID))
-                .thenReturn(Futures.immediateCheckedFuture(new Boolean(assumeDataExists)));
+                .thenReturn(immediateBooleanFluentFuture(assumeDataExists));
     }
 
     @Test
     public void testRegisterToListenDataChanges() {
         final ListenerAdapter listener = Notificator.createListener(this.instanceID, "stream",
-                NotificationOutputType.XML);
+                NotificationOutputType.XML, controllerContext);
 
         @SuppressWarnings("unchecked")
-        final ListenerRegistration<DOMDataChangeListener> mockRegistration = mock(ListenerRegistration.class);
+        final ListenerRegistration<ListenerAdapter> mockRegistration = mock(ListenerRegistration.class);
 
-        when(this.domDataBroker.registerDataChangeListener(any(LogicalDatastoreType.class), eq(this.instanceID),
-                eq(listener), eq(DataChangeScope.BASE))).thenReturn(mockRegistration);
+        DOMDataTreeChangeService changeService = this.domDataBroker.getExtensions()
+                .getInstance(DOMDataTreeChangeService.class);
+        DOMDataTreeIdentifier loc = new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, this.instanceID);
+        when(changeService.registerDataTreeChangeListener(eq(loc), eq(listener))).thenReturn(mockRegistration);
 
         this.brokerFacade.registerToListenDataChanges(
                 LogicalDatastoreType.CONFIGURATION, DataChangeScope.BASE, listener);
 
-        verify(this.domDataBroker).registerDataChangeListener(
-                LogicalDatastoreType.CONFIGURATION, this.instanceID, listener, DataChangeScope.BASE);
+        verify(changeService).registerDataTreeChangeListener(loc, listener);
 
         assertEquals("isListening", true, listener.isListening());
 
         this.brokerFacade.registerToListenDataChanges(
                 LogicalDatastoreType.CONFIGURATION, DataChangeScope.BASE, listener);
-        verifyNoMoreInteractions(this.domDataBroker);
+        verifyNoMoreInteractions(changeService);
     }
 
     /**
@@ -356,7 +331,7 @@ public class BrokerFacadeTest {
         final String identifier = "create-notification-stream/toaster:toastDone";
         final SchemaPath path = SchemaPath.create(true,
                 QName.create("http://netconfcentral.org/ns/toaster", "2009-11-20", "toastDone"));
-        Notificator.createNotificationListener(Lists.newArrayList(path), identifier, "XML");
+        Notificator.createNotificationListener(Lists.newArrayList(path), identifier, "XML", controllerContext);
         final NotificationListenerAdapter listener = Notificator.getNotificationListenerFor(identifier).get(0);
 
         // mock registration
@@ -376,15 +351,9 @@ public class BrokerFacadeTest {
         verify(this.domNotification, times(1)).registerNotificationListener(listener, listener.getSchemaPath());
 
         final DOMTransactionChain transactionChain = mock(DOMTransactionChain.class);
-        final DOMDataWriteTransaction wTx = mock(DOMDataWriteTransaction.class);
-        final CheckedFuture<Void, TransactionCommitFailedException> checked = Futures.immediateCheckedFuture(null);
-        when(wTx.submit()).thenReturn(checked);
+        final DOMDataTreeWriteTransaction wTx = mock(DOMDataTreeWriteTransaction.class);
+        doReturn(CommitInfo.emptyFluentFuture()).when(wTx).commit();
         when(transactionChain.newWriteOnlyTransaction()).thenReturn(wTx);
-        final TransactionChainHandler transactionChainHandler = new TransactionChainHandler(transactionChain);
-        final SchemaContextHandler schemaHandler = Mockito.mock(SchemaContextHandler.class);
-        final SchemaContext schCtx = TestUtils.loadSchemaContext("/modules");
-        when(schemaHandler.get()).thenReturn(schCtx);
-        listener.setCloseVars(transactionChainHandler, schemaHandler);
         // close and remove test notification listener
         listener.close();
         Notificator.removeListenerIfNoSubscriberExists(listener);
@@ -394,19 +363,17 @@ public class BrokerFacadeTest {
      * Test Patch method on the server with no data.
      */
     @Test
-    @SuppressWarnings("unchecked")
     public void testPatchConfigurationDataWithinTransactionServer() throws Exception {
         final PatchContext patchContext = mock(PatchContext.class);
-        final InstanceIdentifierContext identifierContext = mock(InstanceIdentifierContext.class);
-        final CheckedFuture<Void, TransactionCommitFailedException> expFuture = Futures.immediateCheckedFuture(null);
+        final InstanceIdentifierContext<?> identifierContext = mock(InstanceIdentifierContext.class);
 
-        when(patchContext.getData()).thenReturn(Lists.newArrayList());
-        when(patchContext.getInstanceIdentifierContext()).thenReturn(identifierContext);
+        when(patchContext.getData()).thenReturn(new ArrayList<>());
+        doReturn(identifierContext).when(patchContext).getInstanceIdentifierContext();
 
         // no mount point
         when(identifierContext.getMountPoint()).thenReturn(null);
 
-        when(this.rwTransaction.submit()).thenReturn(expFuture);
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit();
 
         final PatchStatusContext status = this.brokerFacade.patchConfigurationDataWithinTransaction(patchContext);
 
@@ -418,23 +385,21 @@ public class BrokerFacadeTest {
      * Test Patch method on mounted device with no data.
      */
     @Test
-    @SuppressWarnings("unchecked")
     public void testPatchConfigurationDataWithinTransactionMount() throws Exception {
         final PatchContext patchContext = mock(PatchContext.class);
-        final InstanceIdentifierContext identifierContext = mock(InstanceIdentifierContext.class);
+        final InstanceIdentifierContext<?> identifierContext = mock(InstanceIdentifierContext.class);
         final DOMMountPoint mountPoint = mock(DOMMountPoint.class);
         final DOMDataBroker mountDataBroker = mock(DOMDataBroker.class);
-        final DOMDataReadWriteTransaction transaction = mock(DOMDataReadWriteTransaction.class);
-        final CheckedFuture<Void, TransactionCommitFailedException> expFuture = Futures.immediateCheckedFuture(null);
+        final DOMDataTreeReadWriteTransaction transaction = mock(DOMDataTreeReadWriteTransaction.class);
 
-        when(patchContext.getData()).thenReturn(Lists.newArrayList());
-        when(patchContext.getInstanceIdentifierContext()).thenReturn(identifierContext);
+        when(patchContext.getData()).thenReturn(new ArrayList<>());
+        doReturn(identifierContext).when(patchContext).getInstanceIdentifierContext();
 
         // return mount point with broker
         when(identifierContext.getMountPoint()).thenReturn(mountPoint);
         when(mountPoint.getService(DOMDataBroker.class)).thenReturn(Optional.of(mountDataBroker));
         when(mountDataBroker.newReadWriteTransaction()).thenReturn(transaction);
-        when(transaction.submit()).thenReturn(expFuture);
+        doReturn(CommitInfo.emptyFluentFuture()).when(transaction).commit();
 
         final PatchStatusContext status = this.brokerFacade.patchConfigurationDataWithinTransaction(patchContext);
 
@@ -447,24 +412,22 @@ public class BrokerFacadeTest {
      * Patch operation should fail with global error.
      */
     @Test
-    @SuppressWarnings("unchecked")
     public void testPatchConfigurationDataWithinTransactionMountFail() throws Exception {
         final PatchContext patchContext = mock(PatchContext.class);
-        final InstanceIdentifierContext identifierContext = mock(InstanceIdentifierContext.class);
+        final InstanceIdentifierContext<?> identifierContext = mock(InstanceIdentifierContext.class);
         final DOMMountPoint mountPoint = mock(DOMMountPoint.class);
         final DOMDataBroker mountDataBroker = mock(DOMDataBroker.class);
-        final DOMDataReadWriteTransaction transaction = mock(DOMDataReadWriteTransaction.class);
-        final CheckedFuture<Void, TransactionCommitFailedException> expFuture = Futures.immediateCheckedFuture(null);
+        final DOMDataTreeReadWriteTransaction transaction = mock(DOMDataTreeReadWriteTransaction.class);
 
-        when(patchContext.getData()).thenReturn(Lists.newArrayList());
-        when(patchContext.getInstanceIdentifierContext()).thenReturn(identifierContext);
+        when(patchContext.getData()).thenReturn(new ArrayList<>());
+        doReturn(identifierContext).when(patchContext).getInstanceIdentifierContext();
         when(identifierContext.getMountPoint()).thenReturn(mountPoint);
 
         // missing broker on mounted device
-        when(mountPoint.getService(DOMDataBroker.class)).thenReturn(Optional.absent());
+        when(mountPoint.getService(DOMDataBroker.class)).thenReturn(Optional.empty());
 
         when(mountDataBroker.newReadWriteTransaction()).thenReturn(transaction);
-        when(transaction.submit()).thenReturn(expFuture);
+        doReturn(CommitInfo.emptyFluentFuture()).when(transaction).commit();
 
         final PatchStatusContext status = this.brokerFacade.patchConfigurationDataWithinTransaction(patchContext);