Reduce the use of AttrBuilders
[netconf.git] / restconf / restconf-nb-bierman02 / src / test / java / org / opendaylight / controller / sal / restconf / impl / test / BrokerFacadeTest.java
index 31ebb4cbdc6f5f37a1cd536fd9de81260fedc2bb..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,35 +22,37 @@ 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.HashMap;
-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.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.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier;
-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.PutResult;
@@ -94,16 +95,15 @@ 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 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();
@@ -121,18 +121,16 @@ public class BrokerFacadeTest {
         when(this.domDataBroker.newReadOnlyTransaction()).thenReturn(this.readTransaction);
         when(this.domDataBroker.newWriteOnlyTransaction()).thenReturn(this.writeTransaction);
         when(this.domDataBroker.newReadWriteTransaction()).thenReturn(this.rwTransaction);
-        HashMap extensions = new HashMap();
-        extensions.put(DOMDataTreeChangeService.class, Mockito.mock(DOMDataTreeChangeService.class));
-        when(this.domDataBroker.getSupportedExtensions()).thenReturn(extensions);
+        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);
     }
 
     /**
@@ -170,8 +168,7 @@ public class BrokerFacadeTest {
                 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");
@@ -187,11 +184,9 @@ 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);
@@ -199,57 +194,45 @@ public class BrokerFacadeTest {
 
     @Test
     public void testCommitConfigurationDataPut() throws Exception {
-        @SuppressWarnings("unchecked")
-        final CheckedFuture<Void, TransactionCommitFailedException> expFuture = mock(CheckedFuture.class);
-        when(this.rwTransaction.submit()).thenReturn(expFuture);
+        doReturn(CommitInfo.emptyFluentFuture()).when(this.rwTransaction).commit();
 
-        final Optional<NormalizedNode<?, ?>> optionalMock = mock(Optional.class);
-        when(optionalMock.get()).thenReturn(null);
-
-        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,
@@ -269,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();
     }
 
     /**
@@ -313,7 +294,7 @@ 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
@@ -324,8 +305,8 @@ public class BrokerFacadeTest {
         @SuppressWarnings("unchecked")
         final ListenerRegistration<ListenerAdapter> mockRegistration = mock(ListenerRegistration.class);
 
-        DOMDataTreeChangeService changeService = (DOMDataTreeChangeService)
-                this.domDataBroker.getSupportedExtensions().get(DOMDataTreeChangeService.class);
+        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);
 
@@ -370,9 +351,8 @@ 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);
         // close and remove test notification listener
         listener.close();
@@ -383,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);
 
@@ -407,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);
 
@@ -436,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);