Cache reflection operations in AbstractSchemaAwareTest
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / test / java / org / opendaylight / controller / md / sal / binding / impl / test / BindingDOMDataBrokerAdapterTest.java
index e2fcebaac1c9736d6ec4807207a800526c45c0fa..b01340a789a2097131493bd85c144b090655485f 100644 (file)
@@ -8,28 +8,33 @@
 
 package org.opendaylight.controller.md.sal.binding.impl.test;
 
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+
+import com.google.common.collect.ImmutableMap;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter;
 import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.dom.api.ClusteredDOMDataTreeChangeListener;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.ClusteredDOMDataChangeListener;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.Top;
-import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry;
-import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
-
 public class BindingDOMDataBrokerAdapterTest {
 
     @Mock
@@ -37,15 +42,20 @@ public class BindingDOMDataBrokerAdapterTest {
 
     @Mock
     GeneratedClassLoadingStrategy classLoadingStrategy;
+
     @Mock
     BindingNormalizedNodeCodecRegistry codecRegistry;
 
     @Mock
-    YangInstanceIdentifier yangInstanceIdentifier;
+    DOMDataTreeChangeService dataTreeChangeService;
 
+    @Mock
+    ListenerRegistration<DOMDataTreeChangeListener> listenerRegistration;
 
-    private static final InstanceIdentifier<Top> TOP_PATH = InstanceIdentifier
-        .create(Top.class);
+    @Mock
+    ClusteredDataTreeChangeListener<Top> clusteredDataTreeChangeListener;
+
+    private static final InstanceIdentifier<Top> TOP_PATH = InstanceIdentifier.create(Top.class);
 
     @Before
     public void setUp() {
@@ -53,35 +63,33 @@ public class BindingDOMDataBrokerAdapterTest {
     }
 
     @Test
-    public void testClusteredDataChangeListernerRegisteration() {
+    public void testClusteredDataTreeChangeListenerRegisteration() {
 
-        BindingToNormalizedNodeCodec codec = new BindingToNormalizedNodeCodec(classLoadingStrategy, codecRegistry);
+        doReturn(YangInstanceIdentifier.of(Top.QNAME)).when(codecRegistry).toYangInstanceIdentifier(TOP_PATH);
 
-        BindingDOMDataBrokerAdapter bindingDOMDataBrokerAdapter = new BindingDOMDataBrokerAdapter(dataBroker, codec);
-        Mockito.when(codecRegistry.toYangInstanceIdentifier(TOP_PATH)).thenReturn(yangInstanceIdentifier);
+        doReturn(listenerRegistration).when(dataTreeChangeService).registerDataTreeChangeListener(any(), any());
 
-        ArgumentCaptor<ClusteredDOMDataChangeListener> clusteredDOMListener = ArgumentCaptor.
-            forClass(ClusteredDOMDataChangeListener.class);
-        ArgumentCaptor<LogicalDatastoreType> logicalDatastoreType = ArgumentCaptor.forClass(LogicalDatastoreType.class);
-        ArgumentCaptor<AsyncDataBroker.DataChangeScope> dataChangeScope = ArgumentCaptor.
-            forClass(AsyncDataBroker.DataChangeScope.class);
-        ArgumentCaptor<YangInstanceIdentifier> yangInstanceIdentifier = ArgumentCaptor.
-            forClass(YangInstanceIdentifier.class);
+        doReturn(ImmutableMap.of(DOMDataTreeChangeService.class, dataTreeChangeService))
+            .when(dataBroker).getSupportedExtensions();
 
-        TestListener listener = new TestListener();
+        final BindingToNormalizedNodeCodec codec =
+                new BindingToNormalizedNodeCodec(this.classLoadingStrategy, this.codecRegistry);
 
-        bindingDOMDataBrokerAdapter.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, TOP_PATH, listener,
-            AsyncDataBroker.DataChangeScope.BASE);
-        Mockito.verify(dataBroker).registerDataChangeListener(logicalDatastoreType.capture(), yangInstanceIdentifier.capture(),
-            clusteredDOMListener.capture(), dataChangeScope.capture());
+        try (BindingDOMDataBrokerAdapter bindingDOMDataBrokerAdapter = new BindingDOMDataBrokerAdapter(this.dataBroker,
+                codec)) {
 
-    }
+            ListenerRegistration<ClusteredDataTreeChangeListener<Top>> bindingListenerReg =
+                bindingDOMDataBrokerAdapter.registerDataTreeChangeListener(
+                    new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, TOP_PATH),
+                    clusteredDataTreeChangeListener);
 
-    private class TestListener implements ClusteredDataChangeListener {
+            verify(dataTreeChangeService).registerDataTreeChangeListener(
+                eq(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(Top.QNAME))),
+                any(ClusteredDOMDataTreeChangeListener.class));
 
-        @Override
-        public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
+            bindingListenerReg.close();
 
+            verify(listenerRegistration).close();
         }
     }
 }