From 70a13e29e0bec19bd48bd3fe48102a465294caf2 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 17 Dec 2021 08:16:25 +0100 Subject: [PATCH] Deviations should get disabled if target is unsupported Deviate's InferenceAction should pay attention to unavailable target nodes, so we disable the deviation. JIRA: YANGTOOLS-1370 Change-Id: Id0d8c3a64f91060cb21e807402742341ea98f492 Signed-off-by: Robert Varga --- .../deviate/AbstractDeviateStatementSupport.java | 15 +++++++++++++++ .../src/test/resources/bugs/YT1370/dev.yang | 12 ++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 parser/yang-parser-rfc7950/src/test/resources/bugs/YT1370/dev.yang diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java index a6c18c3de1..f3b314384d 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java @@ -16,6 +16,7 @@ import com.google.common.collect.SetMultimap; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.Objects; import java.util.Set; import org.opendaylight.yangtools.yang.common.Empty; @@ -143,6 +144,11 @@ abstract class AbstractDeviateStatementSupport deviateAction.apply(new InferenceAction() { @Override public void apply(final InferenceContext ctx) { + if (!deviateStmtCtx.isSupportedToBuildEffective()) { + // We are not building effective model, hence we should not be performing any effects + return; + } + final var sourceNodeStmtCtx = sourceCtxPrerequisite.resolve(ctx); final var targetNodeStmtCtx = targetCtxPrerequisite.resolve(ctx); @@ -170,6 +176,15 @@ abstract class AbstractDeviateStatementSupport throw new InferenceException(deviateStmtCtx.coerceParentContext(), "Deviation target '%s' not found.", deviationTarget); } + + @Override + public void prerequisiteUnavailable(final Prerequisite unavail) { + if (targetCtxPrerequisite.equals(unavail)) { + deviateStmtCtx.setUnsupported(); + } else { + prerequisiteFailed(List.of(unavail)); + } + } }); } diff --git a/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1370/dev.yang b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1370/dev.yang new file mode 100644 index 0000000000..d079e587d9 --- /dev/null +++ b/parser/yang-parser-rfc7950/src/test/resources/bugs/YT1370/dev.yang @@ -0,0 +1,12 @@ +module dev { + prefix dev; + namespace dev; + + import foo { + prefix foo; + } + + deviation /foo:foo/foo:bar { + deviate not-supported; + } +} -- 2.36.6