/* * 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 org.junit.Before; import org.junit.Test; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Default_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Key_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Leaf_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.List_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Mandatory_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Ordered_by_argContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Type_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Unique_stmtContext; import org.opendaylight.controller.yang.parser.util.YangValidationException; public class YangModelValidationListTest { private YangModelBasicValidationListener valid; @Before public void setUp() { valid = new YangModelBasicValidationListener(); } @Test(expected = YangValidationException.class) public void testKeyValidationDuplicates() { List_stmtContext list = YangModelValidationTest.mockStatement( List_stmtContext.class, "list"); Key_stmtContext key = YangModelValidationTest.mockStatement( Key_stmtContext.class, "leaf1 leaf2 leaf1 leaf1"); YangModelValidationTest.addChild(list, key); try { valid.enterKey_stmt(key); } catch (YangValidationException e) { assertThat(e.getMessage(), containsString("contains duplicates:[leaf1]")); throw e; } } @Test(expected = YangValidationException.class) public void testUniqueValidationDuplicates() { List_stmtContext list = YangModelValidationTest.mockStatement( List_stmtContext.class, "list"); Unique_stmtContext unique = YangModelValidationTest.mockStatement( Unique_stmtContext.class, "leaf1/a leaf2/n leaf1/a leaf1"); YangModelValidationTest.addChild(list, unique); try { valid.enterUnique_stmt(unique); } catch (YangValidationException e) { assertThat(e.getMessage(), containsString("contains duplicates:[leaf1/a]")); throw e; } } @Test(expected = YangValidationException.class) public void testOrderBy() { Ordered_by_argContext ctx = YangModelValidationTest.mockStatement( Ordered_by_argContext.class, "unknown"); try { valid.enterOrdered_by_arg(ctx); } catch (YangValidationException e) { assertThat( e.getMessage(), containsString("Ordered-by:unknown, illegal value for Ordered-by statement, only permitted:")); throw e; } } @Test(expected = YangValidationException.class) public void testLeaf() { Leaf_stmtContext ctx = YangModelValidationTest.mockStatement( Leaf_stmtContext.class, "leaf1"); Default_stmtContext def = YangModelValidationTest.mockStatement( Default_stmtContext.class, "default"); YangModelValidationTest.addChild(ctx, def); Type_stmtContext typ = YangModelValidationTest.mockStatement( Type_stmtContext.class, "type"); YangModelValidationTest.addChild(ctx, def); YangModelValidationTest.addChild(ctx, typ); Mandatory_stmtContext mand = YangModelValidationTest.mockStatement( Mandatory_stmtContext.class, null); YangModelValidationTest.addChild(ctx, mand); try { valid.enterLeaf_stmt(ctx); } catch (YangValidationException e) { assertThat( e.getMessage(), containsString("Both Mandatory and Default statement present")); throw e; } } }