Bump upstreams
[lispflowmapping.git] / mappingservice / dsbackend / src / test / java / org / opendaylight / lispflowmapping / dsbackend / DataStoreBackEndTest.java
index 1eda0a2e963e198a4bfcc4997ce19b20beac7cf5..69b9a430d2890ed031fd2ddaebf6a957c39c765c 100644 (file)
@@ -9,11 +9,11 @@ package org.opendaylight.lispflowmapping.dsbackend;
 
 import static org.junit.Assert.assertEquals;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.FluentFuture;
 import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Optional;
 import javax.xml.bind.DatatypeConverter;
 import org.junit.Before;
 import org.junit.Test;
@@ -22,21 +22,19 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
-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.TransactionChain;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.ReadTransaction;
+import org.opendaylight.mdsal.binding.api.TransactionChain;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping._record.container.MappingRecordBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.authkey.container.MappingAuthkeyBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.EidUri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingDatabase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingDatabaseBuilder;
@@ -54,8 +52,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev15090
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.mapping.XtrIdMappingKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.database.VirtualNetworkIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.database.VirtualNetworkIdentifierBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.database.VirtualNetworkIdentifierKey;
+import org.opendaylight.yangtools.util.concurrent.FluentFutures;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Uint16;
 import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
@@ -64,13 +66,14 @@ import org.slf4j.LoggerFactory;
 
 @RunWith(PowerMockRunner.class)
 @PowerMockRunnerDelegate(MockitoJUnitRunner.class)
