Implemented ordering of yang module data nodes. Added Comparators utility class.
[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     @Test
98     public void testInvalidRange() throws IOException {
99         try {
100             try (InputStream stream = new FileInputStream(getClass().getResource("/negative-scenario/testfile6.yang")
101                     .getPath())) {
102                 TestUtils.loadModule(stream);
103                 fail("YangParseException should by thrown");
104             }
105         } catch (YangParseException e) {
106             assertTrue(e.getMessage().contains("Invalid range constraint: <5, 20>"));
107         }
108     }
109
110     @Test
111     public void testDuplicateContainer() throws IOException {
112         try {
113             try (InputStream stream = new FileInputStream(getClass().getResource(
114                     "/negative-scenario/duplicity/container.yang").getPath())) {
115                 TestUtils.loadModule(stream);
116                 fail("YangParseException should by thrown");
117             }
118         } catch (YangParseException e) {
119             assertTrue(e.getMessage()
120                     .contains("Error in module 'container' on line 10: Duplicate node found at line 6"));
121         }
122     }
123
124     @Test
125     public void testDuplicateContainerList() throws IOException {
126         try {
127             try (InputStream stream = new FileInputStream(getClass().getResource(
128                     "/negative-scenario/duplicity/container-list.yang").getPath())) {
129                 TestUtils.loadModule(stream);
130                 fail("YangParseException should by thrown");
131             }
132         } catch (YangParseException e) {
133             assertTrue(e.getMessage().contains(
134                     "Error in module 'container-list' on line 10: Duplicate node found at line 6"));
135         }
136     }
137
138     @Test
139     public void testDuplicateContainerLeaf() throws IOException {
140         try {
141             try (InputStream stream = new FileInputStream(getClass().getResource(
142                     "/negative-scenario/duplicity/container-leaf.yang").getPath())) {
143                 TestUtils.loadModule(stream);
144                 fail("YangParseException should by thrown");
145             }
146         } catch (YangParseException e) {
147             assertTrue(e.getMessage().contains(
148                     "Error in module 'container-leaf' on line 10: Duplicate node found at line 6"));
149         }
150     }
151
152     @Test
153     public void testDuplicateTypedef() throws IOException {
154         try {
155             try (InputStream stream = new FileInputStream(getClass().getResource(
156                     "/negative-scenario/duplicity/typedef.yang").getPath())) {
157                 TestUtils.loadModule(stream);
158                 fail("YangParseException should by thrown");
159             }
160         } catch (YangParseException e) {
161             assertTrue(e.getMessage().contains("Error in module 'typedef' on line 10: Duplicate node found at line 6"));
162         }
163     }
164
165 }