import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertThrows;
import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import java.lang.reflect.Constructor;
import java.util.Optional;
import java.util.Set;
-import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
-import org.mockito.Mockito;
+import org.opendaylight.controller.cluster.databroker.ClientBackedDataStore;
import org.opendaylight.controller.cluster.datastore.DatastoreContext.Builder;
import org.opendaylight.controller.cluster.datastore.config.Configuration;
import org.opendaylight.controller.cluster.datastore.config.ConfigurationImpl;
import org.opendaylight.controller.cluster.datastore.config.EmptyModuleShardConfigProvider;
-import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats;
import org.opendaylight.controller.cluster.datastore.messages.OnDemandShardState;
import org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot;
import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import scala.concurrent.Await;
public DistributedDataStore setupDistributedDataStore(final String typeName, final String moduleShardsConfig,
final boolean waitUntilLeader,
- final SchemaContext schemaContext) throws Exception {
+ final EffectiveModelContext schemaContext) throws Exception {
return setupDistributedDataStore(typeName, moduleShardsConfig, "modules.conf", waitUntilLeader, schemaContext);
}
public DistributedDataStore setupDistributedDataStore(final String typeName, final String moduleShardsConfig,
final String modulesConfig,
final boolean waitUntilLeader,
- final SchemaContext schemaContext,
+ final EffectiveModelContext schemaContext,
final String... shardNames) throws Exception {
return (DistributedDataStore) setupAbstractDataStore(DistributedDataStore.class, typeName, moduleShardsConfig,
modulesConfig, waitUntilLeader, schemaContext, shardNames);
public AbstractDataStore setupAbstractDataStore(final Class<? extends AbstractDataStore> implementation,
final String typeName, final String moduleShardsConfig,
final boolean waitUntilLeader,
- final SchemaContext schemaContext,
+ final EffectiveModelContext schemaContext,
final String... shardNames) throws Exception {
return setupAbstractDataStore(implementation, typeName, moduleShardsConfig, "modules.conf", waitUntilLeader,
schemaContext, shardNames);
private AbstractDataStore setupAbstractDataStore(final Class<? extends AbstractDataStore> implementation,
final String typeName, final String moduleShardsConfig,
final String modulesConfig, final boolean waitUntilLeader,
- final SchemaContext schemaContext, final String... shardNames)
+ final EffectiveModelContext schemaContext,
+ final String... shardNames)
throws Exception {
final ClusterWrapper cluster = new ClusterWrapperImpl(getSystem());
final Configuration config = new ConfigurationImpl(moduleShardsConfig, modulesConfig);
setDataStoreName(typeName);
+ // Make sure we set up datastore context correctly
+ datastoreContextBuilder.useTellBasedProtocol(ClientBackedDataStore.class.isAssignableFrom(implementation));
+
final DatastoreContext datastoreContext = datastoreContextBuilder.build();
- final DatastoreContextFactory mockContextFactory = Mockito.mock(DatastoreContextFactory.class);
- Mockito.doReturn(datastoreContext).when(mockContextFactory).getBaseDatastoreContext();
- Mockito.doReturn(datastoreContext).when(mockContextFactory).getShardDatastoreContext(Mockito.anyString());
+ final DatastoreContextFactory mockContextFactory = mock(DatastoreContextFactory.class);
+ doReturn(datastoreContext).when(mockContextFactory).getBaseDatastoreContext();
+ doReturn(datastoreContext).when(mockContextFactory).getShardDatastoreContext(anyString());
final Constructor<? extends AbstractDataStore> constructor = implementation.getDeclaredConstructor(
ActorSystem.class, ClusterWrapper.class, Configuration.class,
final AbstractDataStore dataStore = constructor.newInstance(getSystem(), cluster, config, mockContextFactory,
restoreFromSnapshot);
- dataStore.onGlobalContextUpdated(schemaContext);
+ dataStore.onModelContextUpdated(schemaContext);
if (waitUntilLeader) {
waitUntilLeader(dataStore.getActorUtils(), shardNames);
}
public DistributedDataStore setupDistributedDataStoreWithoutConfig(final String typeName,
- final SchemaContext schemaContext) {
+ final EffectiveModelContext schemaContext) {
final ClusterWrapper cluster = new ClusterWrapperImpl(getSystem());
final ConfigurationImpl configuration = new ConfigurationImpl(new EmptyModuleShardConfigProvider());
final DatastoreContext datastoreContext = getDatastoreContextBuilder().build();
- final DatastoreContextFactory mockContextFactory = Mockito.mock(DatastoreContextFactory.class);
- Mockito.doReturn(datastoreContext).when(mockContextFactory).getBaseDatastoreContext();
- Mockito.doReturn(datastoreContext).when(mockContextFactory).getShardDatastoreContext(Mockito.anyString());
+ final DatastoreContextFactory mockContextFactory = mock(DatastoreContextFactory.class);
+ doReturn(datastoreContext).when(mockContextFactory).getBaseDatastoreContext();
+ doReturn(datastoreContext).when(mockContextFactory).getShardDatastoreContext(anyString());
final DistributedDataStore dataStore = new DistributedDataStore(getSystem(), cluster,
configuration, mockContextFactory, restoreFromSnapshot);
- dataStore.onGlobalContextUpdated(schemaContext);
+ dataStore.onModelContextUpdated(schemaContext);
datastoreContextBuilder = DatastoreContext.newBuilderFrom(datastoreContext);
return dataStore;
}
public DistributedDataStore setupDistributedDataStoreWithoutConfig(final String typeName,
- final SchemaContext schemaContext,
+ final EffectiveModelContext schemaContext,
final LogicalDatastoreType storeType) {
final ClusterWrapper cluster = new ClusterWrapperImpl(getSystem());
final ConfigurationImpl configuration = new ConfigurationImpl(new EmptyModuleShardConfigProvider());
final DatastoreContext datastoreContext =
getDatastoreContextBuilder().logicalStoreType(storeType).build();
- final DatastoreContextFactory mockContextFactory = Mockito.mock(DatastoreContextFactory.class);
- Mockito.doReturn(datastoreContext).when(mockContextFactory).getBaseDatastoreContext();
- Mockito.doReturn(datastoreContext).when(mockContextFactory).getShardDatastoreContext(Mockito.anyString());
+ final DatastoreContextFactory mockContextFactory = mock(DatastoreContextFactory.class);
+ doReturn(datastoreContext).when(mockContextFactory).getBaseDatastoreContext();
+ doReturn(datastoreContext).when(mockContextFactory).getShardDatastoreContext(anyString());
final DistributedDataStore dataStore = new DistributedDataStore(getSystem(), cluster,
configuration, mockContextFactory, restoreFromSnapshot);
- dataStore.onGlobalContextUpdated(schemaContext);
+ dataStore.onModelContextUpdated(schemaContext);
datastoreContextBuilder = DatastoreContext.newBuilderFrom(datastoreContext);
return dataStore;
}
void testWriteTransaction(final AbstractDataStore dataStore, final YangInstanceIdentifier nodePath,
- final NormalizedNode<?, ?> nodeToWrite) throws Exception {
+ final NormalizedNode nodeToWrite) throws Exception {
// 1. Create a write-only Tx
// 5. Verify the data in the store
DOMStoreReadTransaction readTx = dataStore.newReadOnlyTransaction();
-
- Optional<NormalizedNode<?, ?>> optional = readTx.read(nodePath).get(5, TimeUnit.SECONDS);
- assertTrue("isPresent", optional.isPresent());
- assertEquals("Data node", nodeToWrite, optional.get());
+ assertEquals(Optional.of(nodeToWrite), readTx.read(nodePath).get(5, TimeUnit.SECONDS));
}
public void doCommit(final DOMStoreThreePhaseCommitCohort cohort) throws Exception {
cohort.commit().get(5, TimeUnit.SECONDS);
}
- @SuppressWarnings("checkstyle:IllegalCatch")
- void assertExceptionOnCall(final Callable<Void> callable, final Class<? extends Exception> expType) {
- try {
- callable.call();
- fail("Expected " + expType.getSimpleName());
- } catch (Exception e) {
- assertEquals("Exception type", expType, e.getClass());
- }
- }
-
void assertExceptionOnTxChainCreates(final DOMStoreTransactionChain txChain,
final Class<? extends Exception> expType) {
- assertExceptionOnCall(() -> {
- txChain.newWriteOnlyTransaction();
- return null;
- }, expType);
-
- assertExceptionOnCall(() -> {
- txChain.newReadWriteTransaction();
- return null;
- }, expType);
-
- assertExceptionOnCall(() -> {
- txChain.newReadOnlyTransaction();
- return null;
- }, expType);
+ assertThrows(expType, () -> txChain.newWriteOnlyTransaction());
+ assertThrows(expType, () -> txChain.newReadWriteTransaction());
+ assertThrows(expType, () -> txChain.newReadOnlyTransaction());
}
public interface ShardStatsVerifier {