c9cf27c68cb37b73be928857d12a66abd0958699
[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  * Update Copyright (C) 2021 Samsung Electronics Intellectual Property. All rights reserved.
9  * =================================================================================================
10  * Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *     http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  * ============LICENSE_END=========================================================
22  *
23  */
24 package org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test;
25
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertTrue;
29 import static org.junit.Assert.fail;
30 import java.io.IOException;
31 import java.sql.SQLException;
32 import java.util.ArrayList;
33 import java.util.HashMap;
34 import java.util.List;
35 import java.util.Map;
36 import java.util.concurrent.TimeUnit;
37 import org.json.JSONArray;
38 import org.json.JSONException;
39 import org.json.JSONObject;
40 import org.junit.AfterClass;
41 import org.junit.BeforeClass;
42 import org.junit.Test;
43 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
44 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider;
45 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBReaderWriter;
46 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.DeleteQuery;
47 import org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test.util.MariaDBTestBase;
48 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtDatabaseMaintenance;
49 import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.HtUserdataManager;
50 import org.onap.ccsdk.features.sdnr.wt.yang.mapper.YangToolsMapper;
51 import org.opendaylight.netconf.shaded.sshd.common.util.io.IoUtils;
52 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmNotificationType;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmSourceIndicator;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogEntity;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionLogStatus;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInput;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMaintenanceInputBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInput;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerInputBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateMediatorServerOutputBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CreateNetworkElementConnectionOutputBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInput;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMaintenanceInputBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerInput;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteMediatorServerInputBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionInput;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.DeleteNetworkElementConnectionInputBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EntityInput;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Guicutthrough;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GuicutthroughBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Inventory;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadCmlogListOutputBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadConnectionlogListOutputBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadEventlogListOutputBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListInputBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultcurrentListOutputBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadFaultlogListOutputBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadGuiCutThroughEntryOutputBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadInventoryListOutputBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMaintenanceListOutputBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadMediatorServerListOutputBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadNetworkElementConnectionListOutputBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mDeviceListOutputBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mListOutputBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata15mLtpListOutputBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hDeviceListOutputBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hListOutputBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadPmdata24hLtpListOutputBuilder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ReadStatusOutputBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SeverityType;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SourceType;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceInput;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMaintenanceInputBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerInput;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateMediatorServerInputBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInput;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.UpdateNetworkElementConnectionInputBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.Filter;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.FilterKey;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.entity.input.PaginationBuilder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.read.network.element.connection.list.output.Data;
119 import org.opendaylight.yangtools.yang.common.Uint32;
120 import org.opendaylight.yangtools.yang.common.Uint64;
121 import ch.vorburger.exec.ManagedProcessException;
122
123 public class TestMariaDataProvider {
124
125
126     private static final String NODEID1 = "node1";
127     private static final String NODEID2 = "node2";
128     private static final String NODEID3 = "node3";
129     private static final String NODEID4 = "node4";
130     private static final String NODEID5 = "node5";
131     private static final String PROBLEM1 = "problem1";
132     private static final String TIME1 = "2021-05-25T05:12:55.0Z";
133     private static final String TIME2 = "2021-05-25T05:12:56.0Z";
134     private static final String TIME3 = "2021-05-25T05:12:57.0Z";
135     private static final String PROBLEM2 = "problem2";
136     private static final String URI1 = "http://localhost:8181";
137     private static final String URI2 = "http://localhost:8181";
138     private static final String URI3 = "http://localhost:8181";
139     private static final String PATH = "https://samsung.com/3GPP/simulation/network-function/ves";
140     private static final String USERNAME = "admin";
141     private static MariaDBTestBase testBase;
142     private static SqlDBDataProvider dbProvider;
143     private static SqlDBClient dbClient;
144     private static String CONTROLLERID;
145
146     @BeforeClass
147     public static void init() throws Exception {
148
149         testBase = new MariaDBTestBase();
150         dbProvider = testBase.getDbProvider();
151         dbProvider.waitForDatabaseReady(30, TimeUnit.SECONDS);
152         dbClient = testBase.createRawClient();
153         MariaDBTestBase.testCreateTableStructure(dbClient);
154         dbProvider.setControllerId();
155         CONTROLLERID = dbProvider.getControllerId();
156
157     }
158
159     @AfterClass
160     public static void close() {
161         try {
162             testBase.close();
163         } catch (ManagedProcessException e) {
164             e.printStackTrace();
165         }
166     }
167
168     @Test
169     public void testFaultcurrent() {
170         dbProvider.clearFaultsCurrentOfNode(NODEID1);
171         ReadFaultcurrentListOutputBuilder faultCurrents =
172                 dbProvider.readFaultCurrentList(createInput("node-id", NODEID1, 1, 20));
173         assertEquals(0, faultCurrents.getData().size());
174         FaultcurrentEntity faultCurrent1 = new FaultcurrentBuilder().setNodeId(NODEID1).setCounter(1).setObjectId("obj")
175                 .setProblem(PROBLEM1).setTimestamp(DateAndTime.getDefaultInstance(TIME1))
176                 .setSeverity(SeverityType.Major).setId(String.format("%s/%s", NODEID1, PROBLEM1)).build();
177         dbProvider.updateFaultCurrent(faultCurrent1);
178         FaultcurrentEntity faultCurrent2 = new FaultcurrentBuilder().setNodeId(NODEID1).setCounter(1).setObjectId("obj")
179                 .setProblem(PROBLEM2).setTimestamp(DateAndTime.getDefaultInstance(TIME1))
180                 .setSeverity(SeverityType.Minor).setId(String.format("%s/%s", NODEID1, PROBLEM2)).build();
181         dbProvider.updateFaultCurrent(faultCurrent2);
182         faultCurrents = dbProvider.readFaultCurrentList(createInput("node-id", NODEID1, 1, 20));
183         assertEquals(2, faultCurrents.getData().size());
184         ReadStatusOutputBuilder status = null;
185         try {
186             status = dbProvider.readStatus();
187         } catch (IOException e) {
188             e.printStackTrace();
189             fail("failed to read status");
190         }
191         assertEquals(0, status.getData().get(0).getFaults().getCriticals().intValue());
192         assertEquals(1, status.getData().get(0).getFaults().getMajors().intValue());
193         assertEquals(1, status.getData().get(0).getFaults().getMinors().intValue());
194         assertEquals(0, status.getData().get(0).getFaults().getWarnings().intValue());
195
196         List<String> nodeList = dbProvider.getAllNodesWithCurrentAlarms();
197         assertTrue(nodeList.contains(NODEID1));
198         assertEquals(1,nodeList.size());
199
200         faultCurrent1 = new FaultcurrentBuilder().setNodeId(NODEID1).setCounter(1).setObjectId("obj")
201                 .setProblem(PROBLEM1).setTimestamp(DateAndTime.getDefaultInstance(TIME1))
202                 .setSeverity(SeverityType.NonAlarmed).setId(String.format("%s/%s", NODEID1, PROBLEM1)).build();
203         dbProvider.updateFaultCurrent(faultCurrent1);
204         faultCurrents = dbProvider.readFaultCurrentList(createInput("node-id", NODEID1, 1, 20));
205         assertEquals(1, faultCurrents.getData().size());
206
207
208     }
209
210     @Test
211     public void testSerializeDeserialize() {
212
213         try {
214             CreateNetworkElementConnectionOutputBuilder necon = dbProvider.createNetworkElementConnection(
215                     new NetworkElementConnectionBuilder().setNodeId(NODEID1).setIsRequired(Boolean.TRUE).build());
216             List<Data> netestList =
217                     dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID1, 1, 20)).getData();
218
219             assertNotNull(necon);
220             assertEquals(1, netestList.size());
221             assertTrue(netestList.get(0).getIsRequired());
222             SqlDBReaderWriter<Data> dbrw = new SqlDBReaderWriter<>(dbClient, Entity.NetworkelementConnection,
223                     MariaDBTestBase.SUFFIX,
224                     Data.class,
225                     CONTROLLERID);
226             Data e = dbrw.read(NODEID1);
227             assertNotNull(e);
228
229         } catch (IOException e) {
230             e.printStackTrace();
231             fail(e.getMessage());
232         }
233     }
234
235     @Test
236     public void testFaultlog() {
237         try {
238             dbClient.delete(new DeleteQuery(Entity.Faultcurrent, null).toSql());
239         } catch (SQLException e) {
240             e.printStackTrace();
241             fail("problem clearing faultlog");
242         }
243         ReadFaultlogListOutputBuilder faultlogs = dbProvider.readFaultLogList(createInput(1, 20));
244         assertEquals(0, faultlogs.getData().size());
245         FaultlogEntity fault1 = new FaultlogBuilder().setCounter(1).setNodeId(NODEID1).setObjectId("obj")
246                 .setProblem(PROBLEM1).setSeverity(SeverityType.Major).setSourceType(SourceType.Netconf)
247                 .setTimestamp(DateAndTime.getDefaultInstance(TIME1)).build();
248         dbProvider.writeFaultLog(fault1);
249         FaultlogEntity fault2 = new FaultlogBuilder().setCounter(2).setNodeId(NODEID1).setObjectId("obj")
250                 .setProblem(PROBLEM2).setSeverity(SeverityType.Major).setSourceType(SourceType.Netconf)
251                 .setTimestamp(DateAndTime.getDefaultInstance(TIME1)).build();
252         dbProvider.writeFaultLog(fault2);
253         faultlogs = dbProvider.readFaultLogList(createInput("node-id", NODEID1, 1, 20));
254         assertEquals(2, faultlogs.getData().size());
255
256     }
257
258     @Test
259     public void testCMlog() {
260         ReadCmlogListOutputBuilder cmlogs = dbProvider.readCMLogList(createInput(1, 20));
261         assertEquals(0, cmlogs.getData().size());
262
263         CmlogEntity cm1 =
264                 new CmlogBuilder().setNodeId(NODEID2).setCounter(1).setTimestamp(DateAndTime.getDefaultInstance(TIME1))
265                         .setObjectId("obj").setNotificationType(CmNotificationType.NotifyMOIChanges)
266                         .setNotificationId("1").setSourceIndicator(CmSourceIndicator.MANAGEMENTOPERATION).setPath(PATH)
267                         .setValue("pnf-registration: true").build();
268         CmlogEntity cm2 =
269                 new CmlogBuilder().setNodeId(NODEID2).setCounter(2).setTimestamp(DateAndTime.getDefaultInstance(TIME2))
270                         .setObjectId("obj").setNotificationType(CmNotificationType.NotifyMOIChanges)
271                         .setNotificationId("2").setSourceIndicator(CmSourceIndicator.UNKNOWN).setPath(PATH)
272                         .setValue("pnf-registration: false").build();
273
274         dbProvider.writeCMLog(cm1);
275         dbProvider.writeCMLog(cm2);
276         cmlogs = dbProvider.readCMLogList(createInput("node-id", NODEID2, 1, 20));
277         assertEquals(2, cmlogs.getData().size());
278
279         List<CmlogEntity> cmLogEntityList = List.of(cm1, cm2);
280         assertEquals("node2", cmLogEntityList.get(0).getNodeId());
281         assertEquals("obj", cmLogEntityList.get(0).getObjectId());
282         assertEquals(CmNotificationType.NotifyMOIChanges, cmLogEntityList.get(0).getNotificationType());
283         assertEquals("2", cmLogEntityList.get(1).getNotificationId());
284
285     }
286
287     @Test
288     public void testConnectionlog() {
289         try {
290             dbClient.delete(new DeleteQuery(Entity.Connectionlog, null).toSql());
291         } catch (SQLException e) {
292             e.printStackTrace();
293             fail("problem clearing faultlog");
294         }
295         ReadConnectionlogListOutputBuilder logs = dbProvider.readConnectionlogList(createInput(1, 20));
296         assertEquals(0, logs.getData().size());
297         ConnectionlogEntity log1 = new ConnectionlogBuilder().setNodeId(NODEID1)
298                 .setTimestamp(DateAndTime.getDefaultInstance(TIME1)).setStatus(ConnectionLogStatus.Mounted).build();
299         dbProvider.writeConnectionLog(log1);
300         ConnectionlogEntity log2 = new ConnectionlogBuilder().setNodeId(NODEID1)
301                 .setTimestamp(DateAndTime.getDefaultInstance(TIME2)).setStatus(ConnectionLogStatus.Connecting).build();
302         dbProvider.writeConnectionLog(log2);
303         ConnectionlogEntity log3 = new ConnectionlogBuilder().setNodeId(NODEID1)
304                 .setTimestamp(DateAndTime.getDefaultInstance(TIME3)).setStatus(ConnectionLogStatus.Connected).build();
305         dbProvider.writeConnectionLog(log3);
306         logs = dbProvider.readConnectionlogList(createInput(1, 20));
307         assertEquals(3, logs.getData().size());
308     }
309
310     @Test
311     public void testEventlog() {
312         try {
313             dbClient.delete(new DeleteQuery(Entity.Eventlog, null).toSql());
314         } catch (SQLException e) {
315             e.printStackTrace();
316             fail("problem clearing faultlog");
317         }
318         ReadEventlogListOutputBuilder logs = null;
319         try {
320             logs = dbProvider.readEventlogList(createInput(1, 20));
321         } catch (IOException e) {
322             e.printStackTrace();
323             fail(e.getMessage());
324         }
325         assertEquals(0, logs.getData().size());
326         EventlogEntity log1 = new EventlogBuilder().setCounter(1).setNodeId(NODEID1).setObjectId("obj")
327                 .setTimestamp(DateAndTime.getDefaultInstance(TIME1)).setAttributeName("attr").setNewValue("new-value")
328                 .setSourceType(SourceType.Netconf).build();
329         dbProvider.writeEventLog(log1);
330         EventlogEntity log2 = new EventlogBuilder().setCounter(1).setNodeId(NODEID1).setObjectId("obj")
331                 .setTimestamp(DateAndTime.getDefaultInstance(TIME2)).setAttributeName("attr").setNewValue("new-value2")
332                 .setSourceType(SourceType.Netconf).build();
333         dbProvider.writeEventLog(log2);
334         EventlogEntity log3 = new EventlogBuilder().setCounter(1).setNodeId(NODEID1).setObjectId("obj")
335                 .setTimestamp(DateAndTime.getDefaultInstance(TIME3)).setAttributeName("attr").setNewValue("new-value3")
336                 .setSourceType(SourceType.Netconf).build();
337         dbProvider.writeEventLog(log3);
338         try {
339             logs = dbProvider.readEventlogList(createInput(1, 20));
340         } catch (IOException e) {
341             e.printStackTrace();
342             fail(e.getMessage());
343         }
344         assertEquals(3, logs.getData().size());
345     }
346
347     @Test
348     public void testGuicutthrough() {
349         try {
350             dbClient.delete(new DeleteQuery(Entity.Guicutthrough, null).toSql());
351         } catch (SQLException e) {
352             e.printStackTrace();
353             fail("problem clearing faultlog");
354         }
355         Guicutthrough gc1 = new GuicutthroughBuilder().setName(NODEID1).setWeburi(URI1).build();
356         dbProvider.writeGuiCutThroughData(gc1, NODEID1);
357         Guicutthrough gc2 = new GuicutthroughBuilder().setName(NODEID2).setWeburi(URI2).build();
358         dbProvider.writeGuiCutThroughData(gc2, NODEID2);
359         Guicutthrough gc3 = new GuicutthroughBuilder().setName(NODEID3).setWeburi(URI3).build();
360         dbProvider.writeGuiCutThroughData(gc3, NODEID3);
361         ReadGuiCutThroughEntryOutputBuilder data = dbProvider.readGuiCutThroughEntry(createInput(1, 20));
362         assertEquals(3, data.getData().size());
363         data = dbProvider.readGuiCutThroughEntry(createInput("name", NODEID1, 1, 20));
364         assertEquals(1, data.getData().size());
365
366     }
367
368     @Test
369     public void testInventory() {
370         try {
371             dbClient.delete(new DeleteQuery(Entity.Inventoryequipment, null).toSql());
372         } catch (SQLException e) {
373             e.printStackTrace();
374             fail("problem clearing faultlog");
375         }
376         ReadInventoryListOutputBuilder data = dbProvider.readInventoryList(createInput(1, 20));
377         assertEquals(0, data.getData().size());
378         List<Inventory> list = null;
379         try {
380             list = loadListFile("/inventory.json", Inventory.class);
381         } catch (IOException e) {
382             e.printStackTrace();
383             fail("problem loading inventory data");
384
385         }
386         dbProvider.writeInventory(NODEID1, list);
387         data = dbProvider.readInventoryList(createInput(1, 50));
388         assertEquals(22, data.getData().size());
389         data = dbProvider.readInventoryList(createInput("tree-level", "0", 1, 50));
390         assertEquals(5, data.getData().size());
391     }
392
393     @Test
394     public void testMaintenance() {
395         try {
396             dbClient.delete(new DeleteQuery(Entity.Maintenancemode, null).toSql());
397         } catch (SQLException e) {
398             e.printStackTrace();
399             fail("problem clearing faultlog");
400         }
401         ReadMaintenanceListOutputBuilder data = dbProvider.readMaintenanceList(createInput(1, 20));
402         assertEquals(0, data.getData().size());
403         CreateMaintenanceInput maint1 = new CreateMaintenanceInputBuilder().setId(NODEID1).setNodeId(NODEID1)
404                 .setActive(true).setDescription("desc").setObjectIdRef("ref").setProblem("problem")
405                 .setStart(DateAndTime.getDefaultInstance(TIME1)).setEnd(DateAndTime.getDefaultInstance(TIME3)).build();
406         CreateMaintenanceInput maint2 = new CreateMaintenanceInputBuilder().setId(NODEID2).setNodeId(NODEID2)
407                 .setActive(true).setDescription("desc").setObjectIdRef("ref").setProblem("problem2")
408                 .setStart(DateAndTime.getDefaultInstance(TIME1)).setEnd(DateAndTime.getDefaultInstance(TIME3)).build();
409         CreateMaintenanceInput maint3 = new CreateMaintenanceInputBuilder().setId(NODEID3).setNodeId(NODEID3)
410                 .setActive(true).setDescription("desc").setObjectIdRef("ref").setProblem("problem3")
411                 .setStart(DateAndTime.getDefaultInstance(TIME1)).setEnd(DateAndTime.getDefaultInstance(TIME3)).build();
412         try {
413             dbProvider.createMaintenance(maint1);
414             dbProvider.createMaintenance(maint2);
415             dbProvider.createMaintenance(maint3);
416         } catch (IOException e) {
417             e.printStackTrace();
418             fail("unable to create maintenance data");
419         }
420         data = dbProvider.readMaintenanceList(createInput(1, 20));
421         assertEquals(3, data.getData().size());
422
423         UpdateMaintenanceInput update1 =
424                 new UpdateMaintenanceInputBuilder().setId(NODEID1).setNodeId(NODEID1).setActive(false).build();
425         try {
426             dbProvider.updateMaintenance(update1);
427         } catch (IOException e) {
428             e.printStackTrace();
429             fail("unable to update maintenance data");
430         }
431         data = dbProvider.readMaintenanceList(createInput("active","false",1, 20));
432         assertEquals(1, data.getData().size());
433         DeleteMaintenanceInput delete1 = new DeleteMaintenanceInputBuilder().setId(NODEID1).build();
434         try {
435             dbProvider.deleteMaintenance(delete1);
436         } catch (IOException e) {
437             e.printStackTrace();
438             fail("unable to delete maintenance data");
439         }
440         data = dbProvider.readMaintenanceList(createInput(1, 20));
441         assertEquals(2, data.getData().size());
442         try {
443             dbClient.delete(new DeleteQuery(Entity.Maintenancemode, null).toSql());
444         } catch (SQLException e) {
445             e.printStackTrace();
446             fail("problem clearing faultlog");
447         }
448         final String nodeId = "maint_node1";
449         HtDatabaseMaintenance maintenanceService = dbProvider.getHtDatabaseMaintenance();
450         MaintenanceEntity e = maintenanceService.createIfNotExists(nodeId);
451         assertNotNull(e);
452         assertEquals(nodeId,e.getNodeId());
453         MaintenanceEntity e2 = new CreateMaintenanceInputBuilder(e).setActive(true).build();
454         e = maintenanceService.setMaintenance(e2);
455         assertNotNull(e);
456         assertEquals(nodeId,e.getNodeId());
457         assertTrue(e.getActive());
458         maintenanceService.deleteIfNotRequired(nodeId);
459         data = dbProvider.readMaintenanceList(createInput("node-id",nodeId,1, 20));
460         assertEquals(0, data.getData().size());
461
462     }
463
464     @Test
465     public void testMediatorserver() {
466         try {
467             dbClient.delete(new DeleteQuery(Entity.MediatorServer, null).toSql());
468         } catch (SQLException e) {
469             e.printStackTrace();
470             fail("problem clearing mediator server");
471         }
472         ReadMediatorServerListOutputBuilder data = dbProvider.readMediatorServerList(createInput(1, 20));
473         assertEquals(0, data.getData().size());
474         CreateMediatorServerInput mediator1 =
475                 new CreateMediatorServerInputBuilder().setName("server1").setUrl("http://10.20.30.40:7070").build();
476         CreateMediatorServerInput mediator2 =
477                 new CreateMediatorServerInputBuilder().setName("server2").setUrl("http://10.20.30.42:7070").build();
478         CreateMediatorServerInput mediator3 =
479                 new CreateMediatorServerInputBuilder().setName("server3").setUrl("http://10.20.30.43:7070").build();
480         CreateMediatorServerOutputBuilder output1 = null, output2 = null;
481         try {
482             output1 = dbProvider.createMediatorServer(mediator1);
483             output2 = dbProvider.createMediatorServer(mediator2);
484             dbProvider.createMediatorServer(mediator3);
485         } catch (IOException e) {
486             e.printStackTrace();
487             fail("problem creating mediator servers");
488         }
489         data = dbProvider.readMediatorServerList(createInput(1, 20));
490         assertEquals(3, data.getData().size());
491         UpdateMediatorServerInput update1 = new UpdateMediatorServerInputBuilder().setId(output1.getId())
492                 .setName("server1").setUrl("http://10.20.30.40:7071").build();
493         try {
494             dbProvider.updateMediatorServer(update1);
495         } catch (IOException e) {
496             e.printStackTrace();
497             fail("failed to update mediator server");
498         }
499         data = dbProvider.readMediatorServerList(createInput("id", output1.getId(), 1, 20));
500         assertEquals(1, data.getData().size());
501         assertEquals(output1.getId(), data.getData().get(0).getId());
502         assertEquals("server1", data.getData().get(0).getName());
503         assertEquals("http://10.20.30.40:7071", data.getData().get(0).getUrl());
504
505         DeleteMediatorServerInput delete2 = new DeleteMediatorServerInputBuilder().setId(output2.getId()).build();
506         try {
507             dbProvider.deleteMediatorServer(delete2);
508         } catch (IOException e) {
509             e.printStackTrace();
510             fail("unable to delete mediator server");
511         }
512         data = dbProvider.readMediatorServerList(createInput("id", output2.getId(), 1, 20));
513         assertEquals(0, data.getData().size());
514         data = dbProvider.readMediatorServerList(createInput(1, 20));
515         assertEquals(2, data.getData().size());
516     }
517
518     @Test
519     public void testNeConnection() {
520         try {
521             dbClient.delete(new DeleteQuery(Entity.NetworkelementConnection, null).toSql());
522         } catch (SQLException e) {
523             e.printStackTrace();
524             fail("problem clearing neconnection");
525         }
526         ReadNetworkElementConnectionListOutputBuilder data =
527                 dbProvider.readNetworkElementConnectionList(createInput(1, 20));
528         assertEquals(0, data.getData().size());
529         NetworkElementConnectionEntity ne1 = new NetworkElementConnectionBuilder().setNodeId(NODEID1)
530                 .setHost("10.20.30.50").setPort(Uint32.valueOf(8300)).setIsRequired(true).setUsername("user")
531                 .setPassword("passwd").build();
532         NetworkElementConnectionEntity ne2 = new NetworkElementConnectionBuilder().setNodeId(NODEID2)
533                 .setHost("10.20.30.55").setPort(Uint32.valueOf(8300)).setIsRequired(false).setUsername("user")
534                 .setPassword("passwd").setStatus(ConnectionLogStatus.Connecting).build();
535         NetworkElementConnectionEntity ne3 = new NetworkElementConnectionBuilder().setNodeId(NODEID3)
536                 .setHost("10.20.30.55").setPort(Uint32.valueOf(8300)).setIsRequired(false).setUsername("user")
537                 .setPassword("passwd").setStatus(ConnectionLogStatus.Connecting).build();
538         try {
539             dbProvider.createNetworkElementConnection(ne1);
540             dbProvider.createNetworkElementConnection(ne2);
541             dbProvider.updateNetworkConnection22(ne3, NODEID3);
542         } catch (IOException e) {
543             e.printStackTrace();
544             fail("problem creating neconnection");
545         }
546         data = dbProvider.readNetworkElementConnectionList(createInput(1, 20));
547         assertEquals(3, data.getData().size());
548         NetworkElementConnectionEntity update1 = new NetworkElementConnectionBuilder()
549                 .setStatus(ConnectionLogStatus.Connected).setDeviceType(NetworkElementDeviceType.ORAN).build();
550         dbProvider.updateNetworkConnectionDeviceType(update1, NODEID1);
551         data = dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID1, 1, 20));
552         assertEquals(1, data.getData().size());
553         assertEquals(NetworkElementDeviceType.ORAN, data.getData().get(0).getDeviceType());
554         assertEquals(true, data.getData().get(0).getIsRequired());
555         UpdateNetworkElementConnectionInput update2 = new UpdateNetworkElementConnectionInputBuilder().setId(NODEID2)
556                 .setHost("10.20.55.44").setIsRequired(true).build();
557         try {
558             dbProvider.updateNetworkElementConnection(update2);
559         } catch (IOException e) {
560             e.printStackTrace();
561             fail("failed to update neconnection");
562         }
563         data = dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID2, 1, 20));
564         assertEquals(1, data.getData().size());
565         assertEquals("10.20.55.44", data.getData().get(0).getHost());
566         assertEquals(true, data.getData().get(0).getIsRequired());
567
568         ReadStatusOutputBuilder status = null;
569         try {
570             status = dbProvider.readStatus();
571         } catch (IOException e) {
572             e.printStackTrace();
573             fail("failed to read status");
574         }
575         assertEquals(1, status.getData().get(0).getNetworkElementConnections().getConnected().intValue());
576         assertEquals(2, status.getData().get(0).getNetworkElementConnections().getConnecting().intValue());
577         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getDisconnected().intValue());
578         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getMounted().intValue());
579         assertEquals(3, status.getData().get(0).getNetworkElementConnections().getTotal().intValue());
580         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUnableToConnect().intValue());
581         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUndefined().intValue());
582         assertEquals(0, status.getData().get(0).getNetworkElementConnections().getUnmounted().intValue());
583
584
585         DeleteNetworkElementConnectionInput delete1 =
586                 new DeleteNetworkElementConnectionInputBuilder().setId(NODEID1).build();
587         try {
588             dbProvider.deleteNetworkElementConnection(delete1);
589         } catch (IOException e) {
590             e.printStackTrace();
591             fail("failed to delete neconnection");
592         }
593         data = dbProvider.readNetworkElementConnectionList(createInput("node-id", NODEID1, 1, 20));
594         assertEquals(0, data.getData().size());
595         data = dbProvider.readNetworkElementConnectionList(createInput(1, 20));
596         assertEquals(2, data.getData().size());
597
598     }
599
600     @Test
601     public void testUserdata() {
602         HtUserdataManager mgr = dbProvider.getUserManager();
603         String userdata = mgr.getUserdata(USERNAME);
604         assertEquals("{}",userdata);
605         JSONObject o = new JSONObject();
606         o.put("key1", false);
607         o.put("key2","value2");
608         boolean result = mgr.setUserdata(USERNAME, o.toString());
609         assertTrue(result);
610         userdata = mgr.getUserdata(USERNAME);
611         o = new JSONObject(userdata);
612         assertEquals(false,o.getBoolean("key1"));
613         assertEquals("value2",o.getString("key2"));
614         o = new JSONObject();
615         o.put("enabled", true);
616         o.put("name","abcdef");
617         result = mgr.setUserdata(USERNAME,"app1",o.toString());
618         assertTrue(result);
619         userdata = mgr.getUserdata(USERNAME);
620         o = new JSONObject(userdata);
621         assertEquals(false,o.getBoolean("key1"));
622         assertEquals("value2",o.getString("key2"));
623         JSONObject app = o.getJSONObject("app1");
624         assertNotNull(app);
625         assertEquals(true, app.getBoolean("enabled"));
626         assertEquals("abcdef", app.getString("name"));
627
628     }
629     @Test
630     public void testpm15m() {
631         try {
632             dbClient.delete(new DeleteQuery(Entity.Historicalperformance15min, null).toSql());
633         } catch (SQLException e) {
634             e.printStackTrace();
635             fail("problem clearing pmdata15m");
636         }
637         ReadPmdata15mListOutputBuilder data = dbProvider.readPmdata15mList(createInput(1, 20));
638         assertEquals(0, data.getData().size());
639         List<PmdataEntity> list = null;
640         try {
641             list = loadListFile("/pmdata15m.json", PmdataEntity.class);
642         } catch (JSONException | IOException e) {
643             e.printStackTrace();
644             fail("failed to load pmdata15m");
645         }
646         dbProvider.doWritePerformanceData(list);
647         data = dbProvider.readPmdata15mList(createInput(1, 20));
648         assertEquals(10, data.getData().size());
649         ReadPmdata15mLtpListOutputBuilder ltpdata = null;
650         try {
651             ltpdata = dbProvider.readPmdata15mLtpList(createInput("node-name", "sim12600", 1, 20));
652         } catch (IOException e) {
653             e.printStackTrace();
654             fail("failed to read pmdata15m ltp list");
655         }
656         assertEquals(3, ltpdata.getData().size());
657         ReadPmdata15mDeviceListOutputBuilder devicedata = null;
658         try {
659             devicedata = dbProvider.readPmdata15mDeviceList(createInput(1, 20));
660         } catch (IOException e) {
661             e.printStackTrace();
662             fail("failed to read pmdata15m devices list");
663         }
664         assertEquals(1, devicedata.getData().size());
665     }
666
667     @Test
668     public void testpm24h() {
669         try {
670             dbClient.delete(new DeleteQuery(Entity.Historicalperformance24h, null).toSql());
671         } catch (SQLException e) {
672             e.printStackTrace();
673             fail("problem clearing pmdata24h");
674         }
675         ReadPmdata24hListOutputBuilder data = dbProvider.readPmdata24hList(createInput(1, 20));
676         assertEquals(0, data.getData().size());
677         List<PmdataEntity> list = null;
678         try {
679             list = loadListFile("/pmdata24h.json", PmdataEntity.class);
680         } catch (JSONException | IOException e) {
681             e.printStackTrace();
682             fail("failed to load pmdata24h");
683         }
684         dbProvider.doWritePerformanceData(list);
685         data = dbProvider.readPmdata24hList(createInput(1, 20));
686         assertEquals(1, data.getData().size());
687         ReadPmdata24hLtpListOutputBuilder ltpdata = null;
688         try {
689             ltpdata = dbProvider.readPmdata24hLtpList(createInput("node-name", "test", 1, 20));
690         } catch (IOException e) {
691             e.printStackTrace();
692             fail("failed to read pmdata15m ltp list");
693         }
694         assertEquals(1, ltpdata.getData().size());
695         ReadPmdata24hDeviceListOutputBuilder devicedata = null;
696         try {
697             devicedata = dbProvider.readPmdata24hDeviceList(createInput(1, 20));
698         } catch (IOException e) {
699             e.printStackTrace();
700             fail("failed to read pmdata15m devices list");
701         }
702         assertEquals(1, devicedata.getData().size());
703     }
704
705     static EntityInput createInput(int page, int size) {
706         return createInput(null, null, page, size);
707     }
708
709     private static <T> List<T> loadListFile(String filename, Class<T> clazz) throws JSONException, IOException {
710         List<T> list = new ArrayList<>();
711         JSONArray a = new JSONArray(loadFile(filename));
712         for (int i = 0; i < a.length(); i++) {
713             list.add(loadData(a.getJSONObject(i).toString(), clazz));
714         }
715         return list;
716     }
717
718     private static <T> T loadData(String content, Class<T> clazz) throws IOException {
719         YangToolsMapper mapper = new YangToolsMapper();
720         return mapper.readValue(content, clazz);
721     }
722
723     private static String loadFile(String filename) throws IOException {
724         return String.join("\n", IoUtils.readAllLines(TestMariaDataProvider.class.getResourceAsStream(filename)));
725     }
726
727     static EntityInput createInput(String filter, String filterValue, int page, int size) {
728         ReadFaultcurrentListInputBuilder builder = new ReadFaultcurrentListInputBuilder().setPagination(
729                 new PaginationBuilder().setPage(Uint64.valueOf(page)).setSize(Uint32.valueOf(size)).build());
730         if (filter != null && filterValue != null) {
731             Filter f = new FilterBuilder().setProperty(filter).setFiltervalue(filterValue).build();
732             Map<FilterKey, Filter> fmap = new HashMap<>();
733             fmap.put(f.key(), f);
734             builder.setFilter(fmap);
735         }
736         return builder.build();
737     }
738
739 }