Eliminate space escaping
[netconf.git] / restconf / restconf-nb / src / test / java / org / opendaylight / restconf / nb / rfc8040 / utils / parser / YangInstanceIdentifierSerializerTest.java
index 2d7e15716098cc265bfef5da921975ffd68e5977..7db7907f4e70f4a99f49b051b6e0188ab81a2082 100644 (file)
@@ -7,16 +7,15 @@
  */
 package org.opendaylight.restconf.nb.rfc8040.utils.parser;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThrows;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
-import java.util.LinkedHashMap;
+import com.google.common.collect.ImmutableMap;
 import java.util.Map;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
+import org.opendaylight.yangtools.yang.common.ErrorTag;
+import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
@@ -27,33 +26,19 @@ import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 /**
  * Unit tests for {@link YangInstanceIdentifierSerializer}.
  */
-public class YangInstanceIdentifierSerializerTest {
+class YangInstanceIdentifierSerializerTest {
     // schema context with test modules
-    private static EffectiveModelContext SCHEMA_CONTEXT;
-
-    @BeforeClass
-    public static void beforeClass() {
-        SCHEMA_CONTEXT = YangParserTestUtils.parseYangResourceDirectory("/restconf/parser/serializer");
-    }
-
-    @AfterClass
-    public static void afterClass() {
-        SCHEMA_CONTEXT = null;
-    }
+    private static final EffectiveModelContext SCHEMA_CONTEXT =
+        YangParserTestUtils.parseYangResourceDirectory("/restconf/parser/serializer");
 
     /**
      * Positive test of serialization of <code>YangInstanceIdentifier</code> containing container node to
      * <code>String</code>. Returned <code>String</code> is compared to have expected value.
      */
     @Test
-    public void serializeContainerTest() {
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
-                .node(QName.create("serializer:test", "2016-06-06", "contA"))
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful",
-                "serializer-test:contA", result);
+    void serializeContainerTest() {
+        assertEquals("serializer-test:contA", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+            YangInstanceIdentifier.of(QName.create("serializer:test", "2016-06-06", "contA"))));
     }
 
     /**
@@ -61,14 +46,11 @@ public class YangInstanceIdentifierSerializerTest {
      * <code>String</code>. Returned <code>String</code> is compared to have expected value.
      */
     @Test
-    public void serializeContainerWithLeafTest() {
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
-                .node(QName.create("serializer:test", "2016-06-06", "contA"))
-                .node(QName.create("serializer:test", "2016-06-06", "leaf-A"))
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful", "serializer-test:contA/leaf-A", result);
+    void serializeContainerWithLeafTest() {
+        assertEquals("serializer-test:contA/leaf-A", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+            YangInstanceIdentifier.of(
+                QName.create("serializer:test", "2016-06-06", "contA"),
+                QName.create("serializer:test", "2016-06-06", "leaf-A"))));
     }
 
     /**
@@ -76,22 +58,18 @@ public class YangInstanceIdentifierSerializerTest {
      * list node to <code>String</code>. Returned <code>String</code> is compared to have expected value.
      */
     @Test
-    public void serializeContainerWithListWithLeafListTest() {
-        final QName list = QName.create("serializer:test", "2016-06-06", "list-A");
-        final QName leafList = QName.create("serializer:test", "2016-06-06", "leaf-list-AA");
+    void serializeContainerWithListWithLeafListTest() {
+        final var list = QName.create("serializer:test", "2016-06-06", "list-A");
+        final var leafList = QName.create("serializer:test", "2016-06-06", "leaf-list-AA");
 
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
+        assertEquals("serializer-test:contA/list-A=100/leaf-list-AA=instance",
+            YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, YangInstanceIdentifier.builder()
                 .node(QName.create("serializer:test", "2016-06-06", "contA"))
                 .node(list)
                 .node(NodeIdentifierWithPredicates.of(list, QName.create(list, "list-key"), 100))
                 .node(leafList)
                 .node(new NodeWithValue<>(leafList, "instance"))
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful",
-                "serializer-test:contA/list-A=100/leaf-list-AA=instance",
-                result);
+                .build()));
     }
 
     /**
@@ -100,14 +78,11 @@ public class YangInstanceIdentifierSerializerTest {
      * expected value.
      */
     @Test
