850d80e1ac4630e29b3641b6a9c18259513dd677
[ccsdk/features.git] /
1 /*******************************************************************************
2  * ============LICENSE_START========================================================================
3  * ONAP : ccsdk feature sdnr wt
4  * =================================================================================================
5  * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved.
6  * =================================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software distributed under the License
13  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14  * or implied. See the License for the specific language governing permissions and limitations under
15  * the License.
16  * ============LICENSE_END==========================================================================
17  ******************************************************************************/
18 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
19
20 import static org.junit.Assert.assertEquals;
21 import static org.junit.Assert.assertTrue;
22 import static org.junit.Assert.fail;
23
24 import java.io.IOException;
25 import java.util.Arrays;
26 import java.util.Date;
27 import java.util.List;
28 import java.util.concurrent.TimeUnit;
29
30 import org.junit.BeforeClass;
31 import org.junit.Test;
32 import org.onap.ccsdk.features.sdnr.wt.common.database.HtDatabaseClient;
33 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchHit;
34 import org.onap.ccsdk.features.sdnr.wt.common.database.SearchResult;
35 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilder;
36 import org.onap.ccsdk.features.sdnr.wt.common.database.queries.QueryBuilders;
37 import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteByQueryRequest;
38 import org.onap.ccsdk.features.sdnr.wt.common.database.requests.SearchRequest;
39 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.ElasticSearchDataProvider;
40 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.HtDatabaseEventsService;
41 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionLogStatus;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionlogBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.ConnectionlogEntity;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Entity;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.EventlogEntity;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultcurrentEntity;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.FaultlogEntity;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.GranularityPeriodType;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.Inventory;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.InventoryBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementConnectionEntity;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.NetworkElementDeviceType;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntity;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.PmdataEntityBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SeverityType;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev190801.SourceType;
63
64 /**
65  * @author Michael Dürre
66  *
67  */
68 public class TestEventService {
69         private static ElasticSearchDataProvider dbProvider;
70         private static HtDatabaseClient dbRawProvider;
71         private static HtDatabaseEventsService service = null;
72
73         private static final String NODEID = "node1";
74         private static final String NODEID2 = "node2";
75         private static final String OBJECTREFID1 = "objid1";
76         private static final String OBJECTREFID2 = "objid2";
77
78         @BeforeClass
79         public static void init() throws Exception {
80
81                 dbProvider = new ElasticSearchDataProvider(TestCRUDforDatabase.hosts);
82                 dbProvider.waitForYellowDatabaseStatus(30, TimeUnit.SECONDS);
83                 dbRawProvider = new HtDatabaseClient(TestCRUDforDatabase.hosts);
84
85                 try {
86                         service = new HtDatabaseEventsService(dbRawProvider, dbProvider);
87                 } catch (Exception e) {
88                         e.printStackTrace();
89                         fail(e.getMessage());
90                 }
91         }
92
93         @Test
94         public void testClearFaultsCurrent() {
95
96                 service.clearFaultsCurrentOfNode(NODEID);
97                 service.clearFaultsCurrentOfNode(NODEID2);
98
99                 List<String> nodeIds = service.getAllNodesWithCurrentAlarms();
100                 if (nodeIds.size() > 0) {
101                         for (String nodeId : nodeIds) {
102                                 service.clearFaultsCurrentOfNode(nodeId);
103                         }
104                 }
105                 service.updateFaultCurrent(createFault(NODEID, OBJECTREFID1, "abc", SeverityType.Major));
106                 service.updateFaultCurrent(createFault(NODEID, OBJECTREFID1, "abcde", SeverityType.Major));
107                 service.updateFaultCurrent(createFault(NODEID, OBJECTREFID2, "abcde", SeverityType.Major));
108                 service.updateFaultCurrent(createFault(NODEID2, OBJECTREFID2, "abcde", SeverityType.Major));
109                 nodeIds = service.getAllNodesWithCurrentAlarms();
110                 assertTrue(nodeIds.size() == 2);
111                 service.clearFaultsCurrentOfNodeWithObjectId(NODEID, OBJECTREFID1);
112                 nodeIds = service.getAllNodesWithCurrentAlarms();
113                 assertTrue(nodeIds.size() == 2);
114                 service.updateFaultCurrent(createFault(NODEID, OBJECTREFID2, "abcde", SeverityType.NonAlarmed));
115                 nodeIds = service.getAllNodesWithCurrentAlarms();
116                 assertTrue(nodeIds.size() == 1);
117         }
118
119         private static FaultcurrentEntity createFault(String nodeId, String objectRefId, String problem,
120                         SeverityType severity) {
121                 return createFault(nodeId, objectRefId, problem, severity, NetconfTimeStampImpl.getConverter().getTimeStamp());
122         }
123
124         /**
125         * @param nODENAME
126         * @param problem
127         * @param ts 
128         * @param severity 
129         * @return
130         */
131         private static FaultcurrentEntity createFault(String nodeId, String objectRefId, String problem,
132                         SeverityType severity, DateAndTime ts) {
133                 return new FaultcurrentBuilder().setNodeId(nodeId).setObjectId(objectRefId).setTimestamp(ts)
134                                 .setSeverity(severity).setProblem(problem).build();
135         }
136
137         @Test
138         public void testIndexClean() {
139                 Date now = new Date();
140                 service.doIndexClean(now);
141                 clearDbEntity(Entity.Eventlog);
142                 clearDbEntity(Entity.Faultlog);
143                 TestCRUDforDatabase.trySleep(1000);
144                 service.writeEventLog(createEventLog(NODEID, OBJECTREFID1, "aaa", "abc", 1));
145                 service.writeEventLog(createEventLog(NODEID, OBJECTREFID1, "aaa", "avasvas", 2));
146
147                 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.Major, 1));
148                 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.NonAlarmed, 2));
149                 service.writeFaultLog(createFaultLog(NODEID2, OBJECTREFID2, "problem", SeverityType.Major, 1));
150                 TestCRUDforDatabase.trySleep(100);
151                 now = new Date();
152                 int numOlds = service.getNumberOfOldObjects(now);
153                 assertEquals(5, numOlds);
154                 TestCRUDforDatabase.trySleep(100);              
155                 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.Major, 3));
156                 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.NonAlarmed, 5));
157                 service.writeFaultLog(createFaultLog(NODEID, OBJECTREFID2, "problem", SeverityType.Major, 6));
158                 numOlds = service.getNumberOfOldObjects(now);
159                 assertEquals(5, numOlds);
160                 now = new Date();
161                 numOlds = service.getNumberOfOldObjects(now);
162                 assertEquals(8, numOlds);
163                 service.doIndexClean(now);
164                 numOlds = service.getNumberOfOldObjects(now);
165                 assertEquals(0, numOlds);
166
167         }
168
169         @Test
170         public void testPm() {
171                 final String IFNAME1 = "if1";
172                 final String SCNID1 = "scn1";
173                 List<PmdataEntity> list = Arrays.asList(createPmData(NODEID, IFNAME1, SCNID1),
174                                 createPmData(NODEID, IFNAME1, SCNID1), createPmData(NODEID, IFNAME1, SCNID1),
175                                 createPmData(NODEID, IFNAME1, SCNID1)
176
177                 );
178                 service.doWritePerformanceData(list);
179         }
180
181         /**
182          * @param ifname 
183          * @param ifUuid 
184          * @param scannerId 
185          * @param nodename3
186          * @return
187          */
188         private static PmdataEntity createPmData(String nodeId, String ifUuid, String scannerId) {
189                 return new PmdataEntityBuilder().setNodeName(nodeId).setGranularityPeriod(GranularityPeriodType.Period15Min)
190                                 .setUuidInterface(ifUuid).setScannerId(scannerId).setLayerProtocolName("NETCONF")
191                                 .setPerformanceData(null).setSuspectIntervalFlag(true)
192                                 .setTimeStamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).build();
193         }
194
195         @Test
196         public void testNeConnection() {
197                 service.removeNetworkConnection(NODEID);
198                 service.removeNetworkConnection(NODEID2);
199
200                 clearDbEntity(Entity.NetworkelementConnection);
201                 List<NetworkElementConnectionEntity> nes = service.getNetworkElementConnections();
202                 assertEquals(0, nes.size());
203                 service.updateNetworkConnection22(createNeConnection(NODEID, NetworkElementDeviceType.Unknown), NODEID);
204                 service.updateNetworkConnection22(createNeConnection(NODEID2, NetworkElementDeviceType.ORAN), NODEID2);
205                 nes = service.getNetworkElementConnections();
206                 assertEquals(2, nes.size());
207                 service.updateNetworkConnectionDeviceType(createNeConnection(NODEID, NetworkElementDeviceType.Wireless),
208                                 NODEID);
209                 nes = service.getNetworkElementConnections();
210                 assertEquals(2, nes.size());
211                 boolean found = false;
212                 for (NetworkElementConnectionEntity ne : nes) {
213                         if (NODEID.equals(ne.getNodeId()) && ne.getDeviceType() == NetworkElementDeviceType.Wireless) {
214                                 found = true;
215                         }
216                 }
217                 assertTrue(found);
218
219         }
220
221         @Test
222         public void testConnectionLog() {
223                 clearDbEntity(Entity.Connectionlog);
224                 service.writeConnectionLog(createConnectionLog(NODEID, ConnectionLogStatus.Mounted));
225                 service.writeConnectionLog(createConnectionLog(NODEID, ConnectionLogStatus.Mounted));
226                 assertEquals(2, getDbEntityEntries(Entity.Connectionlog).getTotal());
227         }
228
229         /**
230          * @param nodeId 
231          * @param status 
232          * @return
233          */
234         private static ConnectionlogEntity createConnectionLog(String nodeId, ConnectionLogStatus status) {
235                 return new ConnectionlogBuilder().setNodeId(nodeId)
236                                 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setStatus(status).build();
237         }
238
239         @Test
240         public void testInventory() {
241                 clearDbEntity(Entity.Inventoryequipment);
242                 service.writeInventory(createEquipment(NODEID, "uuid1"));
243                 service.writeInventory(createEquipment(NODEID, "uuid2"));
244                 service.writeInventory(createEquipment(NODEID2, "uuid3"));
245                 service.writeInventory(createEquipment(NODEID2, "uuid4"));
246                 service.writeInventory(createEquipment(NODEID2, "uuid5"));
247                 assertEquals(5, getDbEntityEntries(Entity.Inventoryequipment).getTotal());
248         }
249
250         private static SearchResult<SearchHit> getDbEntityEntries(Entity entity) {
251                 return dbRawProvider.doReadAllJsonData(entity.getName());
252         }
253
254         private static void clearDbEntity(Entity entity) {
255                 DeleteByQueryRequest query = new DeleteByQueryRequest(entity.getName());
256                 query.setQuery(QueryBuilders.matchAllQuery().toJSON());
257                 try {
258                         dbRawProvider.deleteByQuery(query);
259                 } catch (IOException e) {
260                         e.printStackTrace();
261                 }
262                 TestCRUDforDatabase.trySleep(1000);
263         }
264
265         /**
266          * @param nodeId 
267          * @param uuid 
268          * @return
269          */
270         private Inventory createEquipment(String nodeId, String uuid) {
271                 return new InventoryBuilder().setNodeId(nodeId).setParentUuid("").setDescription("desc")
272                                 .setManufacturerName("manu").setUuid(uuid).build();
273         }
274
275         /**
276          * @param devType 
277          * @param nodename3
278          * @return
279          */
280         private static NetworkElementConnectionEntity createNeConnection(String nodeId, NetworkElementDeviceType devType) {
281                 return new NetworkElementConnectionBuilder().setNodeId(nodeId).setHost("host").setPort(1234L)
282                                 .setCoreModelCapability("123").setStatus(ConnectionLogStatus.Connected).setDeviceType(devType)
283                                 .setIsRequired(true).build();
284         }
285
286         /**
287          * @param nodeId 
288          * @param objectId 
289          * @param problem 
290          * @param severity 
291          * @param counter 
292          * @return
293          */
294         private static FaultlogEntity createFaultLog(String nodeId, String objectId, String problem, SeverityType severity,
295                         int counter) {
296                 return new FaultlogBuilder().setNodeId(nodeId).setObjectId(objectId).setProblem(problem).setSeverity(severity)
297                                 .setCounter(counter).setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp())
298                                 .setSourceType(SourceType.Netconf).build();
299         }
300
301         /**
302          * @param nodeId 
303          * @param objectId 
304          * @param attributeName 
305          * @param newValue 
306          * @param counter 
307          * @return
308          */
309         private static EventlogEntity createEventLog(String nodeId, String objectId, String attributeName, String newValue,
310                         int counter) {
311                 return new EventlogBuilder().setNodeId(nodeId).setObjectId(objectId).setAttributeName(attributeName)
312                                 .setNewValue(newValue).setCounter(counter)
313                                 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setSourceType(SourceType.Netconf)
314                                 .build();
315         }
316 }