RestapiCallNode unit tests
[ccsdk/sli/plugins.git] / restapi-call-node / provider / src / test / java / org / onap / ccsdk / sli / plugins / restapicall / TestJsonParser.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * openECOMP : SDN-C
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights
6  *                      reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  * 
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  * 
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.ccsdk.sli.plugins.restapicall;
23
24 import static org.junit.Assert.assertEquals;
25 import java.io.IOException;
26 import java.nio.file.Files;
27 import java.nio.file.Paths;
28 import java.util.Map;
29 import org.junit.Test;
30 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
31
32 public class TestJsonParser {
33
34     @Test
35     public void test() throws SvcLogicException, IOException {
36         String path = "src/test/resources/test.json";
37         String content = new String(Files.readAllBytes(Paths.get(path)));
38         Map<String, String> mm = JsonParser.convertToProperties(content);
39         assertEquals("Server1", mm.get("equipment-data[0].equipment-id"));
40         assertEquals("1600000", mm.get("equipment-data[0].max-server-speed"));
41         assertEquals("2", mm.get("equipment-data[0].number-primary-servers"));
42         assertEquals("4", mm.get("equipment-data[0].server-count"));
43         assertEquals("Server1", mm.get("equipment-data[0].server-id"));
44         assertEquals("Unknown", mm.get("equipment-data[0].server-model"));
45         assertEquals("Test-Value", mm.get("equipment-data[0].test-node.test-inner-node"));
46         assertEquals("1", mm.get("equipment-data_length"));
47         assertEquals("The provisioned access bandwidth is at or exceeds 50% of the total server capacity.",
48                 mm.get("message"));
49         assertEquals("VCE-Cust", mm.get("resource-rule.endpoint-position"));
50         assertEquals("Server", mm.get("resource-rule.equipment-level"));
51         assertEquals("max-server-speed * number-primary-servers", mm.get("resource-rule.hard-limit-expression"));
52         assertEquals("Bandwidth", mm.get("resource-rule.resource-name"));
53         assertEquals("DUMMY", mm.get("resource-rule.service-model"));
54         assertEquals("0.6 * max-server-speed * number-primary-servers", mm.get("resource-rule.soft-limit-expression"));
55         assertEquals("1605000", mm.get("resource-state.last-added"));
56         assertEquals("1920000", mm.get("resource-state.limit-value"));
57         assertEquals("1600000", mm.get("resource-state.threshold-value"));
58         assertEquals("1605000", mm.get("resource-state.used"));
59     }
60
61     @Test(expected = NullPointerException.class)
62     public void testNullString() throws SvcLogicException {
63         JsonParser.convertToProperties(null);
64     }
65
66     @Test
67     public void testJsonStringToCtxToplevelArray() throws Exception {
68         String path = "src/test/resources/ArrayMenu.json";
69         String content = new String(Files.readAllBytes(Paths.get(path)));
70         Map<String, String> mm = JsonParser.convertToProperties(content);
71         assertEquals("plain", mm.get("name"));
72         assertEquals("true", mm.get("vegetarian"));
73         assertEquals("1", mm.get("id"));
74         assertEquals("1000", mm.get("calories"));
75         assertEquals("pizza", mm.get("type"));
76
77         // The below statements are how I expected it to work, but it does not work this way
78 /*
79         assertEquals("1000", mm.get("[0].calories"));
80         assertEquals("1", mm.get("[0].id"));
81         assertEquals("plain", mm.get("[0].name"));
82         assertEquals("pizza", mm.get("[0].type"));
83         assertEquals("true", mm.get("[0].vegetarian"));
84         assertEquals("2000", mm.get("[1].calories"));
85         assertEquals("2", mm.get("[1].id"));
86         assertEquals("Tuesday Special", mm.get("[1].name"));
87         assertEquals("1", mm.get("[1].topping[0].id"));
88         assertEquals("onion", mm.get("[1].topping[0].name"));
89         assertEquals("2", mm.get("[1].topping[1].id"));
90         assertEquals("pepperoni", mm.get("[1].topping[1].name"));
91         assertEquals("2", mm.get("[1].topping_length"));
92         assertEquals("pizza", mm.get("[1].type"));
93         assertEquals("false", mm.get("[1].vegetarian"));
94         assertEquals("1500", mm.get("[2].calories"));
95         assertEquals("3", mm.get("[2].id"));
96         assertEquals("House Special", mm.get("[2].name"));
97         assertEquals("3", mm.get("[2].topping[0].id"));
98         assertEquals("basil", mm.get("[2].topping[0].name"));
99         assertEquals("4", mm.get("[2].topping[1].id"));
100         assertEquals("fresh mozzarella", mm.get("[2].topping[1].name"));
101         assertEquals("5", mm.get("[2].topping[2].id"));
102         assertEquals("tomato", mm.get("[2].topping[2].name"));
103         assertEquals("3", mm.get("[2].topping_length"));
104         assertEquals("pizza", mm.get("[2].type"));
105         assertEquals("true", mm.get("[2].vegetarian"));
106         assertEquals("3", mm.get("_length"));
107 */
108     }
109
110     @Test
111     public void testJsonStringToCtx() throws Exception {
112         String path = "src/test/resources/ObjectMenu.json";
113         String content = new String(Files.readAllBytes(Paths.get(path)));
114         Map<String, String> mm = JsonParser.convertToProperties(content);
115         assertEquals("1000", mm.get("menu[0].calories"));
116         assertEquals("1", mm.get("menu[0].id"));
117         assertEquals("plain", mm.get("menu[0].name"));
118         assertEquals("pizza", mm.get("menu[0].type"));
119         assertEquals("true", mm.get("menu[0].vegetarian"));
120         assertEquals("2000", mm.get("menu[1].calories"));
121         assertEquals("2", mm.get("menu[1].id"));
122         assertEquals("Tuesday Special", mm.get("menu[1].name"));
123         assertEquals("1", mm.get("menu[1].topping[0].id"));
124         assertEquals("onion", mm.get("menu[1].topping[0].name"));
125         assertEquals("2", mm.get("menu[1].topping[1].id"));
126         assertEquals("pepperoni", mm.get("menu[1].topping[1].name"));
127         assertEquals("2", mm.get("menu[1].topping_length"));
128         assertEquals("pizza", mm.get("menu[1].type"));
129         assertEquals("false", mm.get("menu[1].vegetarian"));
130         assertEquals("1500", mm.get("menu[2].calories"));
131         assertEquals("3", mm.get("menu[2].id"));
132         assertEquals("House Special", mm.get("menu[2].name"));
133         assertEquals("3", mm.get("menu[2].topping[0].id"));
134         assertEquals("basil", mm.get("menu[2].topping[0].name"));
135         assertEquals("4", mm.get("menu[2].topping[1].id"));
136         assertEquals("fresh mozzarella", mm.get("menu[2].topping[1].name"));
137         assertEquals("5", mm.get("menu[2].topping[2].id"));
138         assertEquals("tomato", mm.get("menu[2].topping[2].name"));
139         assertEquals("3", mm.get("menu[2].topping_length"));
140         assertEquals("pizza", mm.get("menu[2].type"));
141         assertEquals("true", mm.get("menu[2].vegetarian"));
142         assertEquals("3", mm.get("menu_length"));
143     }
144
145     @Test(expected = SvcLogicException.class) // current behavior is multidimensional arrays are not supported
146     public void test2dJsonStringToCtx() throws Exception {
147         String path = "src/test/resources/2dArray.json";
148         String content = new String(Files.readAllBytes(Paths.get(path)));
149         Map<String, String> mm = JsonParser.convertToProperties(content);
150
151         // code will crash before these tests
152         assertEquals("apple", mm.get("[0][0]"));
153         assertEquals("orange", mm.get("[0][1]"));
154         assertEquals("banana", mm.get("[0][2]"));
155         assertEquals("3", mm.get("[0]_length"));
156         assertEquals("squash", mm.get("[1][0]"));
157         assertEquals("broccoli", mm.get("[1][1]"));
158         assertEquals("cauliflower", mm.get("[1][2]"));
159         assertEquals("3", mm.get("[1]_length"));
160         assertEquals("2", mm.get("_length"));
161     }
162
163     @Test(expected = SvcLogicException.class) // current behavior is multidimensional arrays are not supported
164     public void test3dJsonStringToCtx() throws Exception {
165         String path = "src/test/resources/3dArray.json";
166         String content = new String(Files.readAllBytes(Paths.get(path)));
167         Map<String, String> mm = JsonParser.convertToProperties(content);
168
169         // code will crash before these tests
170         assertEquals("a", mm.get("[0][0][0]"));
171         assertEquals("b", mm.get("[0][0][1]"));
172         assertEquals("c", mm.get("[0][0][2]"));
173         assertEquals("3", mm.get("[0][0]_length"));
174         assertEquals("d", mm.get("[0][1][0]"));
175         assertEquals("e", mm.get("[0][1][1]"));
176         assertEquals("f", mm.get("[0][1][2]"));
177         assertEquals("3", mm.get("[0][1]_length"));
178         assertEquals("2", mm.get("[0]_length"));
179         assertEquals("x", mm.get("[1][0][0]"));
180         assertEquals("y", mm.get("[1][0][1]"));
181         assertEquals("z", mm.get("[1][0][2]"));
182         assertEquals("3", mm.get("[1][0]_length"));
183         assertEquals("1", mm.get("[1]_length"));
184         assertEquals("2", mm.get("_length"));
185     }
186
187     @Test
188     public void testJsonWidgetStringToCtx() throws Exception {
189         String path = "src/test/resources/Widget.json";
190         String content = new String(Files.readAllBytes(Paths.get(path)));
191         Map<String, String> mm = JsonParser.convertToProperties(content);
192         assertEquals("false", mm.get("widget.debug"));
193         assertEquals("center", mm.get("widget.image.alignment"));
194         assertEquals("150", mm.get("widget.image.hOffset"));
195         assertEquals("moon", mm.get("widget.image.name"));
196         assertEquals("images/moon.png", mm.get("widget.image.src"));
197         assertEquals("150", mm.get("widget.image.vOffset"));
198         assertEquals("center", mm.get("widget.text.alignment"));
199         assertEquals("Click Me", mm.get("widget.text.data"));
200         assertEquals("350", mm.get("widget.text.hOffset"));
201         assertEquals("text1", mm.get("widget.text.name"));
202         assertEquals("21", mm.get("widget.text.size"));
203         assertEquals("bold", mm.get("widget.text.style"));
204         assertEquals("200", mm.get("widget.text.vOffset"));
205         assertEquals("300", mm.get("widget.window.height"));
206         assertEquals("main_window", mm.get("widget.window.name"));
207         assertEquals("ONAP Widget", mm.get("widget.window.title"));
208         assertEquals("200", mm.get("widget.window.width"));
209     }
210
211     @Test
212     public void testEmbeddedEscapedJsonJsonStringToCtx() throws Exception {
213         String path = "src/test/resources/EmbeddedEscapedJson.json";
214         String content = new String(Files.readAllBytes(Paths.get(path)));
215         Map<String, String> mm = JsonParser.convertToProperties(content);
216         assertEquals("escapedJsonObject", mm.get("input.parameters[0].name"));
217         assertEquals("[{\"id\":\"0.2.0.0/16\"},{\"id\":\"ge04::/64\"}]", mm.get("input.parameters[0].value"));
218         assertEquals("Hello/World", mm.get("input.parameters[1].value"));
219         assertEquals("resourceName", mm.get("input.parameters[2].name"));
220         assertEquals("The\t\"Best\"\tName", mm.get("input.parameters[2].value"));
221         assertEquals("3", mm.get("input.parameters_length"));
222
223         // Break the embedded json object into properties
224         mm = JsonParser.convertToProperties(mm.get("input.parameters[0].value"));
225         assertEquals("0.2.0.0/16", mm.get("id"));
226         // assertEquals("ge04::/64", mm.get("id")); this second value gets lost
227     }
228
229 }