33703042e66198fe0814fa6f78409c086de88322
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
7  * ================================================================================
8  * Update Copyright (C) 2021 Samsung Electronics Intellectual Property. All rights reserved.
9  * =================================================================================================
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *     http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  * ============LICENSE_END=========================================================
22  *
23  */
24 package org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test;
25
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertTrue;
29 import static org.junit.Assert.fail;
30 import java.io.IOException;
31 import java.sql.SQLException;
32 import java.util.ArrayList;
33 import java.util.HashMap;
34 import java.util.List;
35 import java.util.Map;
36 import java.util.concurrent.TimeUnit;
37 import org.json.JSONArray;
38 import org.json.JSONException;
39 import org.json.JSONObject;
40 import org.junit.AfterClass;
41 import org.junit.BeforeClass;
42 import org.junit.Test;
43 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
44 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider;
45 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriter;
46 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.DeleteQuery;
47 import org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test.util.MariaDBTestBase;
48 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
49 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager;
50 import org.onap.ccsdk.features.sdnr.wt.yang.mapper.YangToolsMapper;
51 import org.opendaylight.netconf.shaded.sshd.common.util.io.IoUtils;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmNotificationType;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmSourceIndicator;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogEntity;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionLogStatus;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInput;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInputBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInput;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInputBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerOutputBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateNetworkElementConnectionOutputBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInput;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInputBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerInput;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerInputBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionInput;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionInputBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EntityInput;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Guicutthrough;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GuicutthroughBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadCmlogListOutputBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadConnectionlogListOutputBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadEventlogListOutputBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListInputBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListOutputBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutputBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutputBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutputBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListOutputBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListOutputBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadNetworkElementConnectionListOutputBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mDeviceListOutputBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mListOutputBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mLtpListOutputBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hDeviceListOutputBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hListOutputBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hLtpListOutputBuilder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadStatusOutputBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SeverityType;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SourceType;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceInput;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceInputBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerInput;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerInputBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInput;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInputBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.Filter;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterKey;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.PaginationBuilder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data;
119 import org.opendaylight.yangtools.yang.common.Uint32;
120 import org.opendaylight.yangtools.yang.common.Uint64;
121 import ch.vorburger.exec.ManagedProcessException;
122
123 public class TestMariaDataProvider {
124
125
126     private static final String NODEID1 = "node1";
127     private static final String NODEID2 = "node2";
128     private static final String NODEID22 = "node22";
129     private static final String NODEID3 = "node3";
130     private static final String NODEID4 = "node4";
131     private static final String NODEID5 = "node5";
132     private static final String PROBLEM1 = "problem1";
133     private static final String TIME1 = "2021-05-25T05:12:55.0Z";
134     private static final String TIME2 = "2021-05-25T05:12:56.0Z";
135     private static final String TIME3 = "2021-05-25T05:12:57.0Z";
136     private static final String PROBLEM2 = "problem2";
137     private static final String URI1 = "http://localhost:8181";
138     private static final String URI2 = "http://localhost:8181";
139     private static final String URI3 = "http://localhost:8181";
140     private static final String PATH = "https://samsung.com/3GPP/simulation/network-function/ves";
141     private static final String USERNAME = "admin";
142     private static MariaDBTestBase testBase;
143     private static SqlDBDataProvider dbProvider;
144     private static SqlDBDataProvider dbProviderOverall;
145     private static SqlDBClient dbClient;
146     private static String CONTROLLERID;
147
148     @BeforeClass
149     public static void init() throws Exception {
150
151         testBase = new MariaDBTestBase();
152         dbProvider = testBase.getDbProvider();
153         dbProvider.waitForDatabaseReady(30, TimeUnit.SECONDS);
154         dbClient = testBase.createRawClient();
155         MariaDBTestBase.testCreateTableStructure(dbClient);
156         dbProvider.setControllerId();
157         CONTROLLERID = dbProvider.getControllerId();
158         dbProviderOverall = testBase.getOverallDbProvider();
159
160     }
161
162     @AfterClass
163     public static void close() {
164         try {
165             testBase.close();
166         } catch (ManagedProcessException e) {
167             e.printStackTrace();
168         }
169     }
170
171     @Test
172     public void testFaultcurrent() {
173         dbProvider.clearFaultsCurrentOfNode(NODEID1);
174         ReadFaultcurrentListOutputBuilder faultCurrents =
175                 dbProvider.readFaultCurrentList(createInput("node-id", NODEID1, 1, 20));
176         assertEquals(0, faultCurrents.getData().size());
177         FaultcurrentEntity faultCurrent1 = new FaultcurrentBuilder().setNodeId(NODEID1).setCounter(1).setObjectId("obj")
178                 .setProblem(PROBLEM1).setTimestamp(DateAndTime.getDefaultInstance(TIME1))
179                 .setSeverity(SeverityType.Major).setId(String.format("%s/%s", NODEID1, PROBLEM1)).build();
180         dbProvider.updateFaultCurrent(faultCurrent1);
181         FaultcurrentEntity faultCurrent2 = new FaultcurrentBuilder().setNodeId(NODEID1).setCounter(1).setObjectId("obj")
182                 .setProblem(PROBLEM2).setTimestamp(DateAndTime.getDefaultInstance(TIME1))
183                 .setSeverity(SeverityType.Minor).setId(String.format("%s/%s", NODEID1, PROBLEM2)).build();
184         dbProvider.updateFaultCurrent(faultCurrent2);
185         faultCurrents = dbProvider.readFaultCurrentList(createInput("node-id", NODEID1, 1, 20));
186         assertEquals(2, faultCurrents.getData().size());
187         ReadStatusOutputBuilder status = null;
188         try {
189             EntityInput input=null;
190             status = dbProvider.readStatus(input);
191         } catch (IOException e) {
192             e.printStackTrace();
193             fail("failed to read status");
194         }
195         assertEquals(0, status.getData().get(0).getFaults().getCriticals().intValue());
196         assertEquals(1, status.getData().get(0).getFaults().getMajors().intValue());
197         assertEquals(1, status.getData().get(0).getFaults().getMinors().intValue());
198         assertEquals(0, status.getData().get(0).getFaults().getWarnings().intValue());
199
200         List<String> nodeList = dbProvider.getAllNodesWithCurrentAlarms();
201         assertTrue(nodeList.contains(NODEID1));
202         assertEquals(1,nodeList.size());
203
204         faultCurrent1 = new FaultcurrentBuilder().setNodeId(NODEID1).setCounter(1).setObjectId("obj")
205                 .setProblem(PROBLEM1).setTimestamp(DateAndTime.getDefaultInstance(TIME1))
206                 .setSeverity(SeverityType.NonAlarmed).setId(String.format("%s/%s", NODEID1, PROBLEM1)).build();
207         dbProvider.updateFaultCurrent(faultCurrent1);
208         faultCurrents = dbProvider.readFaultCurrentList(createInput("node-id", NODEID1, 1, 20));
209         assertEquals(1, faultCurrents.getData().size());
210
211
212     }
213
214     @Test
215     public void testSerializeDeserialize() {
216
217         try {
218             CreateNetworkElementConnectionOutputBuilder necon = dbProvider.createNetworkElementConnection(
219                     new NetworkElementConnectionBuilder().setNodeId(NODEID1).setIsRequired(Boolean.TRUE).build());
220             List<Data> netestList =
221                     dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID1, 1, 20)).getData();
222
223             assertNotNull(necon);
224             assertEquals(1, netestList.size());
225             assertTrue(netestList.get(0).getIsRequired());
226             SqlDBReaderWriter<Data> dbrw = new SqlDBReaderWriter<>(dbClient, Entity.NetworkelementConnection,
227                     MariaDBTestBase.SUFFIX,
228                     Data.class,
229                     CONTROLLERID);
230             Data e = dbrw.read(NODEID1);
231             assertNotNull(e);
232
233         } catch (IOException e) {
234             e.printStackTrace();
235             fail(e.getMessage());
236         }
237     }
238
239     @Test
240     public void testFaultlog() {
241         try {
242             dbClient.delete(new DeleteQuery(Entity.Faultcurrent, null).toSql());
243         } catch (SQLException e) {
244             e.printStackTrace();
245             fail("problem clearing faultlog");
246         }
247         ReadFaultlogListOutputBuilder faultlogs = dbProvider.readFaultLogList(createInput(1, 20));
248         assertEquals(0, faultlogs.getData().size());
249         FaultlogEntity fault1 = new FaultlogBuilder().setCounter(1).setNodeId(NODEID1).setObjectId("obj")
250                 .setProblem(PROBLEM1).setSeverity(SeverityType.Major).setSourceType(SourceType.Netconf)
251                 .setTimestamp(DateAndTime.getDefaultInstance(TIME1)).build();
252         dbProvider.writeFaultLog(fault1);
253         FaultlogEntity fault2 = new FaultlogBuilder().setCounter(2).setNodeId(NODEID1).setObjectId("obj")
254                 .setProblem(PROBLEM2).setSeverity(SeverityType.Major).setSourceType(SourceType.Netconf)
255                 .setTimestamp(DateAndTime.getDefaultInstance(TIME1)).build();
256         dbProvider.writeFaultLog(fault2);
257         faultlogs = dbProvider.readFaultLogList(createInput("node-id", NODEID1, 1, 20));
258         assertEquals(2, faultlogs.getData().size());
259
260     }
261
262     @Test
263     public void testCMlog() {
264         ReadCmlogListOutputBuilder cmlogs = dbProvider.readCMLogList(createInput(1, 20));
265         assertEquals(0, cmlogs.getData().size());
266
267         CmlogEntity cm1 =
268                 new CmlogBuilder().setNodeId(NODEID2).setCounter(1).setTimestamp(DateAndTime.getDefaultInstance(TIME1))
269                         .setObjectId("obj").setNotificationType(CmNotificationType.NotifyMOIChanges)
270                         .setNotificationId("1").setSourceIndicator(CmSourceIndicator.MANAGEMENTOPERATION).setPath(PATH)
271                         .setValue("pnf-registration: true").build();
272         CmlogEntity cm2 =
273                 new CmlogBuilder().setNodeId(NODEID2).setCounter(2).setTimestamp(DateAndTime.getDefaultInstance(TIME2))
274                         .setObjectId("obj").setNotificationType(CmNotificationType.NotifyMOIChanges)
275                         .setNotificationId("2").setSourceIndicator(CmSourceIndicator.UNKNOWN).setPath(PATH)
276                         .setValue("pnf-registration: false").build();
277
278         dbProvider.writeCMLog(cm1);
279         dbProvider.writeCMLog(cm2);
280         cmlogs = dbProvider.readCMLogList(createInput("node-id", NODEID2, 1, 20));
281         assertEquals(2, cmlogs.getData().size());
282
283         List<CmlogEntity> cmLogEntityList = List.of(cm1, cm2);
284         assertEquals("node2", cmLogEntityList.get(0).getNodeId());
285         assertEquals("obj", cmLogEntityList.get(0).getObjectId());
286         assertEquals(CmNotificationType.NotifyMOIChanges, cmLogEntityList.get(0).getNotificationType());
287         assertEquals("2", cmLogEntityList.get(1).getNotificationId());
288
289     }
290
291     @Test
292     public void testConnectionlog() {
293         try {
294             dbClient.delete(new DeleteQuery(Entity.Connectionlog, null).toSql());
295         } catch (SQLException e) {
296             e.printStackTrace();
297             fail("problem clearing faultlog");
298         }
299         ReadConnectionlogListOutputBuilder logs = dbProvider.readConnectionlogList(createInput(1, 20));
300         assertEquals(0, logs.getData().size());
301         ConnectionlogEntity log1 = new ConnectionlogBuilder().setNodeId(NODEID1)
302                 .setTimestamp(DateAndTime.getDefaultInstance(TIME1)).setStatus(ConnectionLogStatus.Mounted).build();
303         dbProvider.writeConnectionLog(log1);
304         ConnectionlogEntity log2 = new ConnectionlogBuilder().setNodeId(NODEID1)
305                 .setTimestamp(DateAndTime.getDefaultInstance(TIME2)).setStatus(ConnectionLogStatus.Connecting).build();
306         dbProvider.writeConnectionLog(log2);
307         ConnectionlogEntity log3 = new ConnectionlogBuilder().setNodeId(NODEID1)
308                 .setTimestamp(DateAndTime.getDefaultInstance(TIME3)).setStatus(ConnectionLogStatus.Connected).build();
309         dbProvider.writeConnectionLog(log3);
310         logs = dbProvider.readConnectionlogList(createInput(1, 20));
311         assertEquals(3, logs.getData().size());
312     }
313
314     @Test
315     public void testEventlog() {
316         try {
317             dbClient.delete(new DeleteQuery(Entity.Eventlog, null).toSql());
318         } catch (SQLException e) {
319             e.printStackTrace();
320             fail("problem clearing faultlog");
321         }
322         ReadEventlogListOutputBuilder logs = null;
323         try {
324             logs = dbProvider.readEventlogList(createInput(1, 20));
325         } catch (IOException e) {
326             e.printStackTrace();
327             fail(e.getMessage());
328         }
329         assertEquals(0, logs.getData().size());
330         EventlogEntity log1 = new EventlogBuilder().setCounter(1).setNodeId(NODEID1).setObjectId("obj")
331                 .setTimestamp(DateAndTime.getDefaultInstance(TIME1)).setAttributeName("attr").setNewValue("new-value")
332                 .setSourceType(SourceType.Netconf).build();
333         dbProvider.writeEventLog(log1);
334         EventlogEntity log2 = new EventlogBuilder().setCounter(1).setNodeId(NODEID1).setObjectId("obj")
335                 .setTimestamp(DateAndTime.getDefaultInstance(TIME2)).setAttributeName("attr").setNewValue("new-value2")
336                 .setSourceType(SourceType.Netconf).build();
337         dbProvider.writeEventLog(log2);
338         EventlogEntity log3 = new EventlogBuilder().setCounter(1).setNodeId(NODEID1).setObjectId("obj")
339                 .setTimestamp(DateAndTime.getDefaultInstance(TIME3)).setAttributeName("attr").setNewValue("new-value3")
340                 .setSourceType(SourceType.Netconf).build();
341         dbProvider.writeEventLog(log3);
342         try {
343             logs = dbProvider.readEventlogList(createInput(1, 20));
344         } catch (IOException e) {
345             e.printStackTrace();
346             fail(e.getMessage());
347         }
348         assertEquals(3, logs.getData().size());
349     }
350
351     @Test
352     public void testGuicutthrough() {
353         try {
354             dbClient.delete(new DeleteQuery(Entity.Guicutthrough, null).toSql());
355         } catch (SQLException e) {
356             e.printStackTrace();
357             fail("problem clearing faultlog");
358         }
359         Guicutthrough gc1 = new GuicutthroughBuilder().setName(NODEID1).setWeburi(URI1).build();
360         dbProvider.writeGuiCutThroughData(gc1, NODEID1);
361         Guicutthrough gc2 = new GuicutthroughBuilder().setName(NODEID2).setWeburi(URI2).build();
362         dbProvider.writeGuiCutThroughData(gc2, NODEID2);
363         Guicutthrough gc3 = new GuicutthroughBuilder().setName(NODEID3).setWeburi(URI3).build();
364         dbProvider.writeGuiCutThroughData(gc3, NODEID3);
365         ReadGuiCutThroughEntryOutputBuilder data = dbProvider.readGuiCutThroughEntry(createInput(1, 20));
366         assertEquals(3, data.getData().size());
367         data = dbProvider.readGuiCutThroughEntry(createInput("name", NODEID1, 1, 20));
368         assertEquals(1, data.getData().size());
369
370     }
371
372     @Test
373     public void testInventory() {
374         try {
375             dbClient.delete(new DeleteQuery(Entity.Inventoryequipment, null).toSql());
376         } catch (SQLException e) {
377             e.printStackTrace();
378             fail("problem clearing faultlog");
379         }
380         ReadInventoryListOutputBuilder data = dbProvider.readInventoryList(createInput(1, 20));
381         assertEquals(0, data.getData().size());
382         List<Inventory> list = null;
383         try {
384             list = loadListFile("/inventory.json", Inventory.class);
385         } catch (IOException e) {
386             e.printStackTrace();
387             fail("problem loading inventory data");
388
389         }
390         dbProvider.writeInventory(NODEID1, list);
391         data = dbProvider.readInventoryList(createInput(1, 50));
392         assertEquals(22, data.getData().size());
393         data = dbProvider.readInventoryList(createInput("tree-level", "0", 1, 50));
394         assertEquals(5, data.getData().size());
395     }
396
397     @Test
398     public void testMaintenance() {
399         try {
400             dbClient.delete(new DeleteQuery(Entity.Maintenancemode, null).toSql());
401         } catch (SQLException e) {
402             e.printStackTrace();
403             fail("problem clearing faultlog");
404         }
405         ReadMaintenanceListOutputBuilder data = dbProvider.readMaintenanceList(createInput(1, 20));
406         assertEquals(0, data.getData().size());
407         CreateMaintenanceInput maint1 = new CreateMaintenanceInputBuilder().setId(NODEID1).setNodeId(NODEID1)
408                 .setActive(true).setDescription("desc").setObjectIdRef("ref").setProblem("problem")
409                 .setStart(DateAndTime.getDefaultInstance(TIME1)).setEnd(DateAndTime.getDefaultInstance(TIME3)).build();
410         CreateMaintenanceInput maint2 = new CreateMaintenanceInputBuilder().setId(NODEID2).setNodeId(NODEID2)
411                 .setActive(true).setDescription("desc").setObjectIdRef("ref").setProblem("problem2")
412                 .setStart(DateAndTime.getDefaultInstance(TIME1)).setEnd(DateAndTime.getDefaultInstance(TIME3)).build();
413         CreateMaintenanceInput maint3 = new CreateMaintenanceInputBuilder().setId(NODEID3).setNodeId(NODEID3)
414                 .setActive(true).setDescription("desc").setObjectIdRef("ref").setProblem("problem3")
415                 .setStart(DateAndTime.getDefaultInstance(TIME1)).setEnd(DateAndTime.getDefaultInstance(TIME3)).build();
416         try {
417             dbProvider.createMaintenance(maint1);
418             dbProvider.createMaintenance(maint2);
419             dbProvider.createMaintenance(maint3);
420         } catch (IOException e) {
421             e.printStackTrace();
422             fail("unable to create maintenance data");
423         }
424         data = dbProvider.readMaintenanceList(createInput(1, 20));
425         assertEquals(3, data.getData().size());
426
427         UpdateMaintenanceInput update1 =
428                 new UpdateMaintenanceInputBuilder().setId(NODEID1).setNodeId(NODEID1).setActive(false).build();
429         try {
430             dbProvider.updateMaintenance(update1);
431         } catch (IOException e) {
432             e.printStackTrace();
433             fail("unable to update maintenance data");
434         }
435         data = dbProvider.readMaintenanceList(createInput("active","false",1, 20));
436         assertEquals(1, data.getData().size());
437         DeleteMaintenanceInput delete1 = new DeleteMaintenanceInputBuilder().setId(NODEID1).build();
438         try {
439             dbProvider.deleteMaintenance(delete1);
440         } catch (IOException e) {
441             e.printStackTrace();
442             fail("unable to delete maintenance data");
443         }
444         data = dbProvider.readMaintenanceList(createInput(1, 20));
445         assertEquals(2, data.getData().size());
446         try {
447             dbClient.delete(new DeleteQuery(Entity.Maintenancemode, null).toSql());
448         } catch (SQLException e) {
449             e.printStackTrace();
450             fail("problem clearing faultlog");
451         }
452         final String nodeId = "maint_node1";
453         HtDatabaseMaintenance maintenanceService = dbProvider.getHtDatabaseMaintenance();
454         MaintenanceEntity e = maintenanceService.createIfNotExists(nodeId);
455         assertNotNull(e);
456         assertEquals(nodeId,e.getNodeId());
457         MaintenanceEntity e2 = new CreateMaintenanceInputBuilder(e).setActive(true).build();
458         e = maintenanceService.setMaintenance(e2);
459         assertNotNull(e);
460         assertEquals(nodeId,e.getNodeId());
461         assertTrue(e.getActive());
462         maintenanceService.deleteIfNotRequired(nodeId);
463         data = dbProvider.readMaintenanceList(createInput("node-id",nodeId,1, 20));
464         assertEquals(0, data.getData().size());
465
466     }
467
468     @Test
469     public void testMediatorserver() {
470         try {
471             dbClient.delete(new DeleteQuery(Entity.MediatorServer, null).toSql());
472         } catch (SQLException e) {
473             e.printStackTrace();
474             fail("problem clearing mediator server");
475         }
476         ReadMediatorServerListOutputBuilder data = dbProvider.readMediatorServerList(createInput(1, 20));
477         assertEquals(0, data.getData().size());
478         CreateMediatorServerInput mediator1 =
479                 new CreateMediatorServerInputBuilder().setName("server1").setUrl("http://10.20.30.40:7070").build();
480         CreateMediatorServerInput mediator2 =
481                 new CreateMediatorServerInputBuilder().setName("server2").setUrl("http://10.20.30.42:7070").build();
482         CreateMediatorServerInput mediator3 =
483                 new CreateMediatorServerInputBuilder().setName("server3").setUrl("http://10.20.30.43:7070").build();
484         CreateMediatorServerOutputBuilder output1 = null, output2 = null;
485         try {
486             output1 = dbProvider.createMediatorServer(mediator1);
487             output2 = dbProvider.createMediatorServer(mediator2);
488             dbProvider.createMediatorServer(mediator3);
489         } catch (IOException e) {
490             e.printStackTrace();
491             fail("problem creating mediator servers");
492         }
493         data = dbProvider.readMediatorServerList(createInput(1, 20));
494         assertEquals(3, data.getData().size());
495         UpdateMediatorServerInput update1 = new UpdateMediatorServerInputBuilder().setId(output1.getId())
496                 .setName("server1").setUrl("http://10.20.30.40:7071").build();
497         try {
498             dbProvider.updateMediatorServer(update1);
499         } catch (IOException e) {
500             e.printStackTrace();
501             fail("failed to update mediator server");
502         }
503         data = dbProvider.readMediatorServerList(createInput("id", output1.getId(), 1, 20));
504         assertEquals(1, data.getData().size());
505         assertEquals(output1.getId(), data.getData().get(0).getId());
506         assertEquals("server1", data.getData().get(0).getName());
507         assertEquals("http://10.20.30.40:7071", data.getData().get(0).getUrl());
508
509         DeleteMediatorServerInput delete2 = new DeleteMediatorServerInputBuilder().setId(output2.getId()).build();
510         try {
511             dbProvider.deleteMediatorServer(delete2);
512         } catch (IOException e) {
513             e.printStackTrace();
514             fail("unable to delete mediator server");
515         }
516         data = dbProvider.readMediatorServerList(createInput("id", output2.getId(), 1, 20));
517         assertEquals(0, data.getData().size());
518         data = dbProvider.readMediatorServerList(createInput(1, 20));
519         assertEquals(2, data.getData().size());
520     }
521
522     @Test
523     public void testNeConnection() {
524         try {
525             dbClient.delete(new DeleteQuery(Entity.NetworkelementConnection, null).toSql());
526         } catch (SQLException e) {
527             e.printStackTrace();
528             fail("problem clearing neconnection");
529         }
530         ReadNetworkElementConnectionListOutputBuilder data =
531                 dbProvider.readNetworkElementConnectionList(createInput(1, 20));
532         assertEquals(0, data.getData().size());
533         NetworkElementConnectionEntity ne1 = new NetworkElementConnectionBuilder().setNodeId(NODEID1)
534                 .setHost("10.20.30.50").setPort(Uint32.valueOf(8300)).setIsRequired(true).setUsername("user")
535                 .setPassword("passwd").build();
536         NetworkElementConnectionEntity ne2 = new NetworkElementConnectionBuilder().setNodeId(NODEID2)
537                 .setHost("10.20.30.55").setPort(Uint32.valueOf(8300)).setIsRequired(false).setUsername("user")
538                 .setPassword("passwd").setStatus(ConnectionLogStatus.Connecting).build();
539         NetworkElementConnectionEntity ne22 = new NetworkElementConnectionBuilder().setNodeId(NODEID22)
540                 .setHost("10.20.30.55").setPort(Uint32.valueOf(8300)).setIsRequired(false).setUsername("user")
541                 .setPassword("passwd").setStatus(ConnectionLogStatus.Connected).build();
542         NetworkElementConnectionEntity ne3 = new NetworkElementConnectionBuilder().setNodeId(NODEID3)
543                 .setHost("10.20.30.55").setPort(Uint32.valueOf(8300)).setIsRequired(false).setUsername("user")
544                 .setPassword("passwd").setStatus(ConnectionLogStatus.Connecting).build();
545         try {
546             dbProvider.createNetworkElementConnection(ne1);
547             dbProvider.createNetworkElementConnection(ne2);
548             dbProvider.createNetworkElementConnection(ne22);
549             dbProvider.updateNetworkConnection22(ne3, NODEID3);
550         } catch (IOException e) {
551             e.printStackTrace();
552             fail("problem creating neconnection");
553         }
554         data = dbProvider.readNetworkElementConnectionList(createInput(1, 20));
555         assertEquals(4, data.getData().size());
556         NetworkElementConnectionEntity update1 = new NetworkElementConnectionBuilder()
557                 .setStatus(ConnectionLogStatus.Connected).setDeviceType(NetworkElementDeviceType.ORAN).build();
558         dbProvider.updateNetworkConnectionDeviceType(update1, NODEID1);
559         data = dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID1, 1, 20));
560         assertEquals(1, data.getData().size());
561         assertEquals(NetworkElementDeviceType.ORAN, data.getData().get(0).getDeviceType());
562         assertEquals(true, data.getData().get(0).getIsRequired());
563         UpdateNetworkElementConnectionInput update2 = new UpdateNetworkElementConnectionInputBuilder().setId(NODEID2)
564                 .setHost("10.20.55.44").setIsRequired(true).build();
565         try {
566             dbProvider.updateNetworkElementConnection(update2);
567         } catch (IOException e) {
568             e.printStackTrace();
569             fail("failed to update neconnection");
570         }
571         data = dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID2, 1, 20));
572         assertEquals(1, data.getData().size());
573         assertEquals("10.20.55.44", data.getData().get(0).getHost());
574         assertEquals(true, data.getData().get(0).getIsRequired());
575
576         ReadStatusOutputBuilder status = null;
577         try {
578             EntityInput input=null;
579             status = dbProvider.readStatus(input);
580         } catch (IOException e) {
581             e.printStackTrace();
582             fail("failed to read status");
583         }
584         assertEquals(2, status.getData().get(0).getNetworkElementConnections().getConnected().intValue());
585         assertEquals(2, status.getData().get(0).getNetworkElementConnections().getConnecting().intValue());
586         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getDisconnected().intValue());
587         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getMounted().intValue());
588         assertEquals(4, status.getData().get(0).getNetworkElementConnections().getTotal().intValue());
589         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUnableToConnect().intValue());
590         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUndefined().intValue());
591         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUnmounted().intValue());
592
593         ReadStatusOutputBuilder status2=null;
594         try {
595             EntityInput input=createInput("node-id","node2*", 1, 20);
596             status = dbProvider.readStatus(input);
597             status2 = dbProviderOverall.readStatus(input);
598         } catch (IOException e) {
599             e.printStackTrace();
600             fail("failed to read status");
601         }
602         assertEquals(1, status.getData().get(0).getNetworkElementConnections().getConnected().intValue());
603         assertEquals(1, status.getData().get(0).getNetworkElementConnections().getConnecting().intValue());
604         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getDisconnected().intValue());
605         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getMounted().intValue());
606         assertEquals(2, status.getData().get(0).getNetworkElementConnections().getTotal().intValue());
607         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUnableToConnect().intValue());
608         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUndefined().intValue());
609         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUnmounted().intValue());
610         
611         assertEquals(1, status2.getData().get(0).getNetworkElementConnections().getConnected().intValue());
612         assertEquals(1, status2.getData().get(0).getNetworkElementConnections().getConnecting().intValue());
613         assertEquals(0, status2.getData().get(0).getNetworkElementConnections().getDisconnected().intValue());
614         assertEquals(0, status2.getData().get(0).getNetworkElementConnections().getMounted().intValue());
615         assertEquals(2, status2.getData().get(0).getNetworkElementConnections().getTotal().intValue());
616         assertEquals(0, status2.getData().get(0).getNetworkElementConnections().getUnableToConnect().intValue());
617         assertEquals(0, status2.getData().get(0).getNetworkElementConnections().getUndefined().intValue());
618         assertEquals(0, status2.getData().get(0).getNetworkElementConnections().getUnmounted().intValue());
619
620         DeleteNetworkElementConnectionInput delete1 =
621                 new DeleteNetworkElementConnectionInputBuilder().setId(NODEID1).build();
622         try {
623             dbProvider.deleteNetworkElementConnection(delete1);
624         } catch (IOException e) {
625             e.printStackTrace();
626             fail("failed to delete neconnection");
627         }
628         data = dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID1, 1, 20));
629         assertEquals(0, data.getData().size());
630         data = dbProvider.readNetworkElementConnectionList(createInput(1, 20));
631         assertEquals(3, data.getData().size());
632
633     }
634
635     @Test
636     public void testUserdata() {
637         HtUserdataManager mgr = dbProvider.getUserManager();
638         String userdata = mgr.getUserdata(USERNAME);
639         assertEquals("{}",userdata);
640         JSONObject o = new JSONObject();
641         o.put("key1", false);
642         o.put("key2","value2");
643         boolean result = mgr.setUserdata(USERNAME, o.toString());
644         assertTrue(result);
645         userdata = mgr.getUserdata(USERNAME);
646         o = new JSONObject(userdata);
647         assertEquals(false,o.getBoolean("key1"));
648         assertEquals("value2",o.getString("key2"));
649         o = new JSONObject();
650         o.put("enabled", true);
651         o.put("name","abcdef");
652         result = mgr.setUserdata(USERNAME,"app1",o.toString());
653         assertTrue(result);
654         userdata = mgr.getUserdata(USERNAME);
655         o = new JSONObject(userdata);
656         assertEquals(false,o.getBoolean("key1"));
657         assertEquals("value2",o.getString("key2"));
658         JSONObject app = o.getJSONObject("app1");
659         assertNotNull(app);
660         assertEquals(true, app.getBoolean("enabled"));
661         assertEquals("abcdef", app.getString("name"));
662
663     }
664     @Test
665     public void testpm15m() {
666         try {
667             dbClient.delete(new DeleteQuery(Entity.Historicalperformance15min, null).toSql());
668         } catch (SQLException e) {
669             e.printStackTrace();
670             fail("problem clearing pmdata15m");
671         }
672         ReadPmdata15mListOutputBuilder data = dbProvider.readPmdata15mList(createInput(1, 20));
673         assertEquals(0, data.getData().size());
674         List<PmdataEntity> list = null;
675         try {
676             list = loadListFile("/pmdata15m.json", PmdataEntity.class);
677         } catch (JSONException | IOException e) {
678             e.printStackTrace();
679             fail("failed to load pmdata15m");
680         }
681         dbProvider.doWritePerformanceData(list);
682         data = dbProvider.readPmdata15mList(createInput(1, 20));
683         assertEquals(10, data.getData().size());
684         ReadPmdata15mLtpListOutputBuilder ltpdata = null;
685         try {
686             ltpdata = dbProvider.readPmdata15mLtpList(createInput("node-name", "sim12600", 1, 20));
687         } catch (IOException e) {
688             e.printStackTrace();
689             fail("failed to read pmdata15m ltp list");
690         }
691         assertEquals(3, ltpdata.getData().size());
692         ReadPmdata15mDeviceListOutputBuilder devicedata = null;
693         try {
694             devicedata = dbProvider.readPmdata15mDeviceList(createInput(1, 20));
695         } catch (IOException e) {
696             e.printStackTrace();
697             fail("failed to read pmdata15m devices list");
698         }
699         assertEquals(1, devicedata.getData().size());
700     }
701
702     @Test
703     public void testpm24h() {
704         try {
705             dbClient.delete(new DeleteQuery(Entity.Historicalperformance24h, null).toSql());
706         } catch (SQLException e) {
707             e.printStackTrace();
708             fail("problem clearing pmdata24h");
709         }
710         ReadPmdata24hListOutputBuilder data = dbProvider.readPmdata24hList(createInput(1, 20));
711         assertEquals(0, data.getData().size());
712         List<PmdataEntity> list = null;
713         try {
714             list = loadListFile("/pmdata24h.json", PmdataEntity.class);
715         } catch (JSONException | IOException e) {
716             e.printStackTrace();
717             fail("failed to load pmdata24h");
718         }
719         dbProvider.doWritePerformanceData(list);
720         data = dbProvider.readPmdata24hList(createInput(1, 20));
721         assertEquals(1, data.getData().size());
722         ReadPmdata24hLtpListOutputBuilder ltpdata = null;
723         try {
724             ltpdata = dbProvider.readPmdata24hLtpList(createInput("node-name", "test", 1, 20));
725         } catch (IOException e) {
726             e.printStackTrace();
727             fail("failed to read pmdata15m ltp list");
728         }
729         assertEquals(1, ltpdata.getData().size());
730         ReadPmdata24hDeviceListOutputBuilder devicedata = null;
731         try {
732             devicedata = dbProvider.readPmdata24hDeviceList(createInput(1, 20));
733         } catch (IOException e) {
734             e.printStackTrace();
735             fail("failed to read pmdata15m devices list");
736         }
737         assertEquals(1, devicedata.getData().size());
738     }
739
740     static EntityInput createInput(int page, int size) {
741         return createInput(null, null, page, size);
742     }
743
744     private static <T> List<T> loadListFile(String filename, Class<T> clazz) throws JSONException, IOException {
745         List<T> list = new ArrayList<>();
746         JSONArray a = new JSONArray(loadFile(filename));
747         for (int i = 0; i < a.length(); i++) {
748             list.add(loadData(a.getJSONObject(i).toString(), clazz));
749         }
750         return list;
751     }
752
753     private static <T> T loadData(String content, Class<T> clazz) throws IOException {
754         YangToolsMapper mapper = new YangToolsMapper();
755         return mapper.readValue(content, clazz);
756     }
757
758     private static String loadFile(String filename) throws IOException {
759         return String.join("\n", IoUtils.readAllLines(TestMariaDataProvider.class.getResourceAsStream(filename)));
760     }
761
762     static EntityInput createInput(String filter, String filterValue, int page, int size) {
763         ReadFaultcurrentListInputBuilder builder = new ReadFaultcurrentListInputBuilder().setPagination(
764                 new PaginationBuilder().setPage(Uint64.valueOf(page)).setSize(Uint32.valueOf(size)).build());
765         if (filter != null && filterValue != null) {
766             Filter f = new FilterBuilder().setProperty(filter).setFiltervalue(filterValue).build();
767             Map<FilterKey, Filter> fmap = new HashMap<>();
768             fmap.put(f.key(), f);
769             builder.setFilter(fmap);
770         }
771         return builder.build();
772     }
773
774 }