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