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