ccb1ea53fa0ee46d0cb51cef31723a4b8b019f23
[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 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;
65
66 /**
67  * @author Michael Dürre
68  *
69  */
70 public class TestEventService {
71     private static ElasticSearchDataProvider dbProvider;
72     private static HtDatabaseClient dbRawProvider;
73     private static HtDatabaseEventsService service = null;
74
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";
79
80     @BeforeClass
81     public static void init() throws Exception {
82
83         HostInfo[] hosts = HostInfoForTest.get();
84         dbProvider = new ElasticSearchDataProvider(hosts);
85         dbProvider.waitForYellowDatabaseStatus(30, TimeUnit.SECONDS);
86         dbRawProvider = HtDatabaseClient.getClient(hosts);
87
88         try {
89             service = new HtDatabaseEventsService(dbRawProvider, dbProvider);
90         } catch (Exception e) {
91             e.printStackTrace();
92             fail(e.getMessage());
93         }
94     }
95
96     @Test
97     public void testClearFaultsCurrent() {
98
99         service.clearFaultsCurrentOfNode(NODEID);
100         service.clearFaultsCurrentOfNode(NODEID2);
101
102         List<String> nodeIds = service.getAllNodesWithCurrentAlarms();
103         if (nodeIds.size() > 0) {
104             for (String nodeId : nodeIds) {
105                 service.clearFaultsCurrentOfNode(nodeId);
106             }
107         }
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);
120     }
121
122     private static FaultcurrentEntity createFault(String nodeId, String objectRefId, String problem,
123             SeverityType severity) {
124         return createFault(nodeId, objectRefId, problem, severity, NetconfTimeStampImpl.getConverter().getTimeStamp());
125     }
126
127     /**
128      * @param nODENAME
129      * @param problem
130      * @param ts
131      * @param severity
132      * @return
133      */
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();
138     }
139
140     @Test
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));
149
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);
154         now = new Date();
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);
163         now = new Date();
164         numOlds = service.getNumberOfOldObjects(now);
165         assertEquals(8, numOlds);
166         service.doIndexClean(now);
167         numOlds = service.getNumberOfOldObjects(now);
168         assertEquals(0, numOlds);
169
170     }
171
172     @Test
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)
179
180                 );
181         service.doWritePerformanceData(list);
182     }
183
184     /**
185      * @param ifname
186      * @param ifUuid
187      * @param scannerId
188      * @param nodename3
189      * @return
190      */
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();
196     }
197
198     @Test
199     public void testNeConnection() {
200         service.removeNetworkConnection(NODEID);
201         service.removeNetworkConnection(NODEID2);
202
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),
211                 NODEID);
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) {
217                 found = true;
218             }
219         }
220         assertTrue(found);
221
222     }
223
224     @Test
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());
230     }
231
232     /**
233      * @param nodeId
234      * @param status
235      * @return
236      */
237     private static ConnectionlogEntity createConnectionLog(String nodeId, ConnectionLogStatus status) {
238         return new ConnectionlogBuilder().setNodeId(nodeId)
239                 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setStatus(status).build();
240     }
241
242     @Test
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());
251     }
252
253     private static SearchResult<SearchHit> getDbEntityEntries(Entity entity) {
254         return dbRawProvider.doReadAllJsonData(entity.getName());
255     }
256
257     private static void clearDbEntity(Entity entity) {
258         DeleteByQueryRequest query = new DeleteByQueryRequest(entity.getName());
259         query.setQuery(QueryBuilders.matchAllQuery().toJSON());
260         try {
261             dbRawProvider.deleteByQuery(query);
262         } catch (IOException e) {
263             e.printStackTrace();
264         }
265         TestCRUDforDatabase.trySleep(1000);
266     }
267
268     /**
269      * @param nodeId
270      * @param uuid
271      * @return
272      */
273     private Inventory createEquipment(String nodeId, String uuid) {
274         return new InventoryBuilder().setNodeId(nodeId).setParentUuid("").setDescription("desc")
275                 .setManufacturerName("manu").setUuid(uuid).build();
276     }
277
278     /**
279      * @param devType
280      * @param nodename3
281      * @return
282      */
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();
287     }
288
289     /**
290      * @param nodeId
291      * @param objectId
292      * @param problem
293      * @param severity
294      * @param counter
295      * @return
296      */
297     private static FaultlogEntity createFaultLog(String nodeId, String objectId, String problem, SeverityType severity,
298             int counter) {
299         return new FaultlogBuilder().setNodeId(nodeId).setObjectId(objectId).setProblem(problem).setSeverity(severity)
300                 .setCounter(counter).setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp())
301                 .setSourceType(SourceType.Netconf).build();
302     }
303
304     /**
305      * @param nodeId
306      * @param objectId
307      * @param attributeName
308      * @param newValue
309      * @param counter
310      * @return
311      */
312     private static EventlogEntity createEventLog(String nodeId, String objectId, String attributeName, String newValue,
313             int counter) {
314         return new EventlogBuilder().setNodeId(nodeId).setObjectId(objectId).setAttributeName(attributeName)
315                 .setNewValue(newValue).setCounter(counter)
316                 .setTimestamp(NetconfTimeStampImpl.getConverter().getTimeStamp()).setSourceType(SourceType.Netconf)
317                 .build();
318     }
319 }