Bump MRI upstreams
[netconf.git] / restconf / restconf-nb-rfc8040 / src / test / java / org / opendaylight / restconf / nb / rfc8040 / utils / mapping / RestconfMappingNodeUtilTest.java
index c16ebd5396633319fa32b309116d9d78f6e00ed5..56aa718dc2e412288258ce88e1793961245408a9 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.restconf.nb.rfc8040.utils.mapping;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.mockito.Mockito.when;
+import static org.junit.Assert.assertTrue;
 
 import java.net.URI;
 import java.time.Instant;
@@ -21,26 +21,17 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
-import org.junit.Assert;
-import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.opendaylight.restconf.nb.rfc8040.Rfc8040;
 import org.opendaylight.restconf.nb.rfc8040.Rfc8040.IetfYangLibrary;
-import org.opendaylight.restconf.nb.rfc8040.Rfc8040.MonitoringModule;
-import org.opendaylight.restconf.nb.rfc8040.Rfc8040.MonitoringModule.QueryParams;
-import org.opendaylight.restconf.nb.rfc8040.Rfc8040.RestconfModule;
 import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
 import org.opendaylight.restconf.nb.rfc8040.utils.parser.ParserIdentifier;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.monitoring.rev170126.RestconfState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.restconf.monitoring.rev170126.restconf.state.Capabilities;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
@@ -48,11 +39,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,27 +49,16 @@ import org.slf4j.LoggerFactory;
  * Unit tests for {@link RestconfMappingNodeUtil}.
  */
 public class RestconfMappingNodeUtilTest {
-
     private static final Logger LOG = LoggerFactory.getLogger(RestconfMappingNodeUtilTest.class);
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
-    @Mock private ListSchemaNode mockStreamList;
-    @Mock private LeafSchemaNode leafName;
-    @Mock private LeafSchemaNode leafDescription;
-    @Mock private LeafSchemaNode leafReplaySupport;
-    @Mock private LeafSchemaNode leafReplayLog;
-    @Mock private LeafSchemaNode leafEvents;
-
-    private static Set<Module> modules;
-    private static SchemaContext schemaContext;
-    private static SchemaContext schemaContextMonitoring;
-
-    private static Set<Module> modulesRest;
+    private static Collection<? extends Module> modules;
+    private static EffectiveModelContext schemaContext;
+    private static EffectiveModelContext schemaContextMonitoring;
+    private static Collection<? extends Module> modulesRest;
 
     @BeforeClass
     public static void loadTestSchemaContextAndModules() throws Exception {
+        // FIXME: assemble these from dependencies
         schemaContext =
                 YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/modules/restconf-module-testing"));
         schemaContextMonitoring = YangParserTestUtils.parseYangFiles(TestRestconfUtils.loadFiles("/modules"));
@@ -90,18 +67,6 @@ public class RestconfMappingNodeUtilTest {
                 .parseYangFiles(TestRestconfUtils.loadFiles("/modules/restconf-module-testing")).getModules();
     }
 
-    @Before
-    public void setup() throws Exception {
-        MockitoAnnotations.initMocks(this);
-
-        when(this.leafName.getQName()).thenReturn(QName.create("", RestconfMappingNodeConstants.NAME));
-        when(this.leafDescription.getQName()).thenReturn(QName.create("", RestconfMappingNodeConstants.DESCRIPTION));
-        when(this.leafReplaySupport.getQName()).thenReturn(
-                QName.create("", RestconfMappingNodeConstants.REPLAY_SUPPORT));
-        when(this.leafReplayLog.getQName()).thenReturn(QName.create("", RestconfMappingNodeConstants.REPLAY_LOG));
-        when(this.leafEvents.getQName()).thenReturn(QName.create("", RestconfMappingNodeConstants.EVENTS));
-    }
-
     /**
      * Test of writing modules into {@link RestconfModule#MODULE_LIST_SCHEMA_NODE} and checking if modules were
      * correctly written.
@@ -109,38 +74,36 @@ public class RestconfMappingNodeUtilTest {
     @Test
     public void restconfMappingNodeTest() {
         // write modules into list module in Restconf
-        final Module ietfYangLibMod = schemaContext.findModule(IetfYangLibrary.MODULE_QNAME).get();
-        final NormalizedNode<NodeIdentifier, Collection<DataContainerChild<? extends PathArgument, ?>>> mods =
-                RestconfMappingNodeUtil.mapModulesByIetfYangLibraryYang(RestconfMappingNodeUtilTest.modules,
-                        ietfYangLibMod, schemaContext, "1");
+        final ContainerNode mods = RestconfMappingNodeUtil.mapModulesByIetfYangLibraryYang(
+            RestconfMappingNodeUtilTest.modules, schemaContext, "1");
 
         // verify loaded modules
-        verifyLoadedModules((ContainerNode) mods);
+        verifyLoadedModules(mods);
+        // verify deviations
+        verifyDeviations(mods);
     }
 
     @Test
     public void restconfStateCapabilitesTest() {
-        final Module monitoringModule = schemaContextMonitoring.findModule(MonitoringModule.MODULE_QNAME).get();
-        final NormalizedNode<NodeIdentifier, Collection<DataContainerChild<? extends PathArgument, ?>>> normNode =
-                RestconfMappingNodeUtil.mapCapabilites(monitoringModule);
+        final Module monitoringModule = schemaContextMonitoring.findModule(RestconfState.QNAME.getModule()).get();
+        final ContainerNode normNode = RestconfMappingNodeUtil.mapCapabilites(monitoringModule);
         assertNotNull(normNode);
         final List<Object> listOfValues = new ArrayList<>();
 
-        for (final DataContainerChild<? extends PathArgument, ?> child : ((ContainerNode) normNode).getValue()) {
-            if (child.getNodeType().equals(MonitoringModule.CONT_CAPABILITES_QNAME)) {
-                for (final DataContainerChild<? extends PathArgument, ?> dataContainerChild : ((ContainerNode) child)
-                        .getValue()) {
-                    for (final Object entry : ((LeafSetNode<?>) dataContainerChild).getValue()) {
-                        listOfValues.add(((LeafSetEntryNode<?>) entry).getValue());
+        for (final DataContainerChild child : normNode.body()) {
+            if (child.getIdentifier().getNodeType().equals(Capabilities.QNAME)) {
+                for (final DataContainerChild dataContainerChild : ((ContainerNode) child).body()) {
+                    for (final Object entry : ((LeafSetNode<?>) dataContainerChild).body()) {
+                        listOfValues.add(((LeafSetEntryNode<?>) entry).body());
                     }
                 }
             }
         }
-        Assert.assertTrue(listOfValues.contains(QueryParams.DEPTH));
-        Assert.assertTrue(listOfValues.contains(QueryParams.FIELDS));
-        Assert.assertTrue(listOfValues.contains(QueryParams.FILTER));
-        Assert.assertTrue(listOfValues.contains(QueryParams.REPLAY));
-        Assert.assertTrue(listOfValues.contains(QueryParams.WITH_DEFAULTS));
+        assertTrue(listOfValues.contains(Rfc8040.Capabilities.DEPTH));
+        assertTrue(listOfValues.contains(Rfc8040.Capabilities.FIELDS));
+        assertTrue(listOfValues.contains(Rfc8040.Capabilities.FILTER));
+        assertTrue(listOfValues.contains(Rfc8040.Capabilities.REPLAY));
+        assertTrue(listOfValues.contains(Rfc8040.Capabilities.WITH_DEFAULTS));
     }
 
     @Test
@@ -150,17 +113,12 @@ public class RestconfMappingNodeUtilTest {
         final Instant start = Instant.now();
         final String outputType = "XML";
         final URI uri = new URI("uri");
-        final Module monitoringModule = schemaContextMonitoring.findModule(MonitoringModule.MODULE_QNAME).orElse(null);
-        final boolean exist = true;
+        final String streamName = "/nested-module:depth1-cont/depth2-leaf1";
 
-        final Map<QName, Object> map =
-                prepareMap(path.getLastPathArgument().getNodeType().getLocalName(), uri, start, outputType);
-
-        final NormalizedNode<?, ?> mappedData =
-                RestconfMappingNodeUtil.mapDataChangeNotificationStreamByIetfRestconfMonitoring(
-                        path, start, outputType, uri, monitoringModule, exist, schemaContextMonitoring);
-        assertNotNull(mappedData);
-        testData(map, mappedData);
+        final Map<QName, Object> map = prepareMap(streamName, uri, start, outputType);
+        final MapEntryNode mappedData = RestconfMappingNodeUtil.mapDataChangeNotificationStreamByIetfRestconfMonitoring(
+            path, start, outputType, uri, schemaContextMonitoring, streamName);
+        assertMappedData(map, mappedData);
     }
 
     @Test
@@ -168,42 +126,62 @@ public class RestconfMappingNodeUtilTest {
         final Instant start = Instant.now();
         final String outputType = "JSON";
         final URI uri = new URI("uri");
-        final Module monitoringModule = schemaContextMonitoring.findModule(MonitoringModule.MODULE_QNAME).orElse(null);
-        final boolean exist = true;
 
         final Map<QName, Object> map = prepareMap("notifi", uri, start, outputType);
-        map.put(MonitoringModule.LEAF_DESCR_STREAM_QNAME, "Notifi");
+        map.put(RestconfMappingNodeUtil.DESCRIPTION_QNAME, "Notifi");
 
         final QName notifiQName = QName.create("urn:nested:module", "2014-06-03", "notifi");
-        final NormalizedNode<?, ?> mappedData =
-                RestconfMappingNodeUtil.mapYangNotificationStreamByIetfRestconfMonitoring(notifiQName,
-                    schemaContextMonitoring.getNotifications(), start, outputType, uri, monitoringModule, exist);
-        assertNotNull(mappedData);
-        testData(map, mappedData);
+        final MapEntryNode mappedData = RestconfMappingNodeUtil.mapYangNotificationStreamByIetfRestconfMonitoring(
+            notifiQName, schemaContextMonitoring.getNotifications(), start, outputType, uri);
+        assertMappedData(map, mappedData);
     }
 
     private static Map<QName, Object> prepareMap(final String name, final URI uri, final Instant start,
             final String outputType) {
         final Map<QName, Object> map = new HashMap<>();
-        map.put(MonitoringModule.LEAF_NAME_STREAM_QNAME, name);
-        map.put(MonitoringModule.LEAF_LOCATION_ACCESS_QNAME, uri.toString());
-        map.put(MonitoringModule.LEAF_REPLAY_SUPP_STREAM_QNAME, Boolean.TRUE);
-        map.put(MonitoringModule.LEAF_START_TIME_STREAM_QNAME, DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(
+        map.put(RestconfMappingNodeUtil.NAME_QNAME, name);
+        map.put(RestconfMappingNodeUtil.LOCATION_QNAME, uri.toString());
+        map.put(RestconfMappingNodeUtil.REPLAY_SUPPORT_QNAME, Boolean.TRUE);
+        map.put(RestconfMappingNodeUtil.REPLAY_LOG_CREATION_TIME, DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(
             OffsetDateTime.ofInstant(start, ZoneId.systemDefault())));
-        map.put(MonitoringModule.LEAF_ENCODING_ACCESS_QNAME, outputType);
+        map.put(RestconfMappingNodeUtil.ENCODING_QNAME, outputType);
         return map;
     }
 
-    private static void testData(final Map<QName, Object> map, final NormalizedNode<?, ?> mappedData) {
-        for (final DataContainerChild<? extends PathArgument, ?> child : ((MapEntryNode) mappedData).getValue()) {
+    private static void assertMappedData(final Map<QName, Object> map, final MapEntryNode mappedData) {
+        assertNotNull(mappedData);
+        for (final DataContainerChild child : mappedData.body()) {
             if (child instanceof LeafNode) {
                 final LeafNode<?> leaf = (LeafNode<?>) child;
-                Assert.assertTrue(map.containsKey(leaf.getNodeType()));
-                Assert.assertEquals(map.get(leaf.getNodeType()), leaf.getValue());
+                assertTrue(map.containsKey(leaf.getIdentifier().getNodeType()));
+                assertEquals(map.get(leaf.getIdentifier().getNodeType()), leaf.body());
             }
         }
     }
 
+    /**
+     * Verify whether the loaded modules contain any deviations.
+     *
+     * @param containerNode
+     *             modules
+     */
+    private static void verifyDeviations(final ContainerNode containerNode) {
+        int deviationsFound = 0;
+        for (final DataContainerChild child : containerNode.body()) {
+            if (child instanceof MapNode) {
+                for (final MapEntryNode mapEntryNode : ((MapNode) child).body()) {
+                    for (final DataContainerChild dataContainerChild : mapEntryNode.body()) {
+                        if (dataContainerChild.getIdentifier().getNodeType()
+                                .equals(IetfYangLibrary.SPECIFIC_MODULE_DEVIATION_LIST_QNAME)) {
+                            deviationsFound++;
+                        }
+                    }
+                }
+            }
+        }
+        assertTrue(deviationsFound > 0);
+    }
+
     /**
      * Verify loaded modules.
      *
@@ -211,30 +189,28 @@ public class RestconfMappingNodeUtilTest {
      *             modules
      */
     private static void verifyLoadedModules(final ContainerNode containerNode) {
-
         final Map<String, String> loadedModules = new HashMap<>();
 
-        for (final DataContainerChild<? extends PathArgument, ?> child : containerNode.getValue()) {
+        for (final DataContainerChild child : containerNode.body()) {
             if (child instanceof LeafNode) {
-                assertEquals(IetfYangLibrary.MODULE_SET_ID_LEAF_QNAME, ((LeafNode<?>) child).getNodeType());
+                assertEquals(IetfYangLibrary.MODULE_SET_ID_LEAF_QNAME, child.getIdentifier().getNodeType());
             }
             if (child instanceof MapNode) {
-                assertEquals(IetfYangLibrary.MODULE_QNAME_LIST, ((MapNode) child).getNodeType());
-                for (final MapEntryNode mapEntryNode : ((MapNode) child).getValue()) {
+                assertEquals(IetfYangLibrary.MODULE_QNAME_LIST, child.getIdentifier().getNodeType());
+                for (final MapEntryNode mapEntryNode : ((MapNode) child).body()) {
                     String name = "";
                     String revision = "";
-                    for (final DataContainerChild<? extends PathArgument, ?> dataContainerChild : mapEntryNode
-                            .getValue()) {
-                        switch (dataContainerChild.getNodeType().getLocalName()) {
+                    for (final DataContainerChild dataContainerChild : mapEntryNode.body()) {
+                        switch (dataContainerChild.getIdentifier().getNodeType().getLocalName()) {
                             case IetfYangLibrary.SPECIFIC_MODULE_NAME_LEAF:
-                                name = String.valueOf(((LeafNode<?>) dataContainerChild).getValue());
+                                name = String.valueOf(dataContainerChild.body());
                                 break;
                             case IetfYangLibrary.SPECIFIC_MODULE_REVISION_LEAF:
-                                revision = String.valueOf(((LeafNode<?>) dataContainerChild).getValue());
+                                revision = String.valueOf(dataContainerChild.body());
                                 break;
                             default :
                                 LOG.info("Unknown local name '{}' of node.",
-                                        dataContainerChild.getNodeType().getLocalName());
+                                        dataContainerChild.getIdentifier().getNodeType().getLocalName());
                                 break;
                         }
                     }
@@ -252,7 +228,7 @@ public class RestconfMappingNodeUtilTest {
      * @param expectedModules Modules from <code>SchemaContext</code>
      * @param loadedModules Loaded modules into Restconf module
      */
-    private static void verifyLoadedModules(final Set<Module> expectedModules,
+    private static void verifyLoadedModules(final Collection<? extends Module> expectedModules,
             final Map<String, String> loadedModules) {
         assertEquals("Number of loaded modules is not as expected", expectedModules.size(), loadedModules.size());
         for (final Module m : expectedModules) {