Bug 4360: Removed incorrect precondition for class nesting. 98/29598/1
authorTony Tkacik <ttkacik@cisco.com>
Thu, 12 Nov 2015 14:21:48 +0000 (15:21 +0100)
committerTony Tkacik <ttkacik@cisco.com>
Thu, 12 Nov 2015 14:23:10 +0000 (15:23 +0100)
Change-Id: I665c89934872f0685d594631d0e81db4a4413284
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/impl/SchemaRootCodecContext.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/yangtools/binding/data/codec/test/TopLevelContainerViaUsesTest.java [new file with mode: 0644]
binding/mdsal-binding-test-model/src/main/yang/opendaylight-binding-top-level-via-uses.yang [new file with mode: 0644]

index adb1c977233bbf7602cfebc5dc3089b8090f4258..512c10e5da3e916d0c82caff48637e0374aeaef2 100644 (file)
@@ -14,12 +14,9 @@ import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.util.concurrent.UncheckedExecutionException;
-import org.opendaylight.yangtools.util.ClassLoaderUtils;
 import org.opendaylight.yangtools.yang.binding.BindingMapping;
-import org.opendaylight.yangtools.yang.binding.ChildOf;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.DataRoot;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.Notification;
 import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
@@ -173,8 +170,6 @@ final class SchemaRootCodecContext<D extends DataObject> extends DataContainerCo
     }
 
     private DataContainerCodecContext<?,?> createDataTreeChildContext(final Class<?> key) {
-        final Class<Object> parent = ClassLoaderUtils.findFirstGenericArgument(key, ChildOf.class);
-        IncorrectNestingException.check(DataRoot.class.isAssignableFrom(parent), "Class %s is not top level item.", key);
         final QName qname = BindingReflections.findQName(key);
         final DataSchemaNode childSchema = childNonNull(getSchema().getDataChildByName(qname),key,"%s is not top-level item.",key);
         return DataContainerCodecPrototype.from(key, childSchema, factory()).get();
diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/yangtools/binding/data/codec/test/TopLevelContainerViaUsesTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/yangtools/binding/data/codec/test/TopLevelContainerViaUsesTest.java
new file mode 100644 (file)
index 0000000..69f7bfa
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. 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.yangtools.binding.data.codec.test;
+
+import static org.junit.Assert.assertEquals;
+
+import javassist.ClassPool;
+import org.junit.Test;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.test.top.via.uses.rev151112.container.top.ContainerTop;
+import org.opendaylight.yangtools.binding.data.codec.gen.impl.StreamWriterGenerator;
+import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry;
+import org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
+
+
+public class TopLevelContainerViaUsesTest extends AbstractBindingRuntimeTest {
+
+    private static final InstanceIdentifier<ContainerTop> TOP_LEVEL_CONTAINER_FROM_USES =
+            InstanceIdentifier.create(ContainerTop.class);
+
+    private BindingNormalizedNodeCodecRegistry registry;
+
+    @Override
+    public void setup() {
+        super.setup();
+        final JavassistUtils utils = JavassistUtils.forClassPool(ClassPool.getDefault());
+        registry = new BindingNormalizedNodeCodecRegistry(StreamWriterGenerator.create(utils));
+        registry.onBindingRuntimeContextUpdated(getRuntimeContext());
+    }
+
+    @Test
+    public void testBindingToDomFirst() {
+        final YangInstanceIdentifier yangII = registry.toYangInstanceIdentifier(TOP_LEVEL_CONTAINER_FROM_USES);
+        final PathArgument lastArg = yangII.getLastPathArgument();
+        assertEquals(ContainerTop.QNAME, lastArg.getNodeType());
+    }
+
+
+    @Test
+    public void testDomToBindingFirst() {
+        final YangInstanceIdentifier yangII = YangInstanceIdentifier.of(ContainerTop.QNAME);
+        InstanceIdentifier<?> bindingII = registry.fromYangInstanceIdentifier(yangII);
+        assertEquals(TOP_LEVEL_CONTAINER_FROM_USES, bindingII);
+    }
+
+}
diff --git a/binding/mdsal-binding-test-model/src/main/yang/opendaylight-binding-top-level-via-uses.yang b/binding/mdsal-binding-test-model/src/main/yang/opendaylight-binding-top-level-via-uses.yang
new file mode 100644 (file)
index 0000000..193f6c2
--- /dev/null
@@ -0,0 +1,22 @@
+module opendaylight-binding-top-level-via-uses {
+       yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:md:sal:test:top-via-uses";
+    prefix "binding-impl";
+
+    description
+        "Regression Test model for top-level-via uses";
+
+    revision "2015-11-12" {
+        description
+            "Initial revision";
+    }
+
+    grouping container-top {
+        container container-top {
+            presence "only for testing";
+        }
+    }
+
+    uses container-top;
+
+}
\ No newline at end of file