*/
package org.opendaylight.mdsal.binding.dom.adapter;
-import static org.mockito.AdditionalMatchers.not;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.verify;
-import java.util.Collection;
-import org.junit.Before;
-import org.junit.Test;
+import java.util.List;
+import org.eclipse.jdt.annotation.NonNull;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener;
import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
-import org.opendaylight.mdsal.binding.api.DataTreeChangeService;
import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
import org.opendaylight.mdsal.binding.api.DataTreeModification;
-import org.opendaylight.mdsal.binding.dom.codec.impl.BindingNormalizedNodeCodecRegistry;
-import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
+import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
+import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.Top;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
*
* @author Thomas Pantelis
*/
-public class BindingDOMDataTreeChangeServiceAdapterTest {
+@ExtendWith(MockitoExtension.class)
+class BindingDOMDataTreeChangeServiceAdapterTest {
private static final InstanceIdentifier<Top> TOP_PATH = InstanceIdentifier.create(Top.class);
+ private static final YangInstanceIdentifier TOP_YIID = YangInstanceIdentifier.of(Top.QNAME);
@Mock
- private DOMDataTreeChangeService mockDOMService;
+ private DataTreeChangeExtension mockDOMService;
@Mock
- private GeneratedClassLoadingStrategy classLoadingStrategy;
+ private BindingDOMCodecServices services;
@Mock
- private BindingNormalizedNodeCodecRegistry codecRegistry;
+ private Registration mockDOMReg;
- @Mock
- private YangInstanceIdentifier mockYangID;
-
- @SuppressWarnings("rawtypes")
- @Mock
- private ListenerRegistration mockDOMReg;
-
- @Before
+ @BeforeEach
public void setUp() {
- MockitoAnnotations.initMocks(this);
- doReturn(this.mockYangID).when(this.codecRegistry).toYangInstanceIdentifier(TOP_PATH);
+ doReturn(TOP_YIID).when(services).toYangInstanceIdentifier(TOP_PATH);
}
@Test
- public void testRegisterDataTreeChangeListener() {
- final BindingToNormalizedNodeCodec codec =
- new BindingToNormalizedNodeCodec(this.classLoadingStrategy, this.codecRegistry);
-
- final DataTreeChangeService service = BindingDOMDataTreeChangeServiceAdapter.create(codec, this.mockDOMService);
-
- doReturn(this.mockDOMReg).when(this.mockDOMService).registerDataTreeChangeListener(
- domDataTreeIdentifier(this.mockYangID),
- any(DOMDataTreeChangeListener.class));
- final DataTreeIdentifier<Top> treeId = DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, TOP_PATH);
- final TestClusteredDataTreeChangeListener mockClusteredListener = new TestClusteredDataTreeChangeListener();
- service.registerDataTreeChangeListener(treeId , mockClusteredListener);
+ void testRegisterDataTreeChangeListener() {
+ final var codec = new ConstantAdapterContext(services);
- verify(this.mockDOMService).registerDataTreeChangeListener(domDataTreeIdentifier(this.mockYangID),
- isA(ClusteredDOMDataTreeChangeListener.class));
+ final var service = new BindingDOMDataTreeChangeServiceAdapter(codec, mockDOMService);
- reset(this.mockDOMService);
- doReturn(this.mockDOMReg).when(this.mockDOMService).registerDataTreeChangeListener(
- domDataTreeIdentifier(this.mockYangID), any(DOMDataTreeChangeListener.class));
- final TestDataTreeChangeListener mockNonClusteredListener = new TestDataTreeChangeListener();
- service.registerDataTreeChangeListener(treeId , mockNonClusteredListener);
+ doReturn(mockDOMReg).when(mockDOMService).registerTreeChangeListener(domDataTreeIdentifier(TOP_YIID), any());
+ final var treeId = DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, TOP_PATH);
+ service.registerDataTreeChangeListener(treeId, new TestClusteredDataTreeChangeListener());
- verify(this.mockDOMService).registerDataTreeChangeListener(domDataTreeIdentifier(this.mockYangID),
- not(isA(ClusteredDOMDataTreeChangeListener.class)));
+ doReturn(mockDOMReg).when(mockDOMService).registerLegacyTreeChangeListener(domDataTreeIdentifier(TOP_YIID),
+ any());
+ service.registerDataTreeChangeListener(treeId, new TestDataTreeChangeListener());
}
- static DOMDataTreeIdentifier domDataTreeIdentifier(final YangInstanceIdentifier yangID) {
- return argThat(arg -> arg.getDatastoreType() == LogicalDatastoreType.CONFIGURATION
- && yangID.equals(arg.getRootIdentifier()));
+ private static @NonNull DOMDataTreeIdentifier domDataTreeIdentifier(final YangInstanceIdentifier yangID) {
+ return argThat(arg -> arg.datastore() == LogicalDatastoreType.CONFIGURATION && yangID.equals(arg.path()));
}
- private static class TestClusteredDataTreeChangeListener implements ClusteredDataTreeChangeListener<Top> {
+ @Deprecated(since = "13.0.0", forRemoval = true)
+ private static final class TestClusteredDataTreeChangeListener implements ClusteredDataTreeChangeListener<Top> {
@Override
- public void onDataTreeChanged(final Collection<DataTreeModification<Top>> changes) {
+ public void onDataTreeChanged(final List<DataTreeModification<Top>> changes) {
+ // No-op
}
}
- private static class TestDataTreeChangeListener implements DataTreeChangeListener<Top> {
+ private static final class TestDataTreeChangeListener implements DataTreeChangeListener<Top> {
@Override
- public void onDataTreeChanged(final Collection<DataTreeModification<Top>> changes) {
+ public void onDataTreeChanged(final List<DataTreeModification<Top>> changes) {
+ // No-op
}
}
}