Added handling for YANG extensions related to RFC 6536 (default-deny-write, default-deny-all) and RFC 6241 (get-filter-element-attributes) and added in Unit Tests for the new Listener classes related to extension references
Change-Id: I6501c23d340f0d6f85ecbe8790186568152d341f
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java
index 070cd23..5055538 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java
@@ -1938,5 +1938,34 @@
*
* @param currentContext current context in the parsed tree
*/
- void exitRequireInstance(RequireInstanceContext currentContext);
+ void exitRequireInstance(GeneratedYangParser.RequireInstanceContext currentContext);
+
+ /**
+ * From ietf-netconf-acm.yang extension.
+ * @param currentContext
+ */
+ void enterDefaultDenyWriteStatement(
+ GeneratedYangParser.DefaultDenyWriteStatementContext currentContext);
+
+ /**
+ * From ietf-netconf-acm.yang extension.
+ * @param currentContext
+ */
+ void exitDefaultDenyWriteStatement(
+ GeneratedYangParser.DefaultDenyWriteStatementContext currentContext);
+
+ /**
+ * From ietf-netconf-acm.yang extension.
+ * @param currentContext
+ */
+ void enterDefaultDenyAllStatement(
+ GeneratedYangParser.DefaultDenyAllStatementContext currentContext);
+
+ /**
+ * From ietf-netconf-acm.yang extension.
+ * @param currentContext
+ */
+ void exitDefaultDenyAllStatement(
+ GeneratedYangParser.DefaultDenyAllStatementContext currentContext);
+
}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java
index e6be5d4..fc1d34d 100644
--- a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java
@@ -23,6 +23,7 @@
import org.onosproject.yang.compiler.datamodel.utils.Parsable;
import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangListener;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
import org.onosproject.yang.compiler.parser.impl.listeners.AppDataStructureListener;
import org.onosproject.yang.compiler.parser.impl.listeners.AppExtendedNameListener;
import org.onosproject.yang.compiler.parser.impl.listeners.ArgumentListener;
@@ -100,6 +101,8 @@
import org.onosproject.yang.compiler.parser.impl.listeners.WhenListener;
import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
import org.onosproject.yang.compiler.utils.UtilConstants;
+import org.onosproject.yang.compiler.parser.impl.listeners.DefaultDenyAllExtRefListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.DefaultDenyWriteExtRefListener;
import java.util.Stack;
@@ -1847,4 +1850,30 @@
public void exitEveryRule(ParserRuleContext parserRuleContext) {
// do nothing.
}
+
+ @Override
+ public void enterDefaultDenyWriteStatement(
+ GeneratedYangParser.DefaultDenyWriteStatementContext currentContext) {
+ DefaultDenyWriteExtRefListener
+ .processDefaultDenyWriteStructureEntry(this, currentContext);
+ }
+
+ @Override
+ public void exitDefaultDenyWriteStatement(
+ GeneratedYangParser.DefaultDenyWriteStatementContext currentContext) {
+ // do nothing
+ }
+
+ @Override
+ public void enterDefaultDenyAllStatement(
+ GeneratedYangParser.DefaultDenyAllStatementContext currentContext) {
+ DefaultDenyAllExtRefListener
+ .processDefaultDenyAllStructureEntry(this, currentContext);
+ }
+
+ @Override
+ public void exitDefaultDenyAllStatement(
+ GeneratedYangParser.DefaultDenyAllStatementContext currentContext) {
+ // do nothing
+ }
}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyAllExtRefListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyAllExtRefListener.java
new file mode 100644
index 0000000..cb7997a
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyAllExtRefListener.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DEFAULT_DENY_ALL_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+public final class DefaultDenyAllExtRefListener {
+
+ private DefaultDenyAllExtRefListener() {
+
+ }
+
+ public static void processDefaultDenyAllStructureEntry(TreeWalkListener listener,
+ GeneratedYangParser.DefaultDenyAllStatementContext ctx) {
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, DEFAULT_DENY_ALL_DATA, "", ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangContainer) {
+ YangContainer holder = (YangContainer) tmpData;
+ holder.setDefaultDenyAll(true);
+ } else if (tmpData instanceof YangLeaf) {
+ YangLeaf holder = (YangLeaf) tmpData;
+ holder.setDefaultDenyAll(true);
+ } else if (tmpData instanceof YangLeafList) {
+ YangLeafList holder = (YangLeafList) tmpData;
+ holder.setDefaultDenyAll(true);
+ } else if (tmpData instanceof YangList) {
+ YangList holder = (YangList) tmpData;
+ holder.setDefaultDenyAll(true);
+ } else if (tmpData instanceof YangNotification) {
+ YangNotification holder = (YangNotification) tmpData;
+ holder.setDefaultDenyAll(true);
+ } else if (tmpData instanceof YangRpc) {
+ YangRpc holder = (YangRpc) tmpData;
+ holder.setDefaultDenyAll(true);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(
+ INVALID_HOLDER, DEFAULT_DENY_ALL_DATA, "", ENTRY));
+ }
+ }
+
+ public static void processDefaultDenyAllStructureExit(TreeWalkListener listener,
+ GeneratedYangParser.DefaultDenyAllStatementContext ctx) {
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, DEFAULT_DENY_ALL_DATA, "", EXIT);
+ // Nothing.to do
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyWriteExtRefListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyWriteExtRefListener.java
new file mode 100644
index 0000000..ea8b170
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyWriteExtRefListener.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DEFAULT_DENY_WRITE_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+public final class DefaultDenyWriteExtRefListener {
+
+ private DefaultDenyWriteExtRefListener() {
+
+ }
+
+
+ public static void processDefaultDenyWriteStructureEntry(TreeWalkListener listener,
+ GeneratedYangParser.DefaultDenyWriteStatementContext ctx) {
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, DEFAULT_DENY_WRITE_DATA, "", ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangContainer) {
+ YangContainer holder = (YangContainer) tmpData;
+ holder.setDefaultDenyWrite(true);
+ } else if (tmpData instanceof YangLeaf) {
+ YangLeaf holder = (YangLeaf) tmpData;
+ holder.setDefaultDenyWrite(true);
+ } else if (tmpData instanceof YangLeafList) {
+ YangLeafList holder = (YangLeafList) tmpData;
+ holder.setDefaultDenyWrite(true);
+ } else if (tmpData instanceof YangList) {
+ YangList holder = (YangList) tmpData;
+ holder.setDefaultDenyWrite(true);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(
+ INVALID_HOLDER, DEFAULT_DENY_WRITE_DATA, "", ENTRY));
+ }
+ }
+
+ public static void processDefaultDenyWriteStructureExit(TreeWalkListener listener,
+ GeneratedYangParser.DefaultDenyWriteStatementContext ctx) {
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, DEFAULT_DENY_WRITE_DATA, "", EXIT);
+ // Nothing.to do
+ }
+}
diff --git a/compiler/base/parser/src/main/resources/GeneratedYang.g4 b/compiler/base/parser/src/main/resources/GeneratedYang.g4
index 0646a60..b4a20e5 100644
--- a/compiler/base/parser/src/main/resources/GeneratedYang.g4
+++ b/compiler/base/parser/src/main/resources/GeneratedYang.g4
@@ -800,13 +800,15 @@
* *((typedef-stmt /
* grouping-stmt) stmtsep)
* *(data-def-stmt stmtsep)
+ * [default-deny-write-stmt stmtsep]
+ * [default-deny-all-stmt stmtsep]
* "}")
- * TODO : 0..1 occurance to be checked in listener
+ * TODO : 0..1 occurrence to be checked in listener
*/
containerStatement : CONTAINER_KEYWORD identifier
(STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement | presenceStatement | configStatement
| statusStatement | descriptionStatement | referenceStatement | typedefStatement | groupingStatement
- | dataDefStatement)* RIGHT_CURLY_BRACE);
+ | dataDefStatement | defaultDenyWriteStatement | defaultDenyAllStatement )* RIGHT_CURLY_BRACE);
/**
* leaf-stmt = leaf-keyword sep identifier-arg-str optsep
@@ -823,12 +825,14 @@
* [status-stmt stmtsep]
* [description-stmt stmtsep]
* [reference-stmt stmtsep]
+ * [default-deny-write-stmt stmtsep]
+ * [default-deny-all-stmt stmtsep]
* "}"
- * TODO : 0..1 occurance to be checked in listener
+ * TODO : 0..1 occurrence to be checked in listener
*/
leafStatement : LEAF_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement | unitsStatement
| mustStatement | defaultStatement | configStatement | mandatoryStatement | statusStatement | descriptionStatement
- | referenceStatement)* RIGHT_CURLY_BRACE;
+ | referenceStatement | defaultDenyWriteStatement | defaultDenyAllStatement )* RIGHT_CURLY_BRACE;
/**
* leaf-list-stmt = leaf-list-keyword sep identifier-arg-str optsep
@@ -846,12 +850,15 @@
* [status-stmt stmtsep]
* [description-stmt stmtsep]
* [reference-stmt stmtsep]
+ * [default-deny-write-stmt stmtsep]
+ * [default-deny-all-stmt stmtsep]
* "}"
* TODO : 0..1 occurance to be checked in listener
*/
leafListStatement : LEAF_LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement
| unitsStatement | mustStatement | configStatement | minElementsStatement | maxElementsStatement | orderedByStatement
- | statusStatement | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
+ | statusStatement | descriptionStatement | referenceStatement
+ | defaultDenyWriteStatement | defaultDenyAllStatement )* RIGHT_CURLY_BRACE;
/**
* list-stmt = list-keyword sep identifier-arg-str optsep
@@ -869,6 +876,8 @@
* [status-stmt stmtsep]
* [description-stmt stmtsep]
* [reference-stmt stmtsep]
+ * [default-deny-write-stmt stmtsep]
+ * [default-deny-all-stmt stmtsep]
* *((typedef-stmt /
* grouping-stmt) stmtsep)
* 1*(data-def-stmt stmtsep)
@@ -877,7 +886,8 @@
*/
listStatement : LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement | keyStatement
| uniqueStatement | configStatement | minElementsStatement | maxElementsStatement | orderedByStatement | statusStatement
- | descriptionStatement | referenceStatement | typedefStatement | groupingStatement| dataDefStatement)* RIGHT_CURLY_BRACE;
+ | descriptionStatement | referenceStatement | defaultDenyWriteStatement | defaultDenyAllStatement
+ | typedefStatement | groupingStatement| dataDefStatement)* RIGHT_CURLY_BRACE;
/**
* key-stmt = key-keyword sep key-arg-str stmtend
@@ -1114,10 +1124,12 @@
* grouping-stmt) stmtsep)
* [input-stmt stmtsep]
* [output-stmt stmtsep]
+ * [default-deny-all-stmt stmtsep]
* "}")
*/
rpcStatement : RPC_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement | statusStatement | descriptionStatement
- | referenceStatement | typedefStatement | groupingStatement | inputStatement | outputStatement)* RIGHT_CURLY_BRACE);
+ | referenceStatement | typedefStatement | groupingStatement | inputStatement | outputStatement
+ | defaultDenyAllStatement)* RIGHT_CURLY_BRACE);
/**
* input-stmt = input-keyword optsep
@@ -1151,6 +1163,7 @@
* [status-stmt stmtsep]
* [description-stmt stmtsep]
* [reference-stmt stmtsep]
+ * [default-deny-all-stmt stmtsep]
* *((typedef-stmt /
* grouping-stmt) stmtsep)
* *(data-def-stmt stmtsep)
@@ -1158,7 +1171,8 @@
* TODO : 0..1 occurance to be checked in listener
*/
notificationStatement : NOTIFICATION_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement
- | statusStatement | descriptionStatement | referenceStatement | typedefStatement
+ | statusStatement | descriptionStatement | referenceStatement
+ | typedefStatement | defaultDenyAllStatement
| groupingStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
/**
@@ -1275,6 +1289,18 @@
*/
appExtendedStatement : APP_EXTENDED extendedName STMTEND;
+ /**
+ * default-deny-write-stmt = prefix:default-deny-write ";"
+ * From ietf-netconf-acm.yang RFC 6536
+ */
+ defaultDenyWriteStatement : DEFAULT_DENY_WRITE STMTEND;
+
+ /**
+ * default-deny-all-stmt = prefix:default-deny-all ";"
+ * From ietf-netconf-acm.yang RFC 6536
+ */
+ defaultDenyAllStatement : DEFAULT_DENY_ALL STMTEND;
+
string : STRING (PLUS STRING)*
| IDENTIFIER
| INTEGER
@@ -1346,4 +1372,4 @@
| FALSE_KEYWORD | MAX_KEYWORD | MIN_KEYWORD | NOT_SUPPORTED_KEYWORD | OBSOLETE_KEYWORD
| REPLACE_KEYWORD | SYSTEM_KEYWORD | TRUE_KEYWORD | UNBOUNDED_KEYWORD | USER_KEYWORD
| COMPILER_ANNOTATION_KEYWORD | APP_DATA_STRUCTURE_KEYWORD | DATA_STRUCTURE_KEYWORD
- | APP_EXTENDED_KEYWORD;
+ | APP_EXTENDED_KEYWORD | DEFAULT_DENY_WRITE_KEYWORD | DEFAULT_DENY_ALL_KEYWORD;
diff --git a/compiler/base/parser/src/main/resources/YangLexer.g4 b/compiler/base/parser/src/main/resources/YangLexer.g4
index 45189f7..cd942a0 100644
--- a/compiler/base/parser/src/main/resources/YangLexer.g4
+++ b/compiler/base/parser/src/main/resources/YangLexer.g4
@@ -113,6 +113,11 @@
DATA_STRUCTURE_KEY : IDENTIFIER COLON KEY_KEYWORD;
APP_EXTENDED_KEYWORD : 'app-extended-name';
APP_EXTENDED : IDENTIFIER COLON APP_EXTENDED_KEYWORD;
+ //From ietf-netconf-acm.yang RFC 6536
+ DEFAULT_DENY_WRITE_KEYWORD : 'default-deny-write';
+ DEFAULT_DENY_WRITE : IDENTIFIER COLON DEFAULT_DENY_WRITE_KEYWORD;
+ DEFAULT_DENY_ALL_KEYWORD : 'default-deny-all';
+ DEFAULT_DENY_ALL : IDENTIFIER COLON DEFAULT_DENY_ALL_KEYWORD;
// Lexer tokens to be skipped
COMMENT
@@ -147,4 +152,4 @@
fragment ALPHA : [A-Za-z];
fragment DIGIT : [0-9];
fragment URN : [u][r][n];
- fragment HTTP : [h][t][t][p];
\ No newline at end of file
+ fragment HTTP : [h][t][t][p];
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyAllExtRefListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyAllExtRefListenerTest.java
new file mode 100644
index 0000000..2bce360
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyAllExtRefListenerTest.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangExtension;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+/**
+ * Test cases for testing default-deny-all extension reference listener.
+ */
+public class DefaultDenyAllExtRefListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks extension reference statement as sub-statement of module.
+ */
+ @Test
+ public void processDefaultDenyAllExtensionRefStatement() throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/DefaultDenyAllExtensionRefTest.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("default-deny-all-extension-ref-test"));
+
+ YangExtension extension = yangNode.getExtensionList().iterator().next();
+ assertThat(extension.getName(), is("default-deny-all"));
+ assertThat(extension.getDescription(), is("\"Used to indicate that the data model node\n "
+ + "controls a very sensitive security system parameter.\""));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("test"));
+ assertNotNull(yangContainer.getDefaultDenyAll());
+
+ assertEquals(2, yangContainer.getListOfLeaf().size());
+ YangLeaf leaf1 = yangContainer.getListOfLeaf().get(0);
+ assertThat(leaf1.getName(), is("test1"));
+ assertFalse(leaf1.getDefaultDenyAll());
+
+ YangLeaf leaf2 = yangContainer.getListOfLeaf().get(1);
+ assertThat(leaf2.getName(), is("test2"));
+ assertTrue(leaf2.getDefaultDenyAll());
+
+ assertEquals(1, yangContainer.getListOfLeafList().size());
+ YangLeafList leaffList3 = yangContainer.getListOfLeafList().get(0);
+ assertThat(leaffList3.getName(), is("test3"));
+ assertTrue(leaffList3.getDefaultDenyAll());
+
+ YangList list4 = (YangList) yangContainer.getChild();
+ assertThat(list4.getName(), is("test4"));
+ assertTrue(list4.getDefaultDenyAll());
+
+ YangRpc testrpc = (YangRpc) yangContainer.getNextSibling();
+ assertThat(testrpc.getName(), is("testrpc"));
+ assertTrue(testrpc.getDefaultDenyAll());
+
+ YangNotification testNotification =
+ (YangNotification) testrpc.getNextSibling();
+ assertThat(testNotification.getName(), is("testnotif"));
+ assertTrue(testNotification.getDefaultDenyAll());
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyWriteExtRefListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyWriteExtRefListenerTest.java
new file mode 100644
index 0000000..c4f38a5
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultDenyWriteExtRefListenerTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import java.io.IOException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangExtension;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Test cases for testing default-deny-write extension reference listener.
+ */
+public class DefaultDenyWriteExtRefListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks extension reference statement as sub-statement of module.
+ */
+ @Test
+ public void processDefaultDenyWriteExtensionRefStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DefaultDenyWriteExtensionRefTest.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("default-deny-write-extension-ref-test"));
+
+ YangExtension extension = yangNode.getExtensionList().iterator().next();
+ assertThat(extension.getName(), is("default-deny-write"));
+ assertThat(extension.getDescription(),
+ is("\"Used to indicate that the data model node\n "
+ + "represents a sensitive security system parameter.\""));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("test"));
+ assertNotNull(yangContainer.getDefaultDenyWrite());
+
+ assertEquals(2, yangContainer.getListOfLeaf().size());
+ YangLeaf leaf1 = yangContainer.getListOfLeaf().get(0);
+ assertThat(leaf1.getName(), is("test1"));
+ assertFalse(leaf1.getDefaultDenyWrite());
+
+ YangLeaf leaf2 = yangContainer.getListOfLeaf().get(1);
+ assertThat(leaf2.getName(), is("test2"));
+ assertTrue(leaf2.getDefaultDenyWrite());
+
+ assertEquals(1, yangContainer.getListOfLeafList().size());
+ YangLeafList leaffList3 = yangContainer.getListOfLeafList().get(0);
+ assertThat(leaffList3.getName(), is("test3"));
+ assertTrue(leaffList3.getDefaultDenyAll());
+
+ YangList list4 = (YangList) yangContainer.getChild();
+ assertThat(list4.getName(), is("test4"));
+ assertTrue(list4.getDefaultDenyAll());
+ }
+}
+
diff --git a/compiler/base/parser/src/test/resources/DefaultDenyAllExtensionRefTest.yang b/compiler/base/parser/src/test/resources/DefaultDenyAllExtensionRefTest.yang
new file mode 100644
index 0000000..0583666
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/DefaultDenyAllExtensionRefTest.yang
@@ -0,0 +1,82 @@
+module default-deny-all-extension-ref-test {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
+ prefix "nacm";
+
+ description
+ "This version of this YANG module is part of RFC 6536; see
+ the RFC itself for full legal notices.";
+
+ revision 2016-12-08 {
+ description
+ "Initial revision.";
+ }
+
+ extension default-deny-all {
+ description
+ "Used to indicate that the data model node
+ controls a very sensitive security system parameter.";
+ }
+
+
+ container test {
+ nacm:default-deny-all;
+
+ leaf test1 {
+ type string {
+ length 1..6;
+ }
+ description "A leaf without an extension";
+ }
+
+ leaf test2 {
+ nacm:default-deny-all;
+ type string {
+ length 1..6;
+ }
+ description "A leaf with an extension";
+ }
+
+ leaf-list test3 {
+ nacm:default-deny-all;
+ type string {
+ length 1..6;
+ }
+ description "A leaf-list with an extension";
+ }
+
+ list test4 {
+ key test4a;
+ nacm:default-deny-all;
+ description "A list with the extension";
+
+ leaf test4a {
+ type uint8;
+ description "Key leaf in the list";
+ }
+
+ leaf test4b {
+ type string {
+ length 1..6;
+ }
+ description "Another leaf in the list";
+ }
+ }
+ }
+
+ rpc testrpc {
+ nacm:default-deny-all;
+ description "An rpc with default-deny-all";
+ }
+
+ notification testnotif {
+ nacm:default-deny-all;
+ description "An rpc with default-deny-all";
+
+ leaf test4b {
+ type string {
+ length 1..6;
+ }
+ description "Another leaf in the list";
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/resources/DefaultDenyWriteExtensionRefTest.yang b/compiler/base/parser/src/test/resources/DefaultDenyWriteExtensionRefTest.yang
new file mode 100644
index 0000000..711d663
--- /dev/null
+++ b/compiler/base/parser/src/test/resources/DefaultDenyWriteExtensionRefTest.yang
@@ -0,0 +1,64 @@
+module default-deny-write-extension-ref-test {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-acm";
+ prefix "nacm";
+
+ description
+ "This version of this YANG module is part of RFC 6536; see
+ the RFC itself for full legal notices.";
+
+ revision 2016-12-08 {
+ description
+ "Initial revision.";
+ }
+
+ extension default-deny-write {
+ description
+ "Used to indicate that the data model node
+ represents a sensitive security system parameter.";
+ }
+
+
+ container test {
+ nacm:default-deny-write;
+ leaf test1 {
+ type string {
+ length 1..6;
+ }
+ description "A leaf without an extension";
+ }
+
+ leaf test2 {
+ nacm:default-deny-write;
+ type string {
+ length 1..6;
+ }
+ description "A leaf with an extension";
+ }
+
+ leaf-list test3 {
+ nacm:default-deny-all;
+ type string {
+ length 1..6;
+ }
+ description "A leaf-list with an extension";
+ }
+
+ list test4 {
+ key test4a;
+ nacm:default-deny-all;
+ description "A list with the extension";
+
+ leaf test4a {
+ type uint8;
+ description "Key leaf in the list";
+ }
+
+ leaf test4b {
+ type string {
+ length 1..6;
+ }
+ description "Another leaf in the list";
+ }
+ }
+ }
+}
\ No newline at end of file