Added validation of range and length constraints.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / test / java / org / opendaylight / controller / yang / parser / impl / YangParserNegativeTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.yang.parser.impl;
9
10 import static org.junit.Assert.*;
11
12 import java.io.FileInputStream;
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.util.ArrayList;
16 import java.util.List;
17
18 import org.junit.Test;
19 import org.opendaylight.controller.yang.parser.util.YangParseException;
20 import org.opendaylight.controller.yang.parser.util.YangValidationException;
21
22 public class YangParserNegativeTest {
23
24     @Test
25     public void testInvalidImport() throws IOException {
26         try {
27             try (InputStream stream = new FileInputStream(getClass().getResource("/negative-scenario/testfile1.yang")
28                     .getPath())) {
29                 TestUtils.loadModule(stream);
30                 fail("ValidationException should by thrown");
31             }
32         } catch (YangValidationException e) {
33             assertTrue(e.getMessage().contains("Not existing module imported"));
34         }
35     }
36
37     @Test
38     public void testTypeNotFound() throws IOException {
39         try {
40             try (InputStream stream = new FileInputStream(getClass().getResource("/negative-scenario/testfile2.yang")
41                     .getPath())) {
42                 TestUtils.loadModule(stream);
43                 fail("YangParseException should by thrown");
44             }
45         } catch (YangParseException e) {
46             assertTrue(e.getMessage().contains(
47                     "Error in module 'test2' on line 24: Referenced type 'int-ext' not found."));
48         }
49     }
50
51     @Test
52     public void testInvalidAugmentTarget() throws IOException {
53         try {
54             final List<InputStream> streams = new ArrayList<>(2);
55             try (InputStream testFile0 = new FileInputStream(getClass()
56                     .getResource("/negative-scenario/testfile0.yang").getPath())) {
57                 streams.add(testFile0);
58                 try (InputStream testFile3 = new FileInputStream(getClass().getResource(
59                         "/negative-scenario/testfile3.yang").getPath())) {
60                     streams.add(testFile3);
61                     assertEquals("Expected loaded files count is 2", 2, streams.size());
62                     TestUtils.loadModules(streams);
63                     fail("YangParseException should by thrown");
64                 }
65             }
66         } catch (YangParseException e) {
67             assertTrue(e.getMessage().contains("Failed to resolve augments in module 'test3'."));
68         }
69     }
70
71     @Test
72     public void testInvalidRefine() throws IOException {
73         try {
74             try (InputStream stream = new FileInputStream(getClass().getResource("/negative-scenario/testfile4.yang")
75                     .getPath())) {
76                 TestUtils.loadModule(stream);
77                 fail("YangParseException should by thrown");
78             }
79         } catch (YangParseException e) {
80             assertTrue(e.getMessage().contains("Can not refine 'presence' for 'node'."));
81         }
82     }
83
84     @Test
85     public void testInvalidLength() throws IOException {
86         try {
87             try (InputStream stream = new FileInputStream(getClass().getResource("/negative-scenario/testfile5.yang")
88                     .getPath())) {
89                 TestUtils.loadModule(stream);
90                 fail("YangParseException should by thrown");
91             }
92         } catch (YangParseException e) {
93             assertTrue(e.getMessage().contains("Invalid length constraint: <4, 10>"));
94         }
95
96     }
97
98     @Test
99     public void testInvalidRange() throws IOException {
100         try {
101             try (InputStream stream = new FileInputStream(getClass().getResource("/negative-scenario/testfile6.yang")
102                     .getPath())) {
103                 TestUtils.loadModule(stream);
104                 fail("YangParseException should by thrown");
105             }
106         } catch (YangParseException e) {
107             assertTrue(e.getMessage().contains("Invalid range constraint: <5, 20>"));
108         }
109
110     }
111
112 }