-    public void serializeListWithNoKeysTest() {
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
-                .node(QName.create("serializer:test", "2016-06-06", "list-no-key"))
-                .node(QName.create("serializer:test", "2016-06-06", "list-no-key"))
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful", "serializer-test:list-no-key", result);
+    void serializeListWithNoKeysTest() {
+        assertEquals("serializer-test:list-no-key", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+            YangInstanceIdentifier.of(
+                QName.create("serializer:test", "2016-06-06", "list-no-key"),
+                QName.create("serializer:test", "2016-06-06", "list-no-key"))));
     }
 
     /**
@@ -116,14 +91,12 @@ public class YangInstanceIdentifierSerializerTest {
      * <code>String</code> is compared to have expected value.
      */
     @Test
-    public void serializeMapWithNoKeysTest() {
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
+    void serializeMapWithNoKeysTest() {
+        assertEquals("serializer-test:list-one-key", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+            YangInstanceIdentifier.builder()
                 .node(QName.create("serializer:test", "2016-06-06", "list-one-key"))
                 .nodeWithKey(QName.create("serializer:test", "2016-06-06", "list-one-key"), Map.of())
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful", "serializer-test:list-one-key", result);
+                .build()));
     }
 
     /**
@@ -132,15 +105,13 @@ public class YangInstanceIdentifierSerializerTest {
      * expected value.
      */
     @Test
-    public void serializeMapWithOneKeyTest() {
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
+    void serializeMapWithOneKeyTest() {
+        assertEquals("serializer-test:list-one-key=value", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+            YangInstanceIdentifier.builder()
                 .node(QName.create("serializer:test", "2016-06-06", "list-one-key"))
                 .nodeWithKey(QName.create("serializer:test", "2016-06-06", "list-one-key"),
-                        QName.create("serializer:test", "2016-06-06", "list-one-key"), "value")
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful", "serializer-test:list-one-key=value", result);
+                    QName.create("serializer:test", "2016-06-06", "list-one-key"), "value")
+                .build()));
     }
 
     /**
@@ -149,18 +120,17 @@ public class YangInstanceIdentifierSerializerTest {
      * to have expected value.
      */
     @Test
-    public void serializeMapWithMultipleKeysTest() {
-        final QName list = QName.create("serializer:test", "2016-06-06", "list-multiple-keys");
-        final Map<QName, Object> values = new LinkedHashMap<>();
-        values.put(QName.create(list, "name"), "value-1");
-        values.put(QName.create(list, "number"), "2");
-        values.put(QName.create(list, "enabled"), "true");
-
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
-                .node(list).nodeWithKey(list, values).build();
+    void serializeMapWithMultipleKeysTest() {
+        final var list = QName.create("serializer:test", "2016-06-06", "list-multiple-keys");
 
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful", "serializer-test:list-multiple-keys=value-1,2,true", result);
+        assertEquals("serializer-test:list-multiple-keys=value-1,2,true",
+            YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, YangInstanceIdentifier.builder()
+                .node(list)
+                .nodeWithKey(list, ImmutableMap.of(
+                    QName.create(list, "name"), "value-1",
+                    QName.create(list, "number"), "2",
+                    QName.create(list, "enabled"), "true"))
+                .build()));
     }
 
     /**
@@ -169,13 +139,9 @@ public class YangInstanceIdentifierSerializerTest {
      * expected value.
      */
     @Test
-    public void serializeLeafTest() {
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
-                .node(QName.create("serializer:test", "2016-06-06", "leaf-0"))
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful", "serializer-test:leaf-0", result);
+    void serializeLeafTest() {
+        assertEquals("serializer-test:leaf-0", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+            YangInstanceIdentifier.of(QName.create("serializer:test", "2016-06-06", "leaf-0"))));
     }
 
     /**
@@ -184,14 +150,12 @@ public class YangInstanceIdentifierSerializerTest {
      * expected value.
      */
     @Test
-    public void serializeLeafListTest() {
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
+    void serializeLeafListTest() {
+        assertEquals("serializer-test:leaf-list-0=instance", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+            YangInstanceIdentifier.builder()
                 .node(QName.create("serializer:test", "2016-06-06", "leaf-list-0"))
                 .node(new NodeWithValue<>(QName.create("serializer:test", "2016-06-06", "leaf-list-0"), "instance"))
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful", "serializer-test:leaf-list-0=instance", result);
+                .build()));
     }
 
     /**
@@ -200,7 +164,7 @@ public class YangInstanceIdentifierSerializerTest {
      * <code>NullPointerException</code>.
      */
     @Test
-    public void serializeNullSchemaContextNegativeTest() {
+    void serializeNullSchemaContextNegativeTest() {
         assertThrows(NullPointerException.class,
             () -> YangInstanceIdentifierSerializer.create(null, YangInstanceIdentifier.of()));
     }
@@ -211,7 +175,7 @@ public class YangInstanceIdentifierSerializerTest {
      * <code>NullPointerException</code>.
      */
     @Test
-    public void serializeNullDataNegativeTest() {
+    void serializeNullDataNegativeTest() {
         assertThrows(NullPointerException.class,
             () -> YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, null));
     }
@@ -222,59 +186,58 @@ public class YangInstanceIdentifierSerializerTest {
      * Empty <code>String</code> is expected as a return value.
      */
     @Test
-    public void serializeEmptyDataTest() {
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, YangInstanceIdentifier.of());
-        assertTrue("Empty identifier is expected", result.isEmpty());
+    void serializeEmptyDataTest() {
+        assertEquals("", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, YangInstanceIdentifier.of()));
     }
 
     /**
      * Negative test when it is not possible to find child node of current node. Test is expected to fail with
-     * <code>RestconfDocumentedException</code> and error message is compared to expected error message.
+     * {@link RestconfDocumentedException} and error message is compared to expected error message.
      */
     @Test
-    public void serializeChildNodeNotFoundNegativeTest() {
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
-                .node(QName.create("serializer:test", "2016-06-06", "contA"))
-                .node(QName.create("serializer:test", "2016-06-06", "not-existing-leaf"))
-                .build();
+    void serializeChildNodeNotFoundNegativeTest() {
+        final var data = YangInstanceIdentifier.of(
+                QName.create("serializer:test", "2016-06-06", "contA"),
+                QName.create("serializer:test", "2016-06-06", "not-existing-leaf"));
 
-        assertThrows(RestconfDocumentedException.class,
+        final var ex = assertThrows(RestconfDocumentedException.class,
             () -> YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data));
+        final var errors = ex.getErrors();
+        assertEquals(1, errors.size());
+        final var error = errors.get(0);
+        assertEquals("""
+            Invalid input '/(serializer:test?revision=2016-06-06)contA/not-existing-leaf': schema for argument \
+            '(serializer:test?revision=2016-06-06)not-existing-leaf' (after 'serializer-test:contA') not found""",
+            error.getErrorMessage());
+        assertEquals(ErrorType.APPLICATION, error.getErrorType());
+        assertEquals(ErrorTag.UNKNOWN_ELEMENT, error.getErrorTag());
     }
 
     /**
      * Test if URIs with percent encoded characters are all correctly serialized.
      */
     @Test
-    public void serializePercentEncodingTest() {
-        final String value = "foo:foo bar/foo,bar/'bar'";
-        final String encoded = "foo%3Afoo%20bar%2Ffoo%2Cbar%2F%27bar%27";
-
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
-                .node(QName.create("serializer:test", "2016-06-06", "list-one-key"))
-                .nodeWithKey(QName.create("serializer:test", "2016-06-06", "list-one-key"),
-                        QName.create("serializer:test", "2016-06-06", "list-one-key"), value)
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful", "serializer-test:list-one-key=" + encoded, result);
+    void serializePercentEncodingTest() {
+        assertEquals("serializer-test:list-one-key=foo%3Afoo bar%2Ffoo%2Cbar%2F%27bar%27",
+            YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+                YangInstanceIdentifier.builder()
+                    .node(QName.create("serializer:test", "2016-06-06", "list-one-key"))
+                    .nodeWithKey(QName.create("serializer:test", "2016-06-06", "list-one-key"),
+                        QName.create("serializer:test", "2016-06-06", "list-one-key"), "foo:foo bar/foo,bar/'bar'")
+                    .build()));
     }
 
     /**
      * Test if URIs with no percent encoded characters are correctly serialized. Input should be untouched.
      */
     @Test
-    public void serializeNoPercentEncodingTest() {
-        final String value = "foo\"b\"bar";
-
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
+    void serializeNoPercentEncodingTest() {
+        assertEquals("serializer-test:list-one-key=foo\"b\"bar", YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT,
+            YangInstanceIdentifier.builder()
                 .node(QName.create("serializer:test", "2016-06-06", "list-one-key"))
                 .nodeWithKey(QName.create("serializer:test", "2016-06-06", "list-one-key"),
-                        QName.create("serializer:test", "2016-06-06", "list-one-key"), value)
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-        assertEquals("Serialization not successful", "serializer-test:list-one-key=" + value, result);
+                    QName.create("serializer:test", "2016-06-06", "list-one-key"), "foo\"b\"bar")
+            .build()));
     }
 
     /**
@@ -282,20 +245,16 @@ public class YangInstanceIdentifierSerializerTest {
      * modules by using augmentation.
      */
     @Test
-    public void serializeIncludedNodesTest() {
-        final QName list = QName.create("serializer:test:included", "2016-06-06", "augmented-list");
-        final QName child = QName.create("serializer:test", "2016-06-06", "augmented-leaf");
+    void serializeIncludedNodesTest() {
+        final var list = QName.create("serializer:test:included", "2016-06-06", "augmented-list");
+        final var child = QName.create("serializer:test", "2016-06-06", "augmented-leaf");
 
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
+        assertEquals("serializer-test-included:augmented-list=100/serializer-test:augmented-leaf",
+            YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, YangInstanceIdentifier.builder()
                 .node(list)
                 .node(NodeIdentifierWithPredicates.of(list, QName.create(list, "list-key"), 100))
                 .node(child)
-                .build();
-
-        final String result = YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data);
-
-        assertEquals("Serialization not successful",
-                "serializer-test-included:augmented-list=100/serializer-test:augmented-leaf", result);
+                .build()));
     }
 
     /**
@@ -305,18 +264,27 @@ public class YangInstanceIdentifierSerializerTest {
      * parent and will not be found.
      */
     @Test
-    public void serializeIncludedNodesSerializationTest() {
-        final QName list = QName.create("serializer:test:included", "2016-06-06", "augmented-list");
-        // child should has different namespace
-        final QName child = QName.create("serializer:test:included", "2016-06-06", "augmented-leaf");
+    void serializeIncludedNodesSerializationTest() {
+        final var list = QName.create("serializer:test:included", "2016-06-06", "augmented-list");
 
-        final YangInstanceIdentifier data = YangInstanceIdentifier.builder()
+        final var data = YangInstanceIdentifier.builder()
                 .node(list)
                 .node(NodeIdentifierWithPredicates.of(list, QName.create(list, "list-key"), 100))
-                .node(child)
+                // child should has different namespace
+                .node(QName.create("serializer:test:included", "2016-06-06", "augmented-leaf"))
                 .build();
 
-        assertThrows(RestconfDocumentedException.class,
+        final var ex = assertThrows(RestconfDocumentedException.class,
             () -> YangInstanceIdentifierSerializer.create(SCHEMA_CONTEXT, data));
+        final var errors = ex.getErrors();
+        assertEquals(1, errors.size());
+        final var error = errors.get(0);
+        assertEquals("""
+            Invalid input '/(serializer:test:included?revision=2016-06-06)augmented-list/augmented-list[{(\
+            serializer:test:included?revision=2016-06-06)list-key=100}]/augmented-leaf': schema for argument \
+            '(serializer:test:included?revision=2016-06-06)augmented-leaf' (after \
+            'serializer-test-included:augmented-list=100') not found""", error.getErrorMessage());
+        assertEquals(ErrorType.APPLICATION, error.getErrorType());
+        assertEquals(ErrorTag.UNKNOWN_ELEMENT, error.getErrorTag());
     }
 }