f39f9b0883c3e6231162c164d044bcc268bc31da
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2021 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.setup;
23
24 import static org.junit.Assert.fail;
25 import com.fasterxml.jackson.core.JsonProcessingException;
26 import java.lang.reflect.InvocationTargetException;
27 import java.sql.SQLException;
28 import java.util.Arrays;
29 import java.util.List;
30 import java.util.Properties;
31 import java.util.concurrent.TimeUnit;
32 import org.junit.AfterClass;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
36 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider;
37 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper;
38 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper.UnableToMapClassException;
39 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.InsertQuery;
40 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.query.SelectQuery;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionLogStatus;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GuicutthroughEntity;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.InventoryEntity;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MediatorServerEntity;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnection;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata15mEntity;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata24hEntity;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.network.element.connection.entity.NodeDetails;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.network.element.connection.entity.NodeDetailsBuilder;
59 import org.opendaylight.yangtools.yang.binding.DataObject;
60 import org.opendaylight.yangtools.yang.common.Uint32;
61 import ch.vorburger.exec.ManagedProcessException;
62
63 public class TestMariaDBMapper {
64
65
66     private static final String MARIADB_USERNAME = "sdnrdb";
67     private static final String MARIADB_PASSWORD = "sdnrdb";
68     //    private static final String MARIADB_HOST = "10.20.11.159";
69     private static final String MARIADB_HOST = "sdnrdb";
70     private static final int MARIADB_PORT = 3306;
71     private static final String MARIADB_DATABASENAME = "sdnrdb";
72
73     //    private static DbLibService dbService;
74
75     private static MariaDBTestBase testBase;
76     private static SqlDBDataProvider dbProvider;
77
78     @BeforeClass
79     public static void init() throws Exception {
80
81         testBase = new MariaDBTestBase();
82         dbProvider = testBase.getDbProvider();
83         dbProvider.waitForDatabaseReady(30, TimeUnit.SECONDS);
84         //  dbProvider.setControllerId();
85
86     }
87
88     @AfterClass
89     public static void close() {
90         try {
91             testBase.close();
92         } catch (ManagedProcessException e) {
93             e.printStackTrace();
94         }
95     }
96
97     @Test
98     public void testCreateSdnrDBTables() {
99         createTables(dbProvider.getDBService());
100     }
101
102     public static void createTables(SqlDBClient dbService) {
103         createTableOdl(dbService);
104         createTable(dbService, ConnectionlogEntity.class, Entity.Connectionlog, true);
105         createTable(dbService, EventlogEntity.class, Entity.Eventlog, true);
106         createTable(dbService, FaultcurrentEntity.class, Entity.Faultcurrent, false);
107         createTable(dbService, FaultlogEntity.class, Entity.Faultlog, true);
108         createTable(dbService, GuicutthroughEntity.class, Entity.Guicutthrough, true);
109         createTable(dbService, Pmdata15mEntity.class, Entity.Historicalperformance15min, false);
110         createTable(dbService, Pmdata24hEntity.class, Entity.Historicalperformance24h, false);
111         createTable(dbService, InventoryEntity.class, Entity.Inventoryequipment, false);
112         createTable(dbService, MaintenanceEntity.class, Entity.Maintenancemode, false);
113         createTable(dbService, MediatorServerEntity.class, Entity.MediatorServer, true);
114         createTable(dbService, NetworkElementConnectionEntity.class, Entity.NetworkelementConnection, false);
115     }
116
117     //@Test
118     public void testInsert() {
119         NetworkElementConnectionBuilder builder = new NetworkElementConnectionBuilder();
120         builder.setId("ROADM-A");
121         builder.setNodeId("ROADM-A");
122         builder.setCoreModelCapability("2017-03-12");
123         builder.setDeviceType(NetworkElementDeviceType.OROADM);
124         builder.setHost("10.20.30.40");
125         builder.setIsRequired(true);
126         NodeDetails nodeDetails = new NodeDetailsBuilder().setAvailableCapabilities(Arrays.asList(
127                 "urn:ietf:params:netconf:capability:with-defaults:1.0?basic-mode=explicit&also-supported=report-all,"
128                         + "report-all-tagged,trim,explicit",
129                 "urn:ietf:params:netconf:capability:validate:1.1", "urn:ietf:params:netconf:capability:url:1.0"))
130                 .build();
131         builder.setNodeDetails(nodeDetails);
132         builder.setPassword("password");
133         builder.setPort(Uint32.valueOf(50000));
134         builder.setStatus(ConnectionLogStatus.Connected);
135         builder.setUsername("admin");
136         try {
137             writeEntry(builder.build(), Entity.NetworkelementConnection);
138         } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException
139                 | JsonProcessingException e) {
140             // TODO Auto-generated catch block
141             e.printStackTrace();
142         }
143     }
144
145     //@Test
146     public void testRead() {
147         List<NetworkElementConnection> con =
148                 readEntry(Entity.NetworkelementConnection, NetworkElementConnection.class, "ROADM-A");
149         System.out.println(con);
150     }
151
152     private <T extends DataObject> List<T> readEntry(Entity entity, Class<T> clazz, String id) {
153         final SelectQuery selectStatement = new SelectQuery(entity.getName());
154         System.out.println(selectStatement);
155         try {
156             return SqlDBMapper.read(dbProvider.getDBService().read(selectStatement.toSql()), clazz);
157
158         } catch (SQLException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
159                 | InstantiationException | SecurityException | NoSuchMethodException | JsonProcessingException e) {
160             // TODO Auto-generated catch block
161             e.printStackTrace();
162
163         }
164         return null;
165     }
166
167     private <T extends DataObject> boolean writeEntry(T data, Entity entity) throws IllegalAccessException,
168             IllegalArgumentException, InvocationTargetException, JsonProcessingException {
169
170         final InsertQuery<T> insertStatement = new InsertQuery<T>(entity, data, dbProvider.getControllerId());
171         System.out.println(insertStatement);
172         try {
173             return dbProvider.getDBService().write(insertStatement.toSql());
174
175         } catch (SQLException e) {
176             // TODO Auto-generated catch block
177             e.printStackTrace();
178
179         }
180
181         return false;
182     }
183
184     private static boolean createTableOdl(SqlDBClient dbService) {
185         String createStatement = null;
186         createStatement = SqlDBMapper.createTableOdl();
187         System.out.println(createStatement);
188         try {
189             return dbService.write(createStatement);
190         } catch (SQLException e) {
191             // TODO Auto-generated catch block
192             e.printStackTrace();
193
194         }
195         return false;
196     }
197
198     private static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex) {
199         String createStatement = null;
200         try {
201             createStatement = SqlDBMapper.createTable(cls, entity, "", autoIndex);
202         } catch (UnableToMapClassException e) {
203             fail(e.getMessage());
204         }
205         System.out.println(createStatement);
206         try {
207             return dbService.write(createStatement);
208         } catch (SQLException e) {
209             // TODO Auto-generated catch block
210             e.printStackTrace();
211
212         }
213         return false;
214     }
215
216     private static Properties getConfig() {
217         Properties config = new Properties();
218         config.setProperty("org.onap.ccsdk.sli.dbtype", "jdbc");
219         config.setProperty("org.onap.ccsdk.sli.jdbc.hosts", MARIADB_HOST);
220         config.setProperty("org.onap.ccsdk.sli.jdbc.url",
221                 String.format("jdbc:mysql://dbhost:%d/%s", MARIADB_PORT, MARIADB_DATABASENAME));
222         config.setProperty("org.onap.ccsdk.sli.jdbc.driver", "org.mariadb.jdbc.Driver");
223         config.setProperty("org.onap.ccsdk.sli.jdbc.database", MARIADB_DATABASENAME);
224         config.setProperty("org.onap.ccsdk.sli.jdbc.user", MARIADB_USERNAME);
225         config.setProperty("org.onap.ccsdk.sli.jdbc.password", MARIADB_PASSWORD);
226         return config;
227     }
228 }