0db0190057434f69523cbade9024dacdd1b9a899
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
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
13  *
14  *     http://www.apache.org/licenses/LICENSE-2.0
15  *
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=========================================================
22  *
23  */
24 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
25
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;
76
77 /**
78  * @author Michael Dürre
79  *
80  */
81 public class TestEventService {
82     private static DatabaseDataProvider dbProvider;
83     private static HtDatabaseClient dbRawProvider;
84     private static HtDatabaseEventsService service = null;
85
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";
91
92     @BeforeClass
93     public static void init() throws Exception {
94
95         HostInfo[] hosts = HostInfoForTest.get();
96         dbProvider = new ElasticSearchDataProvider(hosts);
97         dbProvider.waitForYellowDatabaseStatus(30, TimeUnit.SECONDS);
98         dbRawProvider = HtDatabaseClient.getClient(hosts);
99
100         try {
101             service = new HtDatabaseEventsService(dbRawProvider, dbProvider);
102         } catch (Exception e) {
103             e.printStackTrace();
104             fail(e.getMessage());
105         }
106     }
107
108     @Test
109     public void testClearFaultsCurrent() {
110
111         service.clearFaultsCurrentOfNode(NODEID);
112         service.clearFaultsCurrentOfNode(NODEID2);
113
114         List<String> nodeIds = service.getAllNodesWithCurrentAlarms();
115         if (nodeIds.size() > 0) {
116             for (String nodeId : nodeIds) {
117                 service.clearFaultsCurrentOfNode(nodeId);
118             }
119         }
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);
132     }
133
134
135     @Test
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);
145     }
146
147     private static FaultcurrentEntity createFault(String nodeId, String objectRefId, String problem,
148             SeverityType severity) {
149         return createFault(nodeId, objectRefId, problem, severity, NetconfTimeStampImpl.getConverter().getTimeStamp());
150     }
151
152     /**
153      * @param nODENAME
154      * @param problem
155      * @param ts
156      * @param severity
157      * @return
158      */
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();
163     }
164
165     @Test
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));
175
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));
179
180         service.writeCMLog(createCMLog(NODEID3, 1, CmNotificationType.NotifyMOIChanges,
181             "1", CmSourceIndicator.MANAGEMENTOPERATION, CmOperation.CREATE, "value"));
182
183         TestCRUDforDatabase.trySleep(100);
184         now = new Date();
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));
191
192         service.writeCMLog(createCMLog(NODEID3, 2, CmNotificationType.NotifyMOIChanges,
193             "2", CmSourceIndicator.SONOPERATION, CmOperation.REPLACE, "value2"));
194
195         numOlds = service.getNumberOfOldObjects(now);
196         assertEquals(6, numOlds);
197         now = new Date();
198         numOlds = service.getNumberOfOldObjects(now);
199         assertEquals(10, numOlds);
200         service.doIndexClean(now);
201         numOlds = service.getNumberOfOldObjects(now);
202         assertEquals(0, numOlds);
203
204     }
205
206     @Test
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)
213
214                 );
215         service.doWritePerformanceData(list);
216     }
217
218     /**
219      * @param ifname
220      * @param ifUuid
221      * @param scannerId
222      * @param nodename3
223      * @return
224      */
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();
230     }
231
232     @Test
233     public void testNeConnection() {
234         service.removeNetworkConnection(NODEID);
235         service.removeNetworkConnection(NODEID2);
236
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"),
246                 NODEID);
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) {
252                 found = true;
253             }
254         }
255         assertTrue(found);
256
257     }
258
259     @Test
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());
265     }
266
267     /**
268      * @param nodeId
269      * @param status
270      * @return
271      */
272     private static ConnectionlogEntity createConnectionLog(String nodeId, ConnectionLogStatus status) {
273         return new ConnectionlogBuilder().setNodeId(nodeId)
274                 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setStatus(status).build();
275     }
276
277     @Test
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());
284     }
285
286     private static SearchResult<SearchHit> getDbEntityEntries(Entity entity) {
287         return dbRawProvider.doReadAllJsonData(entity.getName());
288     }
289
290     private static void clearDbEntity(Entity entity) {
291         DeleteByQueryRequest query = new DeleteByQueryRequest(entity.getName());
292         query.setQuery(QueryBuilders.matchAllQuery().toJSON());
293         try {
294             dbRawProvider.deleteByQuery(query);
295         } catch (IOException e) {
296             e.printStackTrace();
297         }
298         TestCRUDforDatabase.trySleep(1000);
299     }
300
301     /**
302      * @param nodeId
303      * @param uuid
304      * @return
305      */
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();
310     }
311
312     /**
313      * @param devType
314      * @param mountMethod
315      * @param nodename3
316      * @return
317      */
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();
322     }
323
324     /**
325      * @param nodeId
326      * @param counter
327      * @param notificationType
328      * @param notificationId
329      * @param sourceIndicator
330      * @param operation
331      * @param value
332      * @return
333      */
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()
338             .setNodeId(nodeId)
339             .setCounter(counter)
340             .setNotificationType(notificationType)
341             .setNotificationId(notificationId)
342             .setSourceIndicator(sourceIndicator)
343             .setOperation(operation)
344             .setValue(value)
345             .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp())
346             .build();
347     }
348
349     /**
350      * @param nodeId
351      * @param objectId
352      * @param problem
353      * @param severity
354      * @param counter
355      * @return
356      */
357     private static FaultlogEntity createFaultLog(String nodeId, String objectId, String problem, SeverityType severity,
358             int counter) {
359         return new FaultlogBuilder().setNodeId(nodeId).setObjectId(objectId).setProblem(problem).setSeverity(severity)
360                 .setCounter(counter).setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp())
361                 .setSourceType(SourceType.Netconf).build();
362     }
363
364     /**
365      * @param nodeId
366      * @param objectId
367      * @param attributeName
368      * @param newValue
369      * @param counter
370      * @return
371      */
372     private static EventlogEntity createEventLog(String nodeId, String objectId, String attributeName, String newValue,
373             int counter) {
374         return new EventlogBuilder().setNodeId(nodeId).setObjectId(objectId).setAttributeName(attributeName)
375                 .setNewValue(newValue).setCounter(counter)
376                 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setSourceType(SourceType.Netconf)
377                 .build();
378     }
379 }