From 6e6a3ea2c895e31da3a74da26fb0462095594cb1 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 30 Jul 2018 09:40:05 +0200 Subject: [PATCH] Fix enumeration leafref lookup Leafref lookup for straight uses of enumeration typedefs seems to be failing. The code in question seems to rely on weird assumptions, hence this patch places a FIXME and turns an alternative branch into a fallback if the weird code fails to find a definition. This also activates ietf-hardware models. JIRA: MDSAL-352 Change-Id: I6d342c7418c1538ee928f85b33f8f58da8aca5c6 Signed-off-by: Robert Varga --- .../yang/types/AbstractTypeProvider.java | 4 ++- .../binding/generator/impl/Mdsal352Test.java | 29 +++++++++++++++++ .../src/test/resources/mdsal352.yang | 32 +++++++++++++++++++ .../ietf-hardware-state@2018-03-13.yang | 0 .../ietf-hardware@2018-03-13.yang | 0 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal352Test.java create mode 100644 binding/mdsal-binding-generator-impl/src/test/resources/mdsal352.yang rename model/ietf/rfc8348-ietf-hardware-state/src/main/{yang-disabled => yang}/ietf-hardware-state@2018-03-13.yang (100%) rename model/ietf/rfc8348-ietf-hardware/src/main/{yang-disabled => yang}/ietf-hardware@2018-03-13.yang (100%) diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java index 1e990f5206..86ef3df086 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java @@ -553,11 +553,13 @@ public abstract class AbstractTypeProvider implements TypeProvider { Preconditions.checkArgument(dataNode != null, "Failed to find leafref target: %s in module %s (%s)", strXPath, this.getParentModule(parentNode).getName(), parentNode.getQName().getModule()); + // FIXME: this block seems to be some weird magic hack. Analyze and refactor it. if (leafContainsEnumDefinition(dataNode)) { returnType = referencedTypes.get(dataNode.getPath()); } else if (leafListContainsEnumDefinition(dataNode)) { returnType = Types.listTypeFor(referencedTypes.get(dataNode.getPath())); - } else { + } + if (returnType == null) { returnType = resolveTypeFromDataSchemaNode(dataNode); } } else { diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal352Test.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal352Test.java new file mode 100644 index 0000000000..c5c224d2c7 --- /dev/null +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/Mdsal352Test.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2018 Pantheon Technologies, 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.assertNotNull; + +import java.util.List; +import org.junit.Test; +import org.opendaylight.mdsal.binding.model.api.Type; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; + +public class Mdsal352Test { + + @Test + public void mdsal352Test() { + final SchemaContext context = YangParserTestUtils.parseYangResource("/mdsal352.yang"); + + final List generateTypes = new BindingGeneratorImpl().generateTypes(context); + assertNotNull(generateTypes); + assertEquals(6, generateTypes.size()); + } +} diff --git a/binding/mdsal-binding-generator-impl/src/test/resources/mdsal352.yang b/binding/mdsal-binding-generator-impl/src/test/resources/mdsal352.yang new file mode 100644 index 0000000000..32d765fc4c --- /dev/null +++ b/binding/mdsal-binding-generator-impl/src/test/resources/mdsal352.yang @@ -0,0 +1,32 @@ +module enum-leafref { + namespace "urn:donaldh:yang:leafref:bug"; + prefix l; + + typedef action-effort { + type enumeration { + enum best-effort { + } + enum exact-match { + } + } + } + + container operations { + list operation { + key 'effort'; + uses operation-g; + } + } + + grouping operation-g { + leaf effort { + type action-effort; + } + leaf-list operation { + type leafref { + path '/operations/operation/effort'; + } + } + } +} + diff --git a/model/ietf/rfc8348-ietf-hardware-state/src/main/yang-disabled/ietf-hardware-state@2018-03-13.yang b/model/ietf/rfc8348-ietf-hardware-state/src/main/yang/ietf-hardware-state@2018-03-13.yang similarity index 100% rename from model/ietf/rfc8348-ietf-hardware-state/src/main/yang-disabled/ietf-hardware-state@2018-03-13.yang rename to model/ietf/rfc8348-ietf-hardware-state/src/main/yang/ietf-hardware-state@2018-03-13.yang diff --git a/model/ietf/rfc8348-ietf-hardware/src/main/yang-disabled/ietf-hardware@2018-03-13.yang b/model/ietf/rfc8348-ietf-hardware/src/main/yang/ietf-hardware@2018-03-13.yang similarity index 100% rename from model/ietf/rfc8348-ietf-hardware/src/main/yang-disabled/ietf-hardware@2018-03-13.yang rename to model/ietf/rfc8348-ietf-hardware/src/main/yang/ietf-hardware@2018-03-13.yang -- 2.36.6