migrate sdnr features to phosphorus
[ccsdk/features.git] / sdnr / wt / data-provider / provider / src / test / java / org / onap / ccsdk / features / sdnr / wt / dataprovider / test / util / MariaDBTestBase.java
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2021 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.test.util;
25
26 import static org.junit.Assert.fail;
27 import java.sql.SQLException;
28 import java.util.HashMap;
29 import java.util.Map;
30 import java.util.Random;
31 import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
32 import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section;
33 import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section.EnvGetter;
34 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
35 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBConfig;
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.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogEntity;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GuicutthroughEntity;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.InventoryEntity;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MediatorServerEntity;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata15mEntity;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata24hEntity;
52 import ch.vorburger.exec.ManagedProcessException;
53 import ch.vorburger.mariadb4j.DB;
54 import ch.vorburger.mariadb4j.DBConfigurationBuilder;
55
56 public class MariaDBTestBase {
57
58     private final SqlDBDataProvider dbProvider;
59     private final DB db;
60     private static final Map<String, String> envDefaultValues = initEnvDefaultValues();
61
62     public MariaDBTestBase() throws ManagedProcessException {
63         this(new Random().nextInt(1000) + 50000);
64     }
65
66     private static Map<String, String> initEnvDefaultValues() {
67         Map<String, String> defaults = new HashMap<>();
68         defaults.put("SDNRDBHOST", "localhost");
69         defaults.put("SDNRDBDATABASE", "test");
70
71         return defaults;
72     }
73
74     public MariaDBTestBase(String host, int port) {
75         EnvGetter env = Section.getEnvGetter();
76         envDefaultValues.put("SDNRDBPORT", String.valueOf(port));
77         envDefaultValues.put("SDNRDBHOST", host);
78         envDefaultValues.put("SDNRDBDATABASE", "sdnrdb");
79         envDefaultValues.put("SDNRDBUSERNAME", "sdnrdb");
80         envDefaultValues.put("SDNRDBPASSWORD", "sdnrdb");
81         Section.setEnvGetter((envname) -> {
82             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
83         });
84         SqlDBConfig config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
85         this.db = null;
86         this.dbProvider = new SqlDBDataProvider(config);
87         testCreateTable(this.dbProvider.getDBService());
88     }
89
90     public MariaDBTestBase(int port) throws ManagedProcessException {
91         EnvGetter env = Section.getEnvGetter();
92         envDefaultValues.put("SDNRDBPORT", String.valueOf(port));
93         Section.setEnvGetter((envname) -> {
94             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
95         });
96         SqlDBConfig config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
97         //start db server
98         this.db = startDatabase(port);
99         //create db with name sdnrdb
100         this.dbProvider = new SqlDBDataProvider(config);
101         testCreateTable(this.dbProvider.getDBService());
102     }
103
104     public void close() throws ManagedProcessException {
105         if (db != null) {
106             this.db.stop();
107         }
108
109     }
110
111     public SqlDBDataProvider getDbProvider() {
112         return dbProvider;
113     }
114
115     public DB getDb() {
116         return db;
117     }
118
119     private static DB startDatabase(int port) throws ManagedProcessException {
120         // Start MariaDB4j database
121         DBConfigurationBuilder dbconfig = DBConfigurationBuilder.newBuilder();
122         dbconfig.setPort(port); // 0 => autom. detect free port
123         DB db = DB.newEmbeddedDB(dbconfig.build());
124         db.start();
125         return db;
126     }
127     public static void testCreateTable(SqlDBClient dbService) {
128         createTableOdl(dbService);
129         createTable(dbService, ConnectionlogEntity.class, Entity.Connectionlog, true);
130         createTable(dbService, EventlogEntity.class, Entity.Eventlog, true);
131         createTable(dbService, FaultcurrentEntity.class, Entity.Faultcurrent, false);
132         createTable(dbService, FaultlogEntity.class, Entity.Faultlog, true);
133         createTable(dbService, CmlogEntity.class, Entity.Cmlog, true);
134         createTable(dbService, GuicutthroughEntity.class, Entity.Guicutthrough, true);
135         createTable(dbService, Pmdata15mEntity.class, Entity.Historicalperformance15min, false);
136         createTable(dbService, Pmdata24hEntity.class, Entity.Historicalperformance24h, false);
137         createTable(dbService, InventoryEntity.class, Entity.Inventoryequipment, false);
138         createTable(dbService, MaintenanceEntity.class, Entity.Maintenancemode, false);
139         createTable(dbService, MediatorServerEntity.class, Entity.MediatorServer, true);
140         createTable(dbService, NetworkElementConnectionEntity.class, Entity.NetworkelementConnection, false);
141     }
142     public static boolean createTableOdl(SqlDBClient dbService) {
143         String createStatement = null;
144         createStatement = SqlDBMapper.createTableOdl();
145         System.out.println(createStatement);
146         try {
147             return dbService.write(createStatement);
148         } catch (SQLException e) {
149             // TODO Auto-generated catch block
150             e.printStackTrace();
151
152         }
153         return false;
154     }
155
156     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex) {
157         return createTable(dbService, cls, entity, autoIndex, true);
158     }
159     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex,
160             boolean withControllerId) {
161         String createStatement = null;
162         try {
163             createStatement = SqlDBMapper.createTable(cls, entity, "", autoIndex,withControllerId);
164         } catch (UnableToMapClassException e) {
165             fail(e.getMessage());
166         }
167         System.out.println(createStatement);
168         return dbService.createTable(createStatement);
169     }
170 }