Skip to content

Commit d584a91

Browse files
authored
Merge branch 'master' into use-jreleaser
2 parents b59530c + 5e002c2 commit d584a91

File tree

9 files changed

+372
-33
lines changed

9 files changed

+372
-33
lines changed

.github/workflows/permission-check.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ env:
77
TERM: dumb
88
JAVA_VERSION: '8'
99
JAVA_VENDOR: 'temurin'
10+
DYNAMO_ACCESS_KEY_ID: ${{ secrets.DYNAMO_ACCESS_KEY }}
11+
DYNAMO_SECRET_ACCESS_KEY: ${{ secrets.DYNAMO_SECRET_ACCESS_KEY }}
1012

1113
jobs:
1214
integration-test-permission-cassandra-3-0:
@@ -86,3 +88,29 @@ jobs:
8688
with:
8789
name: cassandra_3.11_permission_integration_test_reports
8890
path: core/build/reports/tests/integrationTestCassandraPermission
91+
92+
integration-test-permission-dynamo:
93+
name: DynamoDB Permission Integration Test
94+
runs-on: ubuntu-latest
95+
96+
steps:
97+
- uses: actions/checkout@v4
98+
99+
- name: Set up JDK ${{ env.JAVA_VERSION }} (${{ env.JAVA_VENDOR }})
100+
uses: actions/setup-java@v4
101+
with:
102+
java-version: ${{ env.JAVA_VERSION }}
103+
distribution: ${{ env.JAVA_VENDOR }}
104+
105+
- name: Setup Gradle
106+
uses: gradle/actions/setup-gradle@v4
107+
108+
- name: Execute Gradle 'integrationTestDynamoPermission' task
109+
run: ./gradlew integrationTestDynamoPermission -Dscalardb.dynamo.emulator_used=false -Dscalardb.dynamo.region=ap-northeast-1 -Dscalardb.dynamo.access_key_id=${{ env.DYNAMO_ACCESS_KEY_ID }} -Dscalardb.dynamo.secret_access_key=${{ env.DYNAMO_SECRET_ACCESS_KEY }}
110+
111+
- name: Upload Gradle test reports
112+
if: always()
113+
uses: actions/upload-artifact@v4
114+
with:
115+
name: dynamo_permission_integration_test_reports
116+
path: core/build/reports/tests/integrationTestDynamoPermission

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ subprojects {
4141
mariadDbDriverVersion = '3.5.4'
4242
picocliVersion = '4.7.7'
4343
commonsTextVersion = '1.13.1'
44-
junitVersion = '5.13.2'
45-
commonsLangVersion = '3.17.0'
44+
junitVersion = '5.13.3'
45+
commonsLangVersion = '3.18.0'
4646
assertjVersion = '3.27.3'
4747
mockitoVersion = '4.11.0'
4848
spotbugsVersion = '4.8.6'

core/build.gradle

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ sourceSets {
4444
srcDir file('src/integration-test/java')
4545
include '**/com/scalar/db/common/*.java'
4646
include '**/com/scalar/db/storage/dynamo/*.java'
47+
exclude '**/com/scalar/db/storage/dynamo/DynamoPermissionTestUtils.java'
48+
exclude '**/com/scalar/db/storage/dynamo/DynamoPermissionIntegrationTest.java'
49+
exclude '**/com/scalar/db/storage/dynamo/DynamoAdminPermissionIntegrationTest.java'
4750
}
4851
resources.srcDir file('src/integration-test/resources')
4952
}
@@ -83,6 +86,20 @@ sourceSets {
8386
}
8487
resources.srcDir file('src/integration-test/resources')
8588
}
89+
integrationTestDynamoPermission {
90+
java {
91+
compileClasspath += main.output + test.output
92+
runtimeClasspath += main.output + test.output
93+
srcDir file('src/integration-test/java')
94+
include '**/com/scalar/db/common/*.java'
95+
include '**/com/scalar/db/storage/dynamo/DynamoPermissionTestUtils.java'
96+
include '**/com/scalar/db/storage/dynamo/DynamoAdminTestUtils.java'
97+
include '**/com/scalar/db/storage/dynamo/DynamoEnv.java'
98+
include '**/com/scalar/db/storage/dynamo/DynamoPermissionIntegrationTest.java'
99+
include '**/com/scalar/db/storage/dynamo/DynamoAdminPermissionIntegrationTest.java'
100+
}
101+
resources.srcDir file('src/integration-test/resources')
102+
}
86103
}
87104

