276bcf4a10bef16e57a279cadab83478bedc93ec
[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.test.util;
23
24 import static org.junit.Assert.fail;
25 import java.sql.SQLException;
26 import java.util.HashMap;
27 import java.util.Map;
28 import java.util.Random;
29 import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation;
30 import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section;
31 import org.onap.ccsdk.features.sdnr.wt.common.configuration.subtypes.Section.EnvGetter;
32 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBClient;
33 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.SqlDBConfig;
34 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.data.SqlDBDataProvider;
35 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper;
36 import org.onap.ccsdk.features.sdnr.wt.dataprovider.database.sqldb.database.SqlDBMapper.UnableToMapClassException;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.ConnectionlogEntity;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Entity;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogEntity;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultcurrentEntity;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.FaultlogEntity;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.GuicutthroughEntity;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.InventoryEntity;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MaintenanceEntity;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.MediatorServerEntity;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementConnectionEntity;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata15mEntity;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.Pmdata24hEntity;
49 import ch.vorburger.exec.ManagedProcessException;
50 import ch.vorburger.mariadb4j.DB;
51 import ch.vorburger.mariadb4j.DBConfigurationBuilder;
52
53 public class MariaDBTestBase {
54
55     private final SqlDBDataProvider dbProvider;
56     private final DB db;
57     private static final Map<String, String> envDefaultValues = initEnvDefaultValues();
58
59     public MariaDBTestBase() throws ManagedProcessException {
60         this(new Random().nextInt(1000) + 50000);
61     }
62
63     private static Map<String, String> initEnvDefaultValues() {
64         Map<String, String> defaults = new HashMap<>();
65         defaults.put("SDNRDBHOST", "localhost");
66         defaults.put("SDNRDBDATABASE", "test");
67
68         return defaults;
69     }
70
71     public MariaDBTestBase(String host, int port) {
72         EnvGetter env = Section.getEnvGetter();
73         envDefaultValues.put("SDNRDBPORT", String.valueOf(port));
74         envDefaultValues.put("SDNRDBHOST", host);
75         envDefaultValues.put("SDNRDBDATABASE", "sdnrdb");
76         envDefaultValues.put("SDNRDBUSERNAME", "sdnrdb");
77         envDefaultValues.put("SDNRDBPASSWORD", "sdnrdb");
78         Section.setEnvGetter((envname) -> {
79             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
80         });
81         SqlDBConfig config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
82         this.db = null;
83         this.dbProvider = new SqlDBDataProvider(config);
84         testCreateTable(this.dbProvider.getDBService());
85     }
86
87     public MariaDBTestBase(int port) throws ManagedProcessException {
88         EnvGetter env = Section.getEnvGetter();
89         envDefaultValues.put("SDNRDBPORT", String.valueOf(port));
90         Section.setEnvGetter((envname) -> {
91             return envDefaultValues.getOrDefault(envname, env.getenv(envname));
92         });
93         SqlDBConfig config = new SqlDBConfig(new ConfigurationFileRepresentation("test.properties"));
94         //start db server
95         this.db = startDatabase(port);
96         //create db with name sdnrdb
97         this.dbProvider = new SqlDBDataProvider(config);
98         testCreateTable(this.dbProvider.getDBService());
99     }
100
101     public void close() throws ManagedProcessException {
102         if (db != null) {
103             this.db.stop();
104         }
105
106     }
107
108     public SqlDBDataProvider getDbProvider() {
109         return dbProvider;
110     }
111
112     public DB getDb() {
113         return db;
114     }
115
116     private static DB startDatabase(int port) throws ManagedProcessException {
117         // Start MariaDB4j database
118         DBConfigurationBuilder dbconfig = DBConfigurationBuilder.newBuilder();
119         dbconfig.setPort(port); // 0 => autom. detect free port
120         DB db = DB.newEmbeddedDB(dbconfig.build());
121         db.start();
122         return db;
123     }
124     public static void testCreateTable(SqlDBClient dbService) {
125         createTableOdl(dbService);
126         createTable(dbService, ConnectionlogEntity.class, Entity.Connectionlog, true);
127         createTable(dbService, EventlogEntity.class, Entity.Eventlog, true);
128         createTable(dbService, FaultcurrentEntity.class, Entity.Faultcurrent, false);
129         createTable(dbService, FaultlogEntity.class, Entity.Faultlog, true);
130         createTable(dbService, GuicutthroughEntity.class, Entity.Guicutthrough, true);
131         createTable(dbService, Pmdata15mEntity.class, Entity.Historicalperformance15min, false);
132         createTable(dbService, Pmdata24hEntity.class, Entity.Historicalperformance24h, false);
133         createTable(dbService, InventoryEntity.class, Entity.Inventoryequipment, false);
134         createTable(dbService, MaintenanceEntity.class, Entity.Maintenancemode, false);
135         createTable(dbService, MediatorServerEntity.class, Entity.MediatorServer, true);
136         createTable(dbService, NetworkElementConnectionEntity.class, Entity.NetworkelementConnection, false);
137     }
138     public static boolean createTableOdl(SqlDBClient dbService) {
139         String createStatement = null;
140         createStatement = SqlDBMapper.createTableOdl();
141         System.out.println(createStatement);
142         try {
143             return dbService.write(createStatement);
144         } catch (SQLException e) {
145             // TODO Auto-generated catch block
146             e.printStackTrace();
147
148         }
149         return false;
150     }
151
152     public static boolean createTable(SqlDBClient dbService, Class<?> cls, Entity entity, boolean autoIndex) {
153         String createStatement = null;
154         try {
155             createStatement = SqlDBMapper.createTable(cls, entity, "", autoIndex);
156         } catch (UnableToMapClassException e) {
157             fail(e.getMessage());
158         }
159         System.out.println(createStatement);
160         try {
161             return dbService.write(createStatement);
162         } catch (SQLException e) {
163             // TODO Auto-generated catch block
164             e.printStackTrace();
165
166         }
167         return false;
168     }
169 }