Skip to content

Commit fc9a9bb

Browse files
feeblefakieKodaiDkomamitsubrfrn169
authored
Backport to branch(3.14) : Add JDBC database permission test (Part 2) (#2942)
Co-authored-by: Kodai Doki <[email protected]> Co-authored-by: Mitsunori Komatsu <[email protected]> Co-authored-by: Toshihiro Suzuki <[email protected]> Co-authored-by: Kodai Doki <[email protected]>
1 parent 0f45c0b commit fc9a9bb

File tree

7 files changed

+157
-6
lines changed

7 files changed

+157
-6
lines changed

.github/workflows/permission-check.yaml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,3 +619,93 @@ jobs:
619619
with:
620620
name: sqlserver_2022_permission_integration_test_reports
621621
path: core/build/reports/tests/integrationTestJdbcPermission
622+
623+
integration-test-permission-jdbc-mariadb-10-11:
624+
name: MariaDB 10.11 Permission Integration Test
625+
runs-on: ubuntu-latest
626+
627+
steps:
628+
- name: Run MariaDB 10.11
629+
run: |
630+
docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:10.11 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
631+
632+
- uses: actions/checkout@v4
633+
634+
- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
635+
uses: actions/setup-java@v4
636+
with:
637+
java-version: ${{ env.JAVA_VERSION }}
638+
distribution: ${{ env.JAVA_VENDOR }}
639+
640+
- name: Setup Gradle
641+
uses: gradle/actions/setup-gradle@v4
642+
643+
- name: Execute Gradle 'integrationTestJdbcPermission' task
644+
run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql
645+
646+
- name: Upload Gradle test reports
647+
if: always()
648+
uses: actions/upload-artifact@v4
649+
with:
650+
name: mariadb_10.11_permission_integration_test_reports
651+
path: core/build/reports/tests/integrationTestJdbcPermission
652+
653+
integration-test-permission-jdbc-mariadb-11-4:
654+
name: MariaDB 11.4 Permission Integration Test
655+
runs-on: ubuntu-latest
656+
657+
steps:
658+
- name: Run MariaDB 11.4
659+
run: |
660+
docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mariadb:11.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
661+
662+
- uses: actions/checkout@v4
663+
664+
- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
665+
uses: actions/setup-java@v4
666+
with:
667+
java-version: ${{ env.JAVA_VERSION }}
668+
distribution: ${{ env.JAVA_VENDOR }}
669+
670+
- name: Setup Gradle
671+
uses: gradle/actions/setup-gradle@v4
672+
673+
- name: Execute Gradle 'integrationTestJdbcPermission' task
674+
run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:mysql://localhost:3306 -Dscalardb.jdbc.username=root -Dscalardb.jdbc.password=mysql
675+
676+
- name: Upload Gradle test reports
677+
if: always()
678+
uses: actions/upload-artifact@v4
679+
with:
680+
name: mariadb_11.4_permission_integration_test_reports
681+
path: core/build/reports/tests/integrationTestJdbcPermission
682+
683+
integration-test-permission-jdbc-yugabytedb-2:
684+
name: YugabyteDB 2 Permission Integration Test
685+
runs-on: ubuntu-latest
686+
687+
steps:
688+
- name: Run YugabyteDB 2
689+
run: |
690+
docker run -p 5433:5433 -e YSQL_USER=yugabyte -e YSQL_PASSWORD=yugabyte -d yugabytedb/yugabyte:2.20.4.0-b50 bin/yugabyted start --background=false --master_flag="ysql_enable_db_catalog_version_mode=false" --tserver_flags="ysql_enable_db_catalog_version_mode=false"
691+
692+
- uses: actions/checkout@v4
693+
694+
- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
695+
uses: actions/setup-java@v4
696+
with:
697+
java-version: ${{ env.JAVA_VERSION }}
698+
distribution: ${{ env.JAVA_VENDOR }}
699+
700+
- name: Setup Gradle
701+
uses: gradle/actions/setup-gradle@v4
702+
703+
- name: Execute Gradle 'integrationTestJdbcPermission' task
704+
run: ./gradlew integrationTestJdbcPermission -Dscalardb.jdbc.url=jdbc:yugabytedb://localhost:5433/yugabyte?load-balance=any -Dscalardb.jdbc.username=yugabyte -Dscalardb.jdbc.password=yugabyte -Dscalar.db.jdbc.connection_pool.max_total=12 -Dscalar.db.jdbc.table_metadata.connection_pool.max_total=4 -Dscalar.db.jdbc.admin.connection_pool.max_total=4
705+
706+
- name: Upload Gradle test reports
707+
if: always()
708+
uses: actions/upload-artifact@v4
709+
with:
710+
name: yugabytedb_2_permission_integration_test_reports
711+
path: core/build/reports/tests/integrationTestJdbcPermission

core/src/integration-test/java/com/scalar/db/storage/cassandra/CassandraPermissionIntegrationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ protected Map<String, String> getCreationOptions() {
4040
}
4141

4242
@Override
43-
protected void waitForTableCreation() {
43+
protected void waitForDdlCompletion() {
4444
try {
4545
AdminTestUtils utils = getAdminTestUtils(TEST_NAME);
4646
int retryCount = 0;

core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcAdminPermissionIntegrationTest.java

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
package com.scalar.db.storage.jdbc;
22

3+
import static com.scalar.db.storage.jdbc.JdbcPermissionTestUtils.DDL_WAIT_SECONDS;
4+
5+
import com.google.common.util.concurrent.Uninterruptibles;
36
import com.scalar.db.api.DistributedStorageAdminPermissionIntegrationTestBase;
7+
import com.scalar.db.config.DatabaseConfig;
48
import com.scalar.db.util.AdminTestUtils;
59
import com.scalar.db.util.PermissionTestUtils;
610
import java.util.Properties;
11+
import java.util.concurrent.TimeUnit;
712

813
public class JdbcAdminPermissionIntegrationTest
914
extends DistributedStorageAdminPermissionIntegrationTestBase {
15+
private RdbEngineStrategy rdbEngine;
16+
1017
@Override
1118
protected Properties getProperties(String testName) {
12-
return JdbcEnv.getProperties(testName);
19+
Properties properties = JdbcEnv.getProperties(testName);
20+
rdbEngine = RdbEngineFactory.create(new JdbcConfig(new DatabaseConfig(properties)));
21+
return properties;
1322
}
1423

1524
@Override
@@ -26,4 +35,37 @@ protected AdminTestUtils getAdminTestUtils(String testName) {
2635
protected PermissionTestUtils getPermissionTestUtils(String testName) {
2736
return new JdbcPermissionTestUtils(getProperties(testName));
2837
}
38+
39+
@Override
40+
protected void waitForTableCreation() {
41+
waitForDdlCompletion();
42+
}
43+
44+
@Override
45+
protected void waitForNamespaceCreation() {
46+
waitForDdlCompletion();
47+
}
48+
49+
@Override
50+
protected void waitForTableDeletion() {
51+
waitForDdlCompletion();
52+
}
53+
54+
@Override
55+
protected void waitForNamespaceDeletion() {
56+
waitForDdlCompletion();
57+
}
58+
59+
@Override
60+
protected void sleepBetweenTests() {
61+
// Sleep to ensure the DDL operations executed as ACT are completed before the next setup.
62+
waitForDdlCompletion();
63+
}
64+
65+
private void waitForDdlCompletion() {
66+
if (JdbcTestUtils.isYugabyte(rdbEngine)) {
67+
// This is needed to avoid schema or catalog version mismatch database errors.
68+
Uninterruptibles.sleepUninterruptibly(DDL_WAIT_SECONDS, TimeUnit.SECONDS);
69+
}
70+
}
2971
}

core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionIntegrationTest.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
package com.scalar.db.storage.jdbc;
22

3+
import static com.scalar.db.storage.jdbc.JdbcPermissionTestUtils.DDL_WAIT_SECONDS;
4+
5+
import com.google.common.util.concurrent.Uninterruptibles;
36
import com.scalar.db.api.DistributedStoragePermissionIntegrationTestBase;
7+
import com.scalar.db.config.DatabaseConfig;
48
import com.scalar.db.util.AdminTestUtils;
59
import com.scalar.db.util.PermissionTestUtils;
610
import java.util.Properties;
11+
import java.util.concurrent.TimeUnit;
712

813
public class JdbcPermissionIntegrationTest extends DistributedStoragePermissionIntegrationTestBase {
14+
private RdbEngineStrategy rdbEngine;
15+
916
@Override
1017
protected Properties getProperties(String testName) {
11-
return JdbcEnv.getProperties(testName);
18+
Properties properties = JdbcEnv.getProperties(testName);
19+
rdbEngine = RdbEngineFactory.create(new JdbcConfig(new DatabaseConfig(properties)));
20+
return properties;
1221
}
1322

1423
@Override
@@ -25,4 +34,12 @@ protected PermissionTestUtils getPermissionTestUtils(String testName) {
2534
protected AdminTestUtils getAdminTestUtils(String testName) {
2635
return new JdbcAdminTestUtils(getProperties(testName));
2736
}
37+
38+
@Override
39+
protected void waitForDdlCompletion() {
40+
if (JdbcTestUtils.isYugabyte(rdbEngine)) {
41+
// This is needed to avoid schema or catalog version mismatch database errors.
42+
Uninterruptibles.sleepUninterruptibly(DDL_WAIT_SECONDS, TimeUnit.SECONDS);
43+
}
44+
}
2845
}

core/src/integration-test/java/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.apache.commons.dbcp2.BasicDataSource;
1010

1111
public class JdbcPermissionTestUtils implements PermissionTestUtils {
12+
public static final int DDL_WAIT_SECONDS = 1;
1213
private final RdbEngineStrategy rdbEngine;
1314
private final BasicDataSource dataSource;
1415

integration-test/src/main/java/com/scalar/db/api/DistributedStorageAdminPermissionIntegrationTestBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public abstract class DistributedStorageAdminPermissionIntegrationTestBase {
3838
TableMetadata.newBuilder()
3939
.addColumn(COL_NAME1, DataType.INT)
4040
.addColumn(COL_NAME2, DataType.TEXT)
41-
.addColumn(COL_NAME3, DataType.TEXT)
41+
.addColumn(COL_NAME3, DataType.INT)
4242
.addColumn(COL_NAME4, DataType.INT)
4343
.addPartitionKey(COL_NAME1)
4444
.addClusteringKey(COL_NAME2, Scan.Ordering.Order.ASC)

integration-test/src/main/java/com/scalar/db/api/DistributedStoragePermissionIntegrationTestBase.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void beforeAll() throws Exception {
6868

6969
namespace = getNamespace();
7070
createTable();
71-
waitForTableCreation();
71+
waitForDdlCompletion();
7272
} catch (Exception e) {
7373
logger.error("Failed to set up the test environment", e);
7474
throw e;
@@ -78,6 +78,7 @@ public void beforeAll() throws Exception {
7878
@BeforeEach
7979
public void setUp() throws Exception {
8080
truncateTable();
81+
waitForDdlCompletion();
8182
}
8283

8384
@AfterAll
@@ -296,7 +297,7 @@ protected Map<String, String> getCreationOptions() {
296297
return Collections.emptyMap();
297298
}
298299

299-
protected void waitForTableCreation() {
300+
protected void waitForDdlCompletion() {
300301
// Default do nothing
301302
}
302303

0 commit comments

Comments
 (0)