Projects moved under correct parent.
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-model-parser-impl / src / test / java / org / opendaylight / controller / yang / validator / YangModelValidationModuleTest.java
diff --git a/opendaylight/sal/yang-prototype/yang/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/validator/YangModelValidationModuleTest.java b/opendaylight/sal/yang-prototype/yang/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/validator/YangModelValidationModuleTest.java
new file mode 100644 (file)
index 0000000..3f9a53f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2013 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.controller.yang.validator;
+
+import static org.junit.Assert.assertThat;
+import static org.junit.matchers.JUnitMatchers.containsString;
+import static org.mockito.Mockito.*;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Module_header_stmtsContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Module_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Namespace_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Revision_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Revision_stmtsContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Yang_version_stmtContext;
+import org.opendaylight.controller.yang.parser.util.YangValidationException;
+
+public class YangModelValidationModuleTest {
+
+    private YangModelBasicValidationListener valid;
+
+    @Before
+    public void setUp() {
+        valid = new YangModelBasicValidationListener();
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testRevisionInvalidDateFormat() {
+        Revision_stmtContext mockedRev = mockModuleWithRevision("badFormat",
+                "module1");
+
+        try {
+            valid.enterRevision_stmt(mockedRev);
+        } catch (YangValidationException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("Revision:badFormat, invalid date format expected date format is:"));
+            throw e;
+        }
+    }
+
+    @Test
+    public void testRevisionValidDateFormat() {
+        Revision_stmtContext mockedRev = mockModuleWithRevision(
+                YangModelValidationTest.getFormattedDate(), "module1");
+
+        valid.enterRevision_stmt(mockedRev);
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testNoHeaderStmts() {
+        Revision_stmtContext rev = mockModuleWithRevision("1999-4-5", "module1");
+
+        try {
+            valid.enterModule_stmt((Module_stmtContext) rev.getParent()
+                    .getParent());
+        } catch (YangValidationException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("Missing Module-header statement in Module:module1"));
+            throw e;
+        }
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testMultipleModulesPerSession() {
+        Module_stmtContext module1 = (Module_stmtContext) mockModuleWithRevision(
+                "1999-09-10", "m1").getParent().getParent();
+        YangModelValidationTest.addChild(module1, YangModelValidationTest
+                .mockStatement(Namespace_stmtContext.class, ""));
+
+        Module_stmtContext module2 = (Module_stmtContext) mockModuleWithRevision(
+                "1999-09-10", "m2").getParent().getParent();
+        YangModelValidationTest.addChild(module1, YangModelValidationTest
+                .mockStatement(Namespace_stmtContext.class, ""));
+        valid.enterModule_stmt(module1);
+
+        try {
+            valid.enterModule_stmt(module2);
+        } catch (YangValidationException e) {
+            assertThat(e.getMessage(),
+                    containsString("Multiple (sub)modules per file"));
+            throw e;
+        }
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testNoNamespace() {
+        Module_header_stmtsContext header = YangModelValidationTest
+                .mockStatement(Module_header_stmtsContext.class, null);
+        Module_stmtContext mod = YangModelValidationTest.mockStatement(
+                Module_stmtContext.class, "module1");
+        YangModelValidationTest.addChild(mod, header);
+
+        try {
+            valid.enterModule_header_stmts(header);
+        } catch (YangValidationException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("Missing Namespace statement in Module-header:"));
+            throw e;
+        }
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testNoPrefix() {
+        Module_header_stmtsContext header = YangModelValidationTest
+                .mockStatement(Module_header_stmtsContext.class, null);
+        Namespace_stmtContext nmspc = YangModelValidationTest.mockStatement(
+                Namespace_stmtContext.class, "http://test");
+        Module_stmtContext mod = YangModelValidationTest.mockStatement(
+                Module_stmtContext.class, "module1");
+        YangModelValidationTest.addChild(mod, header);
+        YangModelValidationTest.addChild(header, nmspc);
+
+        try {
+            valid.enterModule_header_stmts(header);
+        } catch (YangValidationException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("Missing Prefix statement in Module-header:"));
+            throw e;
+        }
+    }
+
+    @Test(expected = YangValidationException.class)
+    public void testInvalidYangVersion() {
+
+        Yang_version_stmtContext yangVersion = YangModelValidationTest
+                .mockStatement(Yang_version_stmtContext.class, "55Unsup");
+
+        Module_stmtContext mod = YangModelValidationTest.mockStatement(
+                Module_stmtContext.class, "module1");
+        YangModelValidationTest.addChild(mod, yangVersion);
+
+        try {
+            valid.enterYang_version_stmt(yangVersion);
+        } catch (YangValidationException e) {
+            assertThat(
+                    e.getMessage(),
+                    containsString("Unsupported yang version:55Unsup, supported version:"
+                            + BasicValidations.SUPPORTED_YANG_VERSION));
+            throw e;
+        }
+    }
+
+    @Test
+    public void testValidYangVersion() {
+
+        Yang_version_stmtContext ctx = mock(Yang_version_stmtContext.class);
+        doReturn(1).when(ctx).getChildCount();
+        YangModelValidationTest.mockName(ctx, "1");
+
+        valid.enterYang_version_stmt(ctx);
+    }
+
+    private static Revision_stmtContext mockModuleWithRevision(String date,
+            String moduleName) {
+        Revision_stmtContext mockedRev = YangModelValidationTest.mockStatement(
+                Revision_stmtContext.class, date);
+        Revision_stmtsContext revs = YangModelValidationTest.mockStatement(
+                Revision_stmtsContext.class, null);
+        Module_stmtContext mod = YangModelValidationTest.mockStatement(
+                Module_stmtContext.class, moduleName);
+
+        YangModelValidationTest.addChild(revs, mockedRev);
+        YangModelValidationTest.addChild(mod, revs);
+        return mockedRev;
+    }
+}