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