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.test;
 
  26 import static org.junit.Assert.assertEquals;
 
  27 import static org.junit.Assert.assertTrue;
 
  28 import static org.junit.Assert.fail;
 
  29 import java.io.IOException;
 
  30 import java.util.Arrays;
 
  31 import java.util.Date;
 
  32 import java.util.List;
 
  33 import java.util.concurrent.TimeUnit;
 
  34 import org.junit.BeforeClass;
 
  35 import org.junit.Test;
 
  36 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
 
  37 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit;
 
  38 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
 
  39 import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo;
 
  40 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders;
 
  41 import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteByQueryRequest;
 
  42 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.DatabaseDataProvider;
 
  43 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.entity.FaultEntityManager;
 
  44 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.data.entity.HtDatabaseEventsService;
 
  45 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.elasticsearch.impl.ElasticSearchDataProvider;
 
  46 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
 
  47 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.YangHelper2;
 
  48 import org.onap.ccsdk.features.sdnr.wt.dataprovider.test.util.HostInfoForTest;
 
  49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 
  50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmNotificationType;
 
  51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmOperation;
 
  52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmSourceIndicator;
 
  53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogBuilder;
 
  54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogEntity;
 
  55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionLogStatus;
 
  56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogBuilder;
 
  57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
 
  58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
 
  59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogBuilder;
 
  60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
 
  61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentBuilder;
 
  62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
 
  63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogBuilder;
 
  64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
 
  65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GranularityPeriodType;
 
  66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory;
 
  67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.InventoryBuilder;
 
  68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionBuilder;
 
  69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
 
  70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType;
 
  71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity;
 
  72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntityBuilder;
 
  73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SeverityType;
 
  74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SourceType;
 
  75 import org.opendaylight.yangtools.yang.common.Uint32;
 
  78  * @author Michael Dürre
 
  81 public class TestEventService {
 
  82     private static DatabaseDataProvider dbProvider;
 
  83     private static HtDatabaseClient dbRawProvider;
 
  84     private static HtDatabaseEventsService service = null;
 
  86     private static final String NODEID = "node1";
 
  87     private static final String NODEID2 = "node2";
 
  88     private static final String NODEID3 = "node3";
 
  89     private static final String OBJECTREFID1 = "objid1";
 
  90     private static final String OBJECTREFID2 = "objid2";
 
  93     public static void init() throws Exception {
 
  95         HostInfo[] hosts = HostInfoForTest.get();
 
  96         dbProvider = new ElasticSearchDataProvider(hosts);
 
  97         dbProvider.waitForYellowDatabaseStatus(30, TimeUnit.SECONDS);
 
  98         dbRawProvider = HtDatabaseClient.getClient(hosts);
 
 101             service = new HtDatabaseEventsService(dbRawProvider, dbProvider);
 
 102         } catch (Exception e) {
 
 104             fail(e.getMessage());
 
 109     public void testClearFaultsCurrent() {
 
 111         service.clearFaultsCurrentOfNode(NODEID);
 
 112         service.clearFaultsCurrentOfNode(NODEID2);
 
 114         List<String> nodeIds = service.getAllNodesWithCurrentAlarms();
 
 115         if (nodeIds.size() > 0) {
 
 116             for (String nodeId : nodeIds) {
 
 117                 service.clearFaultsCurrentOfNode(nodeId);
 
 120         service.updateFaultCurrent(createFault(NODEID, OBJECTREFID1, "abc", SeverityType.Major));
 
 121         service.updateFaultCurrent(createFault(NODEID, OBJECTREFID1, "abcde", SeverityType.Major));
 
 122         service.updateFaultCurrent(createFault(NODEID, OBJECTREFID2, "abcde", SeverityType.Major));
 
 123         service.updateFaultCurrent(createFault(NODEID2, OBJECTREFID2, "abcde", SeverityType.Major));
 
 124         nodeIds = service.getAllNodesWithCurrentAlarms();
 
 125         assertTrue(nodeIds.size() == 2);
 
 126         service.clearFaultsCurrentOfNodeWithObjectId(NODEID, OBJECTREFID1);
 
 127         nodeIds = service.getAllNodesWithCurrentAlarms();
 
 128         assertTrue(nodeIds.size() == 2);
 
 129         service.updateFaultCurrent(createFault(NODEID, OBJECTREFID2, "abcde", SeverityType.NonAlarmed));
 
 130         nodeIds = service.getAllNodesWithCurrentAlarms();
 
 131         assertTrue(nodeIds.size() == 1);
 
 136     public void testGenSpecificEsId() {
 
 137         String objectRefOld = FaultEntityManager.genSpecificEsId(createFault(NODEID, "[layerProtocol="+OBJECTREFID1+"]", "abc", SeverityType.Major));
 
 138         assertEquals(String.format("%s/%s/%s", NODEID, OBJECTREFID1, "abc"), objectRefOld);
 
 139         String objectRefOld2 = FaultEntityManager.genSpecificEsId(createFault(NODEID2, "[layerProtocol="+OBJECTREFID2+"]", "abcde", SeverityType.Major));
 
 140         assertEquals(String.format("%s/%s/%s", NODEID2, OBJECTREFID2, "abcde"), objectRefOld2);
 
 141         String objectRef = FaultEntityManager.genSpecificEsId(createFault(NODEID, OBJECTREFID1, "abc", SeverityType.Major));
 
 142         assertEquals(String.format("%s/%s/%s", NODEID, OBJECTREFID1, "abc"), objectRef);
 
 143         String objectRef2 = FaultEntityManager.genSpecificEsId(createFault(NODEID2, OBJECTREFID2, "abcde", SeverityType.Major));
 
 144         assertEquals(String.format("%s/%s/%s", NODEID2, OBJECTREFID2, "abcde"), objectRef2);
 
 147     private static FaultcurrentEntity createFault(String nodeId, String objectRefId, String problem,
 
 148             SeverityType severity) {
 
 149         return createFault(nodeId, objectRefId, problem, severity, NetconfTimeStampImpl.getConverter().getTimeStamp());
 
 159     private static FaultcurrentEntity createFault(String nodeId, String objectRefId, String problem,
 
 160             SeverityType severity, DateAndTime ts) {
 
 161         return new FaultcurrentBuilder().setNodeId(nodeId).setObjectId(objectRefId).setTimestamp(ts)
 
 162                 .setSeverity(severity).setProblem(problem).build();
 
 166     public void testIndexClean() {
 
 167         Date now = new Date();
 
 168         service.doIndexClean(now);
 
 169         clearDbEntity(Entity.Eventlog);
 
 170         clearDbEntity(Entity.Faultlog);
 
 171         clearDbEntity(Entity.Cmlog);
 
 172         TestCRUDforDatabase.trySleep(1000);
 
 173         service.writeEventLog(createEventLog(NODEID, OBJECTREFID1, "aaa", "abc", 1));
 
 174         service.writeEventLog(createEventLog(NODEID, OBJECTREFID1, "aaa", "avasvas", 2));
 
 176         service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.Major, 1));
 
 177         service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.NonAlarmed, 2));
 
 178         service.writeFaultLog(createFaultLog(NODEID2, OBJECTREFID2, "problem", SeverityType.Major, 1));
 
 180         service.writeCMLog(createCMLog(NODEID3, 1, CmNotificationType.NotifyMOIChanges,
 
 181             "1", CmSourceIndicator.MANAGEMENTOPERATION, CmOperation.CREATE, "value"));
 
 183         TestCRUDforDatabase.trySleep(100);
 
 185         long numOlds = service.getNumberOfOldObjects(now);
 
 186         assertEquals(6, numOlds);
 
 187         TestCRUDforDatabase.trySleep(100);
 
 188         service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.Major, 3));
 
 189         service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.NonAlarmed, 5));
 
 190         service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.Major, 6));
 
 192         service.writeCMLog(createCMLog(NODEID3, 2, CmNotificationType.NotifyMOIChanges,
 
 193             "2", CmSourceIndicator.SONOPERATION, CmOperation.REPLACE, "value2"));
 
 195         numOlds = service.getNumberOfOldObjects(now);
 
 196         assertEquals(6, numOlds);
 
 198         numOlds = service.getNumberOfOldObjects(now);
 
 199         assertEquals(10, numOlds);
 
 200         service.doIndexClean(now);
 
 201         numOlds = service.getNumberOfOldObjects(now);
 
 202         assertEquals(0, numOlds);
 
 207     public void testPm() {
 
 208         final String IFNAME1 = "if1";
 
 209         final String SCNID1 = "scn1";
 
 210         List<PmdataEntity> list =
 
 211                 Arrays.asList(createPmData(NODEID, IFNAME1, SCNID1), createPmData(NODEID, IFNAME1, SCNID1),
 
 212                         createPmData(NODEID, IFNAME1, SCNID1), createPmData(NODEID, IFNAME1, SCNID1)
 
 215         service.doWritePerformanceData(list);
 
 225     private static PmdataEntity createPmData(String nodeId, String ifUuid, String scannerId) {
 
 226         return new PmdataEntityBuilder().setNodeName(nodeId).setGranularityPeriod(GranularityPeriodType.Period15Min)
 
 227                 .setUuidInterface(ifUuid).setScannerId(scannerId).setLayerProtocolName("NETCONF")
 
 228                 .setPerformanceData(null).setSuspectIntervalFlag(true)
 
 229                 .setTimeStamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).build();
 
 233     public void testNeConnection() {
 
 234         service.removeNetworkConnection(NODEID);
 
 235         service.removeNetworkConnection(NODEID2);
 
 237         clearDbEntity(Entity.NetworkelementConnection);
 
 238         List<NetworkElementConnectionEntity> nes = service.getNetworkElementConnections();
 
 239         assertEquals(0, nes.size());
 
 240         service.updateNetworkConnection22(createNeConnection(NODEID, NetworkElementDeviceType.Unknown, null), NODEID);
 
 241         service.updateNetworkConnection22(createNeConnection(NODEID, NetworkElementDeviceType.Unknown, "old"), NODEID);
 
 242         service.updateNetworkConnection22(createNeConnection(NODEID2, NetworkElementDeviceType.ORAN, "old"), NODEID2);
 
 243         nes = service.getNetworkElementConnections();
 
 244         assertEquals(2, nes.size());
 
 245         service.updateNetworkConnectionDeviceType(createNeConnection(NODEID, NetworkElementDeviceType.Wireless,"old"),
 
 247         nes = service.getNetworkElementConnections();
 
 248         assertEquals(2, nes.size());
 
 249         boolean found = false;
 
 250         for (NetworkElementConnectionEntity ne : nes) {
 
 251             if (NODEID.equals(ne.getNodeId()) && ne.getDeviceType() == NetworkElementDeviceType.Wireless) {
 
 260     public void testConnectionLog() {
 
 261         clearDbEntity(Entity.Connectionlog);
 
 262         service.writeConnectionLog(createConnectionLog(NODEID, ConnectionLogStatus.Mounted));
 
 263         service.writeConnectionLog(createConnectionLog(NODEID, ConnectionLogStatus.Mounted));
 
 264         assertEquals(2, getDbEntityEntries(Entity.Connectionlog).getTotal());
 
 272     private static ConnectionlogEntity createConnectionLog(String nodeId, ConnectionLogStatus status) {
 
 273         return new ConnectionlogBuilder().setNodeId(nodeId)
 
 274                 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setStatus(status).build();
 
 278     public void testInventory() {
 
 279         clearDbEntity(Entity.Inventoryequipment);
 
 280         service.writeInventory(NODEID,Arrays.asList(createEquipment(NODEID, "uuid1"), createEquipment(NODEID, "uuid2"),
 
 281                 createEquipment(NODEID, "uuid3"), createEquipment(NODEID, "uuid4"),
 
 282                 createEquipment(NODEID, "uuid5")));
 
 283         assertEquals(5, getDbEntityEntries(Entity.Inventoryequipment).getTotal());
 
 286     private static SearchResult<SearchHit> getDbEntityEntries(Entity entity) {
 
 287         return dbRawProvider.doReadAllJsonData(entity.getName());
 
 290     private static void clearDbEntity(Entity entity) {
 
 291         DeleteByQueryRequest query = new DeleteByQueryRequest(entity.getName());
 
 292         query.setQuery(QueryBuilders.matchAllQuery().toJSON());
 
 294             dbRawProvider.deleteByQuery(query);
 
 295         } catch (IOException e) {
 
 298         TestCRUDforDatabase.trySleep(1000);
 
 306     private Inventory createEquipment(String nodeId, String uuid) {
 
 307         return new InventoryBuilder().setNodeId(nodeId).setParentUuid(null).setDescription("desc")
 
 308                 .setTreeLevel(Uint32.valueOf(0)).setManufacturerName("manu")
 
 309                 .setDate(NetconfTimeStampImpl.getConverter().getTimeStampAsNetconfString()).setUuid(uuid).build();
 
 318     private static NetworkElementConnectionEntity createNeConnection(String nodeId, NetworkElementDeviceType devType, String mountMethod) {
 
 319         return new NetworkElementConnectionBuilder().setNodeId(nodeId).setHost("host")
 
 320                 .setPort(YangHelper2.getLongOrUint32(1234L)).setCoreModelCapability("123")//.setMountMethod(mountMethod)
 
 321                 .setStatus(ConnectionLogStatus.Connected).setDeviceType(devType).setIsRequired(true).build();
 
 327      * @param notificationType
 
 328      * @param notificationId
 
 329      * @param sourceIndicator
 
 334     private static CmlogEntity createCMLog(String nodeId, int counter, CmNotificationType notificationType,
 
 335                                            String notificationId, CmSourceIndicator sourceIndicator,
 
 336                                            CmOperation operation, String value) {
 
 337         return new CmlogBuilder()
 
 340             .setNotificationType(notificationType)
 
 341             .setNotificationId(notificationId)
 
 342             .setSourceIndicator(sourceIndicator)
 
 343             .setOperation(operation)
 
 345             .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp())
 
 357     private static FaultlogEntity createFaultLog(String nodeId, String objectId, String problem, SeverityType severity,
 
 359         return new FaultlogBuilder().setNodeId(nodeId).setObjectId(objectId).setProblem(problem).setSeverity(severity)
 
 360                 .setCounter(counter).setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp())
 
 361                 .setSourceType(SourceType.Netconf).build();
 
 367      * @param attributeName
 
 372     private static EventlogEntity createEventLog(String nodeId, String objectId, String attributeName, String newValue,
 
 374         return new EventlogBuilder().setNodeId(nodeId).setObjectId(objectId).setAttributeName(attributeName)
 
 375                 .setNewValue(newValue).setCounter(counter)
 
 376                 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setSourceType(SourceType.Netconf)