264f1203c3bbd061f5631392fdf63c0d6e8bc024
[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  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  *
21  */
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.setup;
23
24 import static org.junit.Assert.fail;
25 import java.io.File;
26 import java.sql.SQLException;
27 import java.util.HashMap;
28 import java.util.Map;
29 import java.util.Random;
30 import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
31 import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section;
32 import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section.EnvGetter;
33 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
34 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBConfig;
35 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider;
36 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper;
37 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper.UnableToMapClassException;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GuicutthroughEntity;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.InventoryEntity;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MediatorServerEntity;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata15mEntity;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata24hEntity;
50 import ch.vorburger.exec.ManagedProcessException;
51 import ch.vorburger.mariadb4j.DB;
52 import ch.vorburger.mariadb4j.DBConfigurationBuilder;
53
54 public class MariaDBTestBase {
55
56     private final SqlDBDataProvider dbProvider;
57     private final DB db;
58     private static final Map<String, String> envDefaultValues = initEnvDefaultValues();
59     private static final String SDNRDBDATABASETEST="test";
60     private static final String TESTPROPFILE = "test.properties";
61
62     public MariaDBTestBase() throws ManagedProcessException {
63         this(new Random().nextInt(1000) + 50000);
64     }
65     private static String dbUrl(String host, int port, String dbName) {
66         return String.format("jdbc:mysql://%s:%d/%s", host,port,dbName);
67     }
68     private static Map<String, String> initEnvDefaultValues() {
69         Map<String, String> defaults = new HashMap<>();
70         defaults.put("SDNRDBURL", dbUrl("localhost",3306,SDNRDBDATABASETEST));
71         defaults.put("SDNRDBDATABASE", "test");
72
73         return defaults;
74     }
75     public MariaDBTestBase(String host, int port) {
76         this(host, port, SDNRDBDATABASETEST );
77     }
78     public MariaDBTestBase(String host, int port, String dbName) {
79         EnvGetter env = Section.getEnvGetter();
80         envDefaultValues.put("SDNRDBURL", dbUrl(host,port,dbName));
81         envDefaultValues.put("SDNRDBUSERNAME", "sdnrdb");
82         envDefaultValues.put("SDNRDBPASSWORD", "sdnrdb");
83         Section.setEnvGetter((envname) -> {
84             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
85         });
86         SqlDBConfig config = new SqlDBConfig(new ConfigurationFileRepresentation(TESTPROPFILE));
87         config.setControllerId("test123");
88         this.db = null;
89         this.dbProvider = new SqlDBDataProvider(config, false);
90         //testCreateTable(this.dbProvider.getDBService());
91     }
92
93     public MariaDBTestBase(int port) throws ManagedProcessException {
94         EnvGetter env = Section.getEnvGetter();
95         envDefaultValues.put("SDNRDBURL",dbUrl("localhost",port,SDNRDBDATABASETEST));
96         Section.setEnvGetter((envname) -> {
97             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
98         });
99         SqlDBConfig config = new SqlDBConfig(new ConfigurationFileRepresentation(TESTPROPFILE));
100         //start db server
101         this.db = startDatabase(port);
102         //create db with name sdnrdb
103         this.dbProvider = new SqlDBDataProvider(config, false);
104         //testCreateTable(this.dbProvider.getDBService());
105     }
106
107     public void close() throws ManagedProcessException {
108         if (db != null) {
109             this.db.stop();
110         }
111         File f = new File(TESTPROPFILE);
112         if(f.exists()) {
113             f.delete();
114         }
115     }
116
117     public SqlDBDataProvider getDbProvider() {
118         return dbProvider;
119     }
120
121     public DB getDb() {
122         return db;
123     }
124
125     private static DB startDatabase(int port) throws ManagedProcessException {
126         // Start MariaDB4j database
127         DBConfigurationBuilder dbconfig = DBConfigurationBuilder.newBuilder();
128         dbconfig.setPort(port); // 0 => autom. detect free port
129         DB db = DB.newEmbeddedDB(dbconfig.build());
130         db.start();
131         return db;
132     }
133     public static void testCreateTable(SqlDBClient dbService) {
134         createTableOdl(dbService);
135         createTable(dbService, ConnectionlogEntity.class, Entity.Connectionlog, true);
136         createTable(dbService, EventlogEntity.class, Entity.Eventlog, true);
137         createTable(dbService, FaultcurrentEntity.class, Entity.Faultcurrent, false);
138         createTable(dbService, FaultlogEntity.class, Entity.Faultlog, true);
139         createTable(dbService, GuicutthroughEntity.class, Entity.Guicutthrough, true);
140         createTable(dbService, Pmdata15mEntity.class, Entity.Historicalperformance15min, false);
141         createTable(dbService, Pmdata24hEntity.class, Entity.Historicalperformance24h, false);
142         createTable(dbService, InventoryEntity.class, Entity.Inventoryequipment, false);
143         createTable(dbService, MaintenanceEntity.class, Entity.Maintenancemode, false);
144         createTable(dbService, MediatorServerEntity.class, Entity.MediatorServer, true);
145         createTable(dbService, NetworkElementConnectionEntity.class, Entity.NetworkelementConnection, false);
146     }
147     public static boolean createTableOdl(SqlDBClient dbService) {
148         String createStatement = null;
149         createStatement = SqlDBMapper.createTableOdl();
150         System.out.println(createStatement);
151         try {
152             return dbService.write(createStatement);
153         } catch (SQLException e) {
154             // TODO Auto-generated catch block
155             e.printStackTrace();
156
157         }
158         return false;
159     }
160
161     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex) {
162         String createStatement = null;
163         try {
164             createStatement = SqlDBMapper.createTable(cls, entity, "", autoIndex);
165         } catch (UnableToMapClassException e) {
166             fail(e.getMessage());
167         }
168         System.out.println(createStatement);
169         try {
170             return dbService.write(createStatement);
171         } catch (SQLException e) {
172             // TODO Auto-generated catch block
173             e.printStackTrace();
174
175         }
176         return false;
177     }
178     public String getDBUrl() {
179         return envDefaultValues.get("SDNRDBURL");
180     }
181     public String getDBUsername() {
182         return envDefaultValues.getOrDefault("SDNRDBUSERNAME","");
183     }
184     public String getDBPassword() {
185         return envDefaultValues.getOrDefault("SDNRDBPASSWORD","");
186     }
187 }