Skip to content
Closed
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
199 changes: 199 additions & 0 deletions .github/workflows/test-permission.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
name: Test Permissions
Copy link
Contributor Author

@KodaiD KodaiD Jun 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For JDBC databases, only MySQL is tested for now.


on:
workflow_dispatch:
Comment on lines +3 to +4
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Currently, the job is assumed to be run manually, for example, when a new release is made.


env:
TERM: dumb
JAVA_VERSION: '8'
JAVA_VENDOR: 'temurin'

jobs:
integration-test-permission-cassandra-3-0:
name: Cassandra 3.0 Permission Integration Test
runs-on: ubuntu-latest

services:
cassandra:
image: cassandra:3.0
env:
MAX_HEAP_SIZE: 2048m
HEAP_NEWSIZE: 512m
ports:
- 9042:9042

steps:
- uses: actions/checkout@v4

- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
uses: actions/setup-java@v4
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.JAVA_VENDOR }}

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Execute Gradle 'integrationTestCassandraPermission' task
run: ./gradlew integrationTestCassandraPermission

- name: Upload Gradle test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: cassandra_3.0_permission_integration_test_reports
path: core/build/reports/tests/integrationTestCassandraPermission

integration-test-permission-cassandra-3-11:
name: Cassandra 3.11 Permission Integration Test
runs-on: ubuntu-latest

services:
cassandra:
image: cassandra:3.11
env:
MAX_HEAP_SIZE: 2048m
HEAP_NEWSIZE: 512m
ports:
- 9042:9042

steps:
- uses: actions/checkout@v4

- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
uses: actions/setup-java@v4
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.JAVA_VENDOR }}

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Execute Gradle 'integrationTestCassandraPermission' task
run: ./gradlew integrationTestCassandraPermission

- name: Upload Gradle test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: cassandra_3.11_permission_integration_test_reports
path: core/build/reports/tests/integrationTestCassandraPermission

integration-test-permission-dynamo:
name: DynamoDB Permission Integration Test
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
uses: actions/setup-java@v4
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.JAVA_VENDOR }}

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Execute Gradle 'integrationTestDynamoPermission' task
run: ./gradlew integrationTestDynamoPermission
env:
DYNAMO_ACCESS_KEY_ID: ${{ secrets.DYNAMO_ACCESS_KEY }}
DYNAMO_SECRET_ACCESS_KEY: ${{ secrets.DYNAMO_SECRET_ACCESS_KEY }}

- name: Upload Gradle test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: dynamo_permission_integration_test_reports
path: core/build/reports/tests/integrationTestDynamoPermission

integration-test-permission-jdbc-mysql-5-7:
name: MySQL 5.7 Permission Integration Test
runs-on: ubuntu-latest

steps:
- name: Run MySQL 5.7
run: |
docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
- uses: actions/checkout@v4

- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
uses: actions/setup-java@v4
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.JAVA_VENDOR }}

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Execute Gradle 'integrationTestJdbcPermission' task
run: ./gradlew integrationTestJdbcPermission

- name: Upload Gradle test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: mysql_5.7_permission_integration_test_reports
path: core/build/reports/tests/integrationTestJdbcPermission

integration-test-permission-jdbc-mysql-8-0:
name: MySQL 8.0 Permission Integration Test
runs-on: ubuntu-latest

steps:
- name: Run MySQL 8.0
run: |
docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
- uses: actions/checkout@v4

- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
uses: actions/setup-java@v4
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.JAVA_VENDOR }}

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Execute Gradle 'integrationTestJdbcPermission' task
run: ./gradlew integrationTestJdbcPermission

- name: Upload Gradle test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: mysql_8.0_permission_integration_test_reports
path: core/build/reports/tests/integrationTestJdbcPermission

integration-test-permission-jdbc-mysql-8-4:
name: MySQL 8.4 Permission Integration Test
runs-on: ubuntu-latest

steps:
- name: Run MySQL 8.4
run: |
docker run -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.4 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
- uses: actions/checkout@v4

- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
uses: actions/setup-java@v4
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.JAVA_VENDOR }}

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Execute Gradle 'integrationTestJdbcPermission' task
run: ./gradlew integrationTestJdbcPermission

- name: Upload Gradle test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: mysql_8.4_permission_integration_test_reports
path: core/build/reports/tests/integrationTestJdbcPermission
87 changes: 87 additions & 0 deletions core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,49 @@ sourceSets {
}
resources.srcDir file('src/integration-test/resources')
}
integrationTestCassandraPermission {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir file('src/integration-test/java')
include '**/com/scalar/db/common/*.java'
include '**/com/scalar/db/storage/cassandra/CassandraPermissionTestUtils.java'
include '**/com/scalar/db/storage/cassandra/CassandraAdminTestUtils.java'
include '**/com/scalar/db/storage/cassandra/CassandraEnv.java'
include '**/com/scalar/db/storage/cassandra/CassandraPermissionIntegrationTest.java'
include '**/com/scalar/db/storage/cassandra/CassandraAdminPermissionIntegrationTest.java'
}
resources.srcDir file('src/integration-test/resources')
}
integrationTestDynamoPermission {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir file('src/integration-test/java')
include '**/com/scalar/db/common/*.java'
include '**/com/scalar/db/storage/dynamo/DynamoPermissionTestUtils.java'
include '**/com/scalar/db/storage/dynamo/DynamoAdminTestUtils.java'
include '**/com/scalar/db/storage/dynamo/DynamoEnv.java'
include '**/com/scalar/db/storage/dynamo/DynamoPermissionIntegrationTest.java'
include '**/com/scalar/db/storage/dynamo/DynamoAdminPermissionIntegrationTest.java'
}
resources.srcDir file('src/integration-test/resources')
}
integrationTestJdbcPermission {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir file('src/integration-test/java')
include '**/com/scalar/db/common/*.java'
include '**/com/scalar/db/storage/jdbc/JdbcPermissionTestUtils.java'
include '**/com/scalar/db/storage/jdbc/JdbcAdminTestUtils.java'
include '**/com/scalar/db/storage/jdbc/JdbcTestUtils.java'
include '**/com/scalar/db/storage/jdbc/JdbcEnv.java'
include '**/com/scalar/db/storage/jdbc/JdbcPermissionIntegrationTest.java'
include '**/com/scalar/db/storage/jdbc/JdbcAdminPermissionIntegrationTest.java'
}
resources.srcDir file('src/integration-test/resources')
}
}

configurations {
Expand All @@ -88,6 +131,15 @@ configurations {
integrationTestMultiStorageImplementation.extendsFrom testImplementation
integrationTestMultiStorageRuntimeOnly.extendsFrom testRuntimeOnly
integrationTestMultiStorageCompileOnly.extendsFrom testCompileOnly
integrationTestCassandraPermissionImplementation.extendsFrom testImplementation
integrationTestCassandraPermissionRuntimeOnly.extendsFrom testRuntimeOnly
integrationTestCassandraPermissionCompileOnly.extendsFrom testCompileOnly
integrationTestDynamoPermissionImplementation.extendsFrom testImplementation
integrationTestDynamoPermissionRuntimeOnly.extendsFrom testRuntimeOnly
integrationTestDynamoPermissionCompileOnly.extendsFrom testCompileOnly
integrationTestJdbcPermissionImplementation.extendsFrom testImplementation
integrationTestJdbcPermissionRuntimeOnly.extendsFrom testRuntimeOnly
integrationTestJdbcPermissionCompileOnly.extendsFrom testCompileOnly
}

dependencies {
Expand All @@ -100,6 +152,8 @@ dependencies {
implementation platform("software.amazon.awssdk:bom:${awssdkVersion}")
implementation 'software.amazon.awssdk:applicationautoscaling'
implementation 'software.amazon.awssdk:dynamodb'
implementation 'software.amazon.awssdk:iam'
implementation 'software.amazon.awssdk:iam-policy-builder'
implementation "org.apache.commons:commons-dbcp2:${commonsDbcp2Version}"
implementation "com.mysql:mysql-connector-j:${mysqlDriverVersion}"
implementation "org.postgresql:postgresql:${postgresqlDriverVersion}"
Expand Down Expand Up @@ -200,6 +254,39 @@ task integrationTestMultiStorage(type: Test) {
}
}

task integrationTestCassandraPermission(type: Test) {
description = 'Runs the integration tests for Cassandra permissions.'
group = 'verification'
testClassesDirs = sourceSets.integrationTestCassandraPermission.output.classesDirs
classpath = sourceSets.integrationTestCassandraPermission.runtimeClasspath
outputs.upToDateWhen { false } // ensures integration tests are run every time when called
options {
systemProperties(System.getProperties().findAll { it.key.toString().startsWith("scalardb") })
}
}

task integrationTestDynamoPermission(type: Test) {
description = 'Runs the integration tests for DynamoDB permissions.'
group = 'verification'
testClassesDirs = sourceSets.integrationTestDynamoPermission.output.classesDirs
classpath = sourceSets.integrationTestDynamoPermission.runtimeClasspath
outputs.upToDateWhen { false } // ensures integration tests are run every time when called
options {
systemProperties(System.getProperties().findAll { it.key.toString().startsWith("scalardb") })
}
}

task integrationTestJdbcPermission(type: Test) {
description = 'Runs the integration tests for JDBC permissions.'
group = 'verification'
testClassesDirs = sourceSets.integrationTestJdbcPermission.output.classesDirs
classpath = sourceSets.integrationTestJdbcPermission.runtimeClasspath
outputs.upToDateWhen { false } // ensures integration tests are run every time when called
options {
systemProperties(System.getProperties().findAll { it.key.toString().startsWith("scalardb") })
}
}

spotless {
java {
target 'src/*/java/**/*.java'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.scalar.db.storage.cassandra;

import com.scalar.db.api.DistributedStorageAdminPermissionIntegrationTestBase;
import com.scalar.db.util.AdminTestUtils;
import com.scalar.db.util.PermissionTestUtils;
import java.util.Collections;
import java.util.Map;
import java.util.Properties;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

public class CassandraAdminPermissionIntegrationTest
extends DistributedStorageAdminPermissionIntegrationTestBase {
@Override
protected Properties getProperties(String testName) {
return CassandraEnv.getProperties(testName);
}

@Override
protected Properties getPropertiesForNormalUser(String testName) {
return CassandraEnv.getPropertiesForNormalUser(testName);
}

@Override
protected Map<String, String> getCreationOptions() {
return Collections.singletonMap(CassandraAdmin.REPLICATION_FACTOR, "1");
}

@Override
protected AdminTestUtils getAdminTestUtils(String testName) {
return new CassandraAdminTestUtils(getProperties(testName));
}

@Override
protected PermissionTestUtils getPermissionTestUtils(String testName) {
return new CassandraPermissionTestUtils(getProperties(testName));
}

@Test
@Override
@Disabled("Import-related functionality is not supported in Cassandra")
public void getImportTableMetadata_WithSufficientPermission_ShouldSucceed() {}

@Test
@Override
@Disabled("Import-related functionality is not supported in Cassandra")
public void addRawColumnToTable_WithSufficientPermission_ShouldSucceed() {}

@Test
@Override
@Disabled("Import-related functionality is not supported in Cassandra")
public void importTable_WithSufficientPermission_ShouldSucceed() {}
}
Loading
Loading