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
10 * http://www.apache.org/licenses/LICENSE-2.0
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
16 * ============LICENSE_END==========================================================================
17 ******************************************************************************/
18 package org.onap.ccsdk.features.sdnr.wt.dataprovider.database.test;
20 import java.io.IOException;
21 import java.math.BigInteger;
22 import java.util.ArrayList;
23 import java.util.List;
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;
63 public class TestYangGenSalMapping {
65 // Create mapper for serialization and deserialization
66 YangToolsMapper mapper = new YangToolsMapper();
69 public void test1() throws IOException {
72 NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder();
73 netconfNodeBuilder.setConnectedMessage("ConnMessage");
75 LoginPasswordBuilder loginPasswordBuilder = new LoginPasswordBuilder();
76 loginPasswordBuilder.setUsername("myTestUsername");
77 loginPasswordBuilder.setPassword("myTestPassword");
78 netconfNodeBuilder.setCredentials(loginPasswordBuilder.build());
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());
86 NetconfNode netconfNode = netconfNodeBuilder.build();
87 out(netconfNode.toString());
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
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
98 out("Equal? "+(netconfNode.equals(generatedNode)));
101 static class TestDataObjectBuilder implements Builder<TestDataObject> {
103 public @NonNull TestDataObject build() throws IllegalArgumentException {
104 return new TestDataObject();
108 static class TestDataObject implements DataObject {
112 public Class<? extends DataContainer> getImplementedInterface() {
118 public void test2() throws InvalidProtocolException, ClassNotFoundException {
121 int databasePort = Integer.valueOf(System.getProperty("databaseport"));
122 System.out.println("DB Port: "+databasePort);
124 HostInfo[] HOSTINFOS = new HostInfo[] { new HostInfo("localhost", databasePort )};
125 DatabaseClient db = new HtDatabaseClient(HOSTINFOS);
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);
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);
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);
142 public void test3() throws IOException {
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());
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
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
162 public void test4() throws IOException {
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
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" +
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" +
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" +
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
253 public void test6() throws IOException, ClassNotFoundException {
255 HtDatabaseClient dbClient = new HtDatabaseClient(new HostInfo[] { new HostInfo("sdnrdb", 9200, Protocol.HTTP) });
256 String PMDATA15M_TYPE = "historicalperformance15min";
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");
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());
268 ReadPmdata15mListInput input = inputBuilder.build();
271 ReadPmdata15mListOutputBuilder outputBuilder = new ReadPmdata15mListOutputBuilder();
272 long page = getPage(input);
273 long pageSize = getPageSize(input);
275 QueryBuilder query = fromFilter(input.getFilter()).from((page - 1) * pageSize).size(pageSize);
276 setSortOrder(query, input.getSortorder());
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);
280 out("Found: "+result.getHits().size());
282 for (Data hit : result.getHits()) {
283 out("Hit "+(t++)+":"+hit);
285 setPagination(outputBuilder, page, pageSize, result.getTotal());
286 outputBuilder.setData(result.getHits());
290 public void test7() throws IOException, ClassNotFoundException {
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;
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");
301 CreateMediatorServerInputBuilder inputBuilder = new CreateMediatorServerInputBuilder();
302 inputBuilder.setName("Hans");
303 inputBuilder.setUrl("MyGreatUrl");
305 String id = mediatorserverRW.write(inputBuilder.build(),"testid");
306 System.out.println(id);
311 public void test8() throws IOException {
315 System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
317 System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
319 System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
321 System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
323 System.out.println("Map " + input + " to "+YangToolsMapper.toCamelCaseAttributeName(input));
326 /* ---------------------------------
329 private static String method() {
330 String nameofCurrMethod = new Throwable().getStackTrace()[1].getMethodName();
331 return nameofCurrMethod;
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);
343 private static void out(String text) {
344 System.out.println("----------------------");
345 System.out.println(text);
348 private static long getPage(EntityInput input) {
349 return getPage(input, 1);
352 private static long getPage(EntityInput input, long defaultValue) {
353 return input.getPagination() != null ? input.getPagination().getPage().longValue() : defaultValue;
356 private static long getPageSize(EntityInput input) {
357 return getPageSize(input, 1);
360 private static long getPageSize(EntityInput input, long defaultValue) {
361 return input.getPagination() != null ? input.getPagination().getSize().longValue() : defaultValue;
364 private static QueryBuilder fromFilter(@Nullable List<Filter> filters) {
365 return fromFilter(filters, "");
368 private static QueryBuilder fromFilter(@Nullable List<Filter> filters, String prefix) {
369 if (filters == null || filters.size() == 0) {
370 return QueryBuilders.matchAllQuery();
372 } else if(filters.size()==1){
373 return QueryBuilders.matchQuery(filters.get(0).getProperty(), filters.get(0).getFiltervalue());
376 BoolQueryBuilder query = new BoolQueryBuilder();
377 for (Filter fi : filters) {
378 query.must(QueryBuilders.matchQuery((prefix != null ? prefix : "") + fi.getProperty(),
379 fi.getFiltervalue()));
385 private static QueryBuilder setSortOrder(QueryBuilder query, @Nullable List<Sortorder> sortorder) {
386 return setSortOrder(query, sortorder, "");
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);
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);