2845613cb2b929497ffb49440658752f5ee45fa0
[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  * 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.setup;
25
26 import static org.junit.Assert.fail;
27 import java.io.File;
28 import java.sql.SQLException;
29 import java.util.HashMap;
30 import java.util.Map;
31 import java.util.Random;
32 import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
33 import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section;
34 import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section.EnvGetter;
35 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
36 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBConfig;
37 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider;
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 DB db;
61     private static final Map<String, String> envDefaultValues = initEnvDefaultValues();
62     private static final String SDNRDBDATABASETEST="test";
63     private static final String TESTPROPFILE = "test.properties";
64     private static final String SUFFIX = "";
65
66     public MariaDBTestBase() throws ManagedProcessException {
67         this(new Random().nextInt(1000) + 50000);
68     }
69     private static String dbUrl(String host, int port, String dbName) {
70         return String.format("jdbc:mysql://%s:%d/%s", host,port,dbName);
71     }
72     private static Map<String, String> initEnvDefaultValues() {
73         Map<String, String> defaults = new HashMap<>();
74         defaults.put("SDNRDBURL", dbUrl("localhost",3306,SDNRDBDATABASETEST));
75         defaults.put("SDNRDBDATABASE", "test");
76
77         return defaults;
78     }
79     public MariaDBTestBase(String host, int port) {
80         this(host, port, SDNRDBDATABASETEST );
81     }
82     public MariaDBTestBase(String host, int port, String dbName) {
83         EnvGetter env = Section.getEnvGetter();
84         envDefaultValues.put("SDNRDBURL", dbUrl(host,port,dbName));
85         envDefaultValues.put("SDNRDBUSERNAME", "sdnrdb");
86         envDefaultValues.put("SDNRDBPASSWORD", "sdnrdb");
87         Section.setEnvGetter((envname) -> {
88             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
89         });
90         SqlDBConfig config = new SqlDBConfig(new ConfigurationFileRepresentation(TESTPROPFILE));
91         config.setControllerId("test123");
92         this.db = null;
93         this.dbProvider = new SqlDBDataProvider(config, false);
94         //testCreateTable(this.dbProvider.getDBService());
95     }
96
97     public MariaDBTestBase(int port) throws ManagedProcessException {
98         EnvGetter env = Section.getEnvGetter();
99         envDefaultValues.put("SDNRDBURL",dbUrl("localhost",port,SDNRDBDATABASETEST));
100         Section.setEnvGetter((envname) -> {
101             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
102         });
103         SqlDBConfig config = new SqlDBConfig(new ConfigurationFileRepresentation(TESTPROPFILE));
104         //start db server
105         this.db = startDatabase(port);
106         //create db with name sdnrdb
107         this.dbProvider = new SqlDBDataProvider(config, false);
108         //testCreateTable(this.dbProvider.getDBService());
109     }
110
111     public void close() throws ManagedProcessException {
112         if (db != null) {
113             this.db.stop();
114         }
115         File f = new File(TESTPROPFILE);
116         if(f.exists()) {
117             f.delete();
118         }
119     }
120
121     public SqlDBDataProvider getDbProvider() {
122         return dbProvider;
123     }
124
125     public DB getDb() {
126         return db;
127     }
128
129     private static DB startDatabase(int port) throws ManagedProcessException {
130         // Start MariaDB4j database
131         DBConfigurationBuilder dbconfig = DBConfigurationBuilder.newBuilder();
132         dbconfig.setPort(port); // 0 => autom. detect free port
133         DB db = DB.newEmbeddedDB(dbconfig.build());
134         db.start();
135         return db;
136     }
137     public static void testCreateTable(SqlDBClient dbService) {
138         createTableOdl(dbService);
139         createTable(dbService, ConnectionlogEntity.class, Entity.Connectionlog, true);
140         createTable(dbService, EventlogEntity.class, Entity.Eventlog, true);
141         createTable(dbService, FaultcurrentEntity.class, Entity.Faultcurrent, false);
142         createTable(dbService, FaultlogEntity.class, Entity.Faultlog, true);
143         createTable(dbService, CmlogEntity.class, Entity.Cmlog, true);
144         createTable(dbService, GuicutthroughEntity.class, Entity.Guicutthrough, true);
145         createTable(dbService, Pmdata15mEntity.class, Entity.Historicalperformance15min, false);
146         createTable(dbService, Pmdata24hEntity.class, Entity.Historicalperformance24h, false);
147         createTable(dbService, InventoryEntity.class, Entity.Inventoryequipment, false);
148         createTable(dbService, MaintenanceEntity.class, Entity.Maintenancemode, false);
149         createTable(dbService, MediatorServerEntity.class, Entity.MediatorServer, true);
150         createTable(dbService, NetworkElementConnectionEntity.class, Entity.NetworkelementConnection, false);
151     }
152     public static boolean createTableOdl(SqlDBClient dbService) {
153         String createStatement = null;
154         createStatement = SqlDBMapper.createTableOdl();
155         System.out.println(createStatement);
156         try {
157             return dbService.write(createStatement);
158         } catch (SQLException e) {
159             // TODO Auto-generated catch block
160             e.printStackTrace();
161
162         }
163         return false;
164     }
165
166     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex) {
167         return createTable(dbService, cls, entity, autoIndex, true);
168     }
169     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex,
170             boolean withControllerId) {
171         String createStatement = null;
172         try {
173             createStatement = SqlDBMapper.createTable(cls, entity, SUFFIX, autoIndex,withControllerId);
174         } catch (UnableToMapClassException e) {
175             fail(e.getMessage());
176         }
177         System.out.println(createStatement);
178         return dbService.createTable(createStatement);
179     }
180     public String getDBUrl() {
181         return envDefaultValues.get("SDNRDBURL");
182     }
183     public String getDBUsername() {
184         return envDefaultValues.getOrDefault("SDNRDBUSERNAME","");
185     }
186     public String getDBPassword() {
187         return envDefaultValues.getOrDefault("SDNRDBPASSWORD","");
188     }
189 }