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