+@PowerMockIgnore({"javax.xml.datatype.*"}) // for Java 9+ compatibility, see https://github.com/powermock/powermock/issues/864
 @PrepareForTest({LoggerFactory.class})
 public class DataStoreBackEndTest {
 
     @Captor private static ArgumentCaptor<InstanceIdentifier<AuthenticationKey>> iidCaptorAuthKey;
     @Captor private static ArgumentCaptor<InstanceIdentifier<Mapping>> iidCaptorMapping;
     @Captor private static ArgumentCaptor<InstanceIdentifier<XtrIdMapping>> iidCaptorXtrIdMapping;
-    @Mock private static BindingTransactionChain txChainMock;
+    @Mock private static TransactionChain txChainMock;
     @Mock private static WriteTransaction wTxMock;
     private static DataStoreBackEnd dataStoreBackEnd;
 
@@ -96,12 +99,12 @@ public class DataStoreBackEndTest {
         PowerMockito.when(LoggerFactory.getLogger(DataStoreBackEnd.class))
                 .thenReturn(logMock);
         Mockito.when(logMock.isDebugEnabled()).thenReturn(true);
-        Mockito.when(brokerMock.createTransactionChain(Mockito.any(DataStoreBackEnd.class))).thenReturn(txChainMock);
+        Mockito.when(brokerMock.createMergingTransactionChain())
+                .thenReturn(txChainMock);
         dataStoreBackEnd = PowerMockito.spy(new DataStoreBackEnd(brokerMock));
 
         Mockito.when(txChainMock.newWriteOnlyTransaction()).thenReturn(wTxMock);
-        Mockito.when(wTxMock.submit())
-                .thenReturn(Futures.<Void, TransactionCommitFailedException>immediateCheckedFuture(null));
+        Mockito.doReturn(CommitInfo.emptyFluentFuture()).when(wTxMock).commit();
     }
 
     /**
@@ -112,8 +115,8 @@ public class DataStoreBackEndTest {
         final AuthenticationKey authenticationKey = getDefaultAuthenticationKeyBuilder().build();
 
         dataStoreBackEnd.addAuthenticationKey(authenticationKey);
-        Mockito.verify(wTxMock).put(Mockito.eq(LogicalDatastoreType.CONFIGURATION), iidCaptorAuthKey.capture(),
-                Mockito.eq(authenticationKey), Mockito.eq(true));
+        Mockito.verify(wTxMock).mergeParentStructurePut(Mockito.eq(LogicalDatastoreType.CONFIGURATION),
+                iidCaptorAuthKey.capture(), Mockito.eq(authenticationKey));
 
         // result
         AuthenticationKeyKey result = iidCaptorAuthKey.getValue().firstKeyOf(AuthenticationKey.class);
@@ -126,12 +129,14 @@ public class DataStoreBackEndTest {
     @Test
     public void addMappingTest() {
         final Mapping mapping = new MappingBuilder()
+                .withKey(new MappingKey(new EidUri(LispAddressStringifier.getURIString(EID_IPV4_1)),
+                        MappingOrigin.Northbound))
                 .setMappingRecord(getDefaultMappingRecordBuilder().build())
                 .setOrigin(MappingOrigin.Northbound).build();
 
         dataStoreBackEnd.addMapping(mapping);
-        Mockito.verify(wTxMock).put(Mockito.eq(LogicalDatastoreType.CONFIGURATION), iidCaptorMapping.capture(),
-                Mockito.eq(mapping), Mockito.eq(true));
+        Mockito.verify(wTxMock).mergeParentStructurePut(Mockito.eq(LogicalDatastoreType.CONFIGURATION),
+                iidCaptorMapping.capture(), Mockito.eq(mapping));
 
         // result
         MappingKey result = iidCaptorMapping.getValue().firstKeyOf(Mapping.class);
@@ -149,8 +154,8 @@ public class DataStoreBackEndTest {
                 .setMappingRecord(getDefaultMappingRecordBuilder().build()).build();
 
         dataStoreBackEnd.addXtrIdMapping(xtrIdMapping);
-        Mockito.verify(wTxMock).put(Mockito.eq(LogicalDatastoreType.OPERATIONAL), iidCaptorXtrIdMapping.capture(),
-                Mockito.eq(xtrIdMapping), Mockito.eq(true));
+        Mockito.verify(wTxMock).mergeParentStructurePut(Mockito.eq(LogicalDatastoreType.OPERATIONAL),
+                iidCaptorXtrIdMapping.capture(), Mockito.eq(xtrIdMapping));
 
         // result
         XtrIdMappingKey xtrIdResult = iidCaptorXtrIdMapping.getValue().firstKeyOf(XtrIdMapping.class);
@@ -182,6 +187,8 @@ public class DataStoreBackEndTest {
     @Test
     public void removeMapping() {
         final Mapping mapping = new MappingBuilder()
+                .withKey(new MappingKey(new EidUri(LispAddressStringifier.getURIString(EID_IPV4_1)),
+                        MappingOrigin.Northbound))
                 .setMappingRecord(getDefaultMappingRecordBuilder().build())
                 .setOrigin(MappingOrigin.Northbound).build();
 
@@ -223,8 +230,8 @@ public class DataStoreBackEndTest {
         final AuthenticationKey authenticationKey = getDefaultAuthenticationKeyBuilder().build();
 
         dataStoreBackEnd.updateAuthenticationKey(authenticationKey);
-        Mockito.verify(wTxMock).put(Mockito.eq(LogicalDatastoreType.CONFIGURATION), iidCaptorAuthKey.capture(),
-                Mockito.eq(authenticationKey), Mockito.eq(true));
+        Mockito.verify(wTxMock).mergeParentStructurePut(Mockito.eq(LogicalDatastoreType.CONFIGURATION),
+                iidCaptorAuthKey.capture(), Mockito.eq(authenticationKey));
 
         // result
         AuthenticationKeyKey result = iidCaptorAuthKey.getValue().firstKeyOf(AuthenticationKey.class);
@@ -237,12 +244,14 @@ public class DataStoreBackEndTest {
     @Test
     public void updateMappingTest() {
         final Mapping mapping = new MappingBuilder()
+                .withKey(new MappingKey(new EidUri(LispAddressStringifier.getURIString(EID_IPV4_1)),
+                        MappingOrigin.Northbound))
                 .setMappingRecord(getDefaultMappingRecordBuilder().build())
                 .setOrigin(MappingOrigin.Northbound).build();
 
         dataStoreBackEnd.updateMapping(mapping);
-        Mockito.verify(wTxMock).put(Mockito.eq(LogicalDatastoreType.CONFIGURATION), iidCaptorMapping.capture(),
-                Mockito.eq(mapping), Mockito.eq(true));
+        Mockito.verify(wTxMock).mergeParentStructurePut(Mockito.eq(LogicalDatastoreType.CONFIGURATION),
+                iidCaptorMapping.capture(), Mockito.eq(mapping));
 
         // result
         MappingKey result = iidCaptorMapping.getValue().firstKeyOf(Mapping.class);
@@ -254,43 +263,31 @@ public class DataStoreBackEndTest {
      * Tests {@link DataStoreBackEnd#getAllMappings} method.
      */
     @Test
-    @SuppressWarnings("unchecked")
-    public void getAllMappingsTest() throws ReadFailedException {
-        final ReadOnlyTransaction rTxMock = Mockito.mock(ReadOnlyTransaction.class);
-        final CheckedFuture<Optional<MappingDatabase>, ReadFailedException> readFutureMock
-                = Mockito.mock(CheckedFuture.class);
-        final Optional<MappingDatabase> optionalMock = Mockito.mock(Optional.class);
+    public void getAllMappingsTest() {
+        final ReadTransaction rTxMock = Mockito.mock(ReadTransaction.class);
+        final FluentFuture<Optional<MappingDatabase>> readFutureMock = FluentFutures.immediateFluentFuture(
+            Optional.of(getDefaultMappingDatabase().build()));
 
         Mockito.when(txChainMock.newReadOnlyTransaction()).thenReturn(rTxMock);
         Mockito.when(rTxMock.read(LogicalDatastoreType.CONFIGURATION, DATABASE_ROOT)).thenReturn(readFutureMock);
         Mockito.when(rTxMock.read(LogicalDatastoreType.OPERATIONAL, DATABASE_ROOT)).thenReturn(readFutureMock);
-        Mockito.when(readFutureMock.checkedGet()).thenReturn(optionalMock);
-        Mockito.when(optionalMock.isPresent()).thenReturn(true);
-        Mockito.when(optionalMock.get()).thenReturn(getDefaultMappingDatabase().build());
 
         assertEquals(8, dataStoreBackEnd.getAllMappings().size());
-        Mockito.verify(optionalMock, Mockito.times(2)).get();
     }
 
     /**
      * Tests {@link DataStoreBackEnd#getAllAuthenticationKeys} method.
      */
     @Test
-    @SuppressWarnings("unchecked")
-    public void getAllAuthenticationKeysTest() throws ReadFailedException {
-        final ReadOnlyTransaction rTxMock = Mockito.mock(ReadOnlyTransaction.class);
-        final CheckedFuture<Optional<MappingDatabase>, ReadFailedException> readFutureMock
-                = Mockito.mock(CheckedFuture.class);
-        final Optional<MappingDatabase> optionalMock = Mockito.mock(Optional.class);
+    public void getAllAuthenticationKeysTest() {
+        final ReadTransaction rTxMock = Mockito.mock(ReadTransaction.class);
+        final FluentFuture<Optional<MappingDatabase>> readFutureMock = FluentFutures.immediateFluentFuture(
+            Optional.of(getDefaultMappingDatabase().build()));
 
         Mockito.when(txChainMock.newReadOnlyTransaction()).thenReturn(rTxMock);
         Mockito.when(rTxMock.read(LogicalDatastoreType.CONFIGURATION, DATABASE_ROOT)).thenReturn(readFutureMock);
-        Mockito.when(readFutureMock.checkedGet()).thenReturn(optionalMock);
-        Mockito.when(optionalMock.isPresent()).thenReturn(true);
-        Mockito.when(optionalMock.get()).thenReturn(getDefaultMappingDatabase().build());
 
         assertEquals(4, dataStoreBackEnd.getAllAuthenticationKeys().size());
-        Mockito.verify(optionalMock).get();
     }
 
     /**
@@ -308,10 +305,7 @@ public class DataStoreBackEndTest {
      */
     @Test
     public void onTransactionChainFailedTest() {
-        AsyncTransaction<?,?> asyncTransactionMock = Mockito.mock(AsyncTransaction.class);
-        Mockito.when(asyncTransactionMock.getIdentifier()).thenReturn(new Object());
-        dataStoreBackEnd.onTransactionChainFailed(Mockito.mock(TransactionChain.class), asyncTransactionMock,
-                Mockito.mock(Throwable.class));
+        dataStoreBackEnd.onTransactionChainFailed(Mockito.mock(TransactionChain.class), Mockito.mock(Throwable.class));
     }
 
     /**
@@ -331,38 +325,66 @@ public class DataStoreBackEndTest {
 
     private static AuthenticationKeyBuilder getDefaultAuthenticationKeyBuilder() {
         return new AuthenticationKeyBuilder()
-                .setKey(new AuthenticationKeyKey(new EidUri(DUMMY_URI)))
+                .withKey(new AuthenticationKeyKey(new EidUri(DUMMY_URI)))
                 .setEid(EID_IPV4_1)
-                .setMappingAuthkey(new MappingAuthkeyBuilder().setKeyString("password").setKeyType(0).build());
+                .setMappingAuthkey(new MappingAuthkeyBuilder().setKeyString("password").setKeyType(Uint16.valueOf(0))
+                .build());
     }
 
     private static MappingDatabaseBuilder getDefaultMappingDatabase() {
         final Mapping mapping_1 = new MappingBuilder()
+                .withKey(new MappingKey(new EidUri(LispAddressStringifier.getURIString(EID_IPV4_1)),
+                        MappingOrigin.Northbound))
                 .setMappingRecord(getDefaultMappingRecordBuilder().build()).build();
         final Mapping mapping_2 = new MappingBuilder()
+                .withKey(new MappingKey(new EidUri(LispAddressStringifier.getURIString(EID_IPV4_2)),
+                        MappingOrigin.Northbound))
                 .setMappingRecord(getDefaultMappingRecordBuilder().setEid(EID_IPV4_2).build()).build();
         final Mapping mapping_3 = new MappingBuilder()
+                .withKey(new MappingKey(new EidUri(LispAddressStringifier.getURIString(EID_IPV4_3)),
+                        MappingOrigin.Northbound))
                 .setMappingRecord(getDefaultMappingRecordBuilder().setEid(EID_IPV4_3).build()).build();
         final Mapping mapping_4 = new MappingBuilder()
+                .withKey(new MappingKey(new EidUri(LispAddressStringifier.getURIString(EID_IPV4_4)),
+                        MappingOrigin.Northbound))
                 .setMappingRecord(getDefaultMappingRecordBuilder().setEid(EID_IPV4_4).build()).build();
 
+        final Map<MappingKey, Mapping> mappingEntries_1 = new LinkedHashMap<>();
+        mappingEntries_1.put(new MappingKey(new EidUri("uri-1"), MappingOrigin.Northbound), mapping_1);
+        mappingEntries_1.put(new MappingKey(new EidUri("uri-2"), MappingOrigin.Northbound), mapping_2);
+        final Map<MappingKey, Mapping> mappingEntries_2 = new LinkedHashMap<>();
+        mappingEntries_2.put(new MappingKey(new EidUri("uri-3"), MappingOrigin.Northbound), mapping_3);
+        mappingEntries_2.put(new MappingKey(new EidUri("uri-4"), MappingOrigin.Northbound), mapping_4);
+
         final AuthenticationKey authenticationKey_1 = new AuthenticationKeyBuilder()
-                .setKey(new AuthenticationKeyKey(new EidUri("uri-1"))).build();
+                .withKey(new AuthenticationKeyKey(new EidUri("uri-1"))).build();
         final AuthenticationKey authenticationKey_2 = new AuthenticationKeyBuilder()
-                .setKey(new AuthenticationKeyKey(new EidUri("uri-2"))).build();
+                .withKey(new AuthenticationKeyKey(new EidUri("uri-2"))).build();
         final AuthenticationKey authenticationKey_3 = new AuthenticationKeyBuilder()
-                .setKey(new AuthenticationKeyKey(new EidUri("uri-3"))).build();
+                .withKey(new AuthenticationKeyKey(new EidUri("uri-3"))).build();
         final AuthenticationKey authenticationKey_4 = new AuthenticationKeyBuilder()
-                .setKey(new AuthenticationKeyKey(new EidUri("uri-4"))).build();
+                .withKey(new AuthenticationKeyKey(new EidUri("uri-4"))).build();
+
+        final Map<AuthenticationKeyKey, AuthenticationKey> authKey_1 = new LinkedHashMap<>();
+        authKey_1.put(new AuthenticationKeyKey(new EidUri("uri-1")), authenticationKey_1);
+        authKey_1.put(new AuthenticationKeyKey(new EidUri("uri-2")), authenticationKey_2);
+        final Map<AuthenticationKeyKey, AuthenticationKey> authKey_2 = new LinkedHashMap<>();
+        authKey_2.put(new AuthenticationKeyKey(new EidUri("uri-3")), authenticationKey_3);
+        authKey_2.put(new AuthenticationKeyKey(new EidUri("uri-4")), authenticationKey_4);
 
         final VirtualNetworkIdentifier vni_1 = new VirtualNetworkIdentifierBuilder()
                 .setVni(new VniUri("vni/uri/1"))
-                .setMapping(Lists.newArrayList(mapping_1, mapping_2))
-                .setAuthenticationKey(Lists.newArrayList(authenticationKey_1, authenticationKey_2)).build();
+                .setMapping(mappingEntries_1)
+                .setAuthenticationKey(authKey_1).build();
         final VirtualNetworkIdentifier vni_2 = new VirtualNetworkIdentifierBuilder()
                 .setVni(new VniUri("vni/uri/2"))
-                .setMapping(Lists.newArrayList(mapping_3, mapping_4))
-                .setAuthenticationKey(Lists.newArrayList(authenticationKey_3, authenticationKey_4)).build();
-        return new MappingDatabaseBuilder().setVirtualNetworkIdentifier(Lists.newArrayList(vni_1, vni_2));
+                .setMapping(mappingEntries_2)
+                .setAuthenticationKey(authKey_2).build();
+
+        final Map<VirtualNetworkIdentifierKey, VirtualNetworkIdentifier> vniEntries = new LinkedHashMap<>();
+        vniEntries.put(new VirtualNetworkIdentifierKey(new VniUri("vni/uri/1")), vni_1);
+        vniEntries.put(new VirtualNetworkIdentifierKey(new VniUri("vni/uri/2")), vni_2);
+
+        return new MappingDatabaseBuilder().setVirtualNetworkIdentifier(vniEntries);
     }
 }