/* * 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; } }