X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fyang%2Fyang-model-parser-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fvalidator%2FYangModelValidationModuleTest.java;fp=opendaylight%2Fsal%2Fyang-prototype%2Fyang%2Fyang-model-parser-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fvalidator%2FYangModelValidationModuleTest.java;h=3f9a53fe689a926a40b5af2344a38e453ff2753c;hp=0000000000000000000000000000000000000000;hb=ba1a5528e27b0ae8a883fa7b768d803659bf9336;hpb=b64d31500de4d9bd81a060432c3db20feb2e7dfa 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 index 0000000000..3f9a53fe68 --- /dev/null +++ b/opendaylight/sal/yang-prototype/yang/yang-model-parser-impl/src/test/java/org/opendaylight/controller/yang/validator/YangModelValidationModuleTest.java @@ -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; + } +}