Merge "Fix for Bug 144"
[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 =
22         // TestUtils.readJsonFromFile("/yang-to-json-conversion/simple-yang-types/xml/awaited_output.json",
23         // false);
24
25         jsonOutput = TestUtils.convertCompositeNodeDataAndYangToJson(
26                 TestUtils.loadCompositeNode("/yang-to-json-conversion/simple-data-types/xml/data.xml"),
27                 "/yang-to-json-conversion/simple-data-types", "/yang-to-json-conversion/simple-data-types/xml");
28         verifyJsonOutput(jsonOutput);
29     }
30
31     private void verifyJsonOutput(String jsonOutput) {
32         StringReader strReader = new StringReader(jsonOutput);
33         JsonReader jReader = new JsonReader(strReader);
34
35         String exception = null;
36         try {
37             jsonReadCont(jReader);
38         } catch (IOException e) {
39             exception = e.getMessage();
40         }
41
42         assertNull("Error during reading Json output: " + exception, exception);
43     }
44
45     private void jsonReadCont(JsonReader jReader) throws IOException {
46         jReader.beginObject();
47         assertNotNull("cont1 is missing.", jReader.hasNext());
48
49         // Cont dataFromJson = new Cont(jReader.nextName());
50         jReader.nextName();
51         jsonReadContElements(jReader);
52
53         assertFalse("cont shouldn't have other element.", jReader.hasNext());
54         jReader.endObject();
55         // return dataFromJson;
56     }
57
58     private void jsonReadContElements(JsonReader jReader) throws IOException {
59         jReader.beginObject();
60         List<String> loadedLfs = new ArrayList<>();
61         boolean exceptForDecimal5Raised = false;
62         boolean enumChecked = false;
63         boolean bitsChecked = false;
64         boolean lfdecimal6Checked = false;
65         boolean lfdecimal4Checked = false;
66         boolean lfdecimal3Checked = false;
67         boolean lfdecimal2Checked = false;
68         boolean lfdecimal1Checked = false;
69         boolean lfbool1Checked = false;
70         boolean lfbool2Checked = false;
71         boolean lfstrChecked = false;
72         boolean lfbinaryChecked = false;
73         // boolean lfref1Checked = false;
74         boolean lfemptyChecked = false;
75
76         while (jReader.hasNext()) {
77             String keyName = jReader.nextName();
78             JsonToken peek = null;
79             try {
80                 peek = jReader.peek();
81             } catch (IOException e) {
82                 if (keyName.equals("lfdecimal5")) {
83                     exceptForDecimal5Raised = true;
84                 } else {
85                     assertTrue("Key " + keyName + " has incorrect value for specifed type", false);
86                 }
87             }
88
89             if (keyName.startsWith("lfnint") || keyName.startsWith("lfnuint")) {
90                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
91                 try {
92                     jReader.nextLong();
93                 } catch (NumberFormatException e) {
94                     assertTrue("Key " + keyName + " has incorrect value - " + e.getMessage(), false);
95                 }
96                 loadedLfs.add(keyName.substring(3));
97             } else if (keyName.equals("lfstr")) {
98                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
99                 assertEquals("lfstr", jReader.nextString());
100                 lfstrChecked = true;
101             } else if (keyName.equals("lfbool1")) {
102                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
103                 assertEquals(true, jReader.nextBoolean());
104                 lfbool1Checked = true;
105             } else if (keyName.equals("lfbool2")) {
106                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
107                 assertEquals(false, jReader.nextBoolean());
108                 lfbool2Checked = true;
109             } else if (keyName.equals("lfbool3")) {
110                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
111                 assertEquals(false, jReader.nextBoolean());
112             } else if (keyName.equals("lfdecimal1")) {
113                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
114                 assertEquals(new Double(43.32), (Double) jReader.nextDouble());
115                 lfdecimal1Checked = true;
116             } else if (keyName.equals("lfdecimal2")) {
117                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
118                 assertEquals(new Double(-0.43), (Double) jReader.nextDouble());
119                 lfdecimal2Checked = true;
120             } else if (keyName.equals("lfdecimal3")) {
121                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
122                 assertEquals(new Double(43), (Double) jReader.nextDouble());
123                 lfdecimal3Checked = true;
124             } else if (keyName.equals("lfdecimal4")) {
125                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
126                 assertEquals(new Double(43E3), (Double) jReader.nextDouble());
127                 lfdecimal4Checked = true;
128             } else if (keyName.equals("lfdecimal6")) {
129                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
130                 assertEquals(new Double(33.12345), (Double) jReader.nextDouble());
131                 lfdecimal6Checked = true;
132             } else if (keyName.equals("lfenum")) {
133                 assertEquals("enum3", jReader.nextString());
134                 enumChecked = true;
135             } else if (keyName.equals("lfbits")) {
136                 assertEquals("bit3", jReader.nextString());
137                 bitsChecked = true;
138             } else if (keyName.equals("lfbinary")) {
139                 assertEquals("AAaacdabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%%-#^", jReader.nextString());
140                 lfbinaryChecked = true;
141             } else if (keyName.equals("lfempty")) {
142                 jReader.beginArray();
143                 jReader.nextNull();
144                 jReader.endArray();
145                 lfemptyChecked = true;
146                 // TODO: test will be implemented when functionality will be
147                 // implemented
148             } else if (keyName.equals("lflstunion")) {
149                 jReader.skipValue();
150             } else {
151                 assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
152             }
153
154         }
155         Collections.sort(loadedLfs);
156         String expectedLfsStr = "[int16Max, int16Min, int32Max, int32Min, int64Max, int64Min, int8Max, int8Min, uint16Max, uint32Max, uint8Max]";
157         String actualLfsStr = loadedLfs.toString();
158         assertEquals("Some leaves are missing", expectedLfsStr, actualLfsStr);
159         // assertTrue("For lfdecimal5 wasn't catch error",exceptForDecimal5Raised);
160         assertTrue("Enum wasn't checked", enumChecked);
161         assertTrue("Bits wasn't checked", bitsChecked);
162         assertTrue("Decimal1 wasn't checked", lfdecimal1Checked);
163         assertTrue("Decimal2 wasn't checked", lfdecimal2Checked);
164         assertTrue("Decimal3 wasn't checked", lfdecimal3Checked);
165         assertTrue("Decimal4 wasn't checked", lfdecimal4Checked);
166         assertTrue("Decimal5 wasn't checked", lfdecimal6Checked);
167         assertTrue("lfbool1 wasn't checked", lfbool1Checked);
168         assertTrue("lfbool2 wasn't checked", lfbool2Checked);
169         assertTrue("lfstr wasn't checked", lfstrChecked);
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 }