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