package liquibase.ext.percona;
import java.lang.reflect.Field;
/*
* Licensed 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.
*/
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Test;
public class DatabaseConnectionUtilTest {
@Test
public void testGetHost() {
DatabaseConnectionUtil util;
util = new DatabaseConnectionUtil(MockDatabaseConnection.fromUrl("jdbc:mysql://user@localhost:3306/testdb"));
Assert.assertEquals("localhost", util.getHost());
util = new DatabaseConnectionUtil(MockDatabaseConnection.fromUrl("jdbc:mysql://localhost:3306/testdb"));
Assert.assertEquals("localhost", util.getHost());
util = new DatabaseConnectionUtil(MockDatabaseConnection.fromUrl("jdbc:mysql://127.0.0.1:3306/testdb"));
Assert.assertEquals("127.0.0.1", util.getHost());
}
@Test
public void testGetPort() {
DatabaseConnectionUtil util;
util = new DatabaseConnectionUtil(MockDatabaseConnection.fromUrl("jdbc:mysql://user@localhost:3307/testdb"));
Assert.assertEquals("3307", util.getPort());
util = new DatabaseConnectionUtil(MockDatabaseConnection.fromUrl("jdbc:mysql://localhost:3307/testdb"));
Assert.assertEquals("3307", util.getPort());
util = new DatabaseConnectionUtil(MockDatabaseConnection.fromUrl("jdbc:mysql://localhost/testdb"));
Assert.assertEquals("3306", util.getPort());
}
@Test
public void testGetUser() {
DatabaseConnectionUtil util;
util = new DatabaseConnectionUtil(MockDatabaseConnection.fromUser("root@localhost"));
Assert.assertEquals("root", util.getUser());
util = new DatabaseConnectionUtil(MockDatabaseConnection.fromUser("root"));
Assert.assertEquals("root", util.getUser());
}
private static Class<?> loadClass(String name) {
try {
return Class.forName(name);
} catch (ClassNotFoundException e) {
return null;
}
}
@Test
public void testGetPasswordMySQL_5_1() throws Exception {
// with MySQL Connector 5.1.38, we use JDBC4Connection and its superclass ConnectionImpl
// to get hold of the password.
Class<?> connectionImpl = loadClass("com.mysql.jdbc.ConnectionImpl");
Assume.assumeNotNull(connectionImpl);
Field propsField = connectionImpl.getDeclaredField("props");
Assert.assertNotNull("The field props is not existing", propsField);
}
@Test
public void testGetPasswordMySQL_6() throws Exception {
assumeJava8();
// with MySQL Connector 6.0.4, the packages changed.
Class<?> connectionImpl = loadClass("com.mysql.cj.jdbc.ConnectionImpl");
Assume.assumeNotNull(connectionImpl);
Field propsField2 = connectionImpl.getDeclaredField("props");
Assert.assertNotNull("The field props is not existing", propsField2);
}
private static void assumeJava8() {
String javaVersion = System.getProperty("java.version");
int majorJava = Integer.parseInt(javaVersion.split("\\.")[1]);
Assume.assumeTrue("Java Runtime too old - for this test at least java8 is required", majorJava >= 8);
}
}