2  * ============LICENSE_START=======================================================
 
   3  * ONAP : ccsdk features
 
   4  * ================================================================================
 
   5  * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
 
   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
 
  14  *     http://www.apache.org/licenses/LICENSE-2.0
 
  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=========================================================
 
  24 package org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test;
 
  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;
 
  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;
 
 123 public class TestMariaDataProvider {
 
 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;
 
 149     public static void init() throws Exception {
 
 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();
 
 163     public static void close() {
 
 166         } catch (ManagedProcessException e) {
 
 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;
 
 189             EntityInput input=null;
 
 190             status = dbProvider.readStatus(input);
 
 191         } catch (IOException e) {
 
 193             fail("failed to read status");
 
 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());
 
 200         List<String> nodeList = dbProvider.getAllNodesWithCurrentAlarms();
 
 201         assertTrue(nodeList.contains(NODEID1));
 
 202         assertEquals(1,nodeList.size());
 
 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());
 
 215     public void testSerializeDeserialize() {
 
 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();
 
 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,
 
 230             Data e = dbrw.read(NODEID1);
 
 233         } catch (IOException e) {
 
 235             fail(e.getMessage());
 
 240     public void testFaultlog() {
 
 242             dbClient.delete(new DeleteQuery(Entity.Faultcurrent, null).toSql());
 
 243         } catch (SQLException e) {
 
 245             fail("problem clearing faultlog");
 
 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());
 
 263     public void testCMlog() {
 
 264         ReadCmlogListOutputBuilder cmlogs = dbProvider.readCMLogList(createInput(1, 20));
 
 265         assertEquals(0, cmlogs.getData().size());
 
 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();
 
 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();
 
 278         dbProvider.writeCMLog(cm1);
 
 279         dbProvider.writeCMLog(cm2);
 
 280         cmlogs = dbProvider.readCMLogList(createInput("node-id", NODEID2, 1, 20));
 
 281         assertEquals(2, cmlogs.getData().size());
 
 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());
 
 292     public void testConnectionlog() {
 
 294             dbClient.delete(new DeleteQuery(Entity.Connectionlog, null).toSql());
 
 295         } catch (SQLException e) {
 
 297             fail("problem clearing faultlog");
 
 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());
 
 315     public void testEventlog() {
 
 317             dbClient.delete(new DeleteQuery(Entity.Eventlog, null).toSql());
 
 318         } catch (SQLException e) {
 
 320             fail("problem clearing faultlog");
 
 322         ReadEventlogListOutputBuilder logs = null;
 
 324             logs = dbProvider.readEventlogList(createInput(1, 20));
 
 325         } catch (IOException e) {
 
 327             fail(e.getMessage());
 
 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);
 
 343             logs = dbProvider.readEventlogList(createInput(1, 20));
 
 344         } catch (IOException e) {
 
 346             fail(e.getMessage());
 
 348         assertEquals(3, logs.getData().size());
 
 352     public void testGuicutthrough() {
 
 354             dbClient.delete(new DeleteQuery(Entity.Guicutthrough, null).toSql());
 
 355         } catch (SQLException e) {
 
 357             fail("problem clearing faultlog");
 
 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());
 
 373     public void testInventory() {
 
 375             dbClient.delete(new DeleteQuery(Entity.Inventoryequipment, null).toSql());
 
 376         } catch (SQLException e) {
 
 378             fail("problem clearing faultlog");
 
 380         ReadInventoryListOutputBuilder data = dbProvider.readInventoryList(createInput(1, 20));
 
 381         assertEquals(0, data.getData().size());
 
 382         List<Inventory> list = null;
 
 384             list = loadListFile("/inventory.json", Inventory.class);
 
 385         } catch (IOException e) {
 
 387             fail("problem loading inventory data");
 
 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());
 
 398     public void testMaintenance() {
 
 400             dbClient.delete(new DeleteQuery(Entity.Maintenancemode, null).toSql());
 
 401         } catch (SQLException e) {
 
 403             fail("problem clearing faultlog");
 
 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();
 
 417             dbProvider.createMaintenance(maint1);
 
 418             dbProvider.createMaintenance(maint2);
 
 419             dbProvider.createMaintenance(maint3);
 
 420         } catch (IOException e) {
 
 422             fail("unable to create maintenance data");
 
 424         data = dbProvider.readMaintenanceList(createInput(1, 20));
 
 425         assertEquals(3, data.getData().size());
 
 427         UpdateMaintenanceInput update1 =
 
 428                 new UpdateMaintenanceInputBuilder().setId(NODEID1).setNodeId(NODEID1).setActive(false).build();
 
 430             dbProvider.updateMaintenance(update1);
 
 431         } catch (IOException e) {
 
 433             fail("unable to update maintenance data");
 
 435         data = dbProvider.readMaintenanceList(createInput("active","false",1, 20));
 
 436         assertEquals(1, data.getData().size());
 
 437         DeleteMaintenanceInput delete1 = new DeleteMaintenanceInputBuilder().setId(NODEID1).build();
 
 439             dbProvider.deleteMaintenance(delete1);
 
 440         } catch (IOException e) {
 
 442             fail("unable to delete maintenance data");
 
 444         data = dbProvider.readMaintenanceList(createInput(1, 20));
 
 445         assertEquals(2, data.getData().size());
 
 447             dbClient.delete(new DeleteQuery(Entity.Maintenancemode, null).toSql());
 
 448         } catch (SQLException e) {
 
 450             fail("problem clearing faultlog");
 
 452         final String nodeId = "maint_node1";
 
 453         HtDatabaseMaintenance maintenanceService = dbProvider.getHtDatabaseMaintenance();
 
 454         MaintenanceEntity e = maintenanceService.createIfNotExists(nodeId);
 
 456         assertEquals(nodeId,e.getNodeId());
 
 457         MaintenanceEntity e2 = new CreateMaintenanceInputBuilder(e).setActive(true).build();
 
 458         e = maintenanceService.setMaintenance(e2);
 
 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());
 
 469     public void testMediatorserver() {
 
 471             dbClient.delete(new DeleteQuery(Entity.MediatorServer, null).toSql());
 
 472         } catch (SQLException e) {
 
 474             fail("problem clearing mediator server");
 
 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;
 
 486             output1 = dbProvider.createMediatorServer(mediator1);
 
 487             output2 = dbProvider.createMediatorServer(mediator2);
 
 488             dbProvider.createMediatorServer(mediator3);
 
 489         } catch (IOException e) {
 
 491             fail("problem creating mediator servers");
 
 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();
 
 498             dbProvider.updateMediatorServer(update1);
 
 499         } catch (IOException e) {
 
 501             fail("failed to update mediator server");
 
 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());
 
 509         DeleteMediatorServerInput delete2 = new DeleteMediatorServerInputBuilder().setId(output2.getId()).build();
 
 511             dbProvider.deleteMediatorServer(delete2);
 
 512         } catch (IOException e) {
 
 514             fail("unable to delete mediator server");
 
 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());
 
 523     public void testNeConnection() {
 
 525             dbClient.delete(new DeleteQuery(Entity.NetworkelementConnection, null).toSql());
 
 526         } catch (SQLException e) {
 
 528             fail("problem clearing neconnection");
 
 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();
 
 546             dbProvider.createNetworkElementConnection(ne1);
 
 547             dbProvider.createNetworkElementConnection(ne2);
 
 548             dbProvider.createNetworkElementConnection(ne22);
 
 549             dbProvider.updateNetworkConnection22(ne3, NODEID3);
 
 550         } catch (IOException e) {
 
 552             fail("problem creating neconnection");
 
 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();
 
 566             dbProvider.updateNetworkElementConnection(update2);
 
 567         } catch (IOException e) {
 
 569             fail("failed to update neconnection");
 
 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());
 
 576         ReadStatusOutputBuilder status = null;
 
 578             EntityInput input=null;
 
 579             status = dbProvider.readStatus(input);
 
 580         } catch (IOException e) {
 
 582             fail("failed to read status");
 
 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());
 
 593         ReadStatusOutputBuilder status2=null;
 
 595             EntityInput input=createInput("node-id","node2*", 1, 20);
 
 596             status = dbProvider.readStatus(input);
 
 597             status2 = dbProviderOverall.readStatus(input);
 
 598         } catch (IOException e) {
 
 600             fail("failed to read status");
 
 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());
 
 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());
 
 620         DeleteNetworkElementConnectionInput delete1 =
 
 621                 new DeleteNetworkElementConnectionInputBuilder().setId(NODEID1).build();
 
 623             dbProvider.deleteNetworkElementConnection(delete1);
 
 624         } catch (IOException e) {
 
 626             fail("failed to delete neconnection");
 
 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());
 
 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());
 
 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());
 
 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");
 
 660         assertEquals(true, app.getBoolean("enabled"));
 
 661         assertEquals("abcdef", app.getString("name"));
 
 665     public void testpm15m() {
 
 667             dbClient.delete(new DeleteQuery(Entity.Historicalperformance15min, null).toSql());
 
 668         } catch (SQLException e) {
 
 670             fail("problem clearing pmdata15m");
 
 672         ReadPmdata15mListOutputBuilder data = dbProvider.readPmdata15mList(createInput(1, 20));
 
 673         assertEquals(0, data.getData().size());
 
 674         List<PmdataEntity> list = null;
 
 676             list = loadListFile("/pmdata15m.json", PmdataEntity.class);
 
 677         } catch (JSONException | IOException e) {
 
 679             fail("failed to load pmdata15m");
 
 681         dbProvider.doWritePerformanceData(list);
 
 682         data = dbProvider.readPmdata15mList(createInput(1, 20));
 
 683         assertEquals(10, data.getData().size());
 
 684         ReadPmdata15mLtpListOutputBuilder ltpdata = null;
 
 686             ltpdata = dbProvider.readPmdata15mLtpList(createInput("node-name", "sim12600", 1, 20));
 
 687         } catch (IOException e) {
 
 689             fail("failed to read pmdata15m ltp list");
 
 691         assertEquals(3, ltpdata.getData().size());
 
 692         ReadPmdata15mDeviceListOutputBuilder devicedata = null;
 
 694             devicedata = dbProvider.readPmdata15mDeviceList(createInput(1, 20));
 
 695         } catch (IOException e) {
 
 697             fail("failed to read pmdata15m devices list");
 
 699         assertEquals(1, devicedata.getData().size());
 
 703     public void testpm24h() {
 
 705             dbClient.delete(new DeleteQuery(Entity.Historicalperformance24h, null).toSql());
 
 706         } catch (SQLException e) {
 
 708             fail("problem clearing pmdata24h");
 
 710         ReadPmdata24hListOutputBuilder data = dbProvider.readPmdata24hList(createInput(1, 20));
 
 711         assertEquals(0, data.getData().size());
 
 712         List<PmdataEntity> list = null;
 
 714             list = loadListFile("/pmdata24h.json", PmdataEntity.class);
 
 715         } catch (JSONException | IOException e) {
 
 717             fail("failed to load pmdata24h");
 
 719         dbProvider.doWritePerformanceData(list);
 
 720         data = dbProvider.readPmdata24hList(createInput(1, 20));
 
 721         assertEquals(1, data.getData().size());
 
 722         ReadPmdata24hLtpListOutputBuilder ltpdata = null;
 
 724             ltpdata = dbProvider.readPmdata24hLtpList(createInput("node-name", "test", 1, 20));
 
 725         } catch (IOException e) {
 
 727             fail("failed to read pmdata15m ltp list");
 
 729         assertEquals(1, ltpdata.getData().size());
 
 730         ReadPmdata24hDeviceListOutputBuilder devicedata = null;
 
 732             devicedata = dbProvider.readPmdata24hDeviceList(createInput(1, 20));
 
 733         } catch (IOException e) {
 
 735             fail("failed to read pmdata15m devices list");
 
 737         assertEquals(1, devicedata.getData().size());
 
 740     static EntityInput createInput(int page, int size) {
 
 741         return createInput(null, null, page, size);
 
 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));
 
 753     private static <T> T loadData(String content, Class<T> clazz) throws IOException {
 
 754         YangToolsMapper mapper = new YangToolsMapper();
 
 755         return mapper.readValue(content, clazz);
 
 758     private static String loadFile(String filename) throws IOException {
 
 759         return String.join("\n", IoUtils.readAllLines(TestMariaDataProvider.class.getResourceAsStream(filename)));
 
 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);
 
 771         return builder.build();