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