2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.sal.restconf.impl.cnsn.to.json.test;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
16 import java.io.IOException;
17 import java.io.StringReader;
18 import java.util.ArrayList;
19 import java.util.Collections;
20 import java.util.List;
22 import javax.ws.rs.WebApplicationException;
24 import org.junit.BeforeClass;
25 import org.junit.Test;
26 import org.opendaylight.controller.sal.rest.impl.StructuredDataToJsonProvider;
27 import org.opendaylight.controller.sal.rest.impl.XmlToCompositeNodeProvider;
28 import org.opendaylight.controller.sal.restconf.impl.test.TestUtils;
29 import org.opendaylight.controller.sal.restconf.impl.test.YangAndXmlAndDataSchemaLoader;
30 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
32 import com.google.gson.stream.JsonReader;
33 import com.google.gson.stream.JsonToken;
35 public class CnSnToJsonBasicDataTypesTest extends YangAndXmlAndDataSchemaLoader {
38 public static void initialize() {
39 dataLoad("/cnsn-to-json/simple-data-types");
43 public void simpleYangDataTest() {
45 CompositeNode compositeNode = TestUtils.readInputToCnSn("/cnsn-to-json/simple-data-types/xml/data.xml",
46 XmlToCompositeNodeProvider.INSTANCE);
48 String jsonOutput = null;
50 TestUtils.normalizeCompositeNode(compositeNode, modules, "simple-data-types:cont");
53 jsonOutput = TestUtils.writeCompNodeWithSchemaContextToOutput(compositeNode, modules, dataSchemaNode,
54 StructuredDataToJsonProvider.INSTANCE);
55 } catch (WebApplicationException | IOException e) {
57 assertNotNull(jsonOutput);
59 verifyJsonOutput(jsonOutput);
62 private void verifyJsonOutput(String jsonOutput) {
63 StringReader strReader = new StringReader(jsonOutput);
64 JsonReader jReader = new JsonReader(strReader);
66 String exception = null;
68 jsonReadCont(jReader);
69 } catch (IOException e) {
70 exception = e.getMessage();
73 assertNull("Error during reading Json output: " + exception, exception);
76 private void jsonReadCont(JsonReader jReader) throws IOException {
77 jReader.beginObject();
78 assertNotNull("cont1 is missing.", jReader.hasNext());
80 // Cont dataFromJson = new Cont(jReader.nextName());
82 jsonReadContElements(jReader);
84 assertFalse("cont shouldn't have other element.", jReader.hasNext());
86 // return dataFromJson;
89 private void jsonReadContElements(JsonReader jReader) throws IOException {
90 jReader.beginObject();
91 List<String> loadedLfs = new ArrayList<>();
92 boolean enumChecked = false;
93 boolean bitsChecked = false;
94 boolean lfdecimal6Checked = false;
95 boolean lfdecimal4Checked = false;
96 boolean lfdecimal3Checked = false;
97 boolean lfdecimal2Checked = false;
98 boolean lfdecimal1Checked = false;
99 boolean lfbool1Checked = false;
100 boolean lfbool2Checked = false;
101 boolean lfstrChecked = false;
102 boolean lfbinaryChecked = false;
103 boolean lfemptyChecked = false;
104 boolean lfstr1Checked = false;
105 boolean lfidentityrefChecked = false;
107 while (jReader.hasNext()) {
108 String keyName = jReader.nextName();
109 JsonToken peek = null;
111 peek = jReader.peek();
112 } catch (IOException e) {
113 assertTrue("Key " + keyName + " has incorrect value for specifed type", false);
116 if (keyName.startsWith("lfnint") || keyName.startsWith("lfnuint")) {
117 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
120 } catch (NumberFormatException e) {
121 assertTrue("Key " + keyName + " has incorrect value - " + e.getMessage(), false);
123 loadedLfs.add(keyName.substring(3));
124 } else if (keyName.equals("identityref1")) {
125 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
126 assertEquals("simple-data-types:iden", jReader.nextString());
127 lfidentityrefChecked = true;
128 } else if (keyName.equals("lfstr")) {
129 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
130 assertEquals("lfstr", jReader.nextString());
132 } else if (keyName.equals("lfstr1")) {
133 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
134 assertEquals("", jReader.nextString());
135 lfstr1Checked = true;
136 } else if (keyName.equals("lfbool1")) {
137 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
138 assertEquals(true, jReader.nextBoolean());
139 lfbool1Checked = true;
140 } else if (keyName.equals("lfbool2")) {
141 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
142 assertEquals(false, jReader.nextBoolean());
143 lfbool2Checked = true;
144 } else if (keyName.equals("lfbool3")) {
145 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
146 assertEquals(false, jReader.nextBoolean());
147 } else if (keyName.equals("lfdecimal1")) {
148 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
149 assertEquals(new Double(43.32), (Double) jReader.nextDouble());
150 lfdecimal1Checked = true;
151 } else if (keyName.equals("lfdecimal2")) {
152 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
153 assertEquals(new Double(-0.43), (Double) jReader.nextDouble());
154 lfdecimal2Checked = true;
155 } else if (keyName.equals("lfdecimal3")) {
156 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
157 assertEquals(new Double(43), (Double) jReader.nextDouble());
158 lfdecimal3Checked = true;
159 } else if (keyName.equals("lfdecimal4")) {
160 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
161 assertEquals(new Double(43E3), (Double) jReader.nextDouble());
162 lfdecimal4Checked = true;
163 } else if (keyName.equals("lfdecimal6")) {
164 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
165 assertEquals(new Double(33.12345), (Double) jReader.nextDouble());
166 lfdecimal6Checked = true;
167 } else if (keyName.equals("lfenum")) {
168 assertEquals("enum3", jReader.nextString());
170 } else if (keyName.equals("lfbits")) {
171 assertEquals("bit3 bit2", jReader.nextString());
173 } else if (keyName.equals("lfbinary")) {
174 assertEquals("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", jReader.nextString());
175 lfbinaryChecked = true;
176 } else if (keyName.equals("lfempty")) {
177 jReader.beginArray();
180 lfemptyChecked = true;
181 } else if (keyName.startsWith("lfunion")) {
182 checkLfUnion(jReader, keyName, peek);
184 assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
188 Collections.sort(loadedLfs);
189 String expectedLfsStr = "[int16Max, int16Min, int32Max, int32Min, int64Max, int64Min, int8Max, int8Min, uint16Max, uint32Max, uint8Max]";
190 String actualLfsStr = loadedLfs.toString();
191 assertEquals("Some leaves are missing", expectedLfsStr, actualLfsStr);
192 assertTrue("Enum wasn't checked", enumChecked);
193 assertTrue("Bits wasn't checked", bitsChecked);
194 assertTrue("Decimal1 wasn't checked", lfdecimal1Checked);
195 assertTrue("Decimal2 wasn't checked", lfdecimal2Checked);
196 assertTrue("Decimal3 wasn't checked", lfdecimal3Checked);
197 assertTrue("Decimal4 wasn't checked", lfdecimal4Checked);
198 assertTrue("Decimal5 wasn't checked", lfdecimal6Checked);
199 assertTrue("lfbool1 wasn't checked", lfbool1Checked);
200 assertTrue("lfbool2 wasn't checked", lfbool2Checked);
201 assertTrue("lfstr wasn't checked", lfstrChecked);
202 assertTrue("lfstr1 wasn't checked", lfstr1Checked);
203 assertTrue("lfbinary wasn't checked", lfbinaryChecked);
204 assertTrue("lfempty wasn't checked", lfemptyChecked);
205 assertTrue("lfidentityref wasn't checked", lfidentityrefChecked);
209 private void checkLfUnion(JsonReader jReader, String keyName, JsonToken peek) throws IOException {
210 if (keyName.equals("lfunion1")) {
211 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
212 assertEquals("324", jReader.nextString());
213 } else if (keyName.equals("lfunion2")) {
214 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
215 assertEquals("33.3", jReader.nextString());
216 } else if (keyName.equals("lfunion3")) {
217 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
218 assertEquals("55", jReader.nextString());
219 } else if (keyName.equals("lfunion4")) {
220 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
221 assertEquals("true", jReader.nextString());
222 } else if (keyName.equals("lfunion5")) {
223 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
224 assertEquals("true", jReader.nextString());
225 } else if (keyName.equals("lfunion6")) {
226 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
227 assertEquals("false", jReader.nextString());
228 } else if (keyName.equals("lfunion7")) {
229 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
230 assertEquals("", jReader.nextString());
231 } else if (keyName.equals("lfunion8")) {
232 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
233 assertEquals("", jReader.nextString());
234 } else if (keyName.equals("lfunion9")) {
235 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
236 assertEquals("", jReader.nextString());
237 } else if (keyName.equals("lfunion10")) {
238 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
239 assertEquals("bt1", jReader.nextString());
240 } else if (keyName.equals("lfunion11")) {
241 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
242 assertEquals("33", jReader.nextString());
243 } else if (keyName.equals("lfunion12")) {
244 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
245 assertEquals("false", jReader.nextString());
246 } else if (keyName.equals("lfunion13")) {
247 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
248 assertEquals("44", jReader.nextString());
249 } else if (keyName.equals("lfunion14")) {
250 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
251 assertEquals("21", jReader.nextString());