1 package org.opendaylight.controller.sal.restconf.impl.test;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
5 import static org.junit.Assert.assertTrue;
10 import org.junit.Test;
12 import com.google.gson.stream.JsonReader;
14 public class YangAndXmlToJsonConversionJsonReaderTest {
17 public void simpleYangTypesWithJsonReaderTest() {
19 jsonOutput = TestUtils.readJsonFromFile("/yang-to-json-conversion/simple-yang-types/xml/awaited_output.json",
22 // jsonOutput = TestUtils.convertXmlDataAndYangToJson("/yang-to-json-conversion/simple-yang-types/xml/data.xml",
23 // "/yang-to-json-conversion/simple-yang-types");
25 StringReader strReader = new StringReader(jsonOutput);
26 JsonReader jReader = new JsonReader(strReader);
29 } catch (IOException e) {
34 private void checkCont1(JsonReader jReader) throws IOException {
35 jReader.beginObject();
36 assertNotNull("cont1 is missing.", jReader.hasNext());
38 checkCont1Elements(jReader, prepareInputData(jReader), "cont1/");
43 private Map<String, String> prepareInputData(JsonReader jReader) {
44 Map<String, String> dataMap = new HashMap<>();
45 dataMap.put("cont1/lf11", "lf");
46 dataMap.put("cont1/lflst11.1", "55");
47 dataMap.put("cont1/lflst11.2", "56");
48 dataMap.put("cont1/lflst11.3", "57");
49 dataMap.put("cont1/lflst12.1", "lflst12 str1");
50 dataMap.put("cont1/lflst12.2", "lflst12 str2");
51 dataMap.put("cont1/lflst12.3", "lflst12 str3");
53 dataMap.put("cont1/lst11.1/lf111", "140");
54 dataMap.put("cont1/lst11.1/lf112", "lf112 str");
55 dataMap.put("cont1/lst11.1/cont111/lf1111", "lf1111 str");
56 dataMap.put("cont1/lst11.1/cont111/lflst1111.1", "2048");
57 dataMap.put("cont1/lst11.1/cont111/lflst1111.2", "1024");
58 dataMap.put("cont1/lst11.1/cont111/lflst1111.3", "4096");
59 dataMap.put("cont1/lst11.1/cont111/lst1111.1/lf1111A", "lf1111A str11");
60 dataMap.put("cont1/lst11.1/cont111/lst1111.1/lf1111B", "4");
61 dataMap.put("cont1/lst11.1/cont111/lst1111.2/lf1111A", "lf1111A str12");
62 dataMap.put("cont1/lst11.1/cont111/lst1111.2/lf1111B", "7");
63 dataMap.put("cont1/lst11.1/lst111.1/lf1111", "65");
64 dataMap.put("cont1/lst11.1/lst112.1/lf1121", "lf1121 str11");
66 dataMap.put("cont1/lst11.2/lf111", "141");
67 dataMap.put("cont1/lst11.2/lf112", "lf112 str2");
68 dataMap.put("cont1/lst11.2/cont111/lf1111", "lf1111 str2");
69 dataMap.put("cont1/lst11.2/cont111/lflst1111.1", "2049");
70 dataMap.put("cont1/lst11.2/cont111/lflst1111.2", "1025");
71 dataMap.put("cont1/lst11.2/cont111/lflst1111.3", "4097");
72 dataMap.put("cont1/lst11.2/cont111/lst1111.1/lf1111A", "lf1111A str21");
73 dataMap.put("cont1/lst11.2/cont111/lst1111.1/lf1111B", "5");
74 dataMap.put("cont1/lst11.2/cont111/lst1111.2/lf1111A", "lf1111A str22");
75 dataMap.put("cont1/lst11.2/cont111/lst1111.2/lf1111B", "8");
76 dataMap.put("cont1/lst11.2/lst111.1/lf1111", "55");
77 dataMap.put("cont1/lst11.2/lst111.2/lf1111", "56");
78 dataMap.put("cont1/lst11.2/lst112.1/lf1121", "lf1121 str21");
79 dataMap.put("cont1/lst11.2/lst112.2/lf1121", "lf1121 str22");
85 private void checkCont1Elements(JsonReader jReader, Map<String, String> dataMap, String pthPref) throws IOException {
86 Set<String> keys = new HashSet<>();
87 jReader.beginObject();
88 while (jReader.hasNext()) {
89 String keyName = jReader.nextName();
90 if (keyName.equals("lf11")) {
91 assertEquals("Key " + keyName + " has incorrect value.", dataMap.get(pthPref + keyName),
92 jReader.nextString());
94 } else if (keyName.equals("lflst11")) {
95 checkLflstValues(jReader, pthPref + keyName, dataMap);
97 } else if (keyName.equals("lflst12")) {
98 checkLflstValues(jReader, pthPref + keyName, dataMap);
100 } else if (keyName.equals("lst11")) {
101 checkLst11(jReader, pthPref + keyName, dataMap);
104 assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
108 assertEquals("Incorrect number of keys in cont1", 4, keys.size());
112 private void checkLst11(JsonReader jReader, String pthPref, Map<String, String> dataMap) throws IOException {
113 jReader.beginArray();
116 while (jReader.hasNext()) {
117 checkLst11Elements(jReader, pthPref + "." + ++arrayLength + "/", dataMap);
120 assertEquals("Incorrect number of items in lst11 array.", 2, arrayLength);
123 private void checkLst11Elements(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
124 jReader.beginObject();
125 while (jReader.hasNext()) {
126 String keyName = jReader.nextName();
127 if (keyName.equals("lf111")) {
128 assertEquals("Incorrect value for key " + keyName, data.get(pthPref + keyName), jReader.nextString());
129 } else if (keyName.equals("lf112")) {
130 assertEquals("Incorrect value for key " + keyName, data.get(pthPref + keyName), jReader.nextString());
131 } else if (keyName.equals("cont111")) {
132 checkCont111(jReader, pthPref + keyName, data);
133 } else if (keyName.equals("lst111")) {
134 checkLst111(jReader, pthPref + keyName, data);
135 } else if (keyName.equals("lst112")) {
136 checkLst112(jReader, pthPref + keyName, data);
138 assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
144 private void checkLst112(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
145 jReader.beginArray();
147 while (jReader.hasNext()) {
148 checkLst112Elements(jReader, pthPref + "." + ++arrayIndex + "/", data);
153 private void checkLst112Elements(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
154 jReader.beginObject();
155 if (jReader.hasNext()) {
156 String keyName = jReader.nextName();
157 assertEquals("Incorrect value for key " + keyName, data.get(pthPref + keyName), jReader.nextString());
163 private void checkLst111(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
164 jReader.beginArray();
166 while (jReader.hasNext()) {
167 checkLst111Elements(jReader, pthPref + "." + ++arrayIndex + "/", data);
172 private void checkLst111Elements(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
173 jReader.beginObject();
174 if (jReader.hasNext()) {
175 String keyName = jReader.nextName();
176 assertEquals("Incorrect value for key " + keyName, data.get(pthPref + keyName), jReader.nextString());
181 private void checkCont111(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
182 jReader.beginObject();
183 checkCont111Elements(jReader, pthPref + "/", data);
187 private void checkCont111Elements(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
188 while (jReader.hasNext()) {
189 String keyName = jReader.nextName();
190 if (keyName.equals("lf1111")) {
191 assertEquals("Incorrect value for key " + keyName, data.get(pthPref + keyName), jReader.nextString());
192 } else if (keyName.equals("lflst1111")) {
193 checkLflstValues(jReader, pthPref + keyName, data);
194 } else if (keyName.equals("lst1111")) {
195 checkLst1111(jReader, pthPref + keyName, data);
201 private void checkLst1111(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
202 jReader.beginArray();
204 while (jReader.hasNext()) {
205 checkLst1111Elements(jReader, pthPref + "." + ++arrayIndex + "/", data);
210 private void checkLst1111Elements(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
211 jReader.beginObject();
212 while (jReader.hasNext()) {
213 String keyName = jReader.nextName();
214 if (keyName.equals("lf1111A")) {
215 assertEquals("Incorrect value for key " + keyName, data.get(pthPref + keyName), jReader.nextString());
217 } else if (keyName.equals("lf1111B")) {
218 assertEquals("Incorrect value for key " + keyName, data.get(pthPref + keyName), jReader.nextString());
224 private void checkLflstValues(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
225 jReader.beginArray();
227 String keyValue = null;
228 List<String> searchedValues = new ArrayList<>();
229 while ((keyValue = data.get(pthPref + "." + arrayIndex++)) != null) {
230 searchedValues.add(keyValue);
233 while (jReader.hasNext()) {
234 String value = jReader.nextString();
235 assertTrue("Value " + value + " of lflst " + pthPref + " wasn't found", searchedValues.contains(value));