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;
61 private SqlDBConfig config;
62 private static final Map<String, String> envDefaultValues = initEnvDefaultValues();
63 private static final String SDNRDBDATABASETEST = "test";
64 public static final String SUFFIX = "";
66 public MariaDBTestBase() throws ManagedProcessException {
67 this(new Random().nextInt(1000) + 50000);
70 private static String dbUrl(String host, int port, String dbName) {
71 return String.format("jdbc:mysql://%s:%d/%s", host, port, dbName);
74 private static Map<String, String> initEnvDefaultValues() {
75 Map<String, String> defaults = new HashMap<>();
76 defaults.put("SDNRDBURL", dbUrl("localhost", 3306, SDNRDBDATABASETEST));
77 defaults.put("SDNRDBDATABASE", "test");
82 public MariaDBTestBase(String host, int port) {
83 this(host, port, SDNRDBDATABASETEST);
86 public MariaDBTestBase(String host, int port, String dbName) {
87 EnvGetter env = Section.getEnvGetter();
88 envDefaultValues.put("SDNRDBURL", dbUrl(host, port, dbName));
89 envDefaultValues.put("SDNRDBUSERNAME", "sdnrdb");
90 envDefaultValues.put("SDNRDBPASSWORD", "sdnrdb");
91 Section.setEnvGetter((envname) -> {
92 return envDefaultValues.getOrDefault(envname, env.getenv(envname));
94 this.config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
95 this.config.setDbSuffix("");
96 this.config.setControllerId("test123");
98 this.dbProvider = new SqlDBDataProvider(config, false);
101 public MariaDBTestBase(int port) throws ManagedProcessException {
102 EnvGetter env = Section.getEnvGetter();
103 envDefaultValues.put("SDNRDBURL", dbUrl("localhost", port, SDNRDBDATABASETEST));
104 Section.setEnvGetter((envname) -> {
105 return envDefaultValues.getOrDefault(envname, env.getenv(envname));
107 this.config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
108 this.config.setDbSuffix("");
109 this.config.setControllerId("test123");
111 this.db = startDatabase(port);
112 //create db with name sdnrdb
113 this.dbProvider = new SqlDBDataProvider(config, false);
116 public void close() throws ManagedProcessException {
120 File f = new File("test.properties");
126 public SqlDBDataProvider getDbProvider() {
134 private static DB startDatabase(int port) throws ManagedProcessException {
135 // Start MariaDB4j database
136 DBConfigurationBuilder dbconfig = DBConfigurationBuilder.newBuilder();
137 dbconfig.setPort(port); // 0 => autom. detect free port
138 DB db = DB.newEmbeddedDB(dbconfig.build());
143 public String getDBUrl() {
144 return envDefaultValues.get("SDNRDBURL");
147 public String getDBUsername() {
148 return envDefaultValues.getOrDefault("SDNRDBUSERNAME", "");
151 public String getDBPassword() {
152 return envDefaultValues.getOrDefault("SDNRDBPASSWORD", "");
155 public SqlDBClient createRawClient() {
156 return new SqlDBClient(this.config.getUrl(), this.config.getUsername(), this.config.getPassword());
159 public String getDBName() {
160 String url = this.getDBUrl();
161 return url.substring(url.lastIndexOf("/") + 1);
164 public static void testCreateTableStructure(SqlDBClient dbService) {
165 createTableOdl(dbService);
166 createTable(dbService, ConnectionlogEntity.class, Entity.Connectionlog, true);
167 createTable(dbService, EventlogEntity.class, Entity.Eventlog, true);
168 createTable(dbService, FaultcurrentEntity.class, Entity.Faultcurrent, false);
169 createTable(dbService, FaultlogEntity.class, Entity.Faultlog, true);
170 createTable(dbService, GuicutthroughEntity.class, Entity.Guicutthrough, false);
171 createTable(dbService, CmlogEntity.class, Entity.Cmlog, true);
172 createTable(dbService, Pmdata15mEntity.class, Entity.Historicalperformance15min, false);
173 createTable(dbService, Pmdata24hEntity.class, Entity.Historicalperformance24h, false);
174 createTable(dbService, InventoryEntity.class, Entity.Inventoryequipment, false);
175 createTable(dbService, MaintenanceEntity.class, Entity.Maintenancemode, false);
176 createTable(dbService, MediatorServerEntity.class, Entity.MediatorServer, true);
177 createTable(dbService, NetworkElementConnectionEntity.class, Entity.NetworkelementConnection, false);
178 createTable(dbService, Userdata.class, Entity.Userdata, false, false);
181 public static boolean createTableOdl(SqlDBClient dbService) {
182 String createStatement = null;
183 createStatement = SqlDBMapper.createTableOdl();
184 System.out.println(createStatement);
185 return dbService.createTable(createStatement);
187 public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex) {
188 return createTable(dbService, cls, entity, autoIndex, true);
190 public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex,
191 boolean withControllerId) {
192 String createStatement = null;
194 createStatement = SqlDBMapper.createTable(cls, entity, SUFFIX, autoIndex,withControllerId);
195 } catch (UnableToMapClassException e) {
196 fail(e.getMessage());
198 System.out.println(createStatement);
199 return dbService.createTable(createStatement);