2  * ============LICENSE_START=======================================================
 
   3  * ONAP : ccsdk features
 
   4  * ================================================================================
 
   5  * Copyright (C) 2021 highstreet technologies GmbH Intellectual Property.
 
   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
 
  14  *     http://www.apache.org/licenses/LICENSE-2.0
 
  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=========================================================
 
  24 package org.onap.ccsdk.features.sdnr.wt.dataprovider.dblib.test.util;
 
  26 import static org.junit.Assert.fail;
 
  28 import java.util.HashMap;
 
  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;
 
  57 public class MariaDBTestBase {
 
  59     private final SqlDBDataProvider dbProvider;
 
  60     private final SqlDBDataProvider dbProviderOverall;
 
  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 = "";
 
  67     public MariaDBTestBase() throws ManagedProcessException {
 
  68         this(new Random().nextInt(1000) + 50000);
 
  71     private static String dbUrl(String host, int port, String dbName) {
 
  72         return String.format("jdbc:mysql://%s:%d/%s", host, port, dbName);
 
  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");
 
  83     public MariaDBTestBase(String host, int port) {
 
  84         this(host, port, SDNRDBDATABASETEST);
 
  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));
 
  95         this.config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
 
  96         this.config.setDbSuffix("");
 
  97         this.config.setControllerId("test123");
 
  99         this.dbProvider = new SqlDBDataProvider(config, false);
 
 101         SqlDBConfig config2 = new SqlDBConfig(new ConfigurationFileRepresentation("test2.properties"));
 
 102         config2.setDbSuffix("");
 
 103         config2.setControllerId(null);
 
 104         this.dbProviderOverall = new SqlDBDataProvider(config2, false);
 
 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));
 
 113         this.config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
 
 114         this.config.setDbSuffix("");
 
 115         this.config.setControllerId("test123");
 
 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);
 
 126     public void close() throws ManagedProcessException {
 
 130         File f = new File("test.properties");
 
 136     public SqlDBDataProvider getDbProvider() {
 
 139     public SqlDBDataProvider getOverallDbProvider() {
 
 140         return dbProviderOverall;
 
 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());
 
 156     public String getDBUrl() {
 
 157         return envDefaultValues.get("SDNRDBURL");
 
 160     public String getDBUsername() {
 
 161         return envDefaultValues.getOrDefault("SDNRDBUSERNAME", "");
 
 164     public String getDBPassword() {
 
 165         return envDefaultValues.getOrDefault("SDNRDBPASSWORD", "");
 
 168     public SqlDBClient createRawClient() {
 
 169         return new SqlDBClient(this.config.getUrl(), this.config.getUsername(), this.config.getPassword());
 
 172     public String getDBName() {
 
 173         String url = this.getDBUrl();
 
 174         return url.substring(url.lastIndexOf("/") + 1);
 
 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);
 
 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);
 
 200     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex) {
 
 201         return createTable(dbService, cls, entity, autoIndex, true);
 
 203     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex,
 
 204             boolean withControllerId) {
 
 205         String createStatement = null;
 
 207             createStatement = SqlDBMapper.createTable(cls, entity, SUFFIX, autoIndex,withControllerId);
 
 208         } catch (UnableToMapClassException e) {
 
 209             fail(e.getMessage());
 
 211         System.out.println(createStatement);
 
 212         return dbService.createTable(createStatement);