Skip to content

Commit

Permalink
add OceanBaseCETest
Browse files Browse the repository at this point in the history
  • Loading branch information
whhe committed Jun 20, 2024
1 parent 40d8cee commit d7450c6
Show file tree
Hide file tree
Showing 4 changed files with 301 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ oceanbase-ce/init_store_for_fast_start.py
.idea
.vscode
*.log
target
102 changes: 102 additions & 0 deletions test/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.oceanbase</groupId>
<artifactId>docker-images-test</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<encoding>UTF-8</encoding>
<project.build.sourceEncoding>${encoding}</project.build.sourceEncoding>
<project.reporting.outputEncoding>${encoding}</project.reporting.outputEncoding>

<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.4.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.23.1</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.27.1</version>
<configuration>
<java>
<googleJavaFormat>
<version>1.7</version>
<style>AOSP</style>
</googleJavaFormat>
<removeUnusedImports />
</java>
<pom>
<sortPom>
<encoding>UTF-8</encoding>
<nrOfIndentSpace>4</nrOfIndentSpace>
<keepBlankLines>true</keepBlankLines>
<indentBlankLines>false</indentBlankLines>
<indentSchemaLocation>false</indentSchemaLocation>
<spaceBeforeCloseEmptyElement>true</spaceBeforeCloseEmptyElement>
<sortModules>false</sortModules>
<sortExecutions>false</sortExecutions>
<expandEmptyElements>false</expandEmptyElements>
<sortProperties>false</sortProperties>
</sortPom>
<replace>
<name>Leading blank line</name>
<search>project</search>
<replacement>project</replacement>
</replace>
</pom>
<upToDateChecking>
<enabled>true</enabled>
</upToDateChecking>
</configuration>
<executions>
<execution>
<id>spotless-check</id>
<goals>
<goal>check</goal>
</goals>
<phase>validate</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>
100 changes: 100 additions & 0 deletions test/src/test/java/com/oceanbase/test/OceanBaseCETest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
/*
* Copyright 2024 OceanBase.
*
* 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.
*/

package com.oceanbase.test;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
import java.util.Properties;
import java.util.stream.Stream;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class OceanBaseCETest {

private static final Logger LOG = LoggerFactory.getLogger(OceanBaseCETest.class);

static Stream<Arguments> testOceanBaseCEArgs() {
String host = Utils.getNonEmptyEnv("host");
String port = Utils.getNonEmptyEnv("port");
String sysUsername = Utils.getNonEmptyEnv("sys_username");
String sysPassword = System.getenv("sys_password");
String testTenant = Utils.getEnvOrDefault("test_tenant", "test");
String testUsername = Utils.getNonEmptyEnv("test_username");
String testPassword = System.getenv("test_password");

return Stream.of(
Arguments.of(true, host, port, "sys", sysUsername, sysPassword),
Arguments.of(false, host, port, "sys", sysUsername, sysPassword),
Arguments.of(true, host, port, testTenant, testUsername, testPassword),
Arguments.of(false, host, port, testTenant, testUsername, testPassword));
}

@ParameterizedTest
@MethodSource("testOceanBaseCEArgs")
public void testOceanBaseCE(
boolean useLegacyDriver,
String host,
String port,
String tenantName,
String username,
String password) {

String jdbcUrl = String.format("jdbc:mysql://%s:%s/test?useSSL=false", host, port);

Properties props = new Properties();
props.setProperty("user", username);
if (password != null) {
props.put("password", password);
}

Driver driver = Utils.getDriver(useLegacyDriver);
try (Connection conn = driver.connect(jdbcUrl, props)) {
LOG.info("Connected to OceanBase successfully.");
LOG.info("Version comment: {}", Utils.getVersionComment(conn));

Assertions.assertEquals(tenantName, Utils.getTenantName(conn));
checkClusterName(conn);
checkRSList(conn);

if ("sys".equals(tenantName)) {
checkServerIP(conn);
}
} catch (SQLException e) {
Assertions.fail(e);
}
}

private void checkClusterName(Connection conn) {
Assertions.assertEquals(
Utils.getEnvOrDefault("cluster_name", "obcluster"), Utils.getClusterName(conn));
}

private void checkServerIP(Connection conn) {
Assertions.assertEquals(
Utils.getEnvOrDefault("server_ip", "127.0.0.1"), Utils.getServerIP(conn));
}

private void checkRSList(Connection conn) {
Assertions.assertEquals(
Utils.getEnvOrDefault("rs_list", "127.0.0.1:2882:2881"), Utils.getRSList(conn));
}
}
98 changes: 98 additions & 0 deletions test/src/test/java/com/oceanbase/test/Utils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/*
* Copyright 2024 OceanBase.
*
* 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.
*/

package com.oceanbase.test;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Utils {

public static Driver getDriver(boolean legacy) {
String className = legacy ? "com.mysql.jdbc.Driver" : "com.mysql.cj.jdbc.Driver";
try {
return (Driver) Class.forName(className).getDeclaredConstructor().newInstance();
} catch (Throwable throwable) {
throw new RuntimeException("Failed to load JDBC driver", throwable);
}
}

public static String getNonEmptyEnv(String key) {
String value = System.getenv(key);
if (value == null || value.trim().isEmpty()) {
throw new IllegalArgumentException("Environment variable '" + key + "' is required");
}
return value;
}

public static String getEnvOrDefault(String name, String defaultValue) {
String env = System.getenv(name);
return env == null ? defaultValue : env;
}

public static String getVersionComment(Connection connection) {
return (String)
query(
connection,
"SHOW VARIABLES LIKE 'version_comment'",
rs -> rs.next() ? rs.getString("VALUE") : null);
}

public static String getClusterName(Connection connection) {
return (String)
query(
connection,
"SHOW PARAMETERS LIKE 'cluster'",
rs -> rs.next() ? rs.getString("VALUE") : null);
}

public static String getTenantName(Connection connection) {
return (String) query(connection, "SHOW TENANT", rs -> rs.next() ? rs.getString(1) : null);
}

public static String getServerIP(Connection connection) {
return (String)
query(
connection,
"SELECT svr_ip FROM oceanbase.__all_server",
rs -> rs.next() ? rs.getString(1) : null);
}

public static String getRSList(Connection connection) {
return (String)
query(
connection,
"SHOW PARAMETERS LIKE 'rootservice_list'",
rs -> rs.next() ? rs.getString("VALUE") : null);
}

@FunctionalInterface
interface ResultSetConsumer {
Object apply(ResultSet rs) throws SQLException;
}

static Object query(Connection connection, String sql, ResultSetConsumer resultSetConsumer) {
try (Statement statement = connection.createStatement()) {
ResultSet rs = statement.executeQuery(sql);
return resultSetConsumer.apply(rs);
} catch (SQLException e) {
throw new RuntimeException("Failed to execute sql: " + sql, e);
}
}
}

0 comments on commit d7450c6

Please sign in to comment.