Skip to content

Commit 99b40f8

Browse files
wendigoebyhr
authored andcommitted
Improve GCS config validation
1 parent 89cf4d1 commit 99b40f8

File tree

3 files changed

+22
-32
lines changed

3 files changed

+22
-32
lines changed

lib/trino-filesystem-gcs/src/main/java/io/trino/filesystem/gcs/GcsDefaultAuth.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public GcsDefaultAuth(GcsFileSystemConfig config)
3737
{
3838
String jsonKey = config.getJsonKey();
3939
String jsonKeyFilePath = config.getJsonKeyFilePath();
40-
config.validate();
4140

4241
if (jsonKey != null) {
4342
try (InputStream inputStream = new ByteArrayInputStream(jsonKey.getBytes(UTF_8))) {

lib/trino-filesystem-gcs/src/main/java/io/trino/filesystem/gcs/GcsFileSystemConfig.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import java.util.Optional;
3030
import java.util.concurrent.TimeUnit;
3131

32-
import static com.google.common.base.Preconditions.checkState;
3332
import static io.airlift.units.DataSize.Unit.MEGABYTE;
3433

3534
public class GcsFileSystemConfig
@@ -269,14 +268,13 @@ public boolean isRetryDelayValid()
269268
return minBackoffDelay.compareTo(maxBackoffDelay) <= 0;
270269
}
271270

272-
public void validate()
271+
@AssertTrue(message = "Either gcs.use-access-token or gcs.json-key or gcs.json-key-file-path must be set")
272+
public boolean isAuthMethodValid()
273273
{
274-
// This cannot be normal validation, as it would make it impossible to write TestGcsFileSystemConfig.testExplicitPropertyMappings
275-
276274
if (useGcsAccessToken) {
277-
checkState(jsonKey == null, "Cannot specify 'gcs.json-key' when 'gcs.use-access-token' is set");
278-
checkState(jsonKeyFilePath == null, "Cannot specify 'gcs.json-key-file-path' when 'gcs.use-access-token' is set");
275+
return jsonKey == null && jsonKeyFilePath == null;
279276
}
280-
checkState(jsonKey == null || jsonKeyFilePath == null, "'gcs.json-key' and 'gcs.json-key-file-path' cannot be both set");
277+
278+
return (jsonKey == null) ^ (jsonKeyFilePath == null);
281279
}
282280
}

lib/trino-filesystem-gcs/src/test/java/io/trino/filesystem/gcs/TestGcsFileSystemConfig.java

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,9 @@
1919
import jakarta.validation.constraints.AssertTrue;
2020
import org.junit.jupiter.api.Test;
2121

22-
import java.io.IOException;
23-
import java.nio.file.Files;
24-
import java.nio.file.Path;
2522
import java.util.Map;
2623
import java.util.Optional;
24+
import java.util.Set;
2725

2826
import static io.airlift.configuration.testing.ConfigAssertions.assertFullMapping;
2927
import static io.airlift.configuration.testing.ConfigAssertions.assertRecordedDefaults;
@@ -32,7 +30,6 @@
3230
import static io.airlift.units.DataSize.Unit.MEGABYTE;
3331
import static java.util.concurrent.TimeUnit.MILLISECONDS;
3432
import static java.util.concurrent.TimeUnit.SECONDS;
35-
import static org.assertj.core.api.Assertions.assertThatThrownBy;
3633

3734
public class TestGcsFileSystemConfig
3835
{
@@ -59,10 +56,7 @@ void testDefaults()
5956

6057
@Test
6158
void testExplicitPropertyMappings()
62-
throws IOException
6359
{
64-
Path jsonKeyFile = Files.createTempFile(null, null);
65-
6660
Map<String, String> properties = ImmutableMap.<String, String>builder()
6761
.put("gcs.read-block-size", "51MB")
6862
.put("gcs.write-block-size", "52MB")
@@ -71,8 +65,6 @@ void testExplicitPropertyMappings()
7165
.put("gcs.project-id", "project")
7266
.put("gcs.endpoint", "http://custom.dns.org:8000")
7367
.put("gcs.use-access-token", "true")
74-
.put("gcs.json-key", "{}")
75-
.put("gcs.json-key-file-path", jsonKeyFile.toString())
7668
.put("gcs.client.max-retries", "10")
7769
.put("gcs.client.backoff-scale-factor", "4.0")
7870
.put("gcs.client.max-retry-time", "10s")
@@ -89,40 +81,41 @@ void testExplicitPropertyMappings()
8981
.setProjectId("project")
9082
.setEndpoint(Optional.of("http://custom.dns.org:8000"))
9183
.setUseGcsAccessToken(true)
92-
.setJsonKey("{}")
93-
.setJsonKeyFilePath(jsonKeyFile.toString())
9484
.setMaxRetries(10)
9585
.setBackoffScaleFactor(4.0)
9686
.setMaxRetryTime(new Duration(10, SECONDS))
9787
.setMinBackoffDelay(new Duration(20, MILLISECONDS))
9888
.setMaxBackoffDelay(new Duration(20, MILLISECONDS))
9989
.setApplicationId("application id");
100-
assertFullMapping(properties, expected);
90+
assertFullMapping(properties, expected, Set.of("gcs.json-key", "gcs.json-key-file-path"));
10191
}
10292

10393
@Test
10494
public void testValidation()
10595
{
106-
assertThatThrownBy(
96+
assertFailsValidation(
10797
new GcsFileSystemConfig()
10898
.setUseGcsAccessToken(true)
109-
.setJsonKey("{}}")::validate)
110-
.isInstanceOf(IllegalStateException.class)
111-
.hasMessage("Cannot specify 'gcs.json-key' when 'gcs.use-access-token' is set");
99+
.setJsonKey("{}}"),
100+
"authMethodValid",
101+
"Either gcs.use-access-token or gcs.json-key or gcs.json-key-file-path must be set",
102+
AssertTrue.class);
112103

113-
assertThatThrownBy(
104+
assertFailsValidation(
114105
new GcsFileSystemConfig()
115106
.setUseGcsAccessToken(true)
116-
.setJsonKeyFilePath("/dev/null")::validate)
117-
.isInstanceOf(IllegalStateException.class)
118-
.hasMessage("Cannot specify 'gcs.json-key-file-path' when 'gcs.use-access-token' is set");
107+
.setJsonKeyFilePath("/dev/null"),
108+
"authMethodValid",
109+
"Either gcs.use-access-token or gcs.json-key or gcs.json-key-file-path must be set",
110+
AssertTrue.class);
119111

120-
assertThatThrownBy(
112+
assertFailsValidation(
121113
new GcsFileSystemConfig()
122114
.setJsonKey("{}")
123-
.setJsonKeyFilePath("/dev/null")::validate)
124-
.isInstanceOf(IllegalStateException.class)
125-
.hasMessage("'gcs.json-key' and 'gcs.json-key-file-path' cannot be both set");
115+
.setJsonKeyFilePath("/dev/null"),
116+
"authMethodValid",
117+
"Either gcs.use-access-token or gcs.json-key or gcs.json-key-file-path must be set",
118+
AssertTrue.class);
126119

127120
assertFailsValidation(
128121
new GcsFileSystemConfig()

0 commit comments

Comments
 (0)