Assert schema tree class claim 06/96506/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 9 Jun 2021 23:33:47 +0000 (01:33 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 9 Jun 2021 23:42:00 +0000 (01:42 +0200)
'action' statement is displacing 'grouping' as per its claim on
schema tree namespace. 'rpc' historically does something radically
different, but we really want to go the 'action' route.

This change in behavior is already happening as part of CollisionDomain
mode of operation, here we add an explicit test for that scenario.

JIRA: MDSAL-666
Change-Id: Ie46b1234f5b01c66a8e3657ce984ec59d3a2475e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal666Test.java [new file with mode: 0644]
binding/mdsal-binding-generator-impl/src/test/resources/mdsal666.yang [new file with mode: 0644]

diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal666Test.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal666Test.java
new file mode 100644 (file)
index 0000000..a75d1e7
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.mdsal.binding.generator.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Optional;
+import java.util.stream.Collectors;
+import org.junit.Test;
+import org.opendaylight.mdsal.binding.model.api.GeneratedType;
+import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
+import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
+
+public class Mdsal666Test {
+    private static final JavaTypeName FOO = JavaTypeName.create("org.opendaylight.yang.gen.v1.foo.norev", "Foo");
+    private static final JavaTypeName FOO_GRP = JavaTypeName.create("org.opendaylight.yang.gen.v1.foo.norev", "Foo$G");
+    private static final JavaTypeName BAZ_GRP = JavaTypeName.create("org.opendaylight.yang.gen.v1.foo.norev.bar",
+        "Baz$G");
+
+    @Test
+    public void rpcPushesGrouping() {
+        final var generatedNames = DefaultBindingGenerator.generateFor(
+            YangParserTestUtils.parseYangResource("/mdsal666.yang")).stream().map(GeneratedType::getIdentifier)
+            .collect(Collectors.toUnmodifiableList());
+        assertEquals(10, generatedNames.size());
+
+        // Reserved for future use
+        assertEquals(Optional.empty(), generatedNames.stream().filter(FOO::equals).findAny());
+        // Grouping is relocated for 'rpc foo' ...
+        assertTrue(generatedNames.stream().filter(FOO_GRP::equals).findAny().isPresent());
+        // .. and 'action baz'
+        assertTrue(generatedNames.stream().filter(BAZ_GRP::equals).findAny().isPresent());
+    }
+}
diff --git a/binding/mdsal-binding-generator-impl/src/test/resources/mdsal666.yang b/binding/mdsal-binding-generator-impl/src/test/resources/mdsal666.yang
new file mode 100644 (file)
index 0000000..13e26f4
--- /dev/null
@@ -0,0 +1,22 @@
+module foo {
+  namespace foo;
+  prefix foo;
+  yang-version 1.1;
+
+  description
+    "Model for a namespace mapping collision between grouping namespace and schema tree namespace. Both are mapped
+     to a Class simple name and to a package name. When this basic conflict happens, schema tree occupant wins on
+     priority, forcing grouping mapping to use its '$T' namespace suffix. This happens consistently for RPCs and
+     actions.";
+
+  grouping foo;
+
+  rpc foo;
+
+  container bar {
+    grouping baz;
+
+    action baz;
+  }
+}
+