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