312365585eaa149aaa05125acc4530840451c8e9
[controller.git] / opendaylight / md-sal / sal-rest-connector / src / test / java / org / opendaylight / controller / sal / restconf / impl / cnsn / to / json / test / CnSnToJsonBasicDataTypesTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.sal.restconf.impl.cnsn.to.json.test;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15
16 import java.io.IOException;
17 import java.io.StringReader;
18 import java.util.ArrayList;
19 import java.util.Collections;
20 import java.util.List;
21
22 import javax.ws.rs.WebApplicationException;
23
24 import org.junit.BeforeClass;
25 import org.junit.Test;
26 import org.opendaylight.controller.sal.rest.impl.StructuredDataToJsonProvider;
27 import org.opendaylight.controller.sal.rest.impl.XmlToCompositeNodeProvider;
28 import org.opendaylight.controller.sal.restconf.impl.test.TestUtils;
29 import org.opendaylight.controller.sal.restconf.impl.test.YangAndXmlAndDataSchemaLoader;
30 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
31
32 import com.google.gson.stream.JsonReader;
33 import com.google.gson.stream.JsonToken;
34
35 public class CnSnToJsonBasicDataTypesTest extends YangAndXmlAndDataSchemaLoader {
36
37     @BeforeClass
38     public static void initialize() {
39         dataLoad("/cnsn-to-json/simple-data-types");
40     }
41
42     @Test
43     public void simpleYangDataTest() {
44
45         CompositeNode compositeNode = TestUtils.readInputToCnSn("/cnsn-to-json/simple-data-types/xml/data.xml",
46                 XmlToCompositeNodeProvider.INSTANCE);
47
48         String jsonOutput = null;
49
50         TestUtils.normalizeCompositeNode(compositeNode, modules, "simple-data-types:cont");
51
52         try {
53             jsonOutput = TestUtils.writeCompNodeWithSchemaContextToOutput(compositeNode, modules, dataSchemaNode,
54                     StructuredDataToJsonProvider.INSTANCE);
55         } catch (WebApplicationException | IOException e) {
56         }
57         assertNotNull(jsonOutput);
58
59         verifyJsonOutput(jsonOutput);
60     }
61
62     private void verifyJsonOutput(String jsonOutput) {
63         StringReader strReader = new StringReader(jsonOutput);
64         JsonReader jReader = new JsonReader(strReader);
65
66         String exception = null;
67         try {
68             jsonReadCont(jReader);
69         } catch (IOException e) {
70             exception = e.getMessage();
71         }
72
73         assertNull("Error during reading Json output: " + exception, exception);
74     }
75
76     private void jsonReadCont(JsonReader jReader) throws IOException {
77         jReader.beginObject();
78         assertNotNull("cont1 is missing.", jReader.hasNext());
79
80         // Cont dataFromJson = new Cont(jReader.nextName());
81         jReader.nextName();
82         jsonReadContElements(jReader);
83
84         assertFalse("cont shouldn't have other element.", jReader.hasNext());
85         jReader.endObject();
86         // return dataFromJson;
87     }
88
89     private void jsonReadContElements(JsonReader jReader) throws IOException {
90         jReader.beginObject();
91         List<String> loadedLfs = new ArrayList<>();
92         boolean enumChecked = false;
93         boolean bitsChecked = false;
94         boolean lfdecimal6Checked = false;
95         boolean lfdecimal4Checked = false;
96         boolean lfdecimal3Checked = false;
97         boolean lfdecimal2Checked = false;
98         boolean lfdecimal1Checked = false;
99         boolean lfbool1Checked = false;
100         boolean lfbool2Checked = false;
101         boolean lfstrChecked = false;
102         boolean lfbinaryChecked = false;
103         boolean lfemptyChecked = false;
104         boolean lfstr1Checked = false;
105         boolean lfidentityrefChecked = false;
106
107         while (jReader.hasNext()) {
108             String keyName = jReader.nextName();
109             JsonToken peek = null;
110             try {
111                 peek = jReader.peek();
112             } catch (IOException e) {
113                 assertTrue("Key " + keyName + " has incorrect value for specifed type", false);
114             }
115
116             if (keyName.startsWith("lfnint") || keyName.startsWith("lfnuint")) {
117                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
118                 try {
119                     jReader.nextLong();
120                 } catch (NumberFormatException e) {
121                     assertTrue("Key " + keyName + " has incorrect value - " + e.getMessage(), false);
122                 }
123                 loadedLfs.add(keyName.substring(3));
124             } else if (keyName.equals("identityref1")) {
125                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
126                 assertEquals("simple-data-types:iden", jReader.nextString());
127                 lfidentityrefChecked = true;
128             } else if (keyName.equals("lfstr")) {
129                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
130                 assertEquals("lfstr", jReader.nextString());
131                 lfstrChecked = true;
132             } else if (keyName.equals("lfstr1")) {
133                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
134                 assertEquals("", jReader.nextString());
135                 lfstr1Checked = true;
136             } else if (keyName.equals("lfbool1")) {
137                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
138                 assertEquals(true, jReader.nextBoolean());
139                 lfbool1Checked = true;
140             } else if (keyName.equals("lfbool2")) {
141                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
142                 assertEquals(false, jReader.nextBoolean());
143                 lfbool2Checked = true;
144             } else if (keyName.equals("lfbool3")) {
145                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.BOOLEAN, peek);
146                 assertEquals(false, jReader.nextBoolean());
147             } else if (keyName.equals("lfdecimal1")) {
148                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
149                 assertEquals(new Double(43.32), (Double) jReader.nextDouble());
150                 lfdecimal1Checked = true;
151             } else if (keyName.equals("lfdecimal2")) {
152                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
153                 assertEquals(new Double(-0.43), (Double) jReader.nextDouble());
154                 lfdecimal2Checked = true;
155             } else if (keyName.equals("lfdecimal3")) {
156                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
157                 assertEquals(new Double(43), (Double) jReader.nextDouble());
158                 lfdecimal3Checked = true;
159             } else if (keyName.equals("lfdecimal4")) {
160                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
161                 assertEquals(new Double(43E3), (Double) jReader.nextDouble());
162                 lfdecimal4Checked = true;
163             } else if (keyName.equals("lfdecimal6")) {
164                 assertEquals("Key " + keyName + " has incorrect type", JsonToken.NUMBER, peek);
165                 assertEquals(new Double(33.12345), (Double) jReader.nextDouble());
166                 lfdecimal6Checked = true;
167             } else if (keyName.equals("lfenum")) {
168                 assertEquals("enum3", jReader.nextString());
169                 enumChecked = true;
170             } else if (keyName.equals("lfbits")) {
171                 assertEquals("bit3 bit2", jReader.nextString());
172                 bitsChecked = true;
173             } else if (keyName.equals("lfbinary")) {
174                 assertEquals("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", jReader.nextString());
175                 lfbinaryChecked = true;
176             } else if (keyName.equals("lfempty")) {
177                 jReader.beginArray();
178                 jReader.nextNull();
179                 jReader.endArray();
180                 lfemptyChecked = true;
181             } else if (keyName.startsWith("lfunion")) {
182                 checkLfUnion(jReader, keyName, peek);
183             } else {
184                 assertTrue("Key " + keyName + " doesn't exists in yang file.", false);
185             }
186
187         }
188         Collections.sort(loadedLfs);
189         String expectedLfsStr = "[int16Max, int16Min, int32Max, int32Min, int64Max, int64Min, int8Max, int8Min, uint16Max, uint32Max, uint8Max]";
190         String actualLfsStr = loadedLfs.toString();
191         assertEquals("Some leaves are missing", expectedLfsStr, actualLfsStr);
192         assertTrue("Enum wasn't checked", enumChecked);
193         assertTrue("Bits wasn't checked", bitsChecked);
194         assertTrue("Decimal1 wasn't checked", lfdecimal1Checked);
195         assertTrue("Decimal2 wasn't checked", lfdecimal2Checked);
196         assertTrue("Decimal3 wasn't checked", lfdecimal3Checked);
197         assertTrue("Decimal4 wasn't checked", lfdecimal4Checked);
198         assertTrue("Decimal5 wasn't checked", lfdecimal6Checked);
199         assertTrue("lfbool1 wasn't checked", lfbool1Checked);
200         assertTrue("lfbool2 wasn't checked", lfbool2Checked);
201         assertTrue("lfstr wasn't checked", lfstrChecked);
202         assertTrue("lfstr1 wasn't checked", lfstr1Checked);
203         assertTrue("lfbinary wasn't checked", lfbinaryChecked);
204         assertTrue("lfempty wasn't checked", lfemptyChecked);
205         assertTrue("lfidentityref wasn't checked", lfidentityrefChecked);
206         jReader.endObject();
207     }
208
209     private void checkLfUnion(JsonReader jReader, String keyName, JsonToken peek) throws IOException {
210         if (keyName.equals("lfunion1")) {
211             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
212             assertEquals("324", jReader.nextString());
213         } else if (keyName.equals("lfunion2")) {
214             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
215             assertEquals("33.3", jReader.nextString());
216         } else if (keyName.equals("lfunion3")) {
217             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
218             assertEquals("55", jReader.nextString());
219         } else if (keyName.equals("lfunion4")) {
220             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
221             assertEquals("true", jReader.nextString());
222         } else if (keyName.equals("lfunion5")) {
223             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
224             assertEquals("true", jReader.nextString());
225         } else if (keyName.equals("lfunion6")) {
226             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
227             assertEquals("false", jReader.nextString());
228         } else if (keyName.equals("lfunion7")) {
229             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
230             assertEquals("", jReader.nextString());
231         } else if (keyName.equals("lfunion8")) {
232             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
233             assertEquals("", jReader.nextString());
234         } else if (keyName.equals("lfunion9")) {
235             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
236             assertEquals("", jReader.nextString());
237         } else if (keyName.equals("lfunion10")) {
238             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
239             assertEquals("bt1", jReader.nextString());
240         } else if (keyName.equals("lfunion11")) {
241             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
242             assertEquals("33", jReader.nextString());
243         } else if (keyName.equals("lfunion12")) {
244             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
245             assertEquals("false", jReader.nextString());
246         } else if (keyName.equals("lfunion13")) {
247             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
248             assertEquals("44", jReader.nextString());
249         } else if (keyName.equals("lfunion14")) {
250             assertEquals("Key " + keyName + " has incorrect type", JsonToken.STRING, peek);
251             assertEquals("21", jReader.nextString());
252         }
253     }
254 }