Fix RFC8040 root access
[netconf.git] / restconf / restconf-nb-rfc8040 / src / test / java / org / opendaylight / restconf / nb / rfc8040 / jersey / providers / XmlNormalizedNodeBodyWriterTest.java
index f45ce5df9dd9bf97d2cfe47cbe143cfd894c42e9..7d0b37d4d27bc00405d34c08bae58164f994028e 100644 (file)
@@ -8,50 +8,74 @@
 package org.opendaylight.restconf.nb.rfc8040.jersey.providers;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 
 import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
 import javax.ws.rs.core.MediaType;
-import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.Mockito;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
+import org.opendaylight.restconf.nb.rfc8040.TestRestconfUtils;
 import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 public class XmlNormalizedNodeBodyWriterTest {
+    @Test
+    public void testWriteEmptyRootContainer() throws Exception {
+        final EffectiveModelContext schemaContext = mock(EffectiveModelContext.class);
 
-    private static final String EMPTY_OUTPUT = "<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"></data>";
+        final SchemaNode schemaNode = mock(SchemaNode.class);
+        doReturn(SchemaPath.ROOT).when(schemaNode).getPath();
 
-    private static EffectiveModelContext schemaContext;
+        final NormalizedNodePayload nodePayload = NormalizedNodePayload.of(
+            new InstanceIdentifierContext<>(YangInstanceIdentifier.empty(), schemaNode, null, schemaContext),
+            Builders.containerBuilder().withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME)).build());
 
-    @BeforeClass
-    public static void initialization() throws Exception {
-        schemaContext = Mockito.mock(EffectiveModelContext.class);
+        final ByteArrayOutputStream output = new ByteArrayOutputStream();
+        final XmlNormalizedNodeBodyWriter xmlWriter = new XmlNormalizedNodeBodyWriter();
+        xmlWriter.writeTo(nodePayload, null, null, null, MediaType.APPLICATION_XML_TYPE, null, output);
+
+        assertEquals("<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\"></data>",
+            output.toString(StandardCharsets.UTF_8));
     }
 
     @Test
-    public void testWriteEmptyRootContainer() throws Exception {
-        final SchemaNode schemaNode = Mockito.mock(SchemaNode.class);
-        when(schemaNode.getPath()).thenReturn(SchemaPath.ROOT);
+    public void testRootContainerWrite() throws Exception {
+        final EffectiveModelContext schemaContext =
+                TestRestconfUtils.loadSchemaContext("/instanceidentifier/yang", null);
+
+        final SchemaNode schemaNode = mock(SchemaNode.class);
+        doReturn(SchemaPath.ROOT).when(schemaNode).getPath();
 
-        final InstanceIdentifierContext<SchemaNode> identifierContext =
-                new InstanceIdentifierContext<>(YangInstanceIdentifier.empty(), schemaNode, null, schemaContext);
-        final ContainerNode data = ImmutableContainerNodeBuilder.create()
-                .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(SchemaContext.NAME)).build();
-        final NormalizedNodePayload nodePayload = NormalizedNodePayload.of(identifierContext, data);
+        final NormalizedNodePayload nodePayload = NormalizedNodePayload.of(
+            new InstanceIdentifierContext<>(YangInstanceIdentifier.empty(), schemaNode, null, schemaContext),
+            Builders.containerBuilder()
+                .withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME))
+                .withChild(Builders.containerBuilder()
+                    .withNodeIdentifier(new NodeIdentifier(
+                        QName.create("foo:module", "2016-09-29", "foo-bar-container")))
+                    .build())
+                .withChild(Builders.containerBuilder()
+                    .withNodeIdentifier(new NodeIdentifier(
+                        QName.create("bar:module", "2016-09-29", "foo-bar-container")))
+                    .build())
+                .build());
 
-        final OutputStream output = new ByteArrayOutputStream();
+        final ByteArrayOutputStream output = new ByteArrayOutputStream();
         final XmlNormalizedNodeBodyWriter xmlWriter = new XmlNormalizedNodeBodyWriter();
         xmlWriter.writeTo(nodePayload, null, null, null, MediaType.APPLICATION_XML_TYPE, null, output);
 
-        assertEquals(EMPTY_OUTPUT, output.toString());
+        assertEquals("<data xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">"
+            + "<foo-bar-container xmlns=\"bar:module\"></foo-bar-container>"
+            + "<foo-bar-container xmlns=\"foo:module\"></foo-bar-container>"
+            + "</data>", output.toString(StandardCharsets.UTF_8));
     }
 }
\ No newline at end of file