add fixes for wt sulfur
[ccsdk/features.git] / sdnr / wt / data-provider / dblib / src / test / java / org / onap / ccsdk / features / sdnr / wt / dataprovider / dblib / 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.dblib.test.util;
25
26 import static org.junit.Assert.fail;
27 import java.io.File;
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.data.Userdata;
38 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper;
39 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper.UnableToMapClassException;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.CmlogEntity;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GuicutthroughEntity;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.InventoryEntity;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MediatorServerEntity;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata15mEntity;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata24hEntity;
53 import ch.vorburger.exec.ManagedProcessException;
54 import ch.vorburger.mariadb4j.DB;
55 import ch.vorburger.mariadb4j.DBConfigurationBuilder;
56
57 public class MariaDBTestBase {
58
59     private final SqlDBDataProvider dbProvider;
60     private final SqlDBDataProvider dbProviderOverall;
61     private final DB db;
62     private SqlDBConfig config;
63     private static final Map<String, String> envDefaultValues = initEnvDefaultValues();
64     private static final String SDNRDBDATABASETEST = "test";
65     public static final String SUFFIX = "";
66
67     public MariaDBTestBase() throws ManagedProcessException {
68         this(new Random().nextInt(1000) + 50000);
69     }
70
71     private static String dbUrl(String host, int port, String dbName) {
72         return String.format("jdbc:mysql://%s:%d/%s", host, port, dbName);
73     }
74
75     private static Map<String, String> initEnvDefaultValues() {
76         Map<String, String> defaults = new HashMap<>();
77         defaults.put("SDNRDBURL", dbUrl("localhost", 3306, SDNRDBDATABASETEST));
78         defaults.put("SDNRDBDATABASE", "test");
79
80         return defaults;
81     }
82
83     public MariaDBTestBase(String host, int port) {
84         this(host, port, SDNRDBDATABASETEST);
85     }
86
87     public MariaDBTestBase(String host, int port, String dbName) {
88         EnvGetter env = Section.getEnvGetter();
89         envDefaultValues.put("SDNRDBURL", dbUrl(host, port, dbName));
90         envDefaultValues.put("SDNRDBUSERNAME", "sdnrdb");
91         envDefaultValues.put("SDNRDBPASSWORD", "sdnrdb");
92         Section.setEnvGetter((envname) -> {
93             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
94         });
95         this.config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
96         this.config.setDbSuffix("");
97         this.config.setControllerId("test123");
98         this.db = null;
99         this.dbProvider = new SqlDBDataProvider(config, false);
100
101         SqlDBConfig config2 = new SqlDBConfig(new ConfigurationFileRepresentation("test2.properties"));
102         config2.setDbSuffix("");
103         config2.setControllerId(null);
104         this.dbProviderOverall = new SqlDBDataProvider(config2, false);
105     }
106
107     public MariaDBTestBase(int port) throws ManagedProcessException {
108         EnvGetter env = Section.getEnvGetter();
109         envDefaultValues.put("SDNRDBURL", dbUrl("localhost", port, SDNRDBDATABASETEST));
110         Section.setEnvGetter((envname) -> {
111             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
112         });
113         this.config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
114         this.config.setDbSuffix("");
115         this.config.setControllerId("test123");
116         //start db server
117         this.db = startDatabase(port);
118         //create db with name sdnrdb
119         this.dbProvider = new SqlDBDataProvider(config, false);
120         SqlDBConfig config2 = new SqlDBConfig(new ConfigurationFileRepresentation("test2.properties"));
121         config2.setDbSuffix("");
122         config2.setControllerId(null);
123         this.dbProviderOverall = new SqlDBDataProvider(config2, false);
124     }
125
126     public void close() throws ManagedProcessException {
127         if (db != null) {
128             this.db.stop();
129         }
130         File f = new File("test.properties");
131         if(f.exists()) {
132             f.delete();
133         }
134     }
135
136     public SqlDBDataProvider getDbProvider() {
137         return dbProvider;
138     }
139     public SqlDBDataProvider getOverallDbProvider() {
140         return dbProviderOverall;
141     }
142
143     public DB getDb() {
144         return db;
145     }
146
147     private static DB startDatabase(int port) throws ManagedProcessException {
148         // Start MariaDB4j database
149         DBConfigurationBuilder dbconfig = DBConfigurationBuilder.newBuilder();
150         dbconfig.setPort(port); // 0 => autom. detect free port
151         DB db = DB.newEmbeddedDB(dbconfig.build());
152         db.start();
153         return db;
154     }
155
156     public String getDBUrl() {
157         return envDefaultValues.get("SDNRDBURL");
158     }
159
160     public String getDBUsername() {
161         return envDefaultValues.getOrDefault("SDNRDBUSERNAME", "");
162     }
163
164     public String getDBPassword() {
165         return envDefaultValues.getOrDefault("SDNRDBPASSWORD", "");
166     }
167
168     public SqlDBClient createRawClient() {
169         return new SqlDBClient(this.config.getUrl(), this.config.getUsername(), this.config.getPassword());
170     }
171
172     public String getDBName() {
173         String url = this.getDBUrl();
174         return url.substring(url.lastIndexOf("/") + 1);
175     }
176
177     public static void testCreateTableStructure(SqlDBClient dbService) {
178         createTableOdl(dbService);
179         createTable(dbService, ConnectionlogEntity.class, Entity.Connectionlog, true);
180         createTable(dbService, EventlogEntity.class, Entity.Eventlog, true);
181         createTable(dbService, FaultcurrentEntity.class, Entity.Faultcurrent, false);
182         createTable(dbService, FaultlogEntity.class, Entity.Faultlog, true);
183         createTable(dbService, GuicutthroughEntity.class, Entity.Guicutthrough, false);
184         createTable(dbService, CmlogEntity.class, Entity.Cmlog, true);
185         createTable(dbService, Pmdata15mEntity.class, Entity.Historicalperformance15min, false);
186         createTable(dbService, Pmdata24hEntity.class, Entity.Historicalperformance24h, false);
187         createTable(dbService, InventoryEntity.class, Entity.Inventoryequipment, false);
188         createTable(dbService, MaintenanceEntity.class, Entity.Maintenancemode, false);
189         createTable(dbService, MediatorServerEntity.class, Entity.MediatorServer, true);
190         createTable(dbService, NetworkElementConnectionEntity.class, Entity.NetworkelementConnection, false);
191         createTable(dbService, Userdata.class, Entity.Userdata, false, false);
192     }
193
194     public static boolean createTableOdl(SqlDBClient dbService) {
195         String createStatement = null;
196         createStatement = SqlDBMapper.createTableOdl();
197         System.out.println(createStatement);
198         return dbService.createTable(createStatement);
199     }
200     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex) {
201         return createTable(dbService, cls, entity, autoIndex, true);
202     }
203     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex,
204             boolean withControllerId) {
205         String createStatement = null;
206         try {
207             createStatement = SqlDBMapper.createTable(cls, entity, SUFFIX, autoIndex,withControllerId);
208         } catch (UnableToMapClassException e) {
209             fail(e.getMessage());
210         }
211         System.out.println(createStatement);
212         return dbService.createTable(createStatement);
213     }
214 }
215