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;
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;
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;
@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;
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();
}
/**
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);
@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);
.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);
@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();
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);
@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);
* 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();
}
/**
*/
@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));
}
/**
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);
}
}