blob: 4dfc207897dd5838d64869df4eb33d20350aafb4 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.cloudstack.network.contrail.management;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import org.apache.commons.configuration.PropertiesConfiguration;
public class TestDbSetup {
public static int findFreePort() throws Exception {
int port;
ServerSocket socket = new ServerSocket(0);
port = socket.getLocalPort();
socket.close();
return port;
}
public static void startMysqlServer(int port, String startMysqlScript) throws Exception {
try {
String cwd = new java.io.File(".").getCanonicalPath();
Runtime r = Runtime.getRuntime();
String script = startMysqlScript;
if (script == null) {
script = "test/resources/mysql_db_start.sh " + port;
}
Process process = r.exec("sh " + cwd + "/" + script);
process.waitFor();
System.out.println("new sql server instance launched on port: " + port);
} catch (Exception e) {
String cause = e.getMessage();
if (cause.equals("sh: not found"))
System.out.println("No sh interpreter found.");
throw e;
}
}
public static void stopMysqlServer(int port, String stopMysqlScript) throws Exception {
try {
Runtime r = Runtime.getRuntime();
String script = stopMysqlScript;
if (script == null) {
script = "test/resources/mysql_db_stop.sh " + port;
}
Process process = r.exec("sh " + script);
process.waitFor();
System.out.println("sql server instance running at port " + port + " stopped");
} catch (Exception e) {
String cause = e.getMessage();
if (cause.equals("sh: not found"))
System.out.println("No sh interpreter found.");
throw e;
}
}
/* this is required for deploying db with new set of sql server parameters */
public static void copyDbPropertiesFile() throws Exception {
Runtime.getRuntime().exec("cp ../../../utils/conf/db.properties ../../../utils/conf/db.properties.override");
}
public static void updateSqlPort(int port, String propertyFileOverride) throws Exception {
PropertiesConfiguration config = new PropertiesConfiguration(propertyFileOverride);
System.out.println("File: " + propertyFileOverride + "; old: db.properties port: " + config.getProperty("db.cloud.port") + ", new port: " + port);
config.setProperty("db.cloud.port", "" + port);
config.setProperty("db.cloud.username", System.getProperty("user.name"));
config.setProperty("db.cloud.password", "");
config.setProperty("db.usage.port", "" + port);
config.setProperty("db.usage.username", System.getProperty("user.name"));
config.setProperty("db.usage.password", "");
config.setProperty("db.simulator.port", "" + port);
config.setProperty("db.simulator.username", System.getProperty("user.name"));
config.setProperty("db.simulator.password", "");
config.save();
}
public static void initCloudstackDb() throws Exception {
try {
File dir = new File("../../../");
Runtime r = Runtime.getRuntime();
Process process = r.exec("mvn -P developer -pl developer -Ddeploydb ", null, dir);
dumpProcessOutput(process);
process.waitFor();
} catch (Exception e) {
String cause = e.getMessage();
System.out.println("e: " + cause);
throw e;
}
}
public static void dumpProcessOutput(Process p) throws Exception {
BufferedReader istream = null;
istream = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = istream.readLine()) != null) {
System.out.println(line);
}
}
public static int init(String startScript) throws Exception {
int port = TestDbSetup.findFreePort();
TestDbSetup.startMysqlServer(port, startScript);
copyDbPropertiesFile();
/* both of these files needs to have mysql port, username password details */
TestDbSetup.updateSqlPort(port, "db.properties"); /* for cloudstack runtime */
TestDbSetup.updateSqlPort(port, "../../../utils/conf/db.properties.override"); /* for deploying db */
TestDbSetup.initCloudstackDb();
return port;
}
public static void destroy(int port, String stopScript) throws Exception {
TestDbSetup.stopMysqlServer(port, stopScript);
}
}