271b268ce92351499edf66daa47707a7779ee0ab
[ccsdk/features.git] /
1 /*******************************************************************************
2  * ============LICENSE_START========================================================================
3  * ONAP : ccsdk feature sdnr wt
4  * =================================================================================================
5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6  * =================================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software distributed under the License
13  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14  * or implied. See the License for the specific language governing permissions and limitations under
15  * the License.
16  * ============LICENSE_END==========================================================================
17  ******************************************************************************/
18 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
19
20 import java.io.IOException;
21 import java.math.BigInteger;
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.eclipse.jdt.annotation.NonNull;
26 import org.eclipse.jdt.annotation.Nullable;
27 import org.json.JSONObject;
28 import org.junit.Test;
29 import org.onap.ccsdk.features.sdnr.wt.common.database.DatabaseClient;
30 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
31 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
32 import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo;
33 import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo.Protocol;
34 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.BoolQueryBuilder;
35 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder;
36 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders;
37 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.EsDataObjectReaderWriter;
38 import org.onap.ccsdk.features.sdnr.wt.dataprovider.yangtools.YangToolsMapper;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.OdlHelloMessageCapabilitiesBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.CreateMediatorServerInputBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Entity;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EntityInput;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ReadPmdata15mListInput;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ReadPmdata15mListInputBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ReadPmdata15mListOutputBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SortOrder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.entity.input.Filter;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.entity.input.PaginationBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.entity.input.Sortorder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.pmdata15m.entity.PerformanceDataBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.pmdata._15m.list.output.Data;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.pmdata._15m.list.output.DataBuilder;
58 import org.opendaylight.yangtools.concepts.Builder;
59 import org.opendaylight.yangtools.yang.binding.DataContainer;
60 import org.opendaylight.yangtools.yang.binding.DataObject;
61
62 public class TestYangGenSalMapping {
63
64     // Create mapper for serialization and deserialization
65     YangToolsMapper mapper = new YangToolsMapper();
66
67     @Test
68     public void test1() throws IOException {
69
70         // Create test object
71         NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder();
72         netconfNodeBuilder.setConnectedMessage("ConnMessage");
73
74         LoginPasswordBuilder loginPasswordBuilder = new LoginPasswordBuilder();
75         loginPasswordBuilder.setUsername("myTestUsername");
76         loginPasswordBuilder.setPassword("myTestPassword");
77         netconfNodeBuilder.setCredentials(loginPasswordBuilder.build());
78
79         OdlHelloMessageCapabilitiesBuilder odlHelloMessageCapabilitiesBuilder = new OdlHelloMessageCapabilitiesBuilder();
80         List<Uri> uriList = new ArrayList<>();
81         uriList.add( new Uri("test.uri") );
82         odlHelloMessageCapabilitiesBuilder.setCapability(uriList);
83         netconfNodeBuilder.setOdlHelloMessageCapabilities(odlHelloMessageCapabilitiesBuilder.build());
84
85         NetconfNode netconfNode = netconfNodeBuilder.build();
86         out(netconfNode.toString());
87
88         // Map Object to JSON String
89         String res = mapper.writeValueAsString(netconfNode);
90         JSONObject json = new JSONObject(res); // Convert text to object
91         out(json.toString(4)); // Print it with specified indentation
92
93         // Map to JSON String to Object
94         NetconfNode generatedNode = mapper.readValue(res.getBytes(), NetconfNode.class);
95         out(generatedNode.toString()); // Print it with specified indentation
96         // Compare result
97         out("Equal?  "+netconfNode.equals(generatedNode));
98     }
99
100     static class TestDataObjectBuilder implements Builder<TestDataObject> {
101         @Override
102         public @NonNull TestDataObject build() throws IllegalArgumentException {
103             return new TestDataObject();
104         }
105     }
106
107     static class TestDataObject implements DataObject {
108         String test;
109
110         @Override
111         public Class<? extends DataContainer> getImplementedInterface() {
112             return null;
113         }
114     }
115
116     @Test
117     public void test2() throws ClassNotFoundException    {
118
119         int databasePort = Integer.valueOf(System.getProperty("databaseport")!=null?System.getProperty("databaseport"):"49200");
120         System.out.println("DB Port: "+databasePort);
121
122         HostInfo[] HOSTINFOS = new HostInfo[] { new HostInfo("localhost", databasePort ,Protocol.HTTP)};
123         DatabaseClient db = new HtDatabaseClient(HOSTINFOS);
124
125         EsDataObjectReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.inventory.list.output.Data> dataRW =
126             new EsDataObjectReaderWriter<>(db, "inventorytest", org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.inventory.list.output.Data.class);
127
128         org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.inventory.list.output.Data d1;
129         d1 = getInventoryDataBuilder("MyDescription", 23L).build();
130         String id = dataRW.write(d1,null);
131
132         org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.inventory.list.output.Data d2;
133         d2 = dataRW.read(id);
134
135         out(d2.toString());
136
137     }
138
139     @Test
140     public void test3() throws IOException    {
141
142         PerformanceDataBuilder performanceBuilder = new PerformanceDataBuilder();
143         performanceBuilder.setEs(99);
144         DataBuilder pmData15MinutesBuilder = new DataBuilder();
145         pmData15MinutesBuilder.setLayerProtocolName("fdsaf");
146         pmData15MinutesBuilder.setTimeStamp(new DateAndTime("2017-03-01T09:15:00.0Z"));
147         pmData15MinutesBuilder.setPerformanceData(performanceBuilder.build());
148
149         // Map Object to JSON String
150         String res = mapper.writeValueAsString(pmData15MinutesBuilder.build());
151         JSONObject json = new JSONObject(res); // Convert text to object
152         out(json.toString(4)); // Print it with specified indentation
153
154         // Map to JSON String to Object
155         Data generatedNode = mapper.readValue(res.getBytes(), Data.class);
156         out(generatedNode.toString()); // Print it with specified indentation
157     }
158
159     @Test
160     public void test4() throws IOException {
161
162         String jsonString = "{\n" + "\"node-name\": \"Sim2230\",\n" + "\"uuid-interface\": \"LP-MWPS-TTP-RADIO\",\n"
163                 + "\"layer-protocol-name\": \"MWPS\",\n" + "\"radio-signal-id\": \"Test8\",\n"
164                 + "\"time-stamp\": \"2017-03-01T09:15:00.0Z\",\n" + "\"granularity-period\": \"Period15Min\",\n"
165                 + "\"scanner-id\": \"PM_RADIO_15M_4\",\n" + "\"performance-data\": {\n" + "\"unavailability\": 0,\n"
166                 + "\"tx-level-max\": 3,\n" + "\"tx-level-avg\": 3,\n" + "\"rx-level-min\": -44,\n"
167                 + "\"rx-level-max\": -45,\n" + "\"rx-level-avg\": -44,\n" + "\"time2-states\": 0,\n"
168                 + "\"time4-states-s\": 0,\n" + "\"time4-states\": 0,\n" + "\"time8-states\": -1,\n"
169                 + "\"time16-states-s\": -1,\n" + "\"time16-states\": 0,\n" + "\"time32-states\": -1,\n"
170                 + "\"time64-states\": 900,\n" + "\"time128-states\": -1,\n" + "\"time256-states\": -1,\n"
171                 + "\"time512-states\": -1,\n" + "\"time512-states-l\": -1,\n" + "\"time1024-states\": -1,\n"
172                 + "\"time1024-states-l\": -1,\n" + "\"time8192-states-l\": -1,\n" + "\"time8192-states\": -1,\n"
173                 + "\"time2048-states\": -1,\n" + "\"snir-min\": -99,\n" + "\"snir-max\": -99,\n"
174                 + "\"snir-avg\": -99,\n" + "\"xpd-min\": -99,\n" + "\"xpd-max\": -99,\n" + "\"xpd-avg\": -99,\n"
175                 + "\"rf-temp-min\": -99,\n" + "\"rf-temp-max\": -99,\n" + "\"rf-temp-avg\": -99,\n"
176                 + "\"defect-blocks-sum\": -1,\n" + "\"time-period\": 900,\n" + "\"cses\": 0,\n"
177                 + "\"time4096-states-l\": -1,\n" + "\"tx-level-min\": 3,\n" + "\"es\": 0,\n"
178                 + "\"time2048-states-l\": -1,\n" + "\"time4096-states\": -1,\n" + "\"ses\": 0\n" + "},\n"
179                 + "\"suspect-interval-flag\": false\n" + "}\n" + "}";
180         // Map to JSON String to Object
181         Data generatedNode = mapper.readValue(jsonString.getBytes(), Data.class);
182         out(generatedNode.toString()); // Print it with specified indentation
183
184     }
185
186
187     @Test
188     public void test5() throws IOException {
189         String jsonString = "{\n" +
190                 "    \"time-stamp\": \"2017-03-01T06:45:00.0Z\",\n" +
191                 "    \"node-name\": \"Sim2230\",\n" +
192                 "    \"uuid-interface\": \"LP-MWPS-TTP-RADIO\",\n" +
193                 "    \"scanner-id\": \"PM_RADIO_15M_14\",\n" +
194                 "    \"layer-protocol-name\": \"MWPS\",\n" +
195                 "    \"granularity-period\": \"Period15Min\",\n" +
196                 "    \"radio-signal-id\": \"Test8\",\n" +
197                 "    \"suspect-interval-flag\": false,\n" +
198                 "    \"performance-data\": {\n" +
199                 "        \"time4096-states-l\": -1,\n" +
200                 "        \"time16-states-s\": -1,\n" +
201                 "        \"tx-level-max\": 3,\n" +
202                 "        \"snir-max\": -99,\n" +
203                 "        \"time16-states\": 0,\n" +
204                 "        \"time64-states\": 900,\n" +
205                 "        \"unavailability\": 0,\n" +
206                 "        \"time8192-states-l\": -1,\n" +
207                 "        \"time512-states\": -1,\n" +
208                 "        \"xpd-min\": -99,\n" +
209                 "        \"xpd-avg\": -99,\n" +
210                 "        \"tx-level-avg\": 3,\n" +
211                 "        \"tx-level-min\": 3,\n" +
212                 "        \"rf-temp-min\": -99,\n" +
213                 "        \"rf-temp-avg\": -99,\n" +
214                 "        \"snir-avg\": -99,\n" +
215                 "        \"snir-min\": -99,\n" +
216                 "        \"time-period\": 900,\n" +
217                 "        \"time2-states\": 0,\n" +
218                 "        \"time4-states\": 0,\n" +
219                 "        \"time8-states\": -1,\n" +
220                 "        \"ses\": 0,\n" +
221                 "        \"time2048-states-l\": -1,\n" +
222                 "        \"time2048-states\": -1,\n" +
223                 "        \"xpd-max\": -99,\n" +
224                 "        \"rf-temp-max\": -99,\n" +
225                 "        \"time8192-states\": -1,\n" +
226                 "        \"time128-states\": -1,\n" +
227                 "        \"time256-states\": -1,\n" +
228                 "        \"rx-level-min\": -44,\n" +
229                 "        \"rx-level-avg\": -44,\n" +
230                 "        \"time1024-states-l\": -1,\n" +
231                 "        \"es\": 0,\n" +
232                 "        \"cses\": 0,\n" +
233                 "        \"time4-states-s\": 0,\n" +
234                 "        \"time1024-states\": -1,\n" +
235                 "        \"time512-states-l\": -1,\n" +
236                 "        \"time4096-states\": -1,\n" +
237                 "        \"rx-level-max\": -45,\n" +
238                 "        \"defect-blocks-sum\": -1,\n" +
239                 "        \"time32-states\": -1\n" +
240                 "    }\n" +
241                 "}";
242
243         // Map to JSON String to Object
244         Data generatedNode = mapper.readValue(jsonString.getBytes(), Data.class);
245         out(generatedNode.toString()); // Print it with specified indentation
246
247     }
248
249
250     @Test
251     public void test6() throws IOException, ClassNotFoundException {
252         out(method());
253         HtDatabaseClient dbClient = new HtDatabaseClient(new HostInfo[] { new HostInfo("sdnrdb", 9200, Protocol.HTTP) });
254         String PMDATA15M_TYPE = "historicalperformance15min";
255
256         EsDataObjectReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.pmdata._15m.list.output.Data> pm15mRW =
257                 new EsDataObjectReaderWriter<>(dbClient, PMDATA15M_TYPE, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.pmdata._15m.list.output.Data.class);
258         pm15mRW.setEsIdAttributeName("_nodeName");
259
260         ReadPmdata15mListInputBuilder inputBuilder = new ReadPmdata15mListInputBuilder();
261         PaginationBuilder paginationBuilder = new PaginationBuilder();
262         paginationBuilder.setPage(new BigInteger("1"));
263         paginationBuilder.setSize(20L);
264         inputBuilder.setPagination(paginationBuilder.build());
265
266         ReadPmdata15mListInput input = inputBuilder.build();
267
268
269         ReadPmdata15mListOutputBuilder outputBuilder = new ReadPmdata15mListOutputBuilder();
270         long page = getPage(input);
271         long pageSize = getPageSize(input);
272
273         QueryBuilder query = fromFilter(input.getFilter()).from((page - 1) * pageSize).size(pageSize);
274         setSortOrder(query, input.getSortorder());
275
276         SearchResult<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.pmdata._15m.list.output.Data> result=pm15mRW.doReadAll(query);
277
278         out("Found: "+result.getHits().size());
279         int t=0;
280         for (Data hit : result.getHits()) {
281             out("Hit "+t+++":"+hit);
282         }
283         setPagination(outputBuilder, page, pageSize, result.getTotal());
284         outputBuilder.setData(result.getHits());
285     }
286
287     @Test
288     public void test7() throws IOException, ClassNotFoundException {
289         out(method());
290         String ESDATATYPE_MEDIATORSERVER = Entity.MediatorServer.getName();
291         HtDatabaseClient dbClient = new HtDatabaseClient(new HostInfo[] { new HostInfo("sdnrdb", 9200, Protocol.HTTP) });
292         EsDataObjectReaderWriter<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.mediator.server.list.output.Data> mediatorserverRW;
293
294         mediatorserverRW = new EsDataObjectReaderWriter<>(dbClient, ESDATATYPE_MEDIATORSERVER,
295                 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.mediator.server.list.output.Data.class)
296                 .setWriteInterface(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.MediatorServerEntity.class)
297                 .setEsIdAttributeName("_id");
298
299         CreateMediatorServerInputBuilder inputBuilder = new CreateMediatorServerInputBuilder();
300         inputBuilder.setName("Hans");
301         inputBuilder.setUrl("MyGreatUrl");
302
303         String id = mediatorserverRW.write(inputBuilder.build(),"testid");
304         System.out.println(id);
305
306     }
307
308     @Test
309     public void test8() throws IOException {
310         out(method());
311         String input;
312         input = "id-dd-dd";
313         System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
314         input = "idDdGg";
315         System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
316         input = "_idDdGg";
317         System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
318         input = "--ff--gfg";
319         System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
320         input = "";
321         System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
322     }
323
324     /* ---------------------------------
325      * Private
326      */
327     private static String method() {
328         String nameofCurrMethod = new Throwable().getStackTrace()[1].getMethodName();
329         return nameofCurrMethod;
330     }
331
332     private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.inventory.list.output.DataBuilder getInventoryDataBuilder(String description, long treeLevel) {
333         org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.inventory.list.output.DataBuilder dataBuilder =
334                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.inventory.list.output.DataBuilder();
335         dataBuilder.setDescription(description);
336         dataBuilder.setTreeLevel(treeLevel);
337         return dataBuilder;
338     }
339
340
341     private static void out(String text) {
342         System.out.println("----------------------");
343         System.out.println(text);
344     }
345
346     private static long getPage(EntityInput input) {
347         return getPage(input, 1);
348     }
349
350     private static long getPage(EntityInput input, long defaultValue) {
351         return input.getPagination() != null ? input.getPagination().getPage().longValue() : defaultValue;
352     }
353
354     private static long getPageSize(EntityInput input) {
355         return getPageSize(input, 1);
356     }
357
358     private static long getPageSize(EntityInput input, long defaultValue) {
359         return input.getPagination() != null ? input.getPagination().getSize().longValue() : defaultValue;
360     }
361
362     private static QueryBuilder fromFilter(@Nullable List<Filter> filters) {
363         return fromFilter(filters, "");
364     }
365
366     private static QueryBuilder fromFilter(@Nullable List<Filter> filters, String prefix) {
367         if (filters == null || filters.size() == 0) {
368             return QueryBuilders.matchAllQuery();
369
370         } else if(filters.size()==1){
371             return QueryBuilders.matchQuery(filters.get(0).getProperty(), filters.get(0).getFiltervalue());
372         }
373         else {
374             BoolQueryBuilder query = new BoolQueryBuilder();
375             for (Filter fi : filters) {
376                 query.must(QueryBuilders.matchQuery((prefix != null ? prefix : "") + fi.getProperty(),
377                         fi.getFiltervalue()));
378             }
379             return query;
380         }
381
382     }
383     private static QueryBuilder setSortOrder(QueryBuilder query, @Nullable List<Sortorder> sortorder) {
384         return setSortOrder(query, sortorder, "");
385     }
386
387     private static QueryBuilder setSortOrder(QueryBuilder query, @Nullable List<Sortorder> sortorder, String prefix) {
388         if (sortorder != null && sortorder.size() > 0) {
389             for (Sortorder so : sortorder) {
390                 query.sort((prefix != null ? prefix : "") + so.getProperty(),
391                         so.getSortorder() == SortOrder.Ascending
392                                 ? org.onap.ccsdk.features.sdnr.wt.common.database.queries.SortOrder.ASCENDING
393                                 : org.onap.ccsdk.features.sdnr.wt.common.database.queries.SortOrder.DESCENDING);
394             }
395         }
396         return query;
397
398     }
399
400     private static void setPagination(ReadPmdata15mListOutputBuilder outputBuilder, long page, long pageSize, long totalSize) {
401         org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.pmdata._15m.list.output.Pagination value = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.read.pmdata._15m.list.output.PaginationBuilder()
402                 .setPage(BigInteger.valueOf(page)).setSize(pageSize).setTotal(BigInteger.valueOf(totalSize)).build();
403         outputBuilder.setPagination(value);
404     }
405
406 }