2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertTrue;
26 import static org.junit.Assert.fail;
27 import java.io.IOException;
28 import java.util.Arrays;
29 import java.util.Date;
30 import java.util.List;
31 import java.util.concurrent.TimeUnit;
32 import org.junit.BeforeClass;
33 import org.junit.Test;
34 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
35 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit;
36 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
37 import org.onap.ccsdk.features.sdnr.wt.common.database.config.HostInfo;
38 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders;
39 import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteByQueryRequest;
40 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.ElasticSearchDataProvider;
41 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.entity.HtDatabaseEventsService;
42 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
43 import org.onap.ccsdk.features.sdnr.wt.dataprovider.test.util.HostInfoForTest;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionLogStatus;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionlogBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionlogEntity;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Entity;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentEntity;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogEntity;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.GranularityPeriodType;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.InventoryBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionEntity;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntityBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
67 * @author Michael Dürre
70 public class TestEventService {
71 private static ElasticSearchDataProvider dbProvider;
72 private static HtDatabaseClient dbRawProvider;
73 private static HtDatabaseEventsService service = null;
75 private static final String NODEID = "node1";
76 private static final String NODEID2 = "node2";
77 private static final String OBJECTREFID1 = "objid1";
78 private static final String OBJECTREFID2 = "objid2";
81 public static void init() throws Exception {
83 HostInfo[] hosts = HostInfoForTest.get();
84 dbProvider = new ElasticSearchDataProvider(hosts);
85 dbProvider.waitForYellowDatabaseStatus(30, TimeUnit.SECONDS);
86 dbRawProvider = HtDatabaseClient.getClient(hosts);
89 service = new HtDatabaseEventsService(dbRawProvider, dbProvider);
90 } catch (Exception e) {
97 public void testClearFaultsCurrent() {
99 service.clearFaultsCurrentOfNode(NODEID);
100 service.clearFaultsCurrentOfNode(NODEID2);
102 List<String> nodeIds = service.getAllNodesWithCurrentAlarms();
103 if (nodeIds.size() > 0) {
104 for (String nodeId : nodeIds) {
105 service.clearFaultsCurrentOfNode(nodeId);
108 service.updateFaultCurrent(createFault(NODEID, OBJECTREFID1, "abc", SeverityType.Major));
109 service.updateFaultCurrent(createFault(NODEID, OBJECTREFID1, "abcde", SeverityType.Major));
110 service.updateFaultCurrent(createFault(NODEID, OBJECTREFID2, "abcde", SeverityType.Major));
111 service.updateFaultCurrent(createFault(NODEID2, OBJECTREFID2, "abcde", SeverityType.Major));
112 nodeIds = service.getAllNodesWithCurrentAlarms();
113 assertTrue(nodeIds.size() == 2);
114 service.clearFaultsCurrentOfNodeWithObjectId(NODEID, OBJECTREFID1);
115 nodeIds = service.getAllNodesWithCurrentAlarms();
116 assertTrue(nodeIds.size() == 2);
117 service.updateFaultCurrent(createFault(NODEID, OBJECTREFID2, "abcde", SeverityType.NonAlarmed));
118 nodeIds = service.getAllNodesWithCurrentAlarms();
119 assertTrue(nodeIds.size() == 1);
122 private static FaultcurrentEntity createFault(String nodeId, String objectRefId, String problem,
123 SeverityType severity) {
124 return createFault(nodeId, objectRefId, problem, severity, NetconfTimeStampImpl.getConverter().getTimeStamp());
134 private static FaultcurrentEntity createFault(String nodeId, String objectRefId, String problem,
135 SeverityType severity, DateAndTime ts) {
136 return new FaultcurrentBuilder().setNodeId(nodeId).setObjectId(objectRefId).setTimestamp(ts)
137 .setSeverity(severity).setProblem(problem).build();
141 public void testIndexClean() {
142 Date now = new Date();
143 service.doIndexClean(now);
144 clearDbEntity(Entity.Eventlog);
145 clearDbEntity(Entity.Faultlog);
146 TestCRUDforDatabase.trySleep(1000);
147 service.writeEventLog(createEventLog(NODEID, OBJECTREFID1, "aaa", "abc", 1));
148 service.writeEventLog(createEventLog(NODEID, OBJECTREFID1, "aaa", "avasvas", 2));
150 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.Major, 1));
151 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.NonAlarmed, 2));
152 service.writeFaultLog(createFaultLog(NODEID2, OBJECTREFID2, "problem", SeverityType.Major, 1));
153 TestCRUDforDatabase.trySleep(100);
155 int numOlds = service.getNumberOfOldObjects(now);
156 assertEquals(5, numOlds);
157 TestCRUDforDatabase.trySleep(100);
158 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.Major, 3));
159 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.NonAlarmed, 5));
160 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.Major, 6));
161 numOlds = service.getNumberOfOldObjects(now);
162 assertEquals(5, numOlds);
164 numOlds = service.getNumberOfOldObjects(now);
165 assertEquals(8, numOlds);
166 service.doIndexClean(now);
167 numOlds = service.getNumberOfOldObjects(now);
168 assertEquals(0, numOlds);
173 public void testPm() {
174 final String IFNAME1 = "if1";
175 final String SCNID1 = "scn1";
176 List<PmdataEntity> list =
177 Arrays.asList(createPmData(NODEID, IFNAME1, SCNID1), createPmData(NODEID, IFNAME1, SCNID1),
178 createPmData(NODEID, IFNAME1, SCNID1), createPmData(NODEID, IFNAME1, SCNID1)
181 service.doWritePerformanceData(list);
191 private static PmdataEntity createPmData(String nodeId, String ifUuid, String scannerId) {
192 return new PmdataEntityBuilder().setNodeName(nodeId).setGranularityPeriod(GranularityPeriodType.Period15Min)
193 .setUuidInterface(ifUuid).setScannerId(scannerId).setLayerProtocolName("NETCONF")
194 .setPerformanceData(null).setSuspectIntervalFlag(true)
195 .setTimeStamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).build();
199 public void testNeConnection() {
200 service.removeNetworkConnection(NODEID);
201 service.removeNetworkConnection(NODEID2);
203 clearDbEntity(Entity.NetworkelementConnection);
204 List<NetworkElementConnectionEntity> nes = service.getNetworkElementConnections();
205 assertEquals(0, nes.size());
206 service.updateNetworkConnection22(createNeConnection(NODEID, NetworkElementDeviceType.Unknown), NODEID);
207 service.updateNetworkConnection22(createNeConnection(NODEID2, NetworkElementDeviceType.ORAN), NODEID2);
208 nes = service.getNetworkElementConnections();
209 assertEquals(2, nes.size());
210 service.updateNetworkConnectionDeviceType(createNeConnection(NODEID, NetworkElementDeviceType.Wireless),
212 nes = service.getNetworkElementConnections();
213 assertEquals(2, nes.size());
214 boolean found = false;
215 for (NetworkElementConnectionEntity ne : nes) {
216 if (NODEID.equals(ne.getNodeId()) && ne.getDeviceType() == NetworkElementDeviceType.Wireless) {
225 public void testConnectionLog() {
226 clearDbEntity(Entity.Connectionlog);
227 service.writeConnectionLog(createConnectionLog(NODEID, ConnectionLogStatus.Mounted));
228 service.writeConnectionLog(createConnectionLog(NODEID, ConnectionLogStatus.Mounted));
229 assertEquals(2, getDbEntityEntries(Entity.Connectionlog).getTotal());
237 private static ConnectionlogEntity createConnectionLog(String nodeId, ConnectionLogStatus status) {
238 return new ConnectionlogBuilder().setNodeId(nodeId)
239 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setStatus(status).build();
243 public void testInventory() {
244 clearDbEntity(Entity.Inventoryequipment);
245 service.writeInventory(createEquipment(NODEID, "uuid1"));
246 service.writeInventory(createEquipment(NODEID, "uuid2"));
247 service.writeInventory(createEquipment(NODEID2, "uuid3"));
248 service.writeInventory(createEquipment(NODEID2, "uuid4"));
249 service.writeInventory(createEquipment(NODEID2, "uuid5"));
250 assertEquals(5, getDbEntityEntries(Entity.Inventoryequipment).getTotal());
253 private static SearchResult<SearchHit> getDbEntityEntries(Entity entity) {
254 return dbRawProvider.doReadAllJsonData(entity.getName());
257 private static void clearDbEntity(Entity entity) {
258 DeleteByQueryRequest query = new DeleteByQueryRequest(entity.getName());
259 query.setQuery(QueryBuilders.matchAllQuery().toJSON());
261 dbRawProvider.deleteByQuery(query);
262 } catch (IOException e) {
265 TestCRUDforDatabase.trySleep(1000);
273 private Inventory createEquipment(String nodeId, String uuid) {
274 return new InventoryBuilder().setNodeId(nodeId).setParentUuid("").setDescription("desc")
275 .setManufacturerName("manu").setUuid(uuid).build();
283 private static NetworkElementConnectionEntity createNeConnection(String nodeId, NetworkElementDeviceType devType) {
284 return new NetworkElementConnectionBuilder().setNodeId(nodeId).setHost("host").setPort(1234L)
285 .setCoreModelCapability("123").setStatus(ConnectionLogStatus.Connected).setDeviceType(devType)
286 .setIsRequired(true).build();
297 private static FaultlogEntity createFaultLog(String nodeId, String objectId, String problem, SeverityType severity,
299 return new FaultlogBuilder().setNodeId(nodeId).setObjectId(objectId).setProblem(problem).setSeverity(severity)
300 .setCounter(counter).setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp())
301 .setSourceType(SourceType.Netconf).build();
307 * @param attributeName
312 private static EventlogEntity createEventLog(String nodeId, String objectId, String attributeName, String newValue,
314 return new EventlogBuilder().setNodeId(nodeId).setObjectId(objectId).setAttributeName(attributeName)
315 .setNewValue(newValue).setCounter(counter)
316 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setSourceType(SourceType.Netconf)