7e63c183c271d24b6f4a6840cb834b43f4e0ec6d
[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.model.types.YangHelper2;
44 import org.onap.ccsdk.features.sdnr.wt.dataprovider.test.util.HostInfoForTest;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionLogStatus;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GranularityPeriodType;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.InventoryBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntityBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SeverityType;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SourceType;
66
67 /**
68  * @author Michael Dürre
69  *
70  */
71 public class TestEventService {
72     private static ElasticSearchDataProvider dbProvider;
73     private static HtDatabaseClient dbRawProvider;
74     private static HtDatabaseEventsService service = null;
75
76     private static final String NODEID = "node1";
77     private static final String NODEID2 = "node2";
78     private static final String OBJECTREFID1 = "objid1";
79     private static final String OBJECTREFID2 = "objid2";
80
81     @BeforeClass
82     public static void init() throws Exception {
83
84         HostInfo[] hosts = HostInfoForTest.get();
85         dbProvider = new ElasticSearchDataProvider(hosts);
86         dbProvider.waitForYellowDatabaseStatus(30, TimeUnit.SECONDS);
87         dbRawProvider = HtDatabaseClient.getClient(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 =
178                 Arrays.asList(createPmData(NODEID, IFNAME1, SCNID1), createPmData(NODEID, IFNAME1, SCNID1),
179                         createPmData(NODEID, IFNAME1, SCNID1), 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").setDate(NetconfTimeStampImpl.getConverter().getTimeStampAsNetconfString()).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(YangHelper2.getLongOrUint32(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 }