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