Merge "creating a default subnet"
[controller.git] / opendaylight / md-sal / sal-rest-connector / src / test / java / org / opendaylight / controller / sal / restconf / impl / test / YangAndXmlToJsonConversionJsonReaderTest.java
1 package org.opendaylight.controller.sal.restconf.impl.test;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
5 import static org.junit.Assert.assertTrue;
6
7 import java.io.*;
8 import java.util.*;
9
10 import org.junit.Test;
11
12 import com.google.gson.stream.JsonReader;
13
14 public class YangAndXmlToJsonConversionJsonReaderTest {
15
16     @Test
17     public void simpleYangTypesWithJsonReaderTest() {
18         String jsonOutput;
19         jsonOutput = TestUtils.readJsonFromFile("/yang-to-json-conversion/simple-yang-types/xml/awaited_output.json",
20                 false);
21
22 //        jsonOutput = TestUtils.convertXmlDataAndYangToJson("/yang-to-json-conversion/simple-yang-types/xml/data.xml",
23 //                "/yang-to-json-conversion/simple-yang-types");
24         
25         StringReader strReader = new StringReader(jsonOutput);
26         JsonReader jReader = new JsonReader(strReader);
27         try {
28             checkCont1(jReader);
29         } catch (IOException e) {
30             e.printStackTrace();
31         }
32     }
33
34     private void checkCont1(JsonReader jReader) throws IOException {
35         jReader.beginObject();
36         assertNotNull("cont1 is missing.", jReader.hasNext());
37         jReader.nextName();
38         checkCont1Elements(jReader, prepareInputData(jReader), "cont1/");
39         jReader.endObject();
40
41     }
42
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");
52
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");
65
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");
80
81         return dataMap;
82
83     }
84
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());
93                 keys.add(keyName);
94             } else if (keyName.equals("lflst11")) {
95                 checkLflstValues(jReader, pthPref + keyName, dataMap);
96                 keys.add(keyName);
97             } else if (keyName.equals("lflst12")) {
98                 checkLflstValues(jReader, pthPref + keyName, dataMap);
99                 keys.add(keyName);
100             } else if (keyName.equals("lst11")) {
101                 checkLst11(jReader, pthPref + keyName, dataMap);
102                 keys.add(keyName);
103             } else {
104                 assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
105             }
106         }
107         jReader.endObject();
108         assertEquals("Incorrect number of keys in cont1", 4, keys.size());
109
110     }
111
112     private void checkLst11(JsonReader jReader, String pthPref, Map<String, String> dataMap) throws IOException {
113         jReader.beginArray();
114
115         int arrayLength = 0;
116         while (jReader.hasNext()) {
117             checkLst11Elements(jReader, pthPref + "." + ++arrayLength + "/", dataMap);
118         }
119         jReader.endArray();
120         assertEquals("Incorrect number of items in lst11 array.", 2, arrayLength);
121     }
122
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);
137             } else {
138                 assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
139             }
140         }
141         jReader.endObject();
142     }
143
144     private void checkLst112(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
145         jReader.beginArray();
146         int arrayIndex = 0;
147         while (jReader.hasNext()) {
148             checkLst112Elements(jReader, pthPref + "." + ++arrayIndex + "/", data);
149         }
150         jReader.endArray();
151     }
152
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());
158         }
159         jReader.endObject();
160
161     }
162
163     private void checkLst111(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
164         jReader.beginArray();
165         int arrayIndex = 0;
166         while (jReader.hasNext()) {
167             checkLst111Elements(jReader, pthPref + "." + ++arrayIndex + "/", data);
168         }
169         jReader.endArray();
170     }
171
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());
177         }
178         jReader.endObject();
179     }
180
181     private void checkCont111(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
182         jReader.beginObject();
183         checkCont111Elements(jReader, pthPref + "/", data);
184         jReader.endObject();
185     }
186
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);
196             }
197         }
198
199     }
200
201     private void checkLst1111(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
202         jReader.beginArray();
203         int arrayIndex = 0;
204         while (jReader.hasNext()) {
205             checkLst1111Elements(jReader, pthPref + "." + ++arrayIndex + "/", data);
206         }
207         jReader.endArray();
208     }
209
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());
216
217             } else if (keyName.equals("lf1111B")) {
218                 assertEquals("Incorrect value for key " + keyName, data.get(pthPref + keyName), jReader.nextString());
219             }
220         }
221         jReader.endObject();
222     }
223
224     private void checkLflstValues(JsonReader jReader, String pthPref, Map<String, String> data) throws IOException {
225         jReader.beginArray();
226         int arrayIndex = 1;
227         String keyValue = null;
228         List<String> searchedValues = new ArrayList<>();
229         while ((keyValue = data.get(pthPref + "." + arrayIndex++)) != null) {
230             searchedValues.add(keyValue);
231         }
232
233         while (jReader.hasNext()) {
234             String value = jReader.nextString();
235             assertTrue("Value " + value + " of lflst " + pthPref + " wasn't found", searchedValues.contains(value));
236         }
237
238         jReader.endArray();
239     }
240
241
242
243 }