6d54016cdb55e3980483ee6a6878a6df1c33b559
[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.queries.QueryBuilders;
38 import org.onap.ccsdk.features.sdnr.wt.common.database.requests.DeleteByQueryRequest;
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 = HtDatabaseClient.getClient(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 =
174                 Arrays.asList(createPmData(NODEID, IFNAME1, SCNID1), createPmData(NODEID, IFNAME1, SCNID1),
175                         createPmData(NODEID, IFNAME1, SCNID1), 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 }