Merge "Fix for Bug 3"
[controller.git] / opendaylight / md-sal / sal-rest-connector / src / test / java / org / opendaylight / controller / sal / restconf / impl / cnsn / to / json / test / CnSnToJsonBasicDataTypesTest.java
1 package org.opendaylight.controller.sal.restconf.impl.cnsn.to.json.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.IOException;
10 import java.io.StringReader;
11 import java.util.ArrayList;
12 import java.util.Collections;
13 import java.util.List;
14
15 import javax.ws.rs.WebApplicationException;
16
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;
24
25 import com.google.gson.stream.JsonReader;
26 import com.google.gson.stream.JsonToken;
27
28 public class CnSnToJsonBasicDataTypesTest extends YangAndXmlAndDataSchemaLoader {
29
30     @BeforeClass
31     public static void initialize() {
32         dataLoad("/cnsn-to-json/simple-data-types");
33     }
34
35     @Test
36     public void simpleYangDataTest() {
37
38         CompositeNode compositeNode = TestUtils.readInputToCnSn("/cnsn-to-json/simple-data-types/xml/data.xml",
39                 XmlToCompositeNodeProvider.INSTANCE);
40
41         String jsonOutput = null;
42
43         TestUtils.normalizeCompositeNode(compositeNode, modules, "simple-data-types:cont");
44
45         try {
46             jsonOutput = TestUtils.writeCompNodeWithSchemaContextToOutput(compositeNode, modules, dataSchemaNode,
47                     StructuredDataToJsonProvider.INSTANCE);
48         } catch (WebApplicationException | IOException e) {
49         }
50         assertNotNull(jsonOutput);
51
52         verifyJsonOutput(jsonOutput);
53     }
54
55     private void verifyJsonOutput(String jsonOutput) {
56         StringReader strReader = new StringReader(jsonOutput);
57         JsonReader jReader = new JsonReader(strReader);
58
59         String exception = null;
60         try {
61             jsonReadCont(jReader);
62         } catch (IOException e) {
63             exception = e.getMessage();
64         }
65
66         assertNull("Error during reading Json output: " + exception, exception);
67     }
68
69     private void jsonReadCont(JsonReader jReader) throws IOException {
70         jReader.beginObject();
71         assertNotNull("cont1 is missing.", jReader.hasNext());
72
73         // Cont dataFromJson = new Cont(jReader.nextName());
74         jReader.nextName();
75         jsonReadContElements(jReader);
76
77         assertFalse("cont shouldn't have other element.", jReader.hasNext());
78         jReader.endObject();
79         // return dataFromJson;
80     }
81
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;
99
100         while (jReader.hasNext()) {
101             String keyName = jReader.nextName();
102             JsonToken peek = null;
103             try {
104                 peek = jReader.peek();
105             } catch (IOException e) {
106                 assertTrue("Key " + keyName + " has incorrect value for specifed type", false);
107             }
108
109             if (keyName.startsWith("lfnint") || keyName.startsWith("lfnuint")) {
110                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
111                 try {
112                     jReader.nextLong();
113                 } catch (NumberFormatException e) {
114                     assertTrue("Key " + keyName + " has incorrect value - " + e.getMessage(), false);
115                 }
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());
124                 lfstrChecked = true;
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());
162                 enumChecked = true;
163             } else if (keyName.equals("lfbits")) {
164                 assertEquals("bit3 bit2", jReader.nextString());
165                 bitsChecked = true;
166             } else if (keyName.equals("lfbinary")) {
167                 assertEquals("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", jReader.nextString());
168                 lfbinaryChecked = true;
169             } else if (keyName.equals("lfempty")) {
170                 jReader.beginArray();
171                 jReader.nextNull();
172                 jReader.endArray();
173                 lfemptyChecked = true;
174             } else if (keyName.startsWith("lfunion")) {
175                 checkLfUnion(jReader, keyName, peek);
176             } else {
177                 assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
178             }
179
180         }
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);
199         jReader.endObject();
200     }
201
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());
245         }
246     }
247 }