Fix InMemory shard transaction chaining.
[mdsal.git] / dom / mdsal-dom-inmemory-datastore / src / test / java / org / opendaylight / mdsal / dom / store / inmemory / InMemoryDOMDataTreeShardTest.java
index f70771df86119992d63d42ad861be44aa9a3b63e..f9b4d4ee0482a80b5f58233e219d886ee1c6737a 100644 (file)
@@ -11,8 +11,11 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
 import static org.opendaylight.controller.md.sal.dom.store.impl.TestModel.createTestContext;
 import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.DOM_DATA_TREE_IDENTIFIER;
 import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.DOM_DATA_TREE_SHARD_PRODUCER;
@@ -24,15 +27,19 @@ import java.util.Collection;
 import org.junit.After;
 import org.junit.Test;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.CursorAwareDataTreeModification;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.CursorAwareDataTreeSnapshot;
 
 public class InMemoryDOMDataTreeShardTest {
 
     @Test
     public void basicTest() throws Exception {
-        InMemoryDOMDataTreeShard inMemoryDOMDataTreeShard =
+        final InMemoryDOMDataTreeShard inMemoryDOMDataTreeShard =
                 InMemoryDOMDataTreeShard.create(DOM_DATA_TREE_IDENTIFIER,
                         MoreExecutors.newDirectExecutorService(), 1);
 
@@ -40,8 +47,8 @@ public class InMemoryDOMDataTreeShardTest {
                 new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION,
                         YangInstanceIdentifier.of(QName.create("Test")));
 
-        WriteableDOMDataTreeShard domDataTreeShard = mock(WriteableDOMDataTreeShard.class);
-        doReturn("testTreeShard").when(domDataTreeShard).toString();
+        final ReadableWriteableDOMDataTreeShard domDataTreeShard = mock(ReadableWriteableDOMDataTreeShard.class);
+        doReturn("testReadableWriteableDOMDataTreeShard").when(domDataTreeShard).toString();
         doReturn(DOM_DATA_TREE_SHARD_PRODUCER).when(domDataTreeShard).createProducer(any());
 
         assertFalse(inMemoryDOMDataTreeShard.getChildShards().containsValue(domDataTreeShard));
@@ -49,17 +56,26 @@ public class InMemoryDOMDataTreeShardTest {
         assertTrue(inMemoryDOMDataTreeShard.getChildShards().containsValue(domDataTreeShard));
         inMemoryDOMDataTreeShard.onChildAttached(domDataTreeIdentifier, domDataTreeShard);
 
-        Collection<DOMDataTreeIdentifier> prefixes = ImmutableList.of(DOM_DATA_TREE_IDENTIFIER);
+        final Collection<DOMDataTreeIdentifier> prefixes = ImmutableList.of(DOM_DATA_TREE_IDENTIFIER);
         assertEquals(prefixes.toString(), inMemoryDOMDataTreeShard.createProducer(prefixes).getPrefixes().toString());
 
+        final InMemoryDOMDataTreeShardProducer mockProducer = mock(InMemoryDOMDataTreeShardProducer.class);
+
         inMemoryDOMDataTreeShard.onGlobalContextUpdated(createTestContext());
-        inMemoryDOMDataTreeShard.createTransaction(prefixes);
+        inMemoryDOMDataTreeShard.createTransaction("", mockProducer, prefixes, mock(CursorAwareDataTreeSnapshot.class));
+
+        final DOMDataTreeChangeListener domDataTreeChangeListener = mock(DOMDataTreeChangeListener.class);
+        final ListenerRegistration listenerRegistration = mock(ListenerRegistration.class);
+        doReturn(listenerRegistration).when(domDataTreeShard).registerTreeChangeListener(any(), any());
+        doNothing().when(domDataTreeChangeListener).onDataTreeChanged(any());
+        inMemoryDOMDataTreeShard.registerTreeChangeListener(YangInstanceIdentifier.EMPTY, domDataTreeChangeListener);
+        verify(domDataTreeShard, atLeastOnce()).registerTreeChangeListener(any(), any());
 
         inMemoryDOMDataTreeShard.onChildDetached(DOM_DATA_TREE_IDENTIFIER, domDataTreeShard);
         assertFalse(inMemoryDOMDataTreeShard.getChildShards().containsKey(DOM_DATA_TREE_IDENTIFIER));
     }
 
-    @Test(expected = UnsupportedOperationException.class)
+    @Test
     public void createTransactionWithException() throws Exception {
         final DOMDataTreeIdentifier domDataTreeIdentifier =
                 new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, YangInstanceIdentifier.EMPTY);
@@ -67,11 +83,15 @@ public class InMemoryDOMDataTreeShardTest {
         final InMemoryDOMDataTreeShard inMemoryDOMDataTreeShard =
                 InMemoryDOMDataTreeShard.create(domDataTreeIdentifier,
                         MoreExecutors.newDirectExecutorService(), 1);
+        final CursorAwareDataTreeModification dataTreeModification = mock(CursorAwareDataTreeModification.class);
 
         final InmemoryDOMDataTreeShardWriteTransaction inmemoryDOMDataTreeShardWriteTransaction =
                 mock(InmemoryDOMDataTreeShardWriteTransaction.class);
+        doReturn(dataTreeModification).when(inmemoryDOMDataTreeShardWriteTransaction).getRootModification();
+        final InMemoryDOMDataTreeShardProducer mockProducer = mock(InMemoryDOMDataTreeShardProducer.class);
+        final Collection<DOMDataTreeIdentifier> prefixes = ImmutableList.of(DOM_DATA_TREE_IDENTIFIER);
 
-        inMemoryDOMDataTreeShard.createTransaction(inmemoryDOMDataTreeShardWriteTransaction);
+        inMemoryDOMDataTreeShard.createTransaction("", mockProducer, prefixes, mock(CursorAwareDataTreeSnapshot.class));
     }
 
     @After