Bug 4202: Require that a producer has claimed a namespace on shard registration
[mdsal.git] / dom / mdsal-dom-broker / src / test / java / org / opendaylight / mdsal / dom / broker / ShardedDOMDataTreeListenerWithProducerTest.java
@@ -5,18 +5,19 @@
  * 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.mdsal.dom.broker.test;
+package org.opendaylight.mdsal.dom.broker;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyMap;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.opendaylight.mdsal.dom.broker.test.MockingUtilities.captorFor;
+import static org.opendaylight.mdsal.dom.broker.MockingUtilities.captorFor;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -36,8 +37,7 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeShard;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeShardingConflictException;
-import org.opendaylight.mdsal.dom.broker.ShardedDOMDataTree;
-import org.opendaylight.mdsal.dom.broker.test.util.TestModel;
+import org.opendaylight.mdsal.dom.broker.util.TestModel;
 import org.opendaylight.mdsal.dom.spi.store.DOMStore;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreTransactionChain;
 import org.opendaylight.mdsal.dom.spi.store.DOMStoreTreeChangePublisher;
@@ -87,6 +87,9 @@ public class ShardedDOMDataTreeListenerWithProducerTest {
     @Mock(name = "storeTxChain")
     private DOMStoreTransactionChain txChainMock;
 
+    @Mock
+    private ShardedDOMDataTreeProducer rootProducer;
+
     private DOMDataTreeService treeService;
 
     private ListenerRegistration<ListenableShard> shardReg;
@@ -94,9 +97,11 @@ public class ShardedDOMDataTreeListenerWithProducerTest {
     @Before
     public void setUp() throws DOMDataTreeShardingConflictException {
         MockitoAnnotations.initMocks(this);
+        doReturn(Collections.singleton(ROOT_ID)).when(rootProducer).getSubtrees();
+        doNothing().when(rootProducer).subshardAdded(anyMap());
         final ShardedDOMDataTree impl = new ShardedDOMDataTree();
         treeService = impl;
-        shardReg = impl.registerDataTreeShard(ROOT_ID, rootShard);
+        shardReg = impl.registerDataTreeShard(ROOT_ID, rootShard, rootProducer);
         doReturn("rootShard").when(rootShard).toString();
         doReturn("childShard").when(childShard).toString();
 
@@ -111,70 +116,70 @@ public class ShardedDOMDataTreeListenerWithProducerTest {
 
     @Test
     public void registerListenerWithOneProducer() throws DOMDataTreeLoopException {
-        DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
-        DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_TEST2);
+        final DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
+        final DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_TEST2);
         treeService.registerListener(listener, SUBTREES_TEST, true, Collections.singleton(producer));
     }
 
     @Test(expected = IllegalStateException.class)
     public void registerListenerWithAlreadyBoundProducer() throws DOMDataTreeLoopException {
-        DOMDataTreeListener listener1 = MockingUtilities.mock(DOMDataTreeListener.class, "listener1");
-        DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_TEST2);
+        final DOMDataTreeListener listener1 = MockingUtilities.mock(DOMDataTreeListener.class, "listener1");
+        final DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_TEST2);
         treeService.registerListener(listener1, SUBTREES_TEST, true, Collections.singleton(producer));
 
-        DOMDataTreeListener listener2 = MockingUtilities.mock(DOMDataTreeListener.class, "listener2");
+        final DOMDataTreeListener listener2 = MockingUtilities.mock(DOMDataTreeListener.class, "listener2");
         treeService.registerListener(listener2, SUBTREES_TEST, true, Collections.singleton(producer));
     }
 
     @Test(expected = DOMDataTreeLoopException.class)
     public void loopSameSubtree() throws DOMDataTreeLoopException {
-        DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
-        DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_TEST);
+        final DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
+        final DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_TEST);
         treeService.registerListener(listener, SUBTREES_TEST, true, Collections.singleton(producer));
     }
 
     @Test(expected = DOMDataTreeLoopException.class)
     public void loopListenParentWritesChild() throws DOMDataTreeLoopException {
-        DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
-        DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_TEST);
+        final DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
+        final DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_TEST);
         treeService.registerListener(listener, SUBTREES_ROOT, true, Collections.singleton(producer));
     }
 
     @Test(expected = DOMDataTreeLoopException.class)
     public void loopListenChildWritesParent() throws DOMDataTreeLoopException {
-        DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
-        DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_ROOT);
+        final DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
+        final DOMDataTreeProducer producer = treeService.createProducer(SUBTREES_ROOT);
         treeService.registerListener(listener, SUBTREES_ROOT, true, Collections.singleton(producer));
     }
 
     @Test
     public void receiveChangeEvent() throws DOMDataTreeLoopException {
-        DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
-        ArgumentCaptor<DOMDataTreeChangeListener> storeListener =
+        final DOMDataTreeListener listener = Mockito.mock(DOMDataTreeListener.class);
+        final ArgumentCaptor<DOMDataTreeChangeListener> storeListener =
                 ArgumentCaptor.forClass(DOMDataTreeChangeListener.class);
         treeService.registerListener(listener, SUBTREES_TEST, true, Collections.<DOMDataTreeProducer>emptyList());
         verify(rootShard, times(1)).registerTreeChangeListener(eq(TEST_ID.getRootIdentifier()),
                 storeListener.capture());
 
-        DataTreeCandidate sentStoreCandidate =
+        final DataTreeCandidate sentStoreCandidate =
                 DataTreeCandidates.fromNormalizedNode(TEST_ID.getRootIdentifier(), TEST_CONTAINER);
-        Collection<DataTreeCandidate> changes = Collections.singleton(sentStoreCandidate);
+        final Collection<DataTreeCandidate> changes = Collections.singleton(sentStoreCandidate);
 
         doNothing().when(listener).onDataTreeChanged(Mockito.<Collection<DataTreeCandidate>>any(), Mockito.anyMap());
         storeListener.getValue().onDataTreeChanged(changes);
 
-        ArgumentCaptor<Collection<DataTreeCandidate>> candidateCapture = captorFor(Collection.class);
-        ArgumentCaptor<Map<DOMDataTreeIdentifier, NormalizedNode<?, ?>>> mapCapture = captorFor(Map.class);
+        final ArgumentCaptor<Collection<DataTreeCandidate>> candidateCapture = captorFor(Collection.class);
+        final ArgumentCaptor<Map<DOMDataTreeIdentifier, NormalizedNode<?, ?>>> mapCapture = captorFor(Map.class);
         verify(listener, times(1)).onDataTreeChanged(candidateCapture.capture(), mapCapture.capture());
 
-        Collection<DataTreeCandidate> receivedCandidate = candidateCapture.getValue();
-        Map<DOMDataTreeIdentifier, NormalizedNode<?, ?>> receivedMap = mapCapture.getValue();
+        final Collection<DataTreeCandidate> receivedCandidate = candidateCapture.getValue();
+        final Map<DOMDataTreeIdentifier, NormalizedNode<?, ?>> receivedMap = mapCapture.getValue();
 
         assertNotNull("receivedCandidate", receivedCandidate);
         assertNotNull("receivedMap", receivedMap);
         assertFalse("candidate collection must not be empty", receivedCandidate.isEmpty());
         assertEquals(1, receivedCandidate.size());
-        DataTreeCandidate firstItem = receivedCandidate.iterator().next();
+        final DataTreeCandidate firstItem = receivedCandidate.iterator().next();
         assertEquals(TEST_ID.getRootIdentifier(), firstItem.getRootPath());
         assertEquals(TEST_CONTAINER, receivedMap.get(TEST_ID));
     }