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)