69de9f86c1defa491003d13db1a4825183deb521
[controller.git] / opendaylight / md-sal / sal-rest-connector / src / test / java / org / opendaylight / controller / sal / restconf / impl / test / ToJsonBasicDataTypesTest.java
1 package org.opendaylight.controller.sal.restconf.impl.test;
2
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;
8
9 import java.io.*;
10 import java.util.*;
11
12 import org.junit.Test;
13
14 import com.google.gson.stream.*;
15
16 public class ToJsonBasicDataTypesTest {
17
18     @Test
19     public void simpleYangDataTest() {
20         String jsonOutput;
21         jsonOutput = TestUtils.convertCompositeNodeDataAndYangToJson(
22                 TestUtils.loadCompositeNode("/yang-to-json-conversion/simple-data-types/xml/data.xml"),
23                 "/yang-to-json-conversion/simple-data-types", "/yang-to-json-conversion/simple-data-types/xml");
24         verifyJsonOutput(jsonOutput);
25     }
26
27     private void verifyJsonOutput(String jsonOutput) {
28         StringReader strReader = new StringReader(jsonOutput);
29         JsonReader jReader = new JsonReader(strReader);
30
31         String exception = null;
32         try {
33             jsonReadCont(jReader);
34         } catch (IOException e) {
35             exception = e.getMessage();
36         }
37
38         assertNull("Error during reading Json output: " + exception, exception);
39     }
40
41     private void jsonReadCont(JsonReader jReader) throws IOException {
42         jReader.beginObject();
43         assertNotNull("cont1 is missing.", jReader.hasNext());
44
45         // Cont dataFromJson = new Cont(jReader.nextName());
46         jReader.nextName();
47         jsonReadContElements(jReader);
48
49         assertFalse("cont shouldn't have other element.", jReader.hasNext());
50         jReader.endObject();
51         // return dataFromJson;
52     }
53
54     private void jsonReadContElements(JsonReader jReader) throws IOException {
55         jReader.beginObject();
56         List<String> loadedLfs = new ArrayList<>();
57         boolean exceptForDecimal5Raised = false;
58         boolean enumChecked = false;
59         boolean bitsChecked = false;
60         boolean lfdecimal6Checked = false;
61         boolean lfdecimal4Checked = false;
62         boolean lfdecimal3Checked = false;
63         boolean lfdecimal2Checked = false;
64         boolean lfdecimal1Checked = false;
65         boolean lfbool1Checked = false;
66         boolean lfbool2Checked = false;
67         boolean lfstrChecked = false;
68         boolean lfbinaryChecked = false;
69         // boolean lfref1Checked = false;
70         boolean lfemptyChecked = false;
71         boolean lfstr1Checked = false;
72
73         while (jReader.hasNext()) {
74             String keyName = jReader.nextName();
75             JsonToken peek = null;
76             try {
77                 peek = jReader.peek();
78             } catch (IOException e) {
79                 if (keyName.equals("lfdecimal5")) {
80                     exceptForDecimal5Raised = true;
81                 } else {
82                     assertTrue("Key " + keyName + " has incorrect value for specifed type", false);
83                 }
84             }
85
86             if (keyName.startsWith("lfnint") || keyName.startsWith("lfnuint")) {
87                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
88                 try {
89                     jReader.nextLong();
90                 } catch (NumberFormatException e) {
91                     assertTrue("Key " + keyName + " has incorrect value - " + e.getMessage(), false);
92                 }
93                 loadedLfs.add(keyName.substring(3));
94             } else if (keyName.equals("lfstr")) {
95                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
96                 assertEquals("lfstr", jReader.nextString());
97                 lfstrChecked = true;
98             } else if (keyName.equals("lfstr1")) {
99                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
100                 assertEquals("", jReader.nextString());
101                 lfstr1Checked = true;
102             } else if (keyName.equals("lfbool1")) {
103                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
104                 assertEquals(true, jReader.nextBoolean());
105                 lfbool1Checked = true;
106             } else if (keyName.equals("lfbool2")) {
107                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
108                 assertEquals(false, jReader.nextBoolean());
109                 lfbool2Checked = true;
110             } else if (keyName.equals("lfbool3")) {
111                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
112                 assertEquals(false, jReader.nextBoolean());
113             } else if (keyName.equals("lfdecimal1")) {
114                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
115                 assertEquals(new Double(43.32), (Double) jReader.nextDouble());
116                 lfdecimal1Checked = true;
117             } else if (keyName.equals("lfdecimal2")) {
118                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
119                 assertEquals(new Double(-0.43), (Double) jReader.nextDouble());
120                 lfdecimal2Checked = true;
121             } else if (keyName.equals("lfdecimal3")) {
122                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
123                 assertEquals(new Double(43), (Double) jReader.nextDouble());
124                 lfdecimal3Checked = true;
125             } else if (keyName.equals("lfdecimal4")) {
126                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
127                 assertEquals(new Double(43E3), (Double) jReader.nextDouble());
128                 lfdecimal4Checked = true;
129             } else if (keyName.equals("lfdecimal6")) {
130                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
131                 assertEquals(new Double(33.12345), (Double) jReader.nextDouble());
132                 lfdecimal6Checked = true;
133             } else if (keyName.equals("lfenum")) {
134                 assertEquals("enum3", jReader.nextString());
135                 enumChecked = true;
136             } else if (keyName.equals("lfbits")) {
137                 assertEquals("bit3", jReader.nextString());
138                 bitsChecked = true;
139             } else if (keyName.equals("lfbinary")) {
140                 assertEquals("AAaacdabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%%-#^", jReader.nextString());
141                 lfbinaryChecked = true;
142             } else if (keyName.equals("lfempty")) {
143                 jReader.beginArray();
144                 jReader.nextNull();
145                 jReader.endArray();
146                 lfemptyChecked = true;
147             } else if (keyName.startsWith("lfunion")) {
148                 checkLfUnion(jReader, keyName, peek);
149             } else {
150                 assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
151             }
152
153         }
154         Collections.sort(loadedLfs);
155         String expectedLfsStr = "[int16Max, int16Min, int32Max, int32Min, int64Max, int64Min, int8Max, int8Min, uint16Max, uint32Max, uint8Max]";
156         String actualLfsStr = loadedLfs.toString();
157         assertEquals("Some leaves are missing", expectedLfsStr, actualLfsStr);
158         // assertTrue("For lfdecimal5 wasn't catch error",exceptForDecimal5Raised);
159         assertTrue("Enum wasn't checked", enumChecked);
160         assertTrue("Bits wasn't checked", bitsChecked);
161         assertTrue("Decimal1 wasn't checked", lfdecimal1Checked);
162         assertTrue("Decimal2 wasn't checked", lfdecimal2Checked);
163         assertTrue("Decimal3 wasn't checked", lfdecimal3Checked);
164         assertTrue("Decimal4 wasn't checked", lfdecimal4Checked);
165         assertTrue("Decimal5 wasn't checked", lfdecimal6Checked);
166         assertTrue("lfbool1 wasn't checked", lfbool1Checked);
167         assertTrue("lfbool2 wasn't checked", lfbool2Checked);
168         assertTrue("lfstr wasn't checked", lfstrChecked);
169         assertTrue("lfstr1 wasn't checked", lfstr1Checked);
170         assertTrue("lfbinary wasn't checked", lfbinaryChecked);
171         assertTrue("lfempty wasn't checked", lfemptyChecked);
172         // assertTrue("lfref1 wasn't checked", lfref1Checked);
173
174         jReader.endObject();
175
176     }
177
178     private void checkLfUnion(JsonReader jReader, String keyName, JsonToken peek) throws IOException {
179         if (keyName.equals("lfunion1")) {
180             assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
181             jReader.nextString();
182         } else if (keyName.equals("lfunion2")) {
183             assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
184             jReader.nextString();
185         } else if (keyName.equals("lfunion3")) {
186             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
187             jReader.nextInt();
188         } else if (keyName.equals("lfunion4")) {
189             assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
190             jReader.nextBoolean();
191         } else if (keyName.equals("lfunion5")) {
192             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
193             jReader.nextString();
194         } else if (keyName.equals("lfunion6")) {
195             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
196             jReader.nextString();
197         } else if (keyName.equals("lfunion7")) {
198             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
199             jReader.nextString();
200         } else if (keyName.equals("lfunion8")) {
201             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
202             jReader.nextString();
203         } else if (keyName.equals("lfunion9")) {
204             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
205             jReader.nextString();
206         } else if (keyName.equals("lfunion10")) {
207             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
208             jReader.nextString();
209         } else if (keyName.equals("lfunion11")) {
210             assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
211             jReader.nextString();
212         } else if (keyName.equals("lfunion12")) {
213             assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
214             jReader.nextBoolean();
215         }
216     }
217 }