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