88105
configurations {
@@ -107,6 +124,9 @@ configurations {
107124
integrationTestCassandraPermissionImplementation.extendsFrom testImplementation
108125
integrationTestCassandraPermissionRuntimeOnly.extendsFrom testRuntimeOnly
109126
integrationTestCassandraPermissionCompileOnly.extendsFrom testCompileOnly
127+
integrationTestDynamoPermissionImplementation.extendsFrom testImplementation
128+
integrationTestDynamoPermissionRuntimeOnly.extendsFrom testRuntimeOnly
129+
integrationTestDynamoPermissionCompileOnly.extendsFrom testCompileOnly
110130
}
111131

112132
dependencies {
@@ -119,6 +139,8 @@ dependencies {
119139
implementation platform("software.amazon.awssdk:bom:${awssdkVersion}")
120140
implementation 'software.amazon.awssdk:applicationautoscaling'
121141
implementation 'software.amazon.awssdk:dynamodb'
142+
testImplementation 'software.amazon.awssdk:iam'
143+
testImplementation 'software.amazon.awssdk:iam-policy-builder'
122144
implementation "org.apache.commons:commons-dbcp2:${commonsDbcp2Version}"
123145
implementation "com.mysql:mysql-connector-j:${mysqlDriverVersion}"
124146
implementation "org.postgresql:postgresql:${postgresqlDriverVersion}"
@@ -230,6 +252,17 @@ task integrationTestCassandraPermission(type: Test) {
230252
}
231253
}
232254

255+
task integrationTestDynamoPermission(type: Test) {
256+
description = 'Runs the integration tests for DynamoDB permissions.'
257+
group = 'verification'
258+
testClassesDirs = sourceSets.integrationTestDynamoPermission.output.classesDirs
259+
classpath = sourceSets.integrationTestDynamoPermission.runtimeClasspath
260+
outputs.upToDateWhen { false } // ensures integration tests are run every time when called
261+
options {
262+
systemProperties(System.getProperties().findAll { it.key.toString().startsWith("scalardb") })
263+
}
264+
}
265+
233266
spotless {
234267
java {
235268
target 'src/*/java/**/*.java'
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.scalar.db.storage.dynamo;
2+
3+
import static com.scalar.db.storage.dynamo.DynamoPermissionTestUtils.SLEEP_BETWEEN_TESTS_SECONDS;
4+
5+
import com.google.common.collect.ImmutableMap;
6+
import com.google.common.util.concurrent.Uninterruptibles;
7+
import com.scalar.db.api.DistributedStorageAdminPermissionIntegrationTestBase;
8+
import com.scalar.db.util.AdminTestUtils;
9+
import com.scalar.db.util.PermissionTestUtils;
10+
import java.util.Map;
11+
import java.util.Properties;
12+
import java.util.concurrent.TimeUnit;
13+
import org.junit.jupiter.api.Disabled;
14+
import org.junit.jupiter.api.Test;
15+
16+
public class DynamoAdminPermissionIntegrationTest
17+
extends DistributedStorageAdminPermissionIntegrationTestBase {
18+
@Override
19+
protected Properties getProperties(String testName) {
20+
return DynamoEnv.getProperties(testName);
21+
}
22+
23+
@Override
24+
protected Properties getPropertiesForNormalUser(String testName) {
25+
return DynamoEnv.getProperties(testName);
26+
}
27+
28+
@Override
29+
protected Map<String, String> getCreationOptions() {
30+
return ImmutableMap.of(DynamoAdmin.NO_SCALING, "false", DynamoAdmin.NO_BACKUP, "false");
31+
}
32+
33+
@Override
34+
protected AdminTestUtils getAdminTestUtils(String testName) {
35+
return new DynamoAdminTestUtils(getProperties(testName));
36+
}
37+
38+
@Override
39+
protected PermissionTestUtils getPermissionTestUtils(String testName) {
40+
return new DynamoPermissionTestUtils(getProperties(testName));
41+
}
42+
43+
@Override
44+
protected void sleepBetweenTests() {
45+
Uninterruptibles.sleepUninterruptibly(SLEEP_BETWEEN_TESTS_SECONDS, TimeUnit.SECONDS);
46+
}
47+
48+
@Test
49+
@Override
50+
@Disabled("Import-related functionality is not supported in DynamoDB")
51+
public void getImportTableMetadata_WithSufficientPermission_ShouldSucceed() {}
52+
53+
@Test
54+
@Override
55+
@Disabled("Import-related functionality is not supported in DynamoDB")
56+
public void addRawColumnToTable_WithSufficientPermission_ShouldSucceed() {}
57+
58+
@Test
59+
@Override
60+
@Disabled("Import-related functionality is not supported in DynamoDB")
61+
public void importTable_WithSufficientPermission_ShouldSucceed() {}
62+
}

core/src/integration-test/java/com/scalar/db/storage/dynamo/DynamoEnv.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ public final class DynamoEnv {
1010
private static final String PROP_DYNAMO_REGION = "scalardb.dynamo.region";
1111
private static final String PROP_DYNAMO_ACCESS_KEY_ID = "scalardb.dynamo.access_key_id";
1212
private static final String PROP_DYNAMO_SECRET_ACCESS_KEY = "scalardb.dynamo.secret_access_key";
13+
private static final String PROP_DYNAMO_EMULATOR_USED = "scalardb.dynamo.emulator_used";
1314
private static final String PROP_DYNAMO_CREATE_OPTIONS = "scalardb.dynamo.create_options";
1415

1516
private static final String DEFAULT_DYNAMO_ENDPOINT_OVERRIDE = "http://localhost:8000";
1617
private static final String DEFAULT_DYNAMO_REGION = "us-west-2";
1718
private static final String DEFAULT_DYNAMO_ACCESS_KEY_ID = "fakeMyKeyId";
1819
private static final String DEFAULT_DYNAMO_SECRET_ACCESS_KEY = "fakeSecretAccessKey";
20+
private static final String DEFAULT_DYNAMO_EMULATOR_USED = "true";
1921

2022
private static final ImmutableMap<String, String> DEFAULT_DYNAMO_CREATE_OPTIONS =
2123
ImmutableMap.of(DynamoAdmin.NO_SCALING, "true", DynamoAdmin.NO_BACKUP, "true");
@@ -30,9 +32,11 @@ public static Properties getProperties(String testName) {
3032
System.getProperty(PROP_DYNAMO_ACCESS_KEY_ID, DEFAULT_DYNAMO_ACCESS_KEY_ID);
3133
String secretAccessKey =
3234
System.getProperty(PROP_DYNAMO_SECRET_ACCESS_KEY, DEFAULT_DYNAMO_SECRET_ACCESS_KEY);
35+
String isEmulatorUsed =
36+
System.getProperty(PROP_DYNAMO_EMULATOR_USED, DEFAULT_DYNAMO_EMULATOR_USED);
3337

3438
Properties properties = new Properties();
35-
if (endpointOverride != null) {
39+
if (Boolean.parseBoolean(isEmulatorUsed) && endpointOverride != null) {
3640
properties.setProperty(DynamoConfig.ENDPOINT_OVERRIDE, endpointOverride);
3741
}
3842
properties.setProperty(DatabaseConfig.CONTACT_POINTS, region);
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.scalar.db.storage.dynamo;
2+
3+
import com.google.common.collect.ImmutableMap;
4+
import com.scalar.db.api.DistributedStoragePermissionIntegrationTestBase;
5+
import com.scalar.db.util.AdminTestUtils;
6+
import com.scalar.db.util.PermissionTestUtils;
7+
import java.util.Map;
8+
import java.util.Properties;
9+
10+
public class DynamoPermissionIntegrationTest
11+
extends DistributedStoragePermissionIntegrationTestBase {
12+
@Override
13+
protected Properties getProperties(String testName) {
14+
return DynamoEnv.getProperties(testName);
15+
}
16+
17+
@Override
18+
protected Properties getPropertiesForNormalUser(String testName) {
19+
return DynamoEnv.getProperties(testName);
20+
}
21+
22+
@Override
23+
protected Map<String, String> getCreationOptions() {
24+
return ImmutableMap.of(DynamoAdmin.NO_SCALING, "false", DynamoAdmin.NO_BACKUP, "false");
25+
}
26+
27+
@Override
28+
protected PermissionTestUtils getPermissionTestUtils(String testName) {
29+
return new DynamoPermissionTestUtils(getProperties(testName));
30+
}
31+
32+
@Override
33+
protected AdminTestUtils getAdminTestUtils(String testName) {
34+
return new DynamoAdminTestUtils(getProperties(testName));
35+
}
36+
}

0 commit comments

Comments
 (0)