From d84f835f041f26db51cd91ab9474700ca870ed41 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 9 Dec 2024 11:27:37 -0500 Subject: [PATCH 01/96] chore: test Spring Cloud 2024 upgrade --- pom.xml | 2 +- spring-cloud-gcp-samples/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 28149f5a94..f7a8c7182b 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,7 @@ ${project.version} - 2023.0.3 + 2024.0.0 3.3.4 ${project.parent.version} 2.2.5 diff --git a/spring-cloud-gcp-samples/pom.xml b/spring-cloud-gcp-samples/pom.xml index 0c69274468..cdd8f249ee 100644 --- a/spring-cloud-gcp-samples/pom.xml +++ b/spring-cloud-gcp-samples/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.4.0 From 9f52343c688bd7e5f8c91450b41a2fae2eb26a03 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 9 Dec 2024 17:06:27 -0500 Subject: [PATCH 02/96] fix datastore tests --- .../DatastoreTransactionManagerAutoConfiguration.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/datastore/DatastoreTransactionManagerAutoConfiguration.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/datastore/DatastoreTransactionManagerAutoConfiguration.java index 3fc709b8d6..8465b615da 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/datastore/DatastoreTransactionManagerAutoConfiguration.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/datastore/DatastoreTransactionManagerAutoConfiguration.java @@ -26,6 +26,7 @@ import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration; import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; import org.springframework.context.annotation.Bean; +import org.springframework.transaction.TransactionManager; /** * Auto-configuration for {@link DatastoreTransactionManager}. @@ -63,7 +64,7 @@ public DatastoreTransactionManager datastoreTransactionManager() { DatastoreTransactionManager transactionManager = new DatastoreTransactionManager(this.datastore); if (this.transactionManagerCustomizers != null) { - this.transactionManagerCustomizers.customize(transactionManager); + this.transactionManagerCustomizers.customize((TransactionManager) transactionManager); } return transactionManager; } From 20334f478d042c2abb2b16c6c5748bc59e5e22f0 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 10 Dec 2024 10:17:27 -0500 Subject: [PATCH 03/96] fix kotlin sample test --- .../src/main/kotlin/com/example/data/Person.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/src/main/kotlin/com/example/data/Person.kt b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/src/main/kotlin/com/example/data/Person.kt index 3fabed0a32..aa0af5e13a 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/src/main/kotlin/com/example/data/Person.kt +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/src/main/kotlin/com/example/data/Person.kt @@ -34,5 +34,5 @@ data class Person( val email: String, @Id @GeneratedValue - var id: Long? = 0 + var id: Long? = null ) From 8742fee48a2d094f2b3c1f8d14a628c19d025eae Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 10 Dec 2024 11:56:56 -0500 Subject: [PATCH 04/96] fix spanner autoconfig --- .../spanner/SpannerTransactionManagerAutoConfiguration.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java index b6478fcbbe..dfeb480b60 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java @@ -28,6 +28,7 @@ import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration; import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; import org.springframework.context.annotation.Bean; +import org.springframework.transaction.TransactionManager; /** * Auto-configuration for {@link SpannerTransactionManager}. @@ -65,7 +66,7 @@ public SpannerTransactionManager spannerTransactionManager() { SpannerTransactionManager transactionManager = new SpannerTransactionManager(this.databaseClientProvider); if (this.transactionManagerCustomizers != null) { - this.transactionManagerCustomizers.customize(transactionManager); + this.transactionManagerCustomizers.customize((TransactionManager) transactionManager); } return transactionManager; } From 8b11f19d4dc5ba8047d22232996e6e4fce8d5b93 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 10 Dec 2024 13:51:31 -0500 Subject: [PATCH 05/96] use latest spring-cloud-config in pubsub bus sample --- .../spring-cloud-gcp-pubsub-bus-config-sample/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml index acc75ecf9a..e220bfc457 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml @@ -14,7 +14,7 @@ Spring Framework on Google Cloud Code Sample - Pub/Sub Bus Configuration Management - 4.1.3 + 4.2.0 From 6401f8725c91a68210b2da55dcdf87659d9162e8 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Wed, 11 Dec 2024 12:52:43 -0500 Subject: [PATCH 06/96] wip pubsub stream binder test --- .../stream/binder/pubsub/PubSubEmulator.java | 23 +++++++++++++------ ...ChannelBinderEmulatorIntegrationTests.java | 1 + 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubEmulator.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubEmulator.java index f642466980..30699b673e 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubEmulator.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubEmulator.java @@ -36,6 +36,8 @@ import java.util.StringTokenizer; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; + +import org.apache.commons.lang3.SystemUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.jupiter.api.extension.AfterAllCallback; @@ -55,9 +57,7 @@ */ public class PubSubEmulator implements BeforeAllCallback, AfterAllCallback, ParameterResolver { - private static final Path EMULATOR_CONFIG_DIR = - Paths.get(System.getProperty("user.home")) - .resolve(Paths.get(".config", "gcloud", "emulators", "pubsub")); + private static final Path EMULATOR_CONFIG_DIR = getEmulatorConfigDir(); private static final String ENV_FILE_NAME = "env.yaml"; @@ -198,13 +198,13 @@ private void startEmulator() throws IOException, InterruptedException { try { this.emulatorProcess = - new ProcessBuilder("gcloud", "beta", "emulators", "pubsub", "start").start(); + new ProcessBuilder("bash", "-c", "gcloud beta emulators pubsub start").start(); } catch (IOException ex) { fail("Gcloud not found; leaving host/port uninitialized."); } if (configPresent) { - updateConfig(watchService); + waitForConfigUpdates(watchService); watchService.close(); } else { createConfig(); @@ -240,7 +240,7 @@ private void determineHostPort() throws IOException, InterruptedException { private void createConfig() { await() .pollInterval(Duration.ofSeconds(1)) - .atMost(Duration.ofSeconds(5)) + .atMost(Duration.ofSeconds(10)) .untilAsserted(() -> assertThat(EMULATOR_CONFIG_PATH.toFile()).exists()); } @@ -252,7 +252,7 @@ private void createConfig() { * @throws InterruptedException which should interrupt the peaceful slumber and bubble up to fail * the test. */ - private void updateConfig(WatchService watchService) throws InterruptedException { + private void waitForConfigUpdates(WatchService watchService) throws InterruptedException { int attempts = 10; while (--attempts >= 0) { WatchKey key = watchService.poll(1000, TimeUnit.MILLISECONDS); @@ -285,4 +285,13 @@ private void killProcess(String pid) { LOGGER.warn("Failed to clean up PID " + pid); } } + + private static Path getEmulatorConfigDir() { + if (SystemUtils.IS_OS_WINDOWS) { + return Paths.get(System.getenv("APPDATA")) + .resolve(Paths.get("gcloud", "emulators", "pubsub")); + } + return Paths.get(System.getProperty("user.home")) + .resolve(Paths.get(".config", "gcloud", "emulators", "pubsub")); + } } diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderEmulatorIntegrationTests.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderEmulatorIntegrationTests.java index a1ec157874..35bdb4843e 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderEmulatorIntegrationTests.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderEmulatorIntegrationTests.java @@ -26,6 +26,7 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.cloud.stream.binder.AbstractBinderTests; import org.springframework.cloud.stream.binder.Binding; From bc9ce205fe1b0fb05ed1036bd4f10b3257541826 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Wed, 11 Dec 2024 16:14:29 -0500 Subject: [PATCH 07/96] update spring boot to 3.4.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f7a8c7182b..887f481750 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ ${project.version} 2024.0.0 - 3.3.4 + 3.4.0 ${project.parent.version} 2.2.5 2.5.0 From 5b8baec14765950a225876f4ffd2563595ea1860 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Wed, 11 Dec 2024 18:04:43 -0500 Subject: [PATCH 08/96] adapt data-spanner to spring boot 3.4 --- .../query/SpannerQueryLookupStrategy.java | 14 ++-- .../repository/query/SqlSpannerQuery.java | 13 +-- .../support/SpannerRepositoryFactory.java | 68 +++++++-------- .../SpannerQueryLookupStrategyTests.java | 7 +- .../query/SqlSpannerQueryTests.java | 82 ++++++++++++++----- .../SpannerRepositoryFactoryTests.java | 3 +- 6 files changed, 118 insertions(+), 69 deletions(-) diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java index ab5789c264..b942e5695b 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java @@ -19,13 +19,15 @@ import com.google.cloud.spring.data.spanner.core.SpannerTemplate; import com.google.cloud.spring.data.spanner.core.mapping.SpannerMappingContext; import java.lang.reflect.Method; + +import org.springframework.data.expression.ValueEvaluationContextProvider; import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryMethod; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.RepositoryQuery; +import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.util.Assert; @@ -41,21 +43,21 @@ public class SpannerQueryLookupStrategy implements QueryLookupStrategy { private final SpannerMappingContext spannerMappingContext; - private QueryMethodEvaluationContextProvider evaluationContextProvider; + private ValueExpressionDelegate valueExpressionDelegate; private SpelExpressionParser expressionParser; public SpannerQueryLookupStrategy( SpannerMappingContext spannerMappingContext, SpannerTemplate spannerTemplate, - QueryMethodEvaluationContextProvider evaluationContextProvider, + ValueExpressionDelegate valueExpressionDelegate, SpelExpressionParser expressionParser) { Assert.notNull(spannerMappingContext, "A valid SpannerMappingContext is required."); Assert.notNull(spannerTemplate, "A valid SpannerTemplate is required."); - Assert.notNull(evaluationContextProvider, "A valid EvaluationContextProvider is required."); + Assert.notNull(valueExpressionDelegate, "A valid EvaluationContextProvider is required."); Assert.notNull(expressionParser, "A valid SpelExpressionParser is required."); this.spannerMappingContext = spannerMappingContext; - this.evaluationContextProvider = evaluationContextProvider; + this.valueExpressionDelegate = valueExpressionDelegate; this.spannerTemplate = spannerTemplate; this.expressionParser = expressionParser; } @@ -97,7 +99,7 @@ SqlSpannerQuery createSqlSpannerQuery( queryMethod, this.spannerTemplate, sql, - this.evaluationContextProvider, + this.valueExpressionDelegate, this.expressionParser, this.spannerMappingContext, isDml); diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java index b8d66cbaa7..033e141442 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java @@ -41,12 +41,13 @@ import java.util.stream.StreamSupport; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.data.expression.ValueEvaluationContext; import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersParameterAccessor; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ParserContext; @@ -80,7 +81,7 @@ public class SqlSpannerQuery extends AbstractSpannerQuery { return builder.build(); }; - private QueryMethodEvaluationContextProvider evaluationContextProvider; + private ValueExpressionDelegate valueExpressionDelegate; private SpelExpressionParser expressionParser; @@ -89,12 +90,12 @@ public class SqlSpannerQuery extends AbstractSpannerQuery { SpannerQueryMethod queryMethod, SpannerTemplate spannerTemplate, String sql, - QueryMethodEvaluationContextProvider evaluationContextProvider, + ValueExpressionDelegate valueExpressionDelegate, SpelExpressionParser expressionParser, SpannerMappingContext spannerMappingContext, boolean isDml) { super(type, queryMethod, spannerTemplate, spannerMappingContext); - this.evaluationContextProvider = evaluationContextProvider; + this.valueExpressionDelegate = valueExpressionDelegate; this.expressionParser = expressionParser; this.sql = StringUtils.trimTrailingCharacter(sql.trim(), ';'); this.isDml = isDml; @@ -159,8 +160,8 @@ private void resolveSpelTags(QueryTagValue queryTagValue) { Map valueToTag = new HashMap<>(); int tagNum = 0; EvaluationContext evaluationContext = - this.evaluationContextProvider.getEvaluationContext( - this.queryMethod.getParameters(), queryTagValue.rawParams); + this.valueExpressionDelegate.createValueContextProvider( + this.queryMethod.getParameters()).getEvaluationContext(this).getEvaluationContext(); for (Expression expression : expressions) { if (expression instanceof LiteralExpression) { sb.append(expression.getValue(String.class)); diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java index 2e3dbf7d8a..fc31c4bccd 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java @@ -27,6 +27,7 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.context.expression.BeanFactoryAccessor; import org.springframework.context.expression.BeanFactoryResolver; +import org.springframework.data.expression.ValueEvaluationContextProvider; import org.springframework.data.mapping.MappingException; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; @@ -36,6 +37,8 @@ import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodValueEvaluationContextAccessor; +import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.data.spel.ExpressionDependencies; import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.standard.SpelExpressionParser; @@ -101,47 +104,48 @@ protected Class getRepositoryBaseClass(RepositoryMetadata metadata) { @Override protected Optional getQueryLookupStrategy( - @Nullable Key key, QueryMethodEvaluationContextProvider evaluationContextProvider) { + @Nullable Key key, ValueExpressionDelegate valueExpressionDelegate) { return Optional.of( new SpannerQueryLookupStrategy( this.spannerMappingContext, this.spannerTemplate, - delegateContextProvider(evaluationContextProvider), + valueExpressionDelegate, EXPRESSION_PARSER)); } private QueryMethodEvaluationContextProvider delegateContextProvider( - QueryMethodEvaluationContextProvider evaluationContextProvider) { - return new QueryMethodEvaluationContextProvider() { - @Override - public > EvaluationContext getEvaluationContext( - T parameters, Object[] parameterValues) { - StandardEvaluationContext evaluationContext = - (StandardEvaluationContext) - evaluationContextProvider.getEvaluationContext(parameters, parameterValues); - evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); - evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); - evaluationContext.setBeanResolver( - new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); - return evaluationContext; - } - - @Override - public > EvaluationContext getEvaluationContext( - T parameters, Object[] parameterValues, ExpressionDependencies expressionDependencies) { - StandardEvaluationContext evaluationContext = - (StandardEvaluationContext) - evaluationContextProvider.getEvaluationContext( - parameters, parameterValues, expressionDependencies); - - evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); - evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); - evaluationContext.setBeanResolver( - new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); - return evaluationContext; - } - }; + ValueExpressionDelegate evaluationContextProvider) { + return null; +// return new QueryMethodEvaluationContextProvider() { +// @Override +// public > EvaluationContext getEvaluationContext( +// T parameters, Object[] parameterValues) { +// StandardEvaluationContext evaluationContext = +// (StandardEvaluationContext) +// evaluationContextProvider.getEvaluationContext(parameters, parameterValues); +// evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); +// evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); +// evaluationContext.setBeanResolver( +// new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); +// return evaluationContext; +// } +// +// @Override +// public > EvaluationContext getEvaluationContext( +// T parameters, Object[] parameterValues, ExpressionDependencies expressionDependencies) { +// StandardEvaluationContext evaluationContext = +// (StandardEvaluationContext) +// evaluationContextProvider.getEvaluationContext( +// parameters, parameterValues, expressionDependencies); +// +// evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); +// evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); +// evaluationContext.setBeanResolver( +// new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); +// return evaluationContext; +// } +// }; } @Override diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java index 1d1745819e..931035b3d6 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java @@ -50,6 +50,7 @@ import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.spel.standard.SpelExpressionParser; /** Tests Spanner Query Method lookups. */ @@ -63,7 +64,7 @@ class SpannerQueryLookupStrategyTests { private SpannerQueryLookupStrategy spannerQueryLookupStrategy; - private QueryMethodEvaluationContextProvider evaluationContextProvider; + private ValueExpressionDelegate valueExpressionDelegate; private SpelExpressionParser spelExpressionParser; @@ -73,7 +74,7 @@ void initMocks() { this.spannerMappingContext = new SpannerMappingContext(); this.spannerTemplate = mock(SpannerTemplate.class); this.queryMethod = mock(SpannerQueryMethod.class); - this.evaluationContextProvider = mock(QueryMethodEvaluationContextProvider.class); + this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); this.spelExpressionParser = new SpelExpressionParser(); this.spannerQueryLookupStrategy = getSpannerQueryLookupStrategy(); @@ -150,7 +151,7 @@ private SpannerQueryLookupStrategy getSpannerQueryLookupStrategy() { new SpannerQueryLookupStrategy( this.spannerMappingContext, this.spannerTemplate, - this.evaluationContextProvider, + this.valueExpressionDelegate, this.spelExpressionParser)); doReturn(Object.class).when(spannerQueryLookupStrategy).getEntityType(any()); doReturn(null).when(spannerQueryLookupStrategy).createPartTreeSpannerQuery(any(), any()); diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java index 9adf5273d7..5806913683 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java @@ -66,13 +66,15 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Order; +import org.springframework.data.expression.ValueEvaluationContext; +import org.springframework.data.expression.ValueEvaluationContextProvider; import org.springframework.data.repository.query.DefaultParameters; import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersSource; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ResultProcessor; import org.springframework.data.repository.query.ReturnedType; +import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -86,7 +88,7 @@ class SqlSpannerQueryTests { private SpannerQueryMethod queryMethod; - private QueryMethodEvaluationContextProvider evaluationContextProvider; + private ValueExpressionDelegate valueExpressionDelegate; private SpelExpressionParser expressionParser; @@ -118,7 +120,7 @@ void initMocks() throws NoSuchMethodException { new SpannerSchemaUtils( this.spannerMappingContext, this.spannerEntityProcessor, true))); this.expressionParser = new SpelExpressionParser(); - this.evaluationContextProvider = mock(QueryMethodEvaluationContextProvider.class); + this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); } private SqlSpannerQuery createQuery(String sql, Class theClass, boolean isDml) { @@ -127,7 +129,7 @@ private SqlSpannerQuery createQuery(String sql, Class theClass, boolea this.queryMethod, this.spannerTemplate, sql, - this.evaluationContextProvider, + this.valueExpressionDelegate, this.expressionParser, this.spannerMappingContext, isDml); @@ -151,9 +153,12 @@ void noPageableParamQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn(toReturn); - EvaluationContext evaluationContext = new StandardEvaluationContext(); - when(this.evaluationContextProvider.getEvaluationContext(any(), any())) - .thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, toReturn, false); @@ -211,8 +216,12 @@ void pageableParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - when(this.evaluationContextProvider.getEvaluationContext(any(), any())) - .thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -274,8 +283,12 @@ void sortParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - when(this.evaluationContextProvider.getEvaluationContext(any(), any())) - .thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -338,8 +351,12 @@ void sortAndPageableQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - when(this.evaluationContextProvider.getEvaluationContext(any(), any())) - .thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -444,8 +461,12 @@ void compoundNameConventionTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - when(this.evaluationContextProvider.getEvaluationContext(any(), any())) - .thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Trade.class, false); @@ -514,6 +535,13 @@ void dmlTest() throws NoSuchMethodException { TransactionRunner transactionRunner = mock(TransactionRunner.class); when(this.databaseClient.readWriteTransaction()).thenReturn(transactionRunner); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); + when(transactionRunner.run(any())) .thenAnswer( invocation -> { @@ -556,8 +584,12 @@ void sqlCountWithWhereTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - when(this.evaluationContextProvider.getEvaluationContext(any(), any())) - .thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, long.class, false); @@ -620,8 +652,12 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { EvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setVariable(paramNames[0], params[0]); - when(this.evaluationContextProvider.getEvaluationContext(any(), any())) - .thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); @@ -683,8 +719,12 @@ void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { EvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setVariable(paramNames[0], params[0]); - when(this.evaluationContextProvider.getEvaluationContext(any(), any())) - .thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java index bcf962dc68..aab77e3191 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java @@ -36,6 +36,7 @@ import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.ValueExpressionDelegate; /** Tests for the Spanner repository factory. */ class SpannerRepositoryFactoryTests { @@ -100,7 +101,7 @@ void getRepositoryBaseClassTest() { void getQueryLookupStrategyTest() { Optional qls = this.spannerRepositoryFactory.getQueryLookupStrategy( - null, mock(QueryMethodEvaluationContextProvider.class)); + null, mock(ValueExpressionDelegate.class)); assertThat(qls.get()).isInstanceOf(SpannerQueryLookupStrategy.class); } From 036da2bd955adebe758cde3104c34340683a8f4b Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 12 Dec 2024 12:35:20 -0500 Subject: [PATCH 09/96] fix value evaluation for SqlSpannerQuery --- .../data/spanner/repository/query/SqlSpannerQuery.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java index 033e141442..4c6376a413 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java @@ -159,9 +159,8 @@ private void resolveSpelTags(QueryTagValue queryTagValue) { StringBuilder sb = new StringBuilder(); Map valueToTag = new HashMap<>(); int tagNum = 0; - EvaluationContext evaluationContext = - this.valueExpressionDelegate.createValueContextProvider( - this.queryMethod.getParameters()).getEvaluationContext(this).getEvaluationContext(); + EvaluationContext evaluationContext = this.valueExpressionDelegate.getEvaluationContextAccessor().create(this.queryMethod.getParameters()) + .getEvaluationContext(queryTagValue.rawParams).getEvaluationContext(); for (Expression expression : expressions) { if (expression instanceof LiteralExpression) { sb.append(expression.getValue(String.class)); From 9ee34b39991fb29e9957a79feb34bbd18b01cae4 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 12 Dec 2024 15:13:34 -0500 Subject: [PATCH 10/96] use value expression delegate in datastore --- .../query/DatastoreQueryLookupStrategy.java | 12 +++--- .../repository/query/GqlDatastoreQuery.java | 43 +++++++++---------- .../support/DatastoreRepositoryFactory.java | 39 ++--------------- .../DatastoreQueryLookupStrategyTests.java | 7 +-- .../query/GqlDatastoreQueryTests.java | 15 ++++--- .../src/test/resources/index.yaml | 1 + 6 files changed, 43 insertions(+), 74 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java index e8d2de103e..92141cbb51 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java @@ -24,8 +24,8 @@ import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryMethod; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.RepositoryQuery; +import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.util.Assert; /** @@ -39,17 +39,17 @@ public class DatastoreQueryLookupStrategy implements QueryLookupStrategy { private final DatastoreMappingContext datastoreMappingContext; - private QueryMethodEvaluationContextProvider evaluationContextProvider; + private final ValueExpressionDelegate valueExpressionDelegate; public DatastoreQueryLookupStrategy( DatastoreMappingContext datastoreMappingContext, DatastoreOperations datastoreOperations, - QueryMethodEvaluationContextProvider evaluationContextProvider) { + ValueExpressionDelegate valueExpressionDelegate) { Assert.notNull(datastoreMappingContext, "A non-null DatastoreMappingContext is required."); Assert.notNull(datastoreOperations, "A non-null DatastoreOperations is required."); - Assert.notNull(evaluationContextProvider, "A non-null EvaluationContextProvider is required."); + Assert.notNull(valueExpressionDelegate, "A non-null ValueExpressionDelegate is required."); this.datastoreMappingContext = datastoreMappingContext; - this.evaluationContextProvider = evaluationContextProvider; + this.valueExpressionDelegate = valueExpressionDelegate; this.datastoreOperations = datastoreOperations; } @@ -85,7 +85,7 @@ GqlDatastoreQuery createGqlDatastoreQuery( queryMethod, this.datastoreOperations, gql, - this.evaluationContextProvider, + this.valueExpressionDelegate, this.datastoreMappingContext); } diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java index 0799095afc..ce49d16720 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java @@ -56,9 +56,11 @@ import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersParameterAccessor; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.SpelEvaluator; import org.springframework.data.repository.query.SpelQueryContext; +import org.springframework.data.repository.query.ValueExpressionDelegate; +import org.springframework.data.repository.query.ValueExpressionQueryRewriter; +import org.springframework.expression.spel.standard.SpelCompiler; import org.springframework.util.StringUtils; /** @@ -82,9 +84,9 @@ public class GqlDatastoreQuery extends AbstractDatastoreQuery { private List originalParamTags; - private QueryMethodEvaluationContextProvider evaluationContextProvider; + private final ValueExpressionDelegate valueExpressionDelegate; - private SpelQueryContext.EvaluatingSpelQueryContext evaluatingSpelQueryContext; + private ValueExpressionQueryRewriter.EvaluatingValueExpressionQueryRewriter valueExpressionQueryRewriter; /** * Constructor. @@ -93,7 +95,7 @@ public class GqlDatastoreQuery extends AbstractDatastoreQuery { * @param queryMethod the underlying query method to support. * @param datastoreTemplate used for executing queries. * @param gql the query text. - * @param evaluationContextProvider the provider used to evaluate SpEL expressions in queries. + * @param valueExpressionDelegate the provider used to evaluate SpEL expressions in queries. * @param datastoreMappingContext used for getting metadata about entities. */ public GqlDatastoreQuery( @@ -101,10 +103,10 @@ public GqlDatastoreQuery( DatastoreQueryMethod queryMethod, DatastoreOperations datastoreTemplate, String gql, - QueryMethodEvaluationContextProvider evaluationContextProvider, + ValueExpressionDelegate valueExpressionDelegate, DatastoreMappingContext datastoreMappingContext) { super(queryMethod, datastoreTemplate, datastoreMappingContext, type); - this.evaluationContextProvider = evaluationContextProvider; + this.valueExpressionDelegate = valueExpressionDelegate; this.originalGql = StringUtils.trimTrailingCharacter(gql.trim(), ';'); setOriginalParamTags(); setEvaluatingSpelQueryContext(); @@ -314,20 +316,17 @@ private void setGqlResolvedEntityClassName() { private void setEvaluatingSpelQueryContext() { Set originalTags = new HashSet<>(GqlDatastoreQuery.this.originalParamTags); - - GqlDatastoreQuery.this.evaluatingSpelQueryContext = - SpelQueryContext.of( - (counter, spelExpression) -> { - String newTag; - do { - counter++; - newTag = "@SpELtag" + counter; - } while (originalTags.contains(newTag)); - originalTags.add(newTag); - return newTag; - }, - (prefix, newTag) -> newTag) - .withEvaluationContextProvider(GqlDatastoreQuery.this.evaluationContextProvider); + GqlDatastoreQuery.this.valueExpressionQueryRewriter = ValueExpressionQueryRewriter.of(valueExpressionDelegate, + (counter, spelExpression) -> { + String newTag; + do { + counter++; + newTag = "@SpELtag" + counter; + } while (originalTags.contains(newTag)); + originalTags.add(newTag); + return newTag; + }, String::concat) + .withEvaluationContextAccessor(valueExpressionDelegate.getEvaluationContextAccessor()); } // Convenience class to hold a grouping of GQL, tags, and parameter values. @@ -360,8 +359,8 @@ private class ParsedQueryWithTagsAndValues { this.rawParams = rawParams; this.tagsOrdered = new ArrayList<>(initialTags); - SpelEvaluator spelEvaluator = - GqlDatastoreQuery.this.evaluatingSpelQueryContext.parse( + ValueExpressionQueryRewriter.QueryExpressionEvaluator spelEvaluator = + GqlDatastoreQuery.this.valueExpressionQueryRewriter.parse( GqlDatastoreQuery.this.gqlResolvedEntityClassName, GqlDatastoreQuery.this.queryMethod.getParameters()); Map results = spelEvaluator.evaluate(this.rawParams); diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java index e0a1f2e0d9..26e71c7db3 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java @@ -36,6 +36,7 @@ import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.data.spel.ExpressionDependencies; import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -98,51 +99,17 @@ protected Class getRepositoryBaseClass(RepositoryMetadata metadata) { @Override protected Optional getQueryLookupStrategy( - @Nullable Key key, QueryMethodEvaluationContextProvider evaluationContextProvider) { + @Nullable Key key, ValueExpressionDelegate valueExpressionDelegate) { return Optional.of( new DatastoreQueryLookupStrategy( this.datastoreMappingContext, this.datastoreOperations, - delegateContextProvider(evaluationContextProvider))); + valueExpressionDelegate)); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } - - private QueryMethodEvaluationContextProvider delegateContextProvider( - QueryMethodEvaluationContextProvider evaluationContextProvider) { - - return new QueryMethodEvaluationContextProvider() { - @Override - public > EvaluationContext getEvaluationContext( - T parameters, Object[] parameterValues) { - StandardEvaluationContext evaluationContext = - (StandardEvaluationContext) - evaluationContextProvider.getEvaluationContext(parameters, parameterValues); - evaluationContext.setRootObject(DatastoreRepositoryFactory.this.applicationContext); - evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); - evaluationContext.setBeanResolver( - new BeanFactoryResolver(DatastoreRepositoryFactory.this.applicationContext)); - return evaluationContext; - } - - @Override - public > EvaluationContext getEvaluationContext( - T parameters, Object[] parameterValues, ExpressionDependencies expressionDependencies) { - StandardEvaluationContext evaluationContext = - (StandardEvaluationContext) - evaluationContextProvider.getEvaluationContext( - parameters, parameterValues, expressionDependencies); - - evaluationContext.setRootObject(DatastoreRepositoryFactory.this.applicationContext); - evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); - evaluationContext.setBeanResolver( - new BeanFactoryResolver(DatastoreRepositoryFactory.this.applicationContext)); - return evaluationContext; - } - }; - } } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java index 88ab23b72a..294381ebde 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java @@ -37,6 +37,7 @@ import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.ValueExpressionDelegate; /** Tests for the Query Method lookup class. */ class DatastoreQueryLookupStrategyTests { @@ -49,14 +50,14 @@ class DatastoreQueryLookupStrategyTests { private DatastoreQueryLookupStrategy datastoreQueryLookupStrategy; - private QueryMethodEvaluationContextProvider evaluationContextProvider; + private ValueExpressionDelegate valueExpressionDelegate; @BeforeEach void initMocks() { this.datastoreTemplate = mock(DatastoreTemplate.class); this.datastoreMappingContext = new DatastoreMappingContext(); this.queryMethod = mock(DatastoreQueryMethod.class); - this.evaluationContextProvider = mock(QueryMethodEvaluationContextProvider.class); + this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); this.datastoreQueryLookupStrategy = getDatastoreQueryLookupStrategy(); } @@ -98,7 +99,7 @@ private DatastoreQueryLookupStrategy getDatastoreQueryLookupStrategy() { new DatastoreQueryLookupStrategy( this.datastoreMappingContext, this.datastoreTemplate, - this.evaluationContextProvider)); + this.valueExpressionDelegate)); doReturn(Object.class).when(spannerQueryLookupStrategy).getEntityType(any()); doReturn(this.queryMethod) .when(spannerQueryLookupStrategy) diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java index c0e5e46645..89eee56c16 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java @@ -64,6 +64,7 @@ import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -83,7 +84,7 @@ class GqlDatastoreQueryTests { private DatastoreQueryMethod queryMethod; - private QueryMethodEvaluationContextProvider evaluationContextProvider; + private ValueExpressionDelegate valueExpressionDelegate; @BeforeEach void initMocks() { @@ -96,7 +97,7 @@ void initMocks() { when(this.datastoreTemplate.getDatastoreEntityConverter()) .thenReturn(this.datastoreEntityConverter); when(this.datastoreEntityConverter.getConversions()).thenReturn(this.readWriteConversions); - this.evaluationContextProvider = mock(QueryMethodEvaluationContextProvider.class); + this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); } private GqlDatastoreQuery createQuery( @@ -108,7 +109,7 @@ private GqlDatastoreQuery createQuery( this.queryMethod, this.datastoreTemplate, gql, - this.evaluationContextProvider, + this.valueExpressionDelegate, this.datastoreMappingContext)); doReturn(isPageQuery).when(spy).isPageQuery(); doReturn(isSliceQuery).when(spy).isSliceQuery(); @@ -170,10 +171,10 @@ void compoundNameConventionTest() { for (int i = 0; i < paramVals.length; i++) { evaluationContext.setVariable(paramNames[i], paramVals[i]); } - when(this.evaluationContextProvider.getEvaluationContext(any(), any())) - .thenReturn(evaluationContext); - when(this.evaluationContextProvider.getEvaluationContext(any(), any(), any())) - .thenReturn(evaluationContext); +// when(this.valueExpressionDelegate.getEvaluationContext(any(), any())) +// .thenReturn(evaluationContext); +// when(this.valueExpressionDelegate.getEvaluationContext(any(), any(), any())) +// .thenReturn(evaluationContext); GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, false); diff --git a/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml b/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml index c7edc3c5ae..7165b73e09 100644 --- a/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml +++ b/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml @@ -1,3 +1,4 @@ +# For running the ITs in local setups: `cd` into this folder and run `gcloud datastore indexes create index.yaml` indexes: - kind: test_entities_ci From 57a9abffdf6bd170a3f3823236327dd5f242d170 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 12 Dec 2024 15:15:27 -0500 Subject: [PATCH 11/96] restore unnecessary changes --- .../spanner/SpannerTransactionManagerAutoConfiguration.java | 2 +- .../spanner/repository/query/SpannerQueryLookupStrategy.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java index dfeb480b60..527e478eae 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java @@ -66,7 +66,7 @@ public SpannerTransactionManager spannerTransactionManager() { SpannerTransactionManager transactionManager = new SpannerTransactionManager(this.databaseClientProvider); if (this.transactionManagerCustomizers != null) { - this.transactionManagerCustomizers.customize((TransactionManager) transactionManager); + this.transactionManagerCustomizers.customize(transactionManager); } return transactionManager; } diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java index b942e5695b..da41604c65 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java @@ -54,7 +54,7 @@ public SpannerQueryLookupStrategy( SpelExpressionParser expressionParser) { Assert.notNull(spannerMappingContext, "A valid SpannerMappingContext is required."); Assert.notNull(spannerTemplate, "A valid SpannerTemplate is required."); - Assert.notNull(valueExpressionDelegate, "A valid EvaluationContextProvider is required."); + Assert.notNull(valueExpressionDelegate, "A valid ValueExpressionDelegate is required."); Assert.notNull(expressionParser, "A valid SpelExpressionParser is required."); this.spannerMappingContext = spannerMappingContext; this.valueExpressionDelegate = valueExpressionDelegate; From 195fca89d9f4c679e987ddccad6af51c85fc8b3a Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 13 Dec 2024 16:35:31 -0500 Subject: [PATCH 12/96] fix datastore tests --- .../DatastoreQueryLookupStrategyTests.java | 2 + .../query/GqlDatastoreQueryTests.java | 75 +++++++++++++------ 2 files changed, 56 insertions(+), 21 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java index 294381ebde..5ee49ebbae 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java @@ -37,6 +37,7 @@ import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodValueEvaluationContextAccessor; import org.springframework.data.repository.query.ValueExpressionDelegate; /** Tests for the Query Method lookup class. */ @@ -86,6 +87,7 @@ void resolveSqlQueryTest() { when(namedQueries.hasQuery(queryName)).thenReturn(true); when(namedQueries.getQuery(queryName)).thenReturn(query); + when(valueExpressionDelegate.getEvaluationContextAccessor()).thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); this.datastoreQueryLookupStrategy.resolveQuery(null, null, null, namedQueries); diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java index 89eee56c16..cf50260495 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java @@ -48,22 +48,29 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.Supplier; import java.util.stream.Stream; import org.assertj.core.data.Offset; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import org.springframework.data.annotation.Id; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; +import org.springframework.data.expression.ValueEvaluationContext; +import org.springframework.data.expression.ValueEvaluationContextProvider; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.QueryMethodValueEvaluationContextAccessor; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -98,6 +105,7 @@ void initMocks() { .thenReturn(this.datastoreEntityConverter); when(this.datastoreEntityConverter.getConversions()).thenReturn(this.readWriteConversions); this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); + when(valueExpressionDelegate.getEvaluationContextAccessor()).thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); } private GqlDatastoreQuery createQuery( @@ -167,14 +175,7 @@ void compoundNameConventionTest() { doReturn(key).when(this.datastoreTemplate).getKey(any()); - EvaluationContext evaluationContext = new StandardEvaluationContext(); - for (int i = 0; i < paramVals.length; i++) { - evaluationContext.setVariable(paramNames[i], paramVals[i]); - } -// when(this.valueExpressionDelegate.getEvaluationContext(any(), any())) -// .thenReturn(evaluationContext); -// when(this.valueExpressionDelegate.getEvaluationContext(any(), any(), any())) -// .thenReturn(evaluationContext); + this.valueExpressionDelegate = ValueExpressionDelegate.create(); GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, false); @@ -517,21 +518,53 @@ private Parameters buildParameters(Object[] params, String[] paramNames) { Mockito.when(this.queryMethod.getParameters()).thenReturn(parameters); - when(parameters.getNumberOfParameters()).thenReturn(paramNames.length); - when(parameters.getParameter(anyInt())) - .thenAnswer( - invocation -> { - int index = invocation.getArgument(0); - Parameter param = mock(Parameter.class); - when(param.getName()) - .thenReturn( - paramNames[index] == null - ? Optional.empty() - : Optional.of(paramNames[index])); + final List parameterList = new ArrayList<>(); + for (int index = 0; index < params.length; index++) { + + Parameter param = mock(Parameter.class); + parameterList.add(param); + when(param.getName()) + .thenReturn( + paramNames[index] == null ? Optional.empty() : Optional.of(paramNames[index])); - Mockito.when(param.getType()).thenReturn(params[index].getClass()); + Mockito.when(param.getType()).thenReturn(params[index].getClass()); + when(param.isNamedParameter()).thenReturn(true); + when(param.getRequiredName()).thenReturn(paramNames[index]); + when(param.getIndex()).thenReturn(index); - return param; + when(parameters.getParameter(eq(index))).thenAnswer(invocation -> param); + } + when(parameters.getNumberOfParameters()).thenReturn(paramNames.length); + + Supplier iteratorSupplier = + () -> { + Iterator parameterIterator = mock(Iterator.class); + if (paramNames.length == 0) { + when(parameterIterator.hasNext()).thenReturn(false); + } else { + // every hasNext() call will return true except for the last one + Boolean[] hasNextResponses = new Boolean[paramNames.length]; + Arrays.fill(hasNextResponses, true); + hasNextResponses[hasNextResponses.length - 1] = false; + when(parameterIterator.hasNext()).thenReturn(true, hasNextResponses); + + // Then we set up the sequence of returned values for the params + Parameter[] restOfParameters = new Parameter[parameterList.size() - 1]; + parameterList.subList(1, parameterList.size()).toArray(restOfParameters); + when(parameterIterator.next()).thenReturn(parameterList.getFirst(), restOfParameters); + } + return parameterIterator; + }; + // we return a new iterator each time. This is because foreach loops call iterable.iterator() + // once and parameters + // is iterated over several times. + when(parameters.iterator()) + .thenAnswer( + new Answer() { + @Override + public Iterator answer(InvocationOnMock invocation) throws Throwable { + return iteratorSupplier.get(); + } }); return parameters; } From 290c7a2dbf99a8482ee8053c9dd0030001489ef6 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 13 Dec 2024 17:26:07 -0500 Subject: [PATCH 13/96] format --- .../aot/DatastoreCoreRuntimeHints.java | 3 +- .../aot/DatastoreQueryRuntimeHints.java | 3 +- .../datastore/core/DatastoreOperations.java | 8 +- .../datastore/core/DatastoreTemplate.java | 20 +- .../DefaultDatastoreEntityConverter.java | 6 +- .../core/convert/TwoStepsConversions.java | 54 +- .../data/datastore/core/util/SliceUtil.java | 2 +- .../config/DatastoreAuditingRegistrar.java | 2 +- .../repository/query/GqlDatastoreQuery.java | 29 +- .../support/DatastoreRepositoryFactory.java | 11 +- .../data/datastore/aot/TestRuntimeHints.java | 28 +- .../core/DatastoreTemplateAuditingTests.java | 3 +- .../core/DatastoreTemplateTests.java | 182 ++-- .../DatastoreTransactionManagerTests.java | 12 +- .../DatastoreTransactionTemplateTests.java | 14 +- ...tastoreServiceObjectToKeyFactoryTests.java | 51 +- .../DefaultDatastoreEntityConverterTests.java | 117 ++- .../EntityPropertyValueProviderTests.java | 7 +- .../DatastorePersistentEntityImplTests.java | 48 +- .../DatastorePersistentPropertyImplTests.java | 48 +- .../it/DatastoreIntegrationTests.java | 11 +- .../it/ParallelDatastoreIntegrationTests.java | 9 +- .../descendants/testdomains/EntityA.java | 3 +- .../it/testdomains/AncestorEntity.java | 6 +- .../data/datastore/it/testdomains/Event.java | 3 +- .../datastore/it/testdomains/LazyEntity.java | 3 +- .../it/testdomains/ReferenceLazyEntity.java | 3 +- .../DatastoreQueryLookupStrategyTests.java | 3 +- .../query/GqlDatastoreQueryTests.java | 3 +- .../query/PartTreeDatastoreQueryTests.java | 957 +++++++++--------- .../DatastoreRepositoryFactoryTests.java | 7 +- .../SimpleDatastoreRepositoryTests.java | 21 +- .../src/test/resources/index.yaml | 18 +- .../src/test/resources/logback-test.xml | 20 +- .../core/SpannerMutationFactoryImpl.java | 3 +- .../admin/SpannerDatabaseAdminTemplate.java | 9 +- ...verterAwareMappingSpannerEntityReader.java | 3 +- ...verterAwareMappingSpannerEntityWriter.java | 1 - .../core/convert/SpannerConverters.java | 1 + .../spanner/core/convert/StructAccessor.java | 14 +- .../convert/StructPropertyValueProvider.java | 5 +- .../SpannerPersistentPropertyImpl.java | 3 +- .../spanner/repository/SpannerRepository.java | 4 +- .../config/SpannerAuditingRegistrar.java | 2 +- .../query/SpannerStatementQueryExecutor.java | 3 +- .../repository/query/SqlSpannerQuery.java | 16 +- .../support/SpannerRepositoryFactory.java | 59 +- .../SpannerSchemaUtilsRuntimeHintsTests.java | 4 +- .../core/SpannerMutationFactoryImplTests.java | 24 +- .../spanner/core/SpannerReadOptionsTests.java | 8 +- .../SpannerSortPageQueryOptionsTests.java | 4 +- .../spanner/core/SpannerTemplateTests.java | 120 ++- ...pannerTemplateTransactionManagerTests.java | 8 +- .../SpannerDatabaseAdminTemplateTests.java | 16 +- .../core/admin/SpannerSchemaUtilsTests.java | 6 +- .../core/convert/KeyConversionTests.java | 1 - .../SpannerWriteMethodCoverageTests.java | 6 +- .../it/SpannerTemplateIntegrationTests.java | 19 +- .../core/mapping/SpannerKeyPropertyTests.java | 12 +- .../SpannerPersistentEntityImplTests.java | 108 +- .../SpannerPersistentPropertyImplTests.java | 65 +- .../typeadapter/InstantTypeAdapterTest.java | 1 - ...annerRepositoryInsertIntegrationTests.java | 1 - .../query/SpannerQueryMethodTests.java | 3 +- .../query/SpannerStatementQueryTests.java | 48 +- .../query/SqlSpannerQueryTests.java | 153 +-- .../support/SimpleSpannerRepositoryTests.java | 70 +- .../SpannerRepositoryFactoryTests.java | 9 +- .../spanner/test/domain/SingerRepository.java | 5 +- .../data/spanner/test/domain/Trade.java | 3 +- .../spanner/test/domain/TradeRepository.java | 3 +- .../src/test/resources/logback-test.xml | 22 +- 72 files changed, 1366 insertions(+), 1191 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreCoreRuntimeHints.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreCoreRuntimeHints.java index c39bdbc9f3..eaa31c6700 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreCoreRuntimeHints.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreCoreRuntimeHints.java @@ -29,8 +29,7 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) { hints .reflection() .registerTypes( - Arrays.asList( - TypeReference.of(java.util.HashMap.class)), + Arrays.asList(TypeReference.of(java.util.HashMap.class)), hint -> hint.withMembers( MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreQueryRuntimeHints.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreQueryRuntimeHints.java index 34f6bc3c1d..837af66a71 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreQueryRuntimeHints.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreQueryRuntimeHints.java @@ -30,8 +30,7 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) { hints .reflection() .registerTypes( - Arrays.asList( - TypeReference.of(DatastorePageable.class)), + Arrays.asList(TypeReference.of(DatastorePageable.class)), hint -> hint.withMembers( MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreOperations.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreOperations.java index f04799c441..dc096e485d 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreOperations.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreOperations.java @@ -73,8 +73,8 @@ public interface DatastoreOperations { Iterable saveAll(Iterable entities, Key... ancestors); /** - * Inserts an instance of an object to Cloud Datastore. Throws a DatastoreException if an entry with same ID - * already exists. Ancestors can be added only to entries with Key ids. + * Inserts an instance of an object to Cloud Datastore. Throws a DatastoreException if an entry + * with same ID already exists. Ancestors can be added only to entries with Key ids. * * @param instance the instance to save. * @param ancestors ancestors that should be added to the entry @@ -85,8 +85,8 @@ public interface DatastoreOperations { T insert(T instance, Key... ancestors); /** - * Saves multiple instances of objects to Cloud Datastore. Throws a DatastoreException if any entry with one of - * the IDs already exists. Ancestors can be added only to entries with Key ids. + * Saves multiple instances of objects to Cloud Datastore. Throws a DatastoreException if any + * entry with one of the IDs already exists. Ancestors can be added only to entries with Key ids. * * @param entities the objects to save. * @param ancestors ancestors that should be added to each entry diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplate.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplate.java index afe0818728..8bcfc098ed 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplate.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplate.java @@ -176,7 +176,8 @@ public Iterable insertAll(final Iterable entities, final Key... ancest return entities; } - private void insertOrSaveEntities(Iterable iterable, Key[] ancestors, Consumer[]> consumer) { + private void insertOrSaveEntities( + Iterable iterable, Key[] ancestors, Consumer[]> consumer) { List instances; if (iterable instanceof List) { instances = (List) iterable; @@ -255,16 +256,17 @@ private void performDelete(Key[] keys, Iterable ids, Iterable entities, Class en @Override public long count(Class entityClass) { - KeyQuery baseQuery = Query.newKeyQueryBuilder() - .setKind(getPersistentEntity(entityClass).kindName()) - .build(); + KeyQuery baseQuery = + Query.newKeyQueryBuilder().setKind(getPersistentEntity(entityClass).kindName()).build(); - AggregationQuery countAggregationQuery = Query.newAggregationQueryBuilder() - .over(baseQuery) - .addAggregation(Aggregation.count().as("total_count")) - .build(); + AggregationQuery countAggregationQuery = + Query.newAggregationQueryBuilder() + .over(baseQuery) + .addAggregation(Aggregation.count().as("total_count")) + .build(); - AggregationResults aggregationResults = getDatastoreReadWriter().runAggregation(countAggregationQuery); + AggregationResults aggregationResults = + getDatastoreReadWriter().runAggregation(countAggregationQuery); maybeEmitEvent(new AfterQueryEvent(aggregationResults, countAggregationQuery)); AggregationResult aggregationResult = Iterables.getOnlyElement(aggregationResults); return aggregationResult.get("total_count"); diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverter.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverter.java index 8f9f18c2e7..6f350ae4fa 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverter.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverter.java @@ -226,8 +226,7 @@ public void write(Object source, @NonNull BaseEntity.Builder sink) { List discriminationValues = persistentEntity.getCompatibleDiscriminationValues(); if (!discriminationValues.isEmpty() || discriminationFieldName != null) { sink.set( - discriminationFieldName, - discriminationValues.stream().map(StringValue::of).toList()); + discriminationFieldName, discriminationValues.stream().map(StringValue::of).toList()); } PersistentPropertyAccessor accessor = persistentEntity.getPropertyAccessor(source); persistentEntity.doWithColumnBackedProperties( @@ -269,8 +268,7 @@ private Value setExcludeFromIndexes(Value convertedVal) { } else if (convertedVal.getClass().equals(ListValue.class)) { return ListValue.of( (List) - ((ListValue) convertedVal) - .get().stream().map(this::setExcludeFromIndexes).toList()); + ((ListValue) convertedVal).get().stream().map(this::setExcludeFromIndexes).toList()); } else { return convertedVal.toBuilder().setExcludeFromIndexes(true).build(); } diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/TwoStepsConversions.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/TwoStepsConversions.java index 144f1c5ff6..ded3a9b173 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/TwoStepsConversions.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/TwoStepsConversions.java @@ -138,16 +138,18 @@ private T convertOnRead( if (val == null) { return null; } - BiFunction, ?> readConverter = switch (embeddedType) { - case EMBEDDED_MAP -> (x, typeInformation) -> - convertOnReadSingleEmbeddedMap( - x, - Objects.requireNonNull(typeInformation.getComponentType()).getType(), - typeInformation.getMapValueType(), - targetComponentType); - case EMBEDDED_ENTITY -> this::convertOnReadSingleEmbedded; - case NOT_EMBEDDED -> this::convertOnReadSingle; - }; + BiFunction, ?> readConverter = + switch (embeddedType) { + case EMBEDDED_MAP -> + (x, typeInformation) -> + convertOnReadSingleEmbeddedMap( + x, + Objects.requireNonNull(typeInformation.getComponentType()).getType(), + typeInformation.getMapValueType(), + targetComponentType); + case EMBEDDED_ENTITY -> this::convertOnReadSingleEmbedded; + case NOT_EMBEDDED -> this::convertOnReadSingle; + }; if (ValueUtil.isCollectionLike(val.getClass()) && targetCollectionType != null @@ -191,8 +193,7 @@ private T convertOnReadSingleEmbedded( Object value, TypeInformation targetTypeInformation) { Assert.notNull(value, "Cannot convert a null value."); if (value instanceof BaseEntity baseEntity) { - return (T) - this.datastoreEntityConverter.read(targetTypeInformation.getType(), baseEntity); + return (T) this.datastoreEntityConverter.read(targetTypeInformation.getType(), baseEntity); } throw new DatastoreDataException( "Embedded entity was expected, but " + value.getClass() + " found"); @@ -261,12 +262,15 @@ private Value convertOnWrite( Function writeConverter = this::convertOnWriteSingle; if (proppertyVal != null) { - writeConverter = switch (embeddedType) { - case EMBEDDED_MAP -> x -> convertOnWriteSingleEmbeddedMap(x, fieldName, - typeInformation.getMapValueType()); - case EMBEDDED_ENTITY -> x -> convertOnWriteSingleEmbedded(x, fieldName); - case NOT_EMBEDDED -> this::convertOnWriteSingle; - }; + writeConverter = + switch (embeddedType) { + case EMBEDDED_MAP -> + x -> + convertOnWriteSingleEmbeddedMap( + x, fieldName, typeInformation.getMapValueType()); + case EMBEDDED_ENTITY -> x -> convertOnWriteSingleEmbedded(x, fieldName); + case NOT_EMBEDDED -> this::convertOnWriteSingle; + }; } val = ValueUtil.toListIfArray(val); @@ -289,16 +293,16 @@ private EntityValue applyEntityValueBuilder( builder = FullEntity.newBuilder(); } else { /* The following does 3 sequential null checks. We only want an ID value if the object isn't null, - has an ID property, and the ID property isn't null. - */ + has an ID property, and the ID property isn't null. + */ Optional idProp = Optional.ofNullable(val) .map(v -> this.datastoreMappingContext.getPersistentEntity(v.getClass())) .map(PersistentEntity::getIdProperty) .map( id -> - Objects.requireNonNull(this.datastoreMappingContext - .getPersistentEntity(val.getClass())) + Objects.requireNonNull( + this.datastoreMappingContext.getPersistentEntity(val.getClass())) .getPropertyAccessor(val) .getProperty(id)); @@ -321,8 +325,7 @@ private EntityValue convertOnWriteSingleEmbeddedMap( for (Map.Entry e : ((Map) val).entrySet()) { String field = convertOnReadSingle( - convertOnWriteSingle(e.getKey()).get(), - TypeInformation.of(String.class)); + convertOnWriteSingle(e.getKey()).get(), TypeInformation.of(String.class)); builder.set( field, convertOnWrite( @@ -412,8 +415,7 @@ public void registerEntityConverter(DatastoreEntityConverter datastoreEntityConv this.datastoreEntityConverter = datastoreEntityConverter; } - private record TypeTargets(Class firstStepTarget, - Class secondStepTarget) { + private record TypeTargets(Class firstStepTarget, Class secondStepTarget) { Class getFirstStepTarget() { return this.firstStepTarget; diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/util/SliceUtil.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/util/SliceUtil.java index a71c8cf335..bf5d04ad19 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/util/SliceUtil.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/util/SliceUtil.java @@ -20,7 +20,7 @@ import java.util.function.Consumer; /** - * @since 1.2 + * @since 1.2 */ public final class SliceUtil { diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/config/DatastoreAuditingRegistrar.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/config/DatastoreAuditingRegistrar.java index 617e96c941..64321f08c0 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/config/DatastoreAuditingRegistrar.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/config/DatastoreAuditingRegistrar.java @@ -59,7 +59,7 @@ protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder( AuditingConfiguration configuration) { return configureDefaultAuditHandlerAttributes( configuration, BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class)) - .addConstructorArgValue(PersistentEntities.of(new DatastoreMappingContext())); + .addConstructorArgValue(PersistentEntities.of(new DatastoreMappingContext())); } @Override diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java index ce49d16720..6358ed263a 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java @@ -56,11 +56,8 @@ import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersParameterAccessor; -import org.springframework.data.repository.query.SpelEvaluator; -import org.springframework.data.repository.query.SpelQueryContext; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.data.repository.query.ValueExpressionQueryRewriter; -import org.springframework.expression.spel.standard.SpelCompiler; import org.springframework.util.StringUtils; /** @@ -86,7 +83,8 @@ public class GqlDatastoreQuery extends AbstractDatastoreQuery { private final ValueExpressionDelegate valueExpressionDelegate; - private ValueExpressionQueryRewriter.EvaluatingValueExpressionQueryRewriter valueExpressionQueryRewriter; + private ValueExpressionQueryRewriter.EvaluatingValueExpressionQueryRewriter + valueExpressionQueryRewriter; /** * Constructor. @@ -316,16 +314,19 @@ private void setGqlResolvedEntityClassName() { private void setEvaluatingSpelQueryContext() { Set originalTags = new HashSet<>(GqlDatastoreQuery.this.originalParamTags); - GqlDatastoreQuery.this.valueExpressionQueryRewriter = ValueExpressionQueryRewriter.of(valueExpressionDelegate, - (counter, spelExpression) -> { - String newTag; - do { - counter++; - newTag = "@SpELtag" + counter; - } while (originalTags.contains(newTag)); - originalTags.add(newTag); - return newTag; - }, String::concat) + GqlDatastoreQuery.this.valueExpressionQueryRewriter = + ValueExpressionQueryRewriter.of( + valueExpressionDelegate, + (counter, spelExpression) -> { + String newTag; + do { + counter++; + newTag = "@SpELtag" + counter; + } while (originalTags.contains(newTag)); + originalTags.add(newTag); + return newTag; + }, + String::concat) .withEvaluationContextAccessor(valueExpressionDelegate.getEvaluationContextAccessor()); } diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java index 26e71c7db3..be484bef0e 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java @@ -25,21 +25,14 @@ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; -import org.springframework.context.expression.BeanFactoryAccessor; -import org.springframework.context.expression.BeanFactoryResolver; import org.springframework.data.mapping.MappingException; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryFactorySupport; -import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; -import org.springframework.data.spel.ExpressionDependencies; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -103,9 +96,7 @@ protected Optional getQueryLookupStrategy( return Optional.of( new DatastoreQueryLookupStrategy( - this.datastoreMappingContext, - this.datastoreOperations, - valueExpressionDelegate)); + this.datastoreMappingContext, this.datastoreOperations, valueExpressionDelegate)); } @Override diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/aot/TestRuntimeHints.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/aot/TestRuntimeHints.java index 62210a6c4c..34b2303e2e 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/aot/TestRuntimeHints.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/aot/TestRuntimeHints.java @@ -38,9 +38,7 @@ import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeReference; -/** - * Runtime hints for integration test. - */ +/** Runtime hints for integration test. */ public class TestRuntimeHints implements RuntimeHintsRegistrar { @Override @@ -65,12 +63,24 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) { TypeReference.of(ServiceConfiguration.class), TypeReference.of(SubEntity.class), TypeReference.of(TreeCollection.class), - TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains.EntityA.class), - TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains.EntityB.class), - TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains.EntityC.class), - TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains.EntityA.class), - TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains.EntityB.class), - TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains.EntityC.class)), + TypeReference.of( + com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains + .EntityA.class), + TypeReference.of( + com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains + .EntityB.class), + TypeReference.of( + com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains + .EntityC.class), + TypeReference.of( + com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains + .EntityA.class), + TypeReference.of( + com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains + .EntityB.class), + TypeReference.of( + com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains + .EntityC.class)), hint -> hint.withMembers( MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateAuditingTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateAuditingTests.java index b109fa68be..03a23c08ad 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateAuditingTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateAuditingTests.java @@ -155,7 +155,6 @@ private static class TestEntity { @LastModifiedBy String lastUser; - @LastModifiedDate - Instant lastTouched; + @LastModifiedDate Instant lastTouched; } } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateTests.java index b2c8b40431..5e2343711e 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateTests.java @@ -584,8 +584,7 @@ void saveOrInsertReferenceLoopTest(SaveOrInsertMethod method) { datastorePutOrAddAll(method, ArgumentMatchers.any()), Collections.singletonList(this.e1)); - assertThat(saveOrInsert(method, referenceTestEntity)) - .isInstanceOf(ReferenceTestEntity.class); + assertThat(saveOrInsert(method, referenceTestEntity)).isInstanceOf(ReferenceTestEntity.class); Entity writtenEntity = Entity.newBuilder(this.key1).set("sibling", this.key1).build(); @@ -642,23 +641,24 @@ void saveOrInsertTestCommon(SaveOrInsertMethod method, TestEntity parent, boolea Entity writtenChildEntity7 = Entity.newBuilder(this.childKey7).build(); when(datastorePutOrAddAll(method, ArgumentMatchers.any())) - .thenAnswer(invocation -> { - Object[] arguments = invocation.getArguments(); - assertThat(arguments).contains(writtenEntity); - assertThat(arguments).contains(writtenChildEntity2); - assertThat(arguments).contains(writtenChildEntity3); - assertThat(arguments).contains(writtenChildEntity4); - assertThat(arguments).contains(writtenChildEntity5); - assertThat(arguments).contains(writtenChildEntity6); - if (lazy) { - assertThat(arguments).hasSize(6); - } else { - assertThat(arguments).contains(writtenChildEntity7); - assertThat(arguments).hasSize(7); - } - - return null; - }); + .thenAnswer( + invocation -> { + Object[] arguments = invocation.getArguments(); + assertThat(arguments).contains(writtenEntity); + assertThat(arguments).contains(writtenChildEntity2); + assertThat(arguments).contains(writtenChildEntity3); + assertThat(arguments).contains(writtenChildEntity4); + assertThat(arguments).contains(writtenChildEntity5); + assertThat(arguments).contains(writtenChildEntity6); + if (lazy) { + assertThat(arguments).hasSize(6); + } else { + assertThat(arguments).contains(writtenChildEntity7); + assertThat(arguments).hasSize(7); + } + + return null; + }); assertThat(saveOrInsert(method, parent)).isInstanceOf(TestEntity.class); verifyPutOrAdd(method, times(1)); @@ -702,7 +702,6 @@ void saveOrInsertTestNonKeyId(SaveOrInsertMethod method) { assertThatThrownBy(() -> saveOrInsert(method, this.ob1, testKey)) .isInstanceOf(DatastoreDataException.class) .hasMessage("Only Key types are allowed for descendants id"); - } @ParameterizedTest @@ -787,18 +786,19 @@ void saveOrInsertAndAllocateIdTest(SaveOrInsertMethod method) { Entity writtenChildEntity7 = Entity.newBuilder(this.childKey7).build(); when(datastorePutOrAddAll(method, ArgumentMatchers.any())) - .thenAnswer(invocation -> { - assertThat(invocation.getArguments()) - .containsExactlyInAnyOrder( - writtenChildEntity2, - writtenChildEntity3, - writtenChildEntity4, - writtenChildEntity5, - writtenChildEntity6, - writtenEntity1, - writtenChildEntity7); - return null; - }); + .thenAnswer( + invocation -> { + assertThat(invocation.getArguments()) + .containsExactlyInAnyOrder( + writtenChildEntity2, + writtenChildEntity3, + writtenChildEntity4, + writtenChildEntity5, + writtenChildEntity6, + writtenEntity1, + writtenChildEntity7); + return null; + }); assertThat(saveOrInsert(method, this.ob1)).isInstanceOf(TestEntity.class); verifyPutOrAdd(method, times(1)); @@ -828,19 +828,20 @@ void saveOrInsertAllTest(SaveOrInsertMethod method) { Entity writtenChildEntity7 = Entity.newBuilder(this.childKey7).build(); when(datastorePutOrAddAll(method, ArgumentMatchers.any())) - .thenAnswer(invocation -> { - assertThat(invocation.getArguments()) - .containsExactlyInAnyOrder( - writtenChildEntity2, - writtenChildEntity3, - writtenChildEntity4, - writtenChildEntity5, - writtenChildEntity6, - writtenEntity1, - writtenEntity2, - writtenChildEntity7); - return null; - }); + .thenAnswer( + invocation -> { + assertThat(invocation.getArguments()) + .containsExactlyInAnyOrder( + writtenChildEntity2, + writtenChildEntity3, + writtenChildEntity4, + writtenChildEntity5, + writtenChildEntity6, + writtenEntity1, + writtenEntity2, + writtenChildEntity7); + return null; + }); List expected = Arrays.asList( @@ -902,12 +903,13 @@ void saveOrInsertAllMaxWriteSizeTest(SaveOrInsertMethod method) { writtenEntity1, writtenEntity2)); when(datastorePutOrAddAll(method, ArgumentMatchers.any())) - .thenAnswer(invocation -> { - assertThat(invocation.getArguments()).hasSize(1); - assertThat(entities).contains((Entity) invocation.getArguments()[0]); - entities.remove(invocation.getArguments()[0]); - return null; - }); + .thenAnswer( + invocation -> { + assertThat(invocation.getArguments()).hasSize(1); + assertThat(entities).contains((Entity) invocation.getArguments()[0]); + entities.remove(invocation.getArguments()[0]); + return null; + }); List expected = Arrays.asList( @@ -949,8 +951,8 @@ private T saveOrInsert(SaveOrInsertMethod method, T instance, Key... ancesto } } - private Iterable saveOrInsertAll(SaveOrInsertMethod method, Iterable entities, - Key... ancestors) { + private Iterable saveOrInsertAll( + SaveOrInsertMethod method, Iterable entities, Key... ancestors) { if (SaveOrInsertMethod.SAVE == method) { return this.datastoreTemplate.saveAll(entities, ancestors); } else { @@ -975,7 +977,8 @@ private void verifyPutOrAdd(SaveOrInsertMethod method, VerificationMode verifica } private enum SaveOrInsertMethod { - SAVE, INSERT; + SAVE, + INSERT; } @Test @@ -1055,10 +1058,11 @@ void countTest() { when(aggregationResults.iterator()).thenReturn(List.of(aggregationResult).iterator()); KeyQuery baseQuery = Query.newKeyQueryBuilder().setKind("custom_test_kind").build(); - AggregationQuery countAggregationQuery = Query.newAggregationQueryBuilder() - .over(baseQuery) - .addAggregation(Aggregation.count().as("total_count")) - .build(); + AggregationQuery countAggregationQuery = + Query.newAggregationQueryBuilder() + .over(baseQuery) + .addAggregation(Aggregation.count().as("total_count")) + .build(); when(this.datastore.runAggregation(argThat(equalsTo(countAggregationQuery)))) .thenReturn(aggregationResults); @@ -1068,7 +1072,9 @@ void countTest() { private ArgumentMatcher equalsTo(AggregationQuery expectedAggregationQuery) { return actualAggregationQuery -> expectedAggregationQuery.getAggregations().equals(actualAggregationQuery.getAggregations()) - && expectedAggregationQuery.getNestedStructuredQuery().equals(actualAggregationQuery.getNestedStructuredQuery()); + && expectedAggregationQuery + .getNestedStructuredQuery() + .equals(actualAggregationQuery.getNestedStructuredQuery()); } @Test @@ -1318,10 +1324,11 @@ void queryByExampleIgnoreFieldTest() { @Test void queryByExampleDeepPathTest() { - Example testExample = Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withIgnorePaths("intField.a")); + Example testExample = + Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withIgnorePaths("intField.a")); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Ignored paths deeper than 1 are not supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Ignored paths deeper than 1 are not supported") + .isInstanceOf(DatastoreDataException.class); } @Test @@ -1354,19 +1361,23 @@ void queryByExampleNoNullValuesTest() { @Test void queryByExampleExactMatchTest() { - Example testExample = Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.REGEX)); + Example testExample = + Example.of( + new SimpleTestEntity(), + ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.REGEX)); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Unsupported StringMatcher. Only EXACT and DEFAULT are supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Unsupported StringMatcher. Only EXACT and DEFAULT are supported") + .isInstanceOf(DatastoreDataException.class); } @Test void queryByExampleIgnoreCaseTest() { - Example testExample = Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withIgnoreCase()); + Example testExample = + Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withIgnoreCase()); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Ignore case matching is not supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Ignore case matching is not supported") + .isInstanceOf(DatastoreDataException.class); } @Test @@ -1374,42 +1385,44 @@ void queryByExampleAllMatchTest() { Example testExample = Example.of(new SimpleTestEntity(), ExampleMatcher.matchingAny()); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Unsupported MatchMode. Only MatchMode.ALL is supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Unsupported MatchMode. Only MatchMode.ALL is supported") + .isInstanceOf(DatastoreDataException.class); } @Test void queryByExamplePropertyMatchersTest() { - Example testExample = Example.of( + Example testExample = + Example.of( new SimpleTestEntity(), ExampleMatcher.matching() - .withMatcher( - "id", - ExampleMatcher.GenericPropertyMatcher.of(ExampleMatcher.StringMatcher.REGEX))); - assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Property matchers are not supported") - .isInstanceOf(DatastoreDataException.class); + .withMatcher( + "id", + ExampleMatcher.GenericPropertyMatcher.of(ExampleMatcher.StringMatcher.REGEX))); + assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) + .hasMessage("Property matchers are not supported") + .isInstanceOf(DatastoreDataException.class); } @Test void queryByExampleCaseSensitiveTest() { - Example testExample = Example.of( + Example testExample = + Example.of( new SimpleTestEntity(), ExampleMatcher.matching() - .withMatcher("id", ExampleMatcher.GenericPropertyMatcher::caseSensitive)); + .withMatcher("id", ExampleMatcher.GenericPropertyMatcher::caseSensitive)); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Property matchers are not supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Property matchers are not supported") + .isInstanceOf(DatastoreDataException.class); } @Test void queryByExampleNullTest() { assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(null, null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null example is expected"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null example is expected"); } @Test @@ -1481,8 +1494,7 @@ private static class TestEntity { @Reference LinkedList multipleReference; - @LazyReference - List lazyMultipleReference; + @LazyReference List lazyMultipleReference; @Override public boolean equals(Object o) { diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionManagerTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionManagerTests.java index f357a3eb50..4efb0b31b2 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionManagerTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionManagerTests.java @@ -107,9 +107,9 @@ void testDoCommitFailure() { this.tx.setTransaction(this.transaction); assertThatThrownBy(() -> this.manager.doCommit(this.status)) - .isInstanceOf(TransactionSystemException.class) - .hasMessage("Cloud Datastore transaction failed to commit.") - .hasCause(exception); + .isInstanceOf(TransactionSystemException.class) + .hasMessage("Cloud Datastore transaction failed to commit.") + .hasCause(exception); } @Test @@ -136,9 +136,9 @@ void testDoRollbackFailure() { this.tx.setTransaction(this.transaction); assertThatThrownBy(() -> this.manager.doRollback(this.status)) - .isInstanceOf(TransactionSystemException.class) - .hasMessage("Cloud Datastore transaction failed to rollback.") - .hasCause(exception); + .isInstanceOf(TransactionSystemException.class) + .hasMessage("Cloud Datastore transaction failed to rollback.") + .hasCause(exception); } @Test diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionTemplateTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionTemplateTests.java index d2149d1fec..c7ab00cb2f 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionTemplateTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionTemplateTests.java @@ -144,18 +144,20 @@ void doWithoutTransactionTest() { void unsupportedIsolationTest() { assertThatThrownBy(() -> this.transactionalService.doNothingUnsupportedIsolation()) - .isInstanceOf(IllegalStateException.class) - .hasMessage("DatastoreTransactionManager supports only " - + "isolation level TransactionDefinition.ISOLATION_DEFAULT or ISOLATION_SERIALIZABLE"); + .isInstanceOf(IllegalStateException.class) + .hasMessage( + "DatastoreTransactionManager supports only " + + "isolation level TransactionDefinition.ISOLATION_DEFAULT or ISOLATION_SERIALIZABLE"); } @Test void unsupportedPropagationTest() { assertThatThrownBy(() -> this.transactionalService.doNothingUnsupportedPropagation()) - .isInstanceOf(IllegalStateException.class) - .hasMessage("DatastoreTransactionManager supports only " - + "propagation behavior TransactionDefinition.PROPAGATION_REQUIRED"); + .isInstanceOf(IllegalStateException.class) + .hasMessage( + "DatastoreTransactionManager supports only " + + "propagation behavior TransactionDefinition.PROPAGATION_REQUIRED"); } /** Spring config for the tests. */ diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DatastoreServiceObjectToKeyFactoryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DatastoreServiceObjectToKeyFactoryTests.java index 0bf821c6a9..e609f4b17a 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DatastoreServiceObjectToKeyFactoryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DatastoreServiceObjectToKeyFactoryTests.java @@ -68,9 +68,10 @@ void getKeyFromIdLongTest() { @Test void getKeyFromIdExceptionTest() { when(this.datastore.newKeyFactory()).thenReturn(new KeyFactory("p").setKind("k")); - assertThatThrownBy(() -> this.datastoreServiceObjectToKeyFactory.getKeyFromId(true, "custom_test_kind")) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Keys can only be created using String or long values."); + assertThatThrownBy( + () -> this.datastoreServiceObjectToKeyFactory.getKeyFromId(true, "custom_test_kind")) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Keys can only be created using String or long values."); } @Test @@ -90,14 +91,17 @@ void getKeyTest() { @Test void getKeyNoIdTest() { - DatastorePersistentEntity dpeTest = this.datastoreMappingContext.getPersistentEntity(TestEntityNoId.class); + DatastorePersistentEntity dpeTest = + this.datastoreMappingContext.getPersistentEntity(TestEntityNoId.class); Object entity = new TestEntityNoId(); - assertThatThrownBy(() -> this.datastoreServiceObjectToKeyFactory.getKeyFromObject(entity, dpeTest)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("An ID property was required but does not exist for the type: " - + "class com.google.cloud.spring.data.datastore.core.convert." - + "DatastoreServiceObjectToKeyFactoryTests$TestEntityNoId"); + assertThatThrownBy( + () -> this.datastoreServiceObjectToKeyFactory.getKeyFromObject(entity, dpeTest)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage( + "An ID property was required but does not exist for the type: " + + "class com.google.cloud.spring.data.datastore.core.convert." + + "DatastoreServiceObjectToKeyFactoryTests$TestEntityNoId"); } @Test @@ -155,13 +159,17 @@ void allocateIdForObjectNonKeyIdTest() { KeyFactory keyFactory = new KeyFactory("project").setKind("kind"); Key testKey = keyFactory.newKey("ancestor"); - DatastorePersistentEntity dpeTest = this.datastoreMappingContext.getPersistentEntity(testEntityWithId.getClass()); + DatastorePersistentEntity dpeTest = + this.datastoreMappingContext.getPersistentEntity(testEntityWithId.getClass()); when(this.datastore.newKeyFactory()).thenReturn(keyFactory); - assertThatThrownBy(() -> this.datastoreServiceObjectToKeyFactory.allocateKeyForObject(testEntityWithId, dpeTest, testKey)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Only Key types are allowed for descendants id"); + assertThatThrownBy( + () -> + this.datastoreServiceObjectToKeyFactory.allocateKeyForObject( + testEntityWithId, dpeTest, testKey)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Only Key types are allowed for descendants id"); } @Test @@ -171,12 +179,17 @@ void allocateIdForObjectUnsupportedKeyTypeIdTest() { KeyFactory keyFactory = new KeyFactory("project").setKind("kind"); Key testKey = keyFactory.newKey("key"); when(this.datastore.newKeyFactory()).thenReturn(keyFactory); - DatastorePersistentEntity dpeTest = this.datastoreMappingContext.getPersistentEntity(testEntityWithStringId.getClass()); - - assertThatThrownBy(() -> this.datastoreServiceObjectToKeyFactory.allocateKeyForObject(testEntityWithStringId, dpeTest, testKey)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Cloud Datastore can only allocate IDs for Long and Key properties. " - + "Cannot allocate for type: class java.lang.String"); + DatastorePersistentEntity dpeTest = + this.datastoreMappingContext.getPersistentEntity(testEntityWithStringId.getClass()); + + assertThatThrownBy( + () -> + this.datastoreServiceObjectToKeyFactory.allocateKeyForObject( + testEntityWithStringId, dpeTest, testKey)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage( + "Cloud Datastore can only allocate IDs for Long and Key properties. " + + "Cannot allocate for type: class java.lang.String"); } @com.google.cloud.spring.data.datastore.core.mapping.Entity(name = "custom_test_kind") diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverterTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverterTests.java index a6d14b2906..8b8d31347c 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverterTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverterTests.java @@ -197,8 +197,10 @@ void conflictingDiscriminationTest() { .build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(DiscrimEntityY.class, entityY)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("More than one class in an inheritance hierarchy " + "has the same DiscriminatorValue: "); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining( + "More than one class in an inheritance hierarchy " + + "has the same DiscriminatorValue: "); } @Test @@ -225,13 +227,16 @@ void readNullTest() { @Test void testWrongTypeReadException() { - Entity entity = getEntityBuilder().set("stringField", "string value").set("boolField", 123L).build(); + Entity entity = + getEntityBuilder().set("stringField", "string value").set("boolField", 123L).build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(TestDatastoreItem.class, entity)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("Unable to read " - + "com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItem entity") - .hasStackTraceContaining("Unable to read property boolField") - .hasStackTraceContaining("Unable to convert class java.lang.Long to class java.lang.Boolean"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining( + "Unable to read " + + "com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItem entity") + .hasStackTraceContaining("Unable to read property boolField") + .hasStackTraceContaining( + "Unable to convert class java.lang.Long to class java.lang.Boolean"); } @Test @@ -241,8 +246,8 @@ void testObjectEntityException() { getEntityBuilder().set("stringField", "string value").set("boolField", 123L).build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(Object.class, entity)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Unable to convert Datastore Entity to class java.lang.Object"); + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Unable to convert Datastore Entity to class java.lang.Object"); } @Test @@ -255,12 +260,14 @@ void testWrongTypeReadExceptionList() { .build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(TestDatastoreItem.class, entity)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("Unable to read " - + "com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItem entity") - .hasStackTraceContaining("Unable to read property boolField") - .hasStackTraceContaining("Unable to convert class " - + "com.google.common.collect.SingletonImmutableList to class java.lang.Boolean"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining( + "Unable to read " + + "com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItem entity") + .hasStackTraceContaining("Unable to read property boolField") + .hasStackTraceContaining( + "Unable to convert class " + + "com.google.common.collect.SingletonImmutableList to class java.lang.Boolean"); } @Test @@ -363,11 +370,12 @@ void testUnsupportedTypeWriteException() { Entity.Builder builder = getEntityBuilder(); assertThatThrownBy(() -> ENTITY_CONVERTER.write(item, builder)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("Unable to write testItemUnsupportedFields.unsupportedField") - .hasStackTraceContaining("Unable to convert class " - + "com.google.cloud.spring.data.datastore.core.convert." - + "TestItemUnsupportedFields$NewType to Datastore supported type."); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("Unable to write testItemUnsupportedFields.unsupportedField") + .hasStackTraceContaining( + "Unable to convert class " + + "com.google.cloud.spring.data.datastore.core.convert." + + "TestItemUnsupportedFields$NewType to Datastore supported type."); } @Test @@ -402,7 +410,8 @@ void testUnsupportedTypeWrite() { @Test void testCollectionFieldsUnsupportedCollection() { - ComparableBeanContextSupport comparableBeanContextSupport = new ComparableBeanContextSupport<>(); + ComparableBeanContextSupport comparableBeanContextSupport = + new ComparableBeanContextSupport<>(); comparableBeanContextSupport.add("this implementation of Collection"); comparableBeanContextSupport.add("is unsupported out of the box!"); @@ -420,13 +429,15 @@ void testCollectionFieldsUnsupportedCollection() { Entity entity = builder.build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(TestDatastoreItemCollections.class, entity)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("Unable to read" - + " com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItemCollections" - + " entity") - .hasStackTraceContaining("Unable to read property beanContext") - .hasStackTraceContaining("Failed to convert from type [java.util.ImmutableCollections$ListN] to type" - + " [com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItemCollections$ComparableBeanContextSupport]"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining( + "Unable to read" + + " com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItemCollections" + + " entity") + .hasStackTraceContaining("Unable to read property beanContext") + .hasStackTraceContaining( + "Failed to convert from type [java.util.ImmutableCollections$ListN] to type" + + " [com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItemCollections$ComparableBeanContextSupport]"); } @Test @@ -548,11 +559,12 @@ void testCollectionFieldsUnsupported() { Entity.Builder builder = getEntityBuilder(); assertThatThrownBy(() -> ENTITY_CONVERTER.write(item, builder)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("Unable to write collectionOfUnsupportedTypes.unsupportedElts") - .hasStackTraceContaining("Unable to convert " - + "class com.google.cloud.spring.data.datastore.core.convert." - + "TestItemUnsupportedFields$NewType to Datastore supported type."); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("Unable to write collectionOfUnsupportedTypes.unsupportedElts") + .hasStackTraceContaining( + "Unable to convert " + + "class com.google.cloud.spring.data.datastore.core.convert." + + "TestItemUnsupportedFields$NewType to Datastore supported type."); } @Test @@ -582,7 +594,8 @@ void testCollectionFieldsUnsupportedWriteOnly() { @Test void testCollectionFieldsUnsupportedWriteReadException() { - TestItemUnsupportedFields.CollectionOfUnsupportedTypes item = getCollectionOfUnsupportedTypesItem(); + TestItemUnsupportedFields.CollectionOfUnsupportedTypes item = + getCollectionOfUnsupportedTypesItem(); DatastoreEntityConverter entityConverter = new DefaultDatastoreEntityConverter( @@ -600,14 +613,16 @@ void testCollectionFieldsUnsupportedWriteReadException() { Class parameter = TestItemUnsupportedFields.CollectionOfUnsupportedTypes.class; assertThatThrownBy(() -> entityConverter.read(parameter, entity)) - .hasStackTraceContaining("Unable to read property unsupportedElts") - .hasStackTraceContaining("Unable process elements of a collection") - .hasStackTraceContaining("No converter found capable of converting from type [java.lang.Integer] " - + "to type [com.google.cloud.spring.data.datastore.core.convert." - + "TestItemUnsupportedFields$NewType]") - .hasStackTraceContaining("Unable to read com.google.cloud.spring.data.datastore.core.convert." - + "TestItemUnsupportedFields$CollectionOfUnsupportedTypes entity") - .isInstanceOf(DatastoreDataException.class); + .hasStackTraceContaining("Unable to read property unsupportedElts") + .hasStackTraceContaining("Unable process elements of a collection") + .hasStackTraceContaining( + "No converter found capable of converting from type [java.lang.Integer] " + + "to type [com.google.cloud.spring.data.datastore.core.convert." + + "TestItemUnsupportedFields$NewType]") + .hasStackTraceContaining( + "Unable to read com.google.cloud.spring.data.datastore.core.convert." + + "TestItemUnsupportedFields$CollectionOfUnsupportedTypes entity") + .isInstanceOf(DatastoreDataException.class); } @Test @@ -892,21 +907,25 @@ void privateCustomMapExceptionTest() { @Test void testMismatchedStringIdLongProperty() { - Entity testEntity = Entity.newBuilder(this.datastore.newKeyFactory().setKind("aKind").newKey("a")).build(); + Entity testEntity = + Entity.newBuilder(this.datastore.newKeyFactory().setKind("aKind").newKey("a")).build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(LongIdEntity.class, testEntity)) - .isInstanceOf(ConversionFailedException.class) - .hasStackTraceContaining("The given key doesn't have a numeric ID but a conversion to Long was attempted"); + .isInstanceOf(ConversionFailedException.class) + .hasStackTraceContaining( + "The given key doesn't have a numeric ID but a conversion to Long was attempted"); } @Test void testMismatchedLongIdStringProperty() { - Entity testEntity = Entity.newBuilder(this.datastore.newKeyFactory().setKind("aKind").newKey(1)).build(); + Entity testEntity = + Entity.newBuilder(this.datastore.newKeyFactory().setKind("aKind").newKey(1)).build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(StringIdEntity.class, testEntity)) - .isInstanceOf(ConversionFailedException.class) - .hasStackTraceContaining("The given key doesn't have a String name value but a conversion to String was attempted"); + .isInstanceOf(ConversionFailedException.class) + .hasStackTraceContaining( + "The given key doesn't have a String name value but a conversion to String was attempted"); } private Entity.Builder getEntityBuilder() { diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/EntityPropertyValueProviderTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/EntityPropertyValueProviderTests.java index 19c91d5cc8..99b3152e9b 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/EntityPropertyValueProviderTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/EntityPropertyValueProviderTests.java @@ -126,8 +126,9 @@ void testException() { DatastorePersistentProperty testDpe = this.persistentEntity.getPersistentProperty("boolField"); assertThatThrownBy(() -> provider.getPropertyValue(testDpe)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("Unable to read property boolField") - .hasStackTraceContaining("Unable to convert class java.lang.Long to class java.lang.Boolean"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("Unable to read property boolField") + .hasStackTraceContaining( + "Unable to convert class java.lang.Long to class java.lang.Boolean"); } } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentEntityImplTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentEntityImplTests.java index e15f6a51ad..787c391c50 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentEntityImplTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentEntityImplTests.java @@ -46,8 +46,7 @@ void testTableName() { @Test void testRawTableName() { DatastorePersistentEntityImpl entity = - new DatastorePersistentEntityImpl<>( - TypeInformation.of(EntityNoCustomName.class), null); + new DatastorePersistentEntityImpl<>(TypeInformation.of(EntityNoCustomName.class), null); assertThat(entity.kindName()).isEqualTo("entityNoCustomName"); } @@ -55,8 +54,7 @@ void testRawTableName() { @Test void testEmptyCustomTableName() { DatastorePersistentEntityImpl entity = - new DatastorePersistentEntityImpl<>( - TypeInformation.of(EntityEmptyCustomName.class), null); + new DatastorePersistentEntityImpl<>(TypeInformation.of(EntityEmptyCustomName.class), null); assertThat(entity.kindName()).isEqualTo("entityEmptyCustomName"); } @@ -64,19 +62,17 @@ void testEmptyCustomTableName() { @Test void testExpressionResolutionWithoutApplicationContext() { DatastorePersistentEntityImpl entity = - new DatastorePersistentEntityImpl<>( - TypeInformation.of(EntityWithExpression.class), null); + new DatastorePersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), null); assertThatThrownBy(entity::kindName) - .isInstanceOf(SpelEvaluationException.class) - .hasMessageContaining("Property or field 'kindPostfix' cannot be found on null"); + .isInstanceOf(SpelEvaluationException.class) + .hasMessageContaining("Property or field 'kindPostfix' cannot be found on null"); } @Test void testExpressionResolutionFromApplicationContext() { DatastorePersistentEntityImpl entity = - new DatastorePersistentEntityImpl<>( - TypeInformation.of(EntityWithExpression.class), null); + new DatastorePersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), null); ApplicationContext applicationContext = mock(ApplicationContext.class); when(applicationContext.getBean("kindPostfix")).thenReturn("something"); @@ -102,15 +98,15 @@ void testHasNoIdProperty() { @Test void testGetIdPropertyOrFail() { - DatastorePersistentEntity testEntity = new DatastoreMappingContext().getPersistentEntity(EntityWithNoId.class); + DatastorePersistentEntity testEntity = + new DatastoreMappingContext().getPersistentEntity(EntityWithNoId.class); assertThatThrownBy(testEntity::getIdPropertyOrFail) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("An ID property was required but does not exist for the type: " - + "class com.google.cloud.spring.data.datastore.core.mapping." - + "DatastorePersistentEntityImplTests$EntityWithNoId"); - - + .isInstanceOf(DatastoreDataException.class) + .hasMessage( + "An ID property was required but does not exist for the type: " + + "class com.google.cloud.spring.data.datastore.core.mapping." + + "DatastorePersistentEntityImplTests$EntityWithNoId"); } @Test @@ -164,25 +160,27 @@ void testDiscriminationMetadata() { void testConflictingDiscriminationFieldNames() { assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(DiscrimEntityB.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("This class and its super class both have " - + "discrimination fields but they are different fields: "); - + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining( + "This class and its super class both have " + + "discrimination fields but they are different fields: "); } @Test void testEntityMissingDiscriminationSuperclass() { - DatastorePersistentEntity dpe = this.datastoreMappingContext.getPersistentEntity(TestEntityNoSuperclass.class); + DatastorePersistentEntity dpe = + this.datastoreMappingContext.getPersistentEntity(TestEntityNoSuperclass.class); assertThatThrownBy(() -> dpe.kindName()) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("This class expects a discrimination field but none are designated"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("This class expects a discrimination field but none are designated"); } @Test void testInterfaceProperty() { - DatastorePersistentEntity persistentEntity = new DatastoreMappingContext().getPersistentEntity(EntityWithInterface.class); + DatastorePersistentEntity persistentEntity = + new DatastoreMappingContext().getPersistentEntity(EntityWithInterface.class); assertThat(persistentEntity).isNotNull(); assertThat(persistentEntity.getPersistentProperty("text")).isNotNull(); } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentPropertyImplTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentPropertyImplTests.java index 7504c5ddc1..957156d807 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentPropertyImplTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentPropertyImplTests.java @@ -89,38 +89,52 @@ void testAssociations() { @Test void referenceDescendantAnnotatedTest() { - assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(DescendantReferenceAnnotatedEntity.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Property cannot be annotated both @Descendants and " + "@Reference: subEntity"); + assertThatThrownBy( + () -> + this.datastoreMappingContext.getPersistentEntity( + DescendantReferenceAnnotatedEntity.class)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage( + "Property cannot be annotated both @Descendants and " + "@Reference: subEntity"); } @Test void fieldDescendantAnnotatedTest() { - assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(DescendantFieldAnnotatedEntity.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Property cannot be annotated as @Field if it is " - + "annotated @Descendants or @Reference: name"); + assertThatThrownBy( + () -> + this.datastoreMappingContext.getPersistentEntity( + DescendantFieldAnnotatedEntity.class)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage( + "Property cannot be annotated as @Field if it is " + + "annotated @Descendants or @Reference: name"); } @Test void fieldReferenceAnnotatedTest() { - assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(FieldReferenceAnnotatedEntity.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Property cannot be annotated as @Field if it is " - + "annotated @Descendants or @Reference: name"); - + assertThatThrownBy( + () -> + this.datastoreMappingContext.getPersistentEntity( + FieldReferenceAnnotatedEntity.class)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage( + "Property cannot be annotated as @Field if it is " + + "annotated @Descendants or @Reference: name"); } @Test void fieldReferencedAnnotatedTest() { - assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(FieldReferencedAnnotatedEntity.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Property cannot be annotated as @Field if it is " - + "annotated @Descendants or @Reference: name"); - + assertThatThrownBy( + () -> + this.datastoreMappingContext.getPersistentEntity( + FieldReferencedAnnotatedEntity.class)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage( + "Property cannot be annotated as @Field if it is " + + "annotated @Descendants or @Reference: name"); } @Entity(name = "custom_test_kind") diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/DatastoreIntegrationTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/DatastoreIntegrationTests.java index 9fabfdc68a..b960b7f92b 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/DatastoreIntegrationTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/DatastoreIntegrationTests.java @@ -693,7 +693,8 @@ void ancestorsTest() { void referenceTest() { ReferenceEntity parent = saveReferenceEntitiesGraph(); - ReferenceEntity loadedParent = this.datastoreTemplate.findById(parent.id, ReferenceEntity.class); + ReferenceEntity loadedParent = + this.datastoreTemplate.findById(parent.id, ReferenceEntity.class); assertThat(loadedParent).isEqualTo(parent); parent.name = "parent updated"; @@ -718,7 +719,8 @@ void referenceTest() { void lazyReferenceCollectionTest() { ReferenceLazyEntity parent = saveEntitiesGraph(); - ReferenceLazyEntity lazyParent = this.datastoreTemplate.findById(parent.id, ReferenceLazyEntity.class); + ReferenceLazyEntity lazyParent = + this.datastoreTemplate.findById(parent.id, ReferenceLazyEntity.class); // Saving an entity with not loaded lazy field this.datastoreTemplate.save(lazyParent); @@ -766,7 +768,8 @@ void lazyReferenceTransactionTest() { // Exception should be produced if a lazy loaded property accessed outside of the initial // transaction - ReferenceLazyEntity finalLoadedParent = this.transactionalTemplateService.findByIdLazy(parent.id); + ReferenceLazyEntity finalLoadedParent = + this.transactionalTemplateService.findByIdLazy(parent.id); assertThatThrownBy(() -> finalLoadedParent.children.size()) .isInstanceOf(DatastoreDataException.class) .hasMessage("Lazy load should be invoked within the same transaction"); @@ -1016,8 +1019,6 @@ void sameClassDescendantsTest() { assertThat(readCompany.leaders.get(0).id).isEqualTo(entity1.id); } - - @Test void testPageableGqlEntityProjectionsPage() { Page page = diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/ParallelDatastoreIntegrationTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/ParallelDatastoreIntegrationTests.java index 1fe39482fe..278e544b86 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/ParallelDatastoreIntegrationTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/ParallelDatastoreIntegrationTests.java @@ -40,8 +40,7 @@ class ParallelDatastoreIntegrationTests extends AbstractDatastoreIntegrationTest private static final int PARALLEL_OPERATIONS = 10; - @Autowired - TestEntityRepository testEntityRepository; + @Autowired TestEntityRepository testEntityRepository; @AfterEach void deleteAll() { @@ -51,9 +50,9 @@ void deleteAll() { @Test void testParallelOperations() { performOperation( - x -> - this.testEntityRepository.save( - new TestEntity((long) x, "color", (long) x, null, null))); + x -> + this.testEntityRepository.save( + new TestEntity((long) x, "color", (long) x, null, null))); waitUntilTrue(() -> this.testEntityRepository.count() == PARALLEL_OPERATIONS - 1); diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/subclasses/descendants/testdomains/EntityA.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/subclasses/descendants/testdomains/EntityA.java index 8b47edf6ec..259bf9713a 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/subclasses/descendants/testdomains/EntityA.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/subclasses/descendants/testdomains/EntityA.java @@ -24,8 +24,7 @@ @Entity(name = "A") @DiscriminatorField(field = "type") public abstract class EntityA { - @Id - private Key id; + @Id private Key id; public Key getId() { return id; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/AncestorEntity.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/AncestorEntity.java index 21bb8a255d..d9195b5b0c 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/AncestorEntity.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/AncestorEntity.java @@ -25,13 +25,11 @@ /** An ancestor entity for integration tests. */ public class AncestorEntity { - @Id - public Long id; + @Id public Long id; String name; - @Descendants - public List descendants; + @Descendants public List descendants; public AncestorEntity(String name, List descendants) { this.name = name; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/Event.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/Event.java index fd713d594f..560d160923 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/Event.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/Event.java @@ -23,8 +23,7 @@ @Entity public class Event { - @Id - private String eventName; + @Id private String eventName; private Map preferences; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/LazyEntity.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/LazyEntity.java index 75e738cc05..c7a1ddc757 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/LazyEntity.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/LazyEntity.java @@ -23,8 +23,7 @@ @Entity public class LazyEntity { - @Id - public Long id; + @Id public Long id; @LazyReference LazyEntity lazyChild; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/ReferenceLazyEntity.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/ReferenceLazyEntity.java index 5470c1d3cb..0dbaf03f1a 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/ReferenceLazyEntity.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/ReferenceLazyEntity.java @@ -34,7 +34,8 @@ public class ReferenceLazyEntity { @LazyReference public List children; - public ReferenceLazyEntity(String name, ReferenceLazyEntity sibling, List children) { + public ReferenceLazyEntity( + String name, ReferenceLazyEntity sibling, List children) { this.name = name; this.sibling = sibling; this.children = children; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java index 5ee49ebbae..5b9e709e50 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java @@ -87,7 +87,8 @@ void resolveSqlQueryTest() { when(namedQueries.hasQuery(queryName)).thenReturn(true); when(namedQueries.getQuery(queryName)).thenReturn(query); - when(valueExpressionDelegate.getEvaluationContextAccessor()).thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); + when(valueExpressionDelegate.getEvaluationContextAccessor()) + .thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); this.datastoreQueryLookupStrategy.resolveQuery(null, null, null, namedQueries); diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java index cf50260495..ff7ea3c998 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java @@ -105,7 +105,8 @@ void initMocks() { .thenReturn(this.datastoreEntityConverter); when(this.datastoreEntityConverter.getConversions()).thenReturn(this.readWriteConversions); this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); - when(valueExpressionDelegate.getEvaluationContextAccessor()).thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); + when(valueExpressionDelegate.getEvaluationContextAccessor()) + .thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); } private GqlDatastoreQuery createQuery( diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/PartTreeDatastoreQueryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/PartTreeDatastoreQueryTests.java index f7a180bd73..f4290426c9 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/PartTreeDatastoreQueryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/PartTreeDatastoreQueryTests.java @@ -83,14 +83,14 @@ class PartTreeDatastoreQueryTests { private static final Object[] EMPTY_PARAMETERS = new Object[0]; private static final DatastoreResultsIterable EMPTY_RESPONSE = - new DatastoreResultsIterable<>(Collections.emptyIterator(), null); + new DatastoreResultsIterable<>(Collections.emptyIterator(), null); static final CompositeFilter FILTER = - CompositeFilter.and( - PropertyFilter.eq("action", "BUY"), - PropertyFilter.eq("ticker", "abcd"), - PropertyFilter.lt("price", 8.88), - PropertyFilter.ge("price", 3.33), - PropertyFilter.isNull("__key__")); + CompositeFilter.and( + PropertyFilter.eq("action", "BUY"), + PropertyFilter.eq("ticker", "abcd"), + PropertyFilter.lt("price", 8.88), + PropertyFilter.ge("price", 3.33), + PropertyFilter.isNull("__key__")); private DatastoreTemplate datastoreTemplate; @@ -112,36 +112,36 @@ void initMocks() { this.datastoreMappingContext = new DatastoreMappingContext(); this.datastoreEntityConverter = mock(DatastoreEntityConverter.class); this.readWriteConversions = - new TwoStepsConversions( - new DatastoreCustomConversions(), null, this.datastoreMappingContext); + new TwoStepsConversions( + new DatastoreCustomConversions(), null, this.datastoreMappingContext); when(this.datastoreTemplate.getDatastoreEntityConverter()) - .thenReturn(this.datastoreEntityConverter); + .thenReturn(this.datastoreEntityConverter); when(this.datastoreEntityConverter.getConversions()).thenReturn(this.readWriteConversions); } private PartTreeDatastoreQuery createQuery( - boolean isPageQuery, boolean isSliceQuery, ProjectionInformation projectionInformation) { + boolean isPageQuery, boolean isSliceQuery, ProjectionInformation projectionInformation) { ProjectionFactory projectionFactory = mock(ProjectionFactory.class); doReturn(projectionInformation != null ? projectionInformation : getProjectionInformationMock()) - .when(projectionFactory) - .getProjectionInformation(any()); + .when(projectionFactory) + .getProjectionInformation(any()); PartTreeDatastoreQuery tradePartTreeDatastoreQuery = - new PartTreeDatastoreQuery<>( - this.queryMethod, - this.datastoreTemplate, - this.datastoreMappingContext, - Trade.class, - projectionFactory); + new PartTreeDatastoreQuery<>( + this.queryMethod, + this.datastoreTemplate, + this.datastoreMappingContext, + Trade.class, + projectionFactory); PartTreeDatastoreQuery spy = spy(tradePartTreeDatastoreQuery); doReturn(isPageQuery).when(spy).isPageQuery(); doReturn(isSliceQuery).when(spy).isSliceQuery(); doAnswer(invocation -> invocation.getArguments()[0]) - .when(spy) - .processRawObjectForProjection(any()); + .when(spy) + .processRawObjectForProjection(any()); doAnswer(invocation -> invocation.getArguments()[0]) - .when(spy) - .convertResultCollection(any(), isNotNull()); + .when(spy) + .convertResultCollection(any(), isNotNull()); return spy; } @@ -155,19 +155,19 @@ private ProjectionInformation getProjectionInformationMock() { @Test void compoundNameConventionTest() throws NoSuchMethodException { queryWithMockResult( - "findTop333ByActionAndSymbolAndPriceLessThan" - + "AndPriceGreaterThanEqual" - + "AndEmbeddedEntityStringFieldEquals" - + "AndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - String.class)); + "findTop333ByActionAndSymbolAndPriceLessThan" + + "AndPriceGreaterThanEqual" + + "AndEmbeddedEntityStringFieldEquals" + + "AndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + String.class)); Object[] params = new Object[] { @@ -180,29 +180,29 @@ void compoundNameConventionTest() throws NoSuchMethodException { }; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); - - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter( - CompositeFilter.and( - PropertyFilter.eq("action", "BUY"), - PropertyFilter.eq("ticker", "abcd"), - PropertyFilter.lt("price", 8L), - PropertyFilter.ge("price", 3.33), - PropertyFilter.eq("embeddedEntity.stringField", "abc"), - PropertyFilter.isNull("__key__"))) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(333) - .build(); - - assertThat(statement).isEqualTo(expected); - - return EMPTY_RESPONSE; - }); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); + + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter( + CompositeFilter.and( + PropertyFilter.eq("action", "BUY"), + PropertyFilter.eq("ticker", "abcd"), + PropertyFilter.lt("price", 8L), + PropertyFilter.ge("price", 3.33), + PropertyFilter.eq("embeddedEntity.stringField", "abc"), + PropertyFilter.isNull("__key__"))) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(333) + .build(); + + assertThat(statement).isEqualTo(expected); + + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -211,65 +211,68 @@ void compoundNameConventionTest() throws NoSuchMethodException { } @Test - void compoundNameConventionProjectionTest() - throws NoSuchMethodException, IntrospectionException { + void compoundNameConventionProjectionTest() throws NoSuchMethodException, IntrospectionException { ProjectionInformation projectionInformation = mock(ProjectionInformation.class); doReturn(TradeProjection.class).when(projectionInformation).getType(); doReturn(true).when(projectionInformation).isClosed(); doReturn( Arrays.asList( - new PropertyDescriptor("id", null, null), - new PropertyDescriptor("symbol", null, null))) - .when(projectionInformation) - .getInputProperties(); + new PropertyDescriptor("id", null, null), + new PropertyDescriptor("symbol", null, null))) + .when(projectionInformation) + .getInputProperties(); queryWithMockResult( - "findTop333ByActionAndSymbolAndPriceLessThan" - + "AndPriceGreaterThanEqual" - + "AndEmbeddedEntityStringFieldEquals" - + "AndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethodProjection", - String.class, - String.class, - double.class, - double.class, - String.class), - projectionInformation); + "findTop333ByActionAndSymbolAndPriceLessThan" + + "AndPriceGreaterThanEqual" + + "AndEmbeddedEntityStringFieldEquals" + + "AndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethodProjection", + String.class, + String.class, + double.class, + double.class, + String.class), + projectionInformation); Object[] params = - new Object[] {"BUY", "abcd", - // this int param requires custom conversion - 8, 3.33, "abc" - }; + new Object[] { + "BUY", + "abcd", + // this int param requires custom conversion + 8, + 3.33, + "abc" + }; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - StructuredQuery statement = invocation.getArgument(0); - - StructuredQuery expected = - StructuredQuery.newProjectionEntityQueryBuilder() - .addProjection("__key__", "ticker") - .setFilter( - CompositeFilter.and( - PropertyFilter.eq("action", "BUY"), - PropertyFilter.eq("ticker", "abcd"), - PropertyFilter.lt("price", 8L), - PropertyFilter.ge("price", 3.33), - PropertyFilter.eq("embeddedEntity.stringField", "abc"), - PropertyFilter.isNull("__key__"))) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(333) - .build(); - - assertThat(statement).isEqualTo(expected); - - return EMPTY_RESPONSE; - }); + .thenAnswer( + invocation -> { + StructuredQuery statement = invocation.getArgument(0); + + StructuredQuery expected = + StructuredQuery.newProjectionEntityQueryBuilder() + .addProjection("__key__", "ticker") + .setFilter( + CompositeFilter.and( + PropertyFilter.eq("action", "BUY"), + PropertyFilter.eq("ticker", "abcd"), + PropertyFilter.lt("price", 8L), + PropertyFilter.ge("price", 3.33), + PropertyFilter.eq("embeddedEntity.stringField", "abc"), + PropertyFilter.isNull("__key__"))) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(333) + .build(); + + assertThat(statement).isEqualTo(expected); + + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -280,40 +283,41 @@ void compoundNameConventionProjectionTest() @Test void ambiguousSortPageableParam() throws NoSuchMethodException { queryWithMockResult( - "findTop333ByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findTop333ByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 444, Sort.Direction.ASC, "price") - }; + new Object[] { + "BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 444, Sort.Direction.ASC, "price") + }; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOffset(444) - .setLimit(444) - .setOrderBy(OrderBy.desc("__key__"), OrderBy.asc("price")) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOffset(444) + .setLimit(444) + .setOrderBy(OrderBy.desc("__key__"), OrderBy.asc("price")) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -324,37 +328,37 @@ void ambiguousSortPageableParam() throws NoSuchMethodException { @Test void nullPageable() throws NoSuchMethodException { queryWithMockResult( - "findTop333ByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findTop333ByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); Object[] params = new Object[] {"BUY", "abcd", 8.88, 3.33, null}; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setLimit(333) - .setOrderBy(OrderBy.desc("__key__")) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setLimit(333) + .setOrderBy(OrderBy.desc("__key__")) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -365,32 +369,32 @@ void nullPageable() throws NoSuchMethodException { @Test void ambiguousSort() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Direction.ASC, "price")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Direction.ASC, "price")}; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__"), OrderBy.asc("price")) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__"), OrderBy.asc("price")) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -401,31 +405,31 @@ void ambiguousSort() throws NoSuchMethodException { @Test void nullSort() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); Object[] params = new Object[] {"BUY", "abcd", 8.88, 3.33, null}; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__")) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__")) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -436,74 +440,73 @@ void nullSort() throws NoSuchMethodException { @Test void caseInsensitiveSort() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Order.by("price").ignoreCase())}; + new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Order.by("price").ignoreCase())}; assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) - .hasMessage("Datastore doesn't support sorting ignoring case"); + .hasMessage("Datastore doesn't support sorting ignoring case"); } @Test void caseNullHandlingSort() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Order.by("price").nullsFirst())}; - + new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Order.by("price").nullsFirst())}; assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) - .hasMessage("Datastore supports only NullHandling.NATIVE null handling"); + .hasMessage("Datastore supports only NullHandling.NATIVE null handling"); } @Test void pageableParam() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 444, Sort.Direction.DESC, "id")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 444, Sort.Direction.DESC, "id")}; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOffset(444) - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(444) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOffset(444) + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(444) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -514,21 +517,21 @@ void pageableParam() throws NoSuchMethodException { @Test void pageableQuery() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); this.partTreeDatastoreQuery = createQuery(true, false, null); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 2, Sort.Direction.DESC, "id")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 2, Sort.Direction.DESC, "id")}; preparePageResults(2, 2, null, Arrays.asList(3, 4), Arrays.asList(1, 2, 3, 4)); @@ -547,23 +550,23 @@ void pageableQuery() throws NoSuchMethodException { @Test void pageableQueryNextPage() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); this.partTreeDatastoreQuery = createQuery(true, false, null); PageRequest pageRequest = PageRequest.of(1, 2, Sort.Direction.DESC, "id"); Cursor cursor = Cursor.copyFrom("abc".getBytes()); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, DatastorePageable.from(pageRequest, cursor, 99L)}; + new Object[] {"BUY", "abcd", 8.88, 3.33, DatastorePageable.from(pageRequest, cursor, 99L)}; preparePageResults(2, 2, cursor, Arrays.asList(3, 4), Arrays.asList(1, 2, 3, 4)); @@ -580,11 +583,11 @@ void pageableQueryNextPage() throws NoSuchMethodException { @Test void pageableQueryMissingPageableParamReturnsAllResults() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod("tradeMethod", String.class, String.class, double.class, double.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod("tradeMethod", String.class, String.class, double.class, double.class)); this.partTreeDatastoreQuery = createQuery(true, false, null); @@ -606,21 +609,21 @@ void pageableQueryMissingPageableParamReturnsAllResults() throws NoSuchMethodExc @Test void sliceQueryLast() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); this.partTreeDatastoreQuery = createQuery(false, true, null); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 2, Sort.Direction.DESC, "id")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 2, Sort.Direction.DESC, "id")}; prepareSliceResults(2, 2, true); @@ -635,11 +638,11 @@ void sliceQueryLast() throws NoSuchMethodException { @Test void sliceQueryNoPageableParam() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod("tradeMethod", String.class, String.class, double.class, double.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod("tradeMethod", String.class, String.class, double.class, double.class)); this.partTreeDatastoreQuery = createQuery(false, true, null); @@ -653,27 +656,27 @@ void sliceQueryNoPageableParam() throws NoSuchMethodException { assertThat(result.hasNext()).isFalse(); verify(this.datastoreTemplate, times(1)) - .queryEntitiesSlice(isA(EntityQuery.class), any(), any()); + .queryEntitiesSlice(isA(EntityQuery.class), any(), any()); } @Test void sliceQuery() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); this.partTreeDatastoreQuery = createQuery(false, true, null); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(0, 2, Sort.Direction.DESC, "id")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(0, 2, Sort.Direction.DESC, "id")}; prepareSliceResults(0, 2, false); @@ -683,80 +686,80 @@ void sliceQuery() throws NoSuchMethodException { assertThat(result.hasNext()).isFalse(); verify(this.datastoreTemplate, times(1)) - .queryEntitiesSlice(isA(EntityQuery.class), any(), any()); + .queryEntitiesSlice(isA(EntityQuery.class), any(), any()); } private void preparePageResults( - int offset, - Integer limit, - Cursor cursor, - List pageResults, - List fullResults) { + int offset, + Integer limit, + Cursor cursor, + List pageResults, + List fullResults) { when(this.datastoreTemplate.queryKeysOrEntities(isA(EntityQuery.class), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setStartCursor(cursor) - .setOffset(cursor != null ? 0 : offset) - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(limit) - .build(); - - assertThat(statement).isEqualTo(expected); - return new DatastoreResultsIterable( - pageResults.iterator(), Cursor.copyFrom("abc".getBytes())); - }); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setStartCursor(cursor) + .setOffset(cursor != null ? 0 : offset) + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(limit) + .build(); + + assertThat(statement).isEqualTo(expected); + return new DatastoreResultsIterable( + pageResults.iterator(), Cursor.copyFrom("abc".getBytes())); + }); when(this.datastoreTemplate.queryKeysOrEntities(isA(KeyQuery.class), any())) - .thenAnswer( - invocation -> { - KeyQuery statement = invocation.getArgument(0); - KeyQuery expected = - StructuredQuery.newKeyQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__")) - .build(); - - assertThat(statement).isEqualTo(expected); - return new DatastoreResultsIterable( - fullResults.iterator(), Cursor.copyFrom("def".getBytes())); - }); + .thenAnswer( + invocation -> { + KeyQuery statement = invocation.getArgument(0); + KeyQuery expected = + StructuredQuery.newKeyQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__")) + .build(); + + assertThat(statement).isEqualTo(expected); + return new DatastoreResultsIterable( + fullResults.iterator(), Cursor.copyFrom("def".getBytes())); + }); } private void prepareSliceResults(int offset, Integer queryLimit, Boolean hasNext) { Cursor cursor = Cursor.copyFrom("abc".getBytes()); List datastoreMatchingRecords = Arrays.asList(3, 4, 5); when(this.datastoreTemplate.queryEntitiesSlice(isA(EntityQuery.class), any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOffset(offset) - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(queryLimit) - .build(); - - assertThat(statement).isEqualTo(expected); - return new SliceImpl( - new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor) - .toList(), - Pageable.unpaged(), - hasNext); - }); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOffset(offset) + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(queryLimit) + .build(); + + assertThat(statement).isEqualTo(expected); + return new SliceImpl( + new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor) + .toList(), + Pageable.unpaged(), + hasNext); + }); } @Test void deleteTest() throws NoSuchMethodException { queryWithMockResult( - "deleteByAction", null, getClass().getMethod("countByAction", String.class)); + "deleteByAction", null, getClass().getMethod("countByAction", String.class)); this.partTreeDatastoreQuery = createQuery(false, false, null); @@ -778,7 +781,7 @@ void deleteTest() throws NoSuchMethodException { @Test void deleteReturnCollectionTest() throws NoSuchMethodException { queryWithMockResult( - "deleteByAction", null, getClass().getMethod("countByAction", String.class)); + "deleteByAction", null, getClass().getMethod("countByAction", String.class)); this.partTreeDatastoreQuery = createQuery(false, false, null); @@ -802,39 +805,40 @@ private void prepareDeleteResults(boolean isCollection) { Cursor cursor = Cursor.copyFrom("abc".getBytes()); List datastoreMatchingRecords = Arrays.asList(3, 4, 5); when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - StructuredQuery statement = invocation.getArgument(0); - StructuredQuery.Builder builder = - isCollection - ? StructuredQuery.newEntityQueryBuilder() - : StructuredQuery.newKeyQueryBuilder(); - StructuredQuery expected = - builder.setFilter(PropertyFilter.eq("action", "BUY")).setKind("trades").build(); - - assertThat(statement).isEqualTo(expected); - return new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor); - }); + .thenAnswer( + invocation -> { + StructuredQuery statement = invocation.getArgument(0); + StructuredQuery.Builder builder = + isCollection + ? StructuredQuery.newEntityQueryBuilder() + : StructuredQuery.newKeyQueryBuilder(); + StructuredQuery expected = + builder.setFilter(PropertyFilter.eq("action", "BUY")).setKind("trades").build(); + + assertThat(statement).isEqualTo(expected); + return new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor); + }); } @Test void unspecifiedParametersTest() throws NoSuchMethodException { queryWithMockResult( - "countByTraderIdBetween", null, getClass().getMethod("countByAction", String.class)); + "countByTraderIdBetween", null, getClass().getMethod("countByAction", String.class)); when(this.queryMethod.getName()) - .thenReturn( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc"); + .thenReturn( + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc"); this.partTreeDatastoreQuery = createQuery(false, false, null); // There are too few params specified, so the exception will occur. Object[] params = new Object[] {"BUY"}; assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) - .hasMessage("Too few parameters are provided for query method: " - + "findByActionAndSymbolAndPriceLessThanAndPriceGreaterThanEqualAndIdIsNullOrderByIdDesc"); + .hasMessage( + "Too few parameters are provided for query method: " + + "findByActionAndSymbolAndPriceLessThanAndPriceGreaterThanEqualAndIdIsNullOrderByIdDesc"); } @Test @@ -846,10 +850,11 @@ void unsupportedParamTypeTest() throws NoSuchMethodException { Object[] params = new Object[] {new Trade()}; - assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) - .hasMessage("Unable to convert class " - + "com.google.cloud.spring.data.datastore.repository.query." - + "PartTreeDatastoreQueryTests$Trade to Datastore supported type."); + assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) + .hasMessage( + "Unable to convert class " + + "com.google.cloud.spring.data.datastore.repository.query." + + "PartTreeDatastoreQueryTests$Trade to Datastore supported type."); } @Test @@ -859,17 +864,17 @@ void unSupportedPredicateTest() throws NoSuchMethodException { this.partTreeDatastoreQuery = createQuery(false, false, null); assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(EMPTY_PARAMETERS)) - .hasMessageContaining("Unsupported predicate keyword: BETWEEN"); - - + .hasMessageContaining("Unsupported predicate keyword: BETWEEN"); } @Test void unSupportedOrTest() { - //PartTreeDatastoreQuery constructor will fail as part of queryWithMockResult setup - assertThatThrownBy(() -> queryWithMockResult("countByTraderIdOrPrice", null, getClass().getMethod("traderAndPrice"))) - .hasMessage("Cloud Datastore only supports multiple filters combined with AND."); - + // PartTreeDatastoreQuery constructor will fail as part of queryWithMockResult setup + assertThatThrownBy( + () -> + queryWithMockResult( + "countByTraderIdOrPrice", null, getClass().getMethod("traderAndPrice"))) + .hasMessage("Cloud Datastore only supports multiple filters combined with AND."); } @Test @@ -878,12 +883,14 @@ void countTest() throws NoSuchMethodException { results.add(new Trade()); queryWithMockResult( - "countByAction", results, getClass().getMethod("countByAction", String.class)); + "countByAction", results, getClass().getMethod("countByAction", String.class)); PartTreeDatastoreQuery spyQuery = this.partTreeDatastoreQuery; Object[] params = - new Object[] {"BUY", }; + new Object[] { + "BUY", + }; assertThat(spyQuery.execute(params)).isEqualTo(1L); } @@ -893,34 +900,38 @@ void existShouldBeTrueWhenResultSetIsNotEmpty() throws NoSuchMethodException { results.add(new Trade()); queryWithMockResult( - "existsByAction", results, getClass().getMethod("countByAction", String.class)); + "existsByAction", results, getClass().getMethod("countByAction", String.class)); PartTreeDatastoreQuery spyQuery = this.partTreeDatastoreQuery; doAnswer(invocation -> invocation.getArgument(0)) - .when(spyQuery) - .processRawObjectForProjection(any()); + .when(spyQuery) + .processRawObjectForProjection(any()); Object[] params = - new Object[] {"BUY", }; + new Object[] { + "BUY", + }; assertThat((boolean) spyQuery.execute(params)).isTrue(); } @Test void existShouldBeFalseWhenResultSetIsEmpty() throws NoSuchMethodException { queryWithMockResult( - "existsByAction", - Collections.emptyList(), - getClass().getMethod("countByAction", String.class)); + "existsByAction", + Collections.emptyList(), + getClass().getMethod("countByAction", String.class)); PartTreeDatastoreQuery spyQuery = this.partTreeDatastoreQuery; doAnswer(invocation -> invocation.getArgument(0)) - .when(spyQuery) - .processRawObjectForProjection(any()); + .when(spyQuery) + .processRawObjectForProjection(any()); Object[] params = - new Object[] {"BUY", }; + new Object[] { + "BUY", + }; assertThat((boolean) spyQuery.execute(params)).isFalse(); } @@ -928,28 +939,30 @@ void existShouldBeFalseWhenResultSetIsEmpty() throws NoSuchMethodException { void nonCollectionReturnType() throws NoSuchMethodException { Trade trade = new Trade(); queryWithMockResult( - "findByAction", null, getClass().getMethod("findByAction", String.class), true, null); + "findByAction", null, getClass().getMethod("findByAction", String.class), true, null); Object[] params = - new Object[] {"BUY", }; + new Object[] { + "BUY", + }; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(PropertyFilter.eq("action", "BUY")) - .setKind("trades") - .setLimit(1) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(PropertyFilter.eq("action", "BUY")) + .setKind("trades") + .setLimit(1) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - List results = Collections.singletonList(trade); - return new DatastoreResultsIterable(results.iterator(), null); - }); + List results = Collections.singletonList(trade); + return new DatastoreResultsIterable(results.iterator(), null); + }); assertThat(this.partTreeDatastoreQuery.execute(params)).isEqualTo(trade); } @@ -958,41 +971,41 @@ void nonCollectionReturnType() throws NoSuchMethodException { void usingIdField() throws NoSuchMethodException { Trade trade = new Trade(); queryWithMockResult( - "findByActionAndId", - null, - getClass().getMethod("findByActionAndId", String.class, String.class), - true, - null); + "findByActionAndId", + null, + getClass().getMethod("findByActionAndId", String.class, String.class), + true, + null); Object[] params = new Object[] {"BUY", "id1"}; when(this.datastoreTemplate.createKey("trades", "id1")) - .thenAnswer( - invocation -> - Key.newBuilder("project", invocation.getArgument(0), invocation.getArgument(1)) - .build()); + .thenAnswer( + invocation -> + Key.newBuilder("project", invocation.getArgument(0), invocation.getArgument(1)) + .build()); when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); - - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter( - CompositeFilter.and( - PropertyFilter.eq("action", "BUY"), - PropertyFilter.eq( - "__key__", - KeyValue.of(Key.newBuilder("project", "trades", "id1").build())))) - .setKind("trades") - .setLimit(1) - .build(); - - assertThat(statement).isEqualTo(expected); - - List results = Collections.singletonList(trade); - return new DatastoreResultsIterable(results.iterator(), null); - }); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); + + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter( + CompositeFilter.and( + PropertyFilter.eq("action", "BUY"), + PropertyFilter.eq( + "__key__", + KeyValue.of(Key.newBuilder("project", "trades", "id1").build())))) + .setKind("trades") + .setLimit(1) + .build(); + + assertThat(statement).isEqualTo(expected); + + List results = Collections.singletonList(trade); + return new DatastoreResultsIterable(results.iterator(), null); + }); assertThat(this.partTreeDatastoreQuery.execute(params)).isEqualTo(trade); } @@ -1000,28 +1013,32 @@ void usingIdField() throws NoSuchMethodException { @Test void nonCollectionReturnTypeNoResultsNullable() throws NoSuchMethodException { queryWithMockResult( - "findByAction", - Collections.emptyList(), - getClass().getMethod("findByActionNullable", String.class), - true, - null); + "findByAction", + Collections.emptyList(), + getClass().getMethod("findByActionNullable", String.class), + true, + null); Object[] params = - new Object[] {"BUY", }; + new Object[] { + "BUY", + }; assertThat(this.partTreeDatastoreQuery.execute(params)).isNull(); } @Test void nonCollectionReturnTypeNoResultsOptional() throws NoSuchMethodException { queryWithMockResult( - "findByAction", - Collections.emptyList(), - getClass().getMethod("findByActionOptional", String.class), - true, - null); + "findByAction", + Collections.emptyList(), + getClass().getMethod("findByActionOptional", String.class), + true, + null); Object[] params = - new Object[] {"BUY", }; + new Object[] { + "BUY", + }; assertThat((Optional) this.partTreeDatastoreQuery.execute(params)).isNotPresent(); } @@ -1032,19 +1049,21 @@ void streamResultTest() throws NoSuchMethodException { Trade tradeB = new Trade(); tradeB.id = "b"; queryWithMockResult( - "findStreamByAction", - Arrays.asList(tradeA, tradeB), - getClass().getMethod("findStreamByAction", String.class)); + "findStreamByAction", + Arrays.asList(tradeA, tradeB), + getClass().getMethod("findStreamByAction", String.class)); when(this.queryMethod.isStreamQuery()).thenReturn(true); Object[] params = - new Object[] {"BUY", }; + new Object[] { + "BUY", + }; Object result = this.partTreeDatastoreQuery.execute(params); assertThat(result).isInstanceOf(Stream.class); assertThat((Stream) result).hasSize(2).contains(tradeA, tradeB); } private void queryWithMockResult( - String queryName, List results, Method m, ProjectionInformation projectionInformation) { + String queryName, List results, Method m, ProjectionInformation projectionInformation) { queryWithMockResult(queryName, results, m, false, projectionInformation); } @@ -1053,11 +1072,11 @@ private void queryWithMockResult(String queryName, List results, Method m) { } private void queryWithMockResult( - String queryName, - List results, - Method m, - boolean mockOptionalNullable, - ProjectionInformation projectionInformation) { + String queryName, + List results, + Method m, + boolean mockOptionalNullable, + ProjectionInformation projectionInformation) { when(this.queryMethod.getName()).thenReturn(queryName); doReturn(new DefaultParameters(ParametersSource.of(m))).when(this.queryMethod).getParameters(); if (mockOptionalNullable) { @@ -1066,18 +1085,18 @@ private void queryWithMockResult( doReturn(TypeInformation.fromReturnTypeOf(m)).when(mockMetadata).getReturnType(m); doReturn(TypeInformation.fromReturnTypeOf(m)).when(mockMetadata).getDomainTypeInformation(); DatastoreQueryMethod datastoreQueryMethod = - new DatastoreQueryMethod(m, mockMetadata, mock(SpelAwareProxyProjectionFactory.class)); + new DatastoreQueryMethod(m, mockMetadata, mock(SpelAwareProxyProjectionFactory.class)); doReturn(datastoreQueryMethod.isOptionalReturnType()) - .when(this.queryMethod) - .isOptionalReturnType(); + .when(this.queryMethod) + .isOptionalReturnType(); doReturn(datastoreQueryMethod.isNullable()).when(this.queryMethod).isNullable(); } this.partTreeDatastoreQuery = createQuery(false, false, projectionInformation); when(this.datastoreTemplate.queryKeysOrEntities(any(), Mockito.>any())) - .thenReturn( - new DatastoreResultsIterable<>( - results != null ? results.iterator() : Collections.emptyIterator(), null)); + .thenReturn( + new DatastoreResultsIterable<>( + results != null ? results.iterator() : Collections.emptyIterator(), null)); } public Trade findByAction(String action) { @@ -1103,12 +1122,12 @@ public Optional findByActionOptional(String action) { } public List tradeMethod( - String action, String symbol, double pless, double pgreater, String embeddedProperty) { + String action, String symbol, double pless, double pgreater, String embeddedProperty) { return null; } public List tradeMethodProjection( - String action, String symbol, double pless, double pgreater, String embeddedProperty) { + String action, String symbol, double pless, double pgreater, String embeddedProperty) { return null; } @@ -1117,12 +1136,12 @@ public List tradeMethod(String action, String symbol, double pless, doubl } public List tradeMethod( - String action, String symbol, double pless, double pgreater, Pageable pageable) { + String action, String symbol, double pless, double pgreater, Pageable pageable) { return null; } public List tradeMethod( - String action, String symbol, double pless, double pgreater, Sort sort) { + String action, String symbol, double pless, double pgreater, Sort sort) { return null; } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactoryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactoryTests.java index 02cf66b353..aaf1374e27 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactoryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactoryTests.java @@ -66,9 +66,10 @@ void getEntityInformationNotAvailableTest() { new DatastoreRepositoryFactory(mock(DatastoreMappingContext.class), this.datastoreTemplate); assertThatThrownBy(() -> factory.getEntityInformation(TestEntity.class)) - .isInstanceOf(MappingException.class) - .hasMessage("Could not lookup mapping metadata for domain class: com.google.cloud.spring.data.datastore.repository.support." - + "DatastoreRepositoryFactoryTests$TestEntity"); + .isInstanceOf(MappingException.class) + .hasMessage( + "Could not lookup mapping metadata for domain class: com.google.cloud.spring.data.datastore.repository.support." + + "DatastoreRepositoryFactoryTests$TestEntity"); } @Test diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/SimpleDatastoreRepositoryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/SimpleDatastoreRepositoryTests.java index 3cce9a9723..1f50128f80 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/SimpleDatastoreRepositoryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/SimpleDatastoreRepositoryTests.java @@ -304,12 +304,11 @@ void findAllByExamplePageCursor() { @Test void findAllByExamplePageNull() { - Example example = Example.of(new Object()); - - assertThatThrownBy(() -> this.simpleDatastoreRepository.findAll(example, (Pageable) null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null pageable is required."); + Example example = Example.of(new Object()); + assertThatThrownBy(() -> this.simpleDatastoreRepository.findAll(example, (Pageable) null)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null pageable is required."); } @Test @@ -496,15 +495,19 @@ void findByExampleFluentQueryAsUnsupported() { Example example = Example.of(new Object()); - assertThatThrownBy(() -> this.simpleDatastoreRepository.findBy(example, q -> q.as(Object.class).all())) - .isInstanceOf(UnsupportedOperationException.class); + assertThatThrownBy( + () -> this.simpleDatastoreRepository.findBy(example, q -> q.as(Object.class).all())) + .isInstanceOf(UnsupportedOperationException.class); } @Test void findByExampleFluentQueryProjectUnsupported() { Example example = Example.of(new Object()); - assertThatThrownBy(() -> this.simpleDatastoreRepository.findBy(example, q -> q.project("firstProperty").all())) - .isInstanceOf(UnsupportedOperationException.class); + assertThatThrownBy( + () -> + this.simpleDatastoreRepository.findBy( + example, q -> q.project("firstProperty").all())) + .isInstanceOf(UnsupportedOperationException.class); } } diff --git a/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml b/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml index 7165b73e09..135030d329 100644 --- a/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml +++ b/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml @@ -1,13 +1,13 @@ # For running the ITs in local setups: `cd` into this folder and run `gcloud datastore indexes create index.yaml` indexes: -- kind: test_entities_ci - properties: - - name: size - - name: color + - kind: test_entities_ci + properties: + - name: size + - name: color -- kind: test_entities_ci - properties: - - name: color - - name: __key__ - direction: desc \ No newline at end of file + - kind: test_entities_ci + properties: + - name: color + - name: __key__ + direction: desc \ No newline at end of file diff --git a/spring-cloud-gcp-data-datastore/src/test/resources/logback-test.xml b/spring-cloud-gcp-data-datastore/src/test/resources/logback-test.xml index 5535de3c96..b36b736af4 100644 --- a/spring-cloud-gcp-data-datastore/src/test/resources/logback-test.xml +++ b/spring-cloud-gcp-data-datastore/src/test/resources/logback-test.xml @@ -1,14 +1,14 @@ - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + - - - + + + diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java index d9faf41745..0f5752f85c 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java @@ -164,7 +164,8 @@ private void verifyChildHasParentId( Iterator childKeyParts = this.spannerSchemaUtils.getKey(childObject).getParts().iterator(); int partNum = 1; while (parentKeyParts.hasNext()) { - if (!childKeyParts.hasNext() || !Objects.equals(parentKeyParts.next(), childKeyParts.next())) { + if (!childKeyParts.hasNext() + || !Objects.equals(parentKeyParts.next(), childKeyParts.next())) { throw new SpannerDataException( "A child entity's common primary key parts with its parent must " + "have the same values. Primary key component " diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplate.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplate.java index efc0184629..ecf835d821 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplate.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplate.java @@ -43,7 +43,7 @@ public class SpannerDatabaseAdminTemplate { private static final String TABLE_SCHEMA_COL_NAME = "table_schema"; - + private static final String TABLE_NAME_COL_NAME = "table_name"; private static final String PARENT_TABLE_NAME_COL_NAME = "parent_table_name"; @@ -158,8 +158,7 @@ public Map getChildParentTablesMap() { Struct row = results.getCurrentRowAsStruct(); relationships.put( getQualifiedTableName( - row.getString(TABLE_SCHEMA_COL_NAME), - row.getString(TABLE_NAME_COL_NAME)), + row.getString(TABLE_SCHEMA_COL_NAME), row.getString(TABLE_NAME_COL_NAME)), row.isNull(PARENT_TABLE_NAME_COL_NAME) ? null : getQualifiedTableName( @@ -171,14 +170,14 @@ public Map getChildParentTablesMap() { return relationships; } } - + private String getQualifiedTableName(String schema, String table) { if (schema == null || Objects.equals(schema, getDefaultSchemaName())) { return table; } return schema + "." + table; } - + private String getDefaultSchemaName() { // TODO: Get the default schema directly from the dialect when this is supported in the Spanner // Java client. diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityReader.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityReader.java index ed42f46fd4..71d5e3e6e0 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityReader.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityReader.java @@ -70,7 +70,8 @@ public R read( SpannerPersistentEntity persistentEntity = (SpannerPersistentEntity) this.spannerMappingContext.getPersistentEntityOrFail(type); - StructAccessor structAccessor = new StructAccessor(source, this.spannerMappingContext.getGson()); + StructAccessor structAccessor = + new StructAccessor(source, this.spannerMappingContext.getGson()); StructPropertyValueProvider propertyValueProvider = new StructPropertyValueProvider(structAccessor, this.converter, this, allowMissingColumns); diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityWriter.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityWriter.java index 1dc3685ebf..2435a48668 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityWriter.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityWriter.java @@ -327,7 +327,6 @@ private boolean attemptSetIterableValue( boolean valueSet = false; - if (spannerPersistentProperty.getAnnotatedColumnItemType() == Type.Code.JSON) { // if column annotated with JSON, convert directly valueBinder.toJsonArray(this.convertIterableJsonToValue(value)); diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/SpannerConverters.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/SpannerConverters.java index 3bd09a243a..6ad40c68ec 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/SpannerConverters.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/SpannerConverters.java @@ -140,6 +140,7 @@ public java.util.Date convert(Timestamp timestamp) { return timestamp.toDate(); } }; + /** A converter from {@link Instant} to the Spanner instantaneous time type. */ public static final Converter INSTANT_TIMESTAMP_CONVERTER = new CommitTimestampDecorator( diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructAccessor.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructAccessor.java index 72c09fadaf..e6017fbd2a 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructAccessor.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructAccessor.java @@ -171,26 +171,24 @@ List getListJsonValue(String colName, Class colType) { } List jsonStringList = this.struct.getJsonList(colName); List result = new ArrayList<>(); - jsonStringList.forEach(item -> - result.add(gson.fromJson(item, colType))); + jsonStringList.forEach(item -> result.add(gson.fromJson(item, colType))); return result; } - public Object getJsonValue(int colIndex, Class colType) { + public Object getJsonValue(int colIndex, Class colType) { if (this.struct.getColumnType(colIndex).getCode() != Code.ARRAY) { return getSingleJsonValue(colIndex, colType); } return getListJsonValue(colIndex, colType); } - private List getListJsonValue(int colIndex, Class colType) { + private List getListJsonValue(int colIndex, Class colType) { if (this.struct.getColumnType(colIndex).getCode() != Code.ARRAY) { throw new SpannerDataException(EXCEPTION_COL_NOT_ARRAY + colIndex); } List jsonStringList = this.struct.getJsonList(colIndex); List result = new ArrayList<>(); - jsonStringList.forEach(item -> - result.add(gson.fromJson(item, colType))); + jsonStringList.forEach(item -> result.add(gson.fromJson(item, colType))); return result; } @@ -225,8 +223,8 @@ T getSingleJsonValue(String colName, Class colType) { return gson.fromJson(jsonString, colType); } - //TODO: change this to private in next major release - public T getSingleJsonValue(int colIndex, Class colType) { + // TODO: change this to private in next major release + public T getSingleJsonValue(int colIndex, Class colType) { if (this.struct.getColumnType(colIndex).getCode() != Code.JSON) { throw new SpannerDataException("Column of index " + colIndex + " not an JSON type."); } diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructPropertyValueProvider.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructPropertyValueProvider.java index fe201b764f..1d2fd76a1c 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructPropertyValueProvider.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructPropertyValueProvider.java @@ -127,8 +127,9 @@ private Iterable readIterableWithConversion( String colName = spannerPersistentProperty.getColumnName(); Type.Code spannerColumnType = spannerPersistentProperty.getAnnotatedColumnItemType(); if (spannerColumnType == Type.Code.JSON) { - return (List) this.structAccessor.getListJsonValue(colName, - spannerPersistentProperty.getColumnInnerType()); + return (List) + this.structAccessor.getListJsonValue( + colName, spannerPersistentProperty.getColumnInnerType()); } List listValue = this.structAccessor.getListValue(colName); return listValue.stream() diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImpl.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImpl.java index 8de60840ab..15640e3af9 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImpl.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImpl.java @@ -71,7 +71,8 @@ public class SpannerPersistentPropertyImpl @Override @NonNull public Iterable> getPersistentEntityTypeInformation() { - return StreamUtils.createStreamFromIterator(super.getPersistentEntityTypeInformation().iterator()) + return StreamUtils.createStreamFromIterator( + super.getPersistentEntityTypeInformation().iterator()) .filter(typeInfo -> typeInfo.getType().isAnnotationPresent(Table.class)) .toList(); } diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/SpannerRepository.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/SpannerRepository.java index 1bf6c4aaaa..56b441637a 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/SpannerRepository.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/SpannerRepository.java @@ -28,8 +28,8 @@ * @param the id type of the entity * @since 1.1 */ -public interface SpannerRepository extends PagingAndSortingRepository, - CrudRepository { +public interface SpannerRepository + extends PagingAndSortingRepository, CrudRepository { /** * Gets a {@link SpannerOperations}, which allows more-direct access to Google Cloud Spanner diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/config/SpannerAuditingRegistrar.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/config/SpannerAuditingRegistrar.java index 1ce60ddb0b..3980038b4f 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/config/SpannerAuditingRegistrar.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/config/SpannerAuditingRegistrar.java @@ -59,7 +59,7 @@ protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder( AuditingConfiguration configuration) { return configureDefaultAuditHandlerAttributes( configuration, BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class)) - .addConstructorArgValue(PersistentEntities.of(new SpannerMappingContext())); + .addConstructorArgValue(PersistentEntities.of(new SpannerMappingContext())); } @Override diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryExecutor.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryExecutor.java index 35ad72da9a..b4d38bd383 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryExecutor.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryExecutor.java @@ -114,7 +114,8 @@ private static Map preparePartTreeSqlTagParameterMap( // query. // They are processed separately in applySort and buildLimit methods. if (param.getType() != Pageable.class && param.getType() != Sort.class) { - paramMetadataMap.put(sqlStringAndPlaceholders.getPlaceholders().get(nextPlaceholderIdx++), param); + paramMetadataMap.put( + sqlStringAndPlaceholders.getPlaceholders().get(nextPlaceholderIdx++), param); } } return paramMetadataMap; diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java index 4c6376a413..ae1a7ba64c 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java @@ -159,8 +159,12 @@ private void resolveSpelTags(QueryTagValue queryTagValue) { StringBuilder sb = new StringBuilder(); Map valueToTag = new HashMap<>(); int tagNum = 0; - EvaluationContext evaluationContext = this.valueExpressionDelegate.getEvaluationContextAccessor().create(this.queryMethod.getParameters()) - .getEvaluationContext(queryTagValue.rawParams).getEvaluationContext(); + EvaluationContext evaluationContext = + this.valueExpressionDelegate + .getEvaluationContextAccessor() + .create(this.queryMethod.getParameters()) + .getEvaluationContext(queryTagValue.rawParams) + .getEvaluationContext(); for (Expression expression : expressions) { if (expression instanceof LiteralExpression) { sb.append(expression.getValue(String.class)); @@ -240,11 +244,13 @@ private List executeReadSql(Pageable pageable, Sort sort, QueryTagValue queryTag return this.spannerTemplate.query( struct -> new StructAccessor(struct).getSingleValue(0), statement, spannerQueryOptions); } - // check if returnedType is a field annotated as json or is inner-type of a field annotated as json + // check if returnedType is a field annotated as json or is inner-type of a field annotated as + // json if (isJsonFieldType(returnedType)) { return this.spannerTemplate.query( - struct -> new StructAccessor(struct, - this.spannerMappingContext.getGson()).getJsonValue(0, returnedType), + struct -> + new StructAccessor(struct, this.spannerMappingContext.getGson()) + .getJsonValue(0, returnedType), statement, spannerQueryOptions); } diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java index fc31c4bccd..e1d3bbe7c5 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java @@ -117,35 +117,36 @@ protected Optional getQueryLookupStrategy( private QueryMethodEvaluationContextProvider delegateContextProvider( ValueExpressionDelegate evaluationContextProvider) { return null; -// return new QueryMethodEvaluationContextProvider() { -// @Override -// public > EvaluationContext getEvaluationContext( -// T parameters, Object[] parameterValues) { -// StandardEvaluationContext evaluationContext = -// (StandardEvaluationContext) -// evaluationContextProvider.getEvaluationContext(parameters, parameterValues); -// evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); -// evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); -// evaluationContext.setBeanResolver( -// new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); -// return evaluationContext; -// } -// -// @Override -// public > EvaluationContext getEvaluationContext( -// T parameters, Object[] parameterValues, ExpressionDependencies expressionDependencies) { -// StandardEvaluationContext evaluationContext = -// (StandardEvaluationContext) -// evaluationContextProvider.getEvaluationContext( -// parameters, parameterValues, expressionDependencies); -// -// evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); -// evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); -// evaluationContext.setBeanResolver( -// new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); -// return evaluationContext; -// } -// }; + // return new QueryMethodEvaluationContextProvider() { + // @Override + // public > EvaluationContext getEvaluationContext( + // T parameters, Object[] parameterValues) { + // StandardEvaluationContext evaluationContext = + // (StandardEvaluationContext) + // evaluationContextProvider.getEvaluationContext(parameters, parameterValues); + // evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); + // evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); + // evaluationContext.setBeanResolver( + // new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); + // return evaluationContext; + // } + // + // @Override + // public > EvaluationContext getEvaluationContext( + // T parameters, Object[] parameterValues, ExpressionDependencies + // expressionDependencies) { + // StandardEvaluationContext evaluationContext = + // (StandardEvaluationContext) + // evaluationContextProvider.getEvaluationContext( + // parameters, parameterValues, expressionDependencies); + // + // evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); + // evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); + // evaluationContext.setBeanResolver( + // new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); + // return evaluationContext; + // } + // }; } @Override diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/aot/SpannerSchemaUtilsRuntimeHintsTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/aot/SpannerSchemaUtilsRuntimeHintsTests.java index 3c7b2bffeb..da04526ad0 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/aot/SpannerSchemaUtilsRuntimeHintsTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/aot/SpannerSchemaUtilsRuntimeHintsTests.java @@ -28,8 +28,6 @@ void registerString() { RuntimeHints runtimeHints = new RuntimeHints(); SpannerSchemaUtilsRuntimeHints registrar = new SpannerSchemaUtilsRuntimeHints(); registrar.registerHints(runtimeHints, null); - assertThat(runtimeHints) - .matches( - reflection().onType(String.class)); + assertThat(runtimeHints).matches(reflection().onType(String.class)); } } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java index 93f7d85907..5f146da69c 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java @@ -150,12 +150,13 @@ void insertChildrenMismatchIdTest() { // throws exception because child entity's id column does not match that of its // parent. assertThatThrownBy(() -> this.spannerMutationFactory.insert(t)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("A child entity's common primary key parts with its parent must have the same values." - + " Primary key component 1 does not match for entities: class" - + " com.google.cloud.spring.data.spanner.core.SpannerMutationFactoryImplTests$TestEntity" - + " class" - + " com.google.cloud.spring.data.spanner.core.SpannerMutationFactoryImplTests$ChildEntity"); + .isInstanceOf(SpannerDataException.class) + .hasMessage( + "A child entity's common primary key parts with its parent must have the same values." + + " Primary key component 1 does not match for entities: class" + + " com.google.cloud.spring.data.spanner.core.SpannerMutationFactoryImplTests$TestEntity" + + " class" + + " com.google.cloud.spring.data.spanner.core.SpannerMutationFactoryImplTests$ChildEntity"); } @Test @@ -286,23 +287,18 @@ private static class EmbeddedKeyComponents { @Table private static class Parent { - @PrimaryKey - @Column - String keyOne; + @PrimaryKey @Column String keyOne; @PrimaryKey(keyOrder = 2) @Column Long keyTwo; - @Interleaved - List children; + @Interleaved List children; } @Table private static class Child { - @PrimaryKey - @Column - String keyOne; + @PrimaryKey @Column String keyOne; @PrimaryKey(keyOrder = 2) @Column diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerReadOptionsTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerReadOptionsTests.java index 99a8ad7055..f6a1c6dd3c 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerReadOptionsTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerReadOptionsTests.java @@ -35,8 +35,8 @@ class SpannerReadOptionsTests { void addNullReadOptionTest() { SpannerReadOptions testSpannerReadOptions = new SpannerReadOptions(); assertThatThrownBy(() -> testSpannerReadOptions.addReadOption(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("Valid read option is required!"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Valid read option is required!"); } @Test @@ -64,8 +64,8 @@ void convertReadToQueryOptionTest_throwIfNotSupported() { ReadOption r1 = mock(ReadOption.class); spannerReadOptions.addReadOption(r1); assertThatThrownBy(spannerReadOptions::toQueryOptions) - .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("Can't convert"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Can't convert"); } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerSortPageQueryOptionsTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerSortPageQueryOptionsTests.java index 73d0647f29..c08442bedd 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerSortPageQueryOptionsTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerSortPageQueryOptionsTests.java @@ -34,8 +34,8 @@ void addNullQueryOptionTest() { SpannerQueryOptions testSpannerQueryOptions = new SpannerQueryOptions(); assertThatThrownBy(() -> testSpannerQueryOptions.addQueryOption(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("Valid query option is required!"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Valid query option is required!"); } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTests.java index 4ab8561d1a..f4ae511d92 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTests.java @@ -353,7 +353,6 @@ void readOnlyTransactionTest() { verify(readOnlyTransaction, times(2)).read(eq("custom_test_table"), any(), any()); } - @Test void readOnlyTransactionDmlTest() { @@ -363,15 +362,19 @@ void readOnlyTransactionDmlTest() { TimestampBound.ofReadTimestamp(Timestamp.ofTimeMicroseconds(333)))) .thenReturn(readOnlyTransaction); - SpannerReadOptions testSpannerReadOptions = new SpannerReadOptions().setTimestamp(Timestamp.ofTimeMicroseconds(333)); - Function testSpannerOperations = spannerOperations -> { - spannerOperations.executeDmlStatement(Statement.of("fail")); - return null; - }; + SpannerReadOptions testSpannerReadOptions = + new SpannerReadOptions().setTimestamp(Timestamp.ofTimeMicroseconds(333)); + Function testSpannerOperations = + spannerOperations -> { + spannerOperations.executeDmlStatement(Statement.of("fail")); + return null; + }; - assertThatThrownBy(() -> this.spannerTemplate.performReadOnlyTransaction( - testSpannerOperations, testSpannerReadOptions)) - .hasMessage("A read-only transaction template cannot execute DML."); + assertThatThrownBy( + () -> + this.spannerTemplate.performReadOnlyTransaction( + testSpannerOperations, testSpannerReadOptions)) + .hasMessage("A read-only transaction template cannot execute DML."); } @Test @@ -382,15 +385,19 @@ void readOnlyTransactionPartitionedDmlTest() { TimestampBound.ofReadTimestamp(Timestamp.ofTimeMicroseconds(333)))) .thenReturn(readOnlyTransaction); - SpannerReadOptions testSpannerReadOptions = new SpannerReadOptions().setTimestamp(Timestamp.ofTimeMicroseconds(333)); - Function testSpannerOperations = spannerOperations -> { - spannerOperations.executePartitionedDmlStatement(Statement.of("fail")); - return null; - }; + SpannerReadOptions testSpannerReadOptions = + new SpannerReadOptions().setTimestamp(Timestamp.ofTimeMicroseconds(333)); + Function testSpannerOperations = + spannerOperations -> { + spannerOperations.executePartitionedDmlStatement(Statement.of("fail")); + return null; + }; - assertThatThrownBy(() -> this.spannerTemplate.performReadOnlyTransaction( - testSpannerOperations, testSpannerReadOptions)) - .hasMessage("A read-only transaction template cannot execute partitioned DML."); + assertThatThrownBy( + () -> + this.spannerTemplate.performReadOnlyTransaction( + testSpannerOperations, testSpannerReadOptions)) + .hasMessage("A read-only transaction template cannot execute partitioned DML."); } @Test @@ -407,49 +414,75 @@ void readWriteTransactionPartitionedDmlTest() { TransactionCallable transactionCallable = invocation.getArgument(0); return transactionCallable.run(transactionContext); }); - Function testSpannerOperations = spannerTemplate -> { - spannerTemplate.executePartitionedDmlStatement(Statement.of("DML statement here")); - return "all done"; - }; + Function testSpannerOperations = + spannerTemplate -> { + spannerTemplate.executePartitionedDmlStatement(Statement.of("DML statement here")); + return "all done"; + }; - assertThatThrownBy(() -> this.spannerTemplate.performReadWriteTransaction(testSpannerOperations)) - .hasMessage("A read-write transaction template cannot execute partitioned" + " DML."); + assertThatThrownBy( + () -> this.spannerTemplate.performReadWriteTransaction(testSpannerOperations)) + .hasMessage("A read-write transaction template cannot execute partitioned" + " DML."); } @Test void nullDatabaseClientTest() { - assertThatThrownBy(() -> new SpannerTemplate( - null, this.mappingContext, this.objectMapper, this.mutationFactory, this.schemaUtils)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid database client for Spanner is required."); + assertThatThrownBy( + () -> + new SpannerTemplate( + null, + this.mappingContext, + this.objectMapper, + this.mutationFactory, + this.schemaUtils)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid database client for Spanner is required."); } @Test void nullMappingContextTest() { - assertThatThrownBy(() -> new SpannerTemplate( - () -> this.databaseClient, null, this.objectMapper, this.mutationFactory, this.schemaUtils)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid mapping context for Spanner is required."); + assertThatThrownBy( + () -> + new SpannerTemplate( + () -> this.databaseClient, + null, + this.objectMapper, + this.mutationFactory, + this.schemaUtils)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid mapping context for Spanner is required."); } @Test void nullObjectMapperTest() { - assertThatThrownBy(() -> new SpannerTemplate( - () -> this.databaseClient, this.mappingContext, null, this.mutationFactory, this.schemaUtils)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid entity processor for Spanner is required."); + assertThatThrownBy( + () -> + new SpannerTemplate( + () -> this.databaseClient, + this.mappingContext, + null, + this.mutationFactory, + this.schemaUtils)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid entity processor for Spanner is required."); } @Test void nullMutationFactoryTest() { - assertThatThrownBy(() -> new SpannerTemplate( - () -> this.databaseClient, this.mappingContext, this.objectMapper, null, this.schemaUtils)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid Spanner mutation factory is required."); + assertThatThrownBy( + () -> + new SpannerTemplate( + () -> this.databaseClient, + this.mappingContext, + this.objectMapper, + null, + this.schemaUtils)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid Spanner mutation factory is required."); } @Test @@ -524,9 +557,9 @@ void findKeySetTestEagerConvertedOptions() { SpannerTemplate spyTemplate = spy(this.spannerTemplate); KeySet keys = KeySet.newBuilder().addKey(Key.of("key1")).addKey(Key.of("key2")).build(); SpannerReadOptions options = - new SpannerReadOptions() - .addReadOption(mock(Options.ReadAndQueryOption.class)) - .addReadOption(mock(Options.ReadQueryUpdateTransactionOption.class)); + new SpannerReadOptions() + .addReadOption(mock(Options.ReadAndQueryOption.class)) + .addReadOption(mock(Options.ReadQueryUpdateTransactionOption.class)); spyTemplate.read(ParentEntity.class, keys, options); verify(spyTemplate).read(eq(ParentEntity.class), same(keys), eq(options)); verify(this.databaseClient, times(1)).singleUse(); @@ -1008,8 +1041,7 @@ private void verifyAfterEvents( @Table(name = "test_table_embedded_pk") private static class TestEntityEmbeddedPrimaryKey { - @Embedded @PrimaryKey - EmbeddedPrimaryKey key; + @Embedded @PrimaryKey EmbeddedPrimaryKey key; } private static class EmbeddedPrimaryKey { diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTransactionManagerTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTransactionManagerTests.java index 2755c50792..4c13fd02b6 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTransactionManagerTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTransactionManagerTests.java @@ -210,25 +210,25 @@ void doWithoutTransaction() { @Test void readOnlySaveTest() { assertThatThrownBy(() -> this.transactionalService.writingInReadOnly(new TestEntity())) - .hasMessage("Spanner transaction cannot apply mutations because it is in readonly mode"); + .hasMessage("Spanner transaction cannot apply mutations because it is in readonly mode"); } @Test void readOnlyDeleteTest() { assertThatThrownBy(() -> this.transactionalService.deleteInReadOnly(new TestEntity())) - .hasMessage("Spanner transaction cannot apply mutations because it is in readonly mode"); + .hasMessage("Spanner transaction cannot apply mutations because it is in readonly mode"); } @Test void readOnlyDmlTest() { assertThatThrownBy(() -> this.transactionalService.dmlInReadOnly()) - .hasMessage("Spanner transaction cannot execute DML because it is in readonly mode"); + .hasMessage("Spanner transaction cannot execute DML because it is in readonly mode"); } @Test void partitionedDmlInTransactionTest() { assertThatThrownBy(() -> this.transactionalService.partitionedDmlInTransaction()) - .hasMessage("Cannot execute partitioned DML in a transaction."); + .hasMessage("Cannot execute partitioned DML in a transaction."); } /** Spring config for the tests. */ diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplateTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplateTests.java index 0c91520226..52b1fd3576 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplateTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplateTests.java @@ -77,8 +77,7 @@ void setup() { @Test void getTableRelationshipsTest() { when(this.mockDatabasePage.getValues()) - .thenReturn( - List.of(new Database(this.databaseId, State.READY, this.databaseAdminClient))); + .thenReturn(List.of(new Database(this.databaseId, State.READY, this.databaseAdminClient))); ReadContext readContext = mock(ReadContext.class); Struct s1 = @@ -223,17 +222,16 @@ void getTableRelationshipsTest() { assertThat(this.spannerDatabaseAdminTemplate.isInterleaved("parent_b", "child")) .as("verify not parent-child relationship") .isFalse(); - - assertThat(this.spannerDatabaseAdminTemplate - .isInterleaved("my_schema.grandpa", "my_schema.dad")) + + assertThat( + this.spannerDatabaseAdminTemplate.isInterleaved("my_schema.grandpa", "my_schema.dad")) .as("verify my-schema grand-child relationship") .isTrue(); - assertThat(this.spannerDatabaseAdminTemplate - .isInterleaved("my_schema.grandpa", "my_schema.child")) + assertThat( + this.spannerDatabaseAdminTemplate.isInterleaved("my_schema.grandpa", "my_schema.child")) .as("verify my-schema grand-child relationship") .isTrue(); - assertThat(this.spannerDatabaseAdminTemplate - .isInterleaved("my_schema.grandpa", "child")) + assertThat(this.spannerDatabaseAdminTemplate.isInterleaved("my_schema.grandpa", "child")) .as("verify not my-schema grand-child relationship") .isFalse(); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerSchemaUtilsTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerSchemaUtilsTests.java index 02fa5d67e3..dd6b3b77f4 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerSchemaUtilsTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerSchemaUtilsTests.java @@ -175,7 +175,11 @@ void createDdlForJson() { assertColumnDdl( JsonColumn.class, null, "jsonCol", Type.Code.JSON, OptionalLong.empty(), "jsonCol JSON"); assertColumnDdl( - List.class, JsonColumn.class, "arrayJsonCol", Type.Code.JSON, OptionalLong.empty(), + List.class, + JsonColumn.class, + "arrayJsonCol", + Type.Code.JSON, + OptionalLong.empty(), "arrayJsonCol ARRAY"); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/KeyConversionTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/KeyConversionTests.java index 508688f501..0977a7c7b3 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/KeyConversionTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/KeyConversionTests.java @@ -32,7 +32,6 @@ import org.junit.jupiter.params.provider.MethodSource; /** Tests for converting Spanner keys. */ - class KeyConversionTests { private final SpannerWriteConverter writeConverter; diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/SpannerWriteMethodCoverageTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/SpannerWriteMethodCoverageTests.java index ae0c4513db..c2908f142d 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/SpannerWriteMethodCoverageTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/SpannerWriteMethodCoverageTests.java @@ -37,9 +37,9 @@ void allKnownMappingTypesTest() throws NoSuchFieldException { // TODO: https://github.com/GoogleCloudPlatform/spring-cloud-gcp/issues/2574 // Until this is implemented, ignore the new column types by ignoring the methods // that have the new column types as a parameter - if (Arrays.stream(method.getParameterTypes()).map(Class::getName) - .anyMatch(x -> x.contains("ProtocolMessageEnum") - || x.contains("AbstractMessage"))) { + if (Arrays.stream(method.getParameterTypes()) + .map(Class::getName) + .anyMatch(x -> x.contains("ProtocolMessageEnum") || x.contains("AbstractMessage"))) { continue; } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/it/SpannerTemplateIntegrationTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/it/SpannerTemplateIntegrationTests.java index 18330cc429..5081fe7b76 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/it/SpannerTemplateIntegrationTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/it/SpannerTemplateIntegrationTests.java @@ -188,17 +188,18 @@ void readOnlyTransactionTest() { Trade trade = Trade.makeTrade(); - Function operation = transactionOperations -> { - // cannot do mutate in a read-only transaction - transactionOperations.insert(trade); - return null; - }; + Function operation = + transactionOperations -> { + // cannot do mutate in a read-only transaction + transactionOperations.insert(trade); + return null; + }; SpannerReadOptions readOptions = new SpannerReadOptions(); - assertThatThrownBy(() -> this.spannerOperations.performReadOnlyTransaction(operation, readOptions)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("A read-only transaction template cannot perform mutations."); - + assertThatThrownBy( + () -> this.spannerOperations.performReadOnlyTransaction(operation, readOptions)) + .isInstanceOf(SpannerDataException.class) + .hasMessage("A read-only transaction template cannot perform mutations."); } /** a transactional service for testing annotated transaction methods. */ diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerKeyPropertyTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerKeyPropertyTests.java index 8d94ebe2dd..41f8682782 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerKeyPropertyTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerKeyPropertyTests.java @@ -44,18 +44,18 @@ void setup() { @Test void nullSpannerPersistentEntityTest() { - assertThatThrownBy(() -> new SpannerCompositeKeyProperty(null, new SpannerPersistentProperty[] {})) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid Cloud Spanner persistent entity is required."); + assertThatThrownBy( + () -> new SpannerCompositeKeyProperty(null, new SpannerPersistentProperty[] {})) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid Cloud Spanner persistent entity is required."); } @Test void nullPropertiesTest() { assertThatThrownBy(() -> new SpannerCompositeKeyProperty(this.spannerPersistentEntity, null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid array of primary key properties is required."); - + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid array of primary key properties is required."); } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentEntityImplTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentEntityImplTests.java index 207a39f784..c2556f1371 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentEntityImplTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentEntityImplTests.java @@ -47,15 +47,17 @@ class SpannerPersistentEntityImplTests { SpannerPersistentEntityImplTests() { this.spannerMappingContext = new SpannerMappingContext(); - this.spannerEntityProcessor = new ConverterAwareMappingSpannerEntityProcessor( - this.spannerMappingContext); + this.spannerEntityProcessor = + new ConverterAwareMappingSpannerEntityProcessor(this.spannerMappingContext); } @Test void testTableName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>(TypeInformation.of(TestEntity.class), - this.spannerMappingContext, this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>( + TypeInformation.of(TestEntity.class), + this.spannerMappingContext, + this.spannerEntityProcessor); assertThat(entity.tableName()).isEqualTo("custom_test_table"); } @@ -63,8 +65,10 @@ void testTableName() { @Test void testRawTableName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityNoCustomName.class), - this.spannerMappingContext, this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>( + TypeInformation.of(EntityNoCustomName.class), + this.spannerMappingContext, + this.spannerEntityProcessor); assertThat(entity.tableName()).isEqualTo("entityNoCustomName"); } @@ -72,8 +76,10 @@ void testRawTableName() { @Test void testEmptyCustomTableName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityEmptyCustomName.class), - this.spannerMappingContext, this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>( + TypeInformation.of(EntityEmptyCustomName.class), + this.spannerMappingContext, + this.spannerEntityProcessor); assertThat(entity.tableName()).isEqualTo("entityEmptyCustomName"); } @@ -88,19 +94,24 @@ void testColumns() { void testExpressionResolutionWithoutApplicationContext() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), - this.spannerMappingContext, this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>( + TypeInformation.of(EntityWithExpression.class), + this.spannerMappingContext, + this.spannerEntityProcessor); assertThatThrownBy(entity::tableName) .isInstanceOf(SpannerDataException.class) .hasMessage("Error getting table name for EntityWithExpression") - .hasStackTraceContaining("EL1007E: Property or field 'tablePostfix' cannot be found on null"); + .hasStackTraceContaining( + "EL1007E: Property or field 'tablePostfix' cannot be found on null"); } @Test void testExpressionResolutionFromApplicationContext() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), - this.spannerMappingContext, this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>( + TypeInformation.of(EntityWithExpression.class), + this.spannerMappingContext, + this.spannerEntityProcessor); ApplicationContext applicationContext = mock(ApplicationContext.class); when(applicationContext.getBean("tablePostfix")).thenReturn("something"); @@ -114,9 +125,12 @@ void testExpressionResolutionFromApplicationContext() { void testDuplicatePrimaryKeyOrder() { SpannerMappingContext spannerMappingContext = new SpannerMappingContext(); - assertThatThrownBy(() -> spannerMappingContext.getPersistentEntity(EntityWithDuplicatePrimaryKeyOrder.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("Two properties were annotated with the same primary key order: id2 and id in EntityWithDuplicatePrimaryKeyOrder."); + assertThatThrownBy( + () -> + spannerMappingContext.getPersistentEntity(EntityWithDuplicatePrimaryKeyOrder.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessage( + "Two properties were annotated with the same primary key order: id2 and id in EntityWithDuplicatePrimaryKeyOrder."); } @Test @@ -124,10 +138,11 @@ void testInvalidPrimaryKeyOrder() { SpannerMappingContext spannerMappingContext = new SpannerMappingContext(); - assertThatThrownBy(() -> spannerMappingContext.getPersistentEntity(EntityWithWronglyOrderedKeys.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("The primary key columns were not given a consecutive order. There is no property annotated with order 2 in EntityWithWronglyOrderedKeys."); - + assertThatThrownBy( + () -> spannerMappingContext.getPersistentEntity(EntityWithWronglyOrderedKeys.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessage( + "The primary key columns were not given a consecutive order. There is no property annotated with order 2 in EntityWithWronglyOrderedKeys."); } @Test @@ -178,8 +193,8 @@ void testSetIdPropertyLongerKey() { Key testKey = Key.of("blah", 123L, 123.45D, "abc"); assertThatThrownBy(() -> propertyAccessor.setProperty(idProperty, testKey)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("The number of key parts is not equal to the number of primary key properties"); + .isInstanceOf(SpannerDataException.class) + .hasMessage("The number of key parts is not equal to the number of primary key properties"); } @Test @@ -194,9 +209,8 @@ void testSetIdPropertyNullKey() { PersistentPropertyAccessor propertyAccessor = entity.getPropertyAccessor(t); assertThatThrownBy(() -> propertyAccessor.setProperty(idProperty, null)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("The number of key parts is not equal to the number of primary key properties"); - + .isInstanceOf(SpannerDataException.class) + .hasMessage("The number of key parts is not equal to the number of primary key properties"); } @Test @@ -216,8 +230,10 @@ void testIgnoredProperty() { void testInvalidTableName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityBadName.class), - this.spannerMappingContext, this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>( + TypeInformation.of(EntityBadName.class), + this.spannerMappingContext, + this.spannerEntityProcessor); assertThatThrownBy(entity::tableName) .isInstanceOf(SpannerDataException.class) @@ -230,8 +246,10 @@ void testInvalidTableName() { void testSpelInvalidName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), - this.spannerMappingContext, this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>( + TypeInformation.of(EntityWithExpression.class), + this.spannerMappingContext, + this.spannerEntityProcessor); ApplicationContext applicationContext = mock(ApplicationContext.class); when(applicationContext.getBean("tablePostfix")).thenReturn("; DROP TABLE your_table;"); @@ -245,18 +263,17 @@ void testSpelInvalidName() { .hasStackTraceContaining( "Only letters, numbers, and underscores are allowed in table names: " + "table_; DROP TABLE your_table;"); - - } @Test void testDuplicateEmbeddedColumnName() { - - assertThatThrownBy(() -> this.spannerMappingContext.getPersistentEntity(EmbeddedParentDuplicateColumn.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("Two properties resolve to the same column name: other in EmbeddedParentDuplicateColumn"); - + assertThatThrownBy( + () -> + this.spannerMappingContext.getPersistentEntity(EmbeddedParentDuplicateColumn.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessage( + "Two properties resolve to the same column name: other in EmbeddedParentDuplicateColumn"); } @Test @@ -297,9 +314,10 @@ void testEmbeddedParentKeys() { @Test void testEmbeddedCollection() { - assertThatThrownBy(() -> this.spannerMappingContext.getPersistentEntity(ChildCollectionEmbedded.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessageContaining("Embedded properties cannot be collections: "); + assertThatThrownBy( + () -> this.spannerMappingContext.getPersistentEntity(ChildCollectionEmbedded.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessageContaining("Embedded properties cannot be collections: "); } @Test @@ -328,10 +346,14 @@ void doWithChildrenCollectionsTest() { @Test void testParentChildPkNamesMismatch() { - assertThatThrownBy(() -> this.spannerMappingContext.getPersistentEntity(ParentInRelationshipMismatchedKeyName.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("The child primary key column (ChildBinRelationship.id) at position 1 does not match that " - + "of its parent (ParentInRelationshipMismatchedKeyName.idNameDifferentThanChildren)."); + assertThatThrownBy( + () -> + this.spannerMappingContext.getPersistentEntity( + ParentInRelationshipMismatchedKeyName.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessage( + "The child primary key column (ChildBinRelationship.id) at position 1 does not match that " + + "of its parent (ParentInRelationshipMismatchedKeyName.idNameDifferentThanChildren)."); } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java index 3dcdcddf14..bce2eb8a6f 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java @@ -37,7 +37,7 @@ class SpannerPersistentPropertyImplTests { @Test void testGetColumn() { assertThat(new SpannerMappingContext().getPersistentEntity(TestEntity.class).columns()) - .containsExactlyInAnyOrder("id", "custom_col", "other", "doubleList"); + .containsExactlyInAnyOrder("id", "custom_col", "other", "doubleList"); } @Test @@ -49,58 +49,59 @@ void testNullColumnName() { context.setFieldNamingStrategy(namingStrat); assertThatThrownBy(() -> context.getPersistentEntity(TestEntity.class)) - .hasMessageContaining("Invalid (null or empty) field name returned for " - + "property @com.google.cloud.spring.data.spanner.core.mapping.PrimaryKey") - .hasMessageContaining("keyOrder=1") - .hasMessageContaining("value=1") - .hasMessageContaining("java.lang.String com.google.cloud.spring.data.spanner.core.mapping." - + "SpannerPersistentPropertyImplTests$TestEntity.id by class " - + "org.springframework.data.mapping.model.FieldNamingStrategy$MockitoMock$"); + .hasMessageContaining( + "Invalid (null or empty) field name returned for " + + "property @com.google.cloud.spring.data.spanner.core.mapping.PrimaryKey") + .hasMessageContaining("keyOrder=1") + .hasMessageContaining("value=1") + .hasMessageContaining( + "java.lang.String com.google.cloud.spring.data.spanner.core.mapping." + + "SpannerPersistentPropertyImplTests$TestEntity.id by class " + + "org.springframework.data.mapping.model.FieldNamingStrategy$MockitoMock$"); } - @Test void testAssociations() { new SpannerMappingContext() - .getPersistentEntity(TestEntity.class) - .doWithProperties( - (PropertyHandler) - prop -> { - assertThat( - ((SpannerPersistentPropertyImpl) prop).createAssociation().getInverse()) - .isSameAs(prop); - assertThat( - ((SpannerPersistentPropertyImpl) prop).createAssociation().getObverse()) - .isNull(); - }); + .getPersistentEntity(TestEntity.class) + .doWithProperties( + (PropertyHandler) + prop -> { + assertThat( + ((SpannerPersistentPropertyImpl) prop).createAssociation().getInverse()) + .isSameAs(prop); + assertThat( + ((SpannerPersistentPropertyImpl) prop).createAssociation().getObverse()) + .isNull(); + }); } @Test void testColumnInnerType() { assertThat( new SpannerMappingContext() - .getPersistentEntity(TestEntity.class) - .getPersistentProperty("doubleList") - .getColumnInnerType()) - .isEqualTo(Double.class); + .getPersistentEntity(TestEntity.class) + .getPersistentProperty("doubleList") + .getColumnInnerType()) + .isEqualTo(Double.class); } @Test void testNoPojoIdProperties() { new SpannerMappingContext() - .getPersistentEntity(TestEntity.class) - .doWithProperties( - (PropertyHandler) - prop -> assertThat(prop.isIdProperty()).isFalse()); + .getPersistentEntity(TestEntity.class) + .doWithProperties( + (PropertyHandler) + prop -> assertThat(prop.isIdProperty()).isFalse()); } @Test void testIgnoredProperty() { new SpannerMappingContext() - .getPersistentEntity(TestEntity.class) - .doWithProperties( - (PropertyHandler) - prop -> assertThat(prop.getColumnName()).isNotEqualTo("not_mapped")); + .getPersistentEntity(TestEntity.class) + .doWithProperties( + (PropertyHandler) + prop -> assertThat(prop.getColumnName()).isNotEqualTo("not_mapped")); } @Table(name = "custom_test_table") diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/typeadapter/InstantTypeAdapterTest.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/typeadapter/InstantTypeAdapterTest.java index b110d9aade..eabf00bbc8 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/typeadapter/InstantTypeAdapterTest.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/typeadapter/InstantTypeAdapterTest.java @@ -22,7 +22,6 @@ public void writeInstantTest_epochSecond0() throws IOException { instantTypeAdapter.write(jsonWriter, instant); assertThat(stringWriter.toString()).isEqualTo("\"1970-01-01T00:00:00Z\""); - } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/it/SpannerRepositoryInsertIntegrationTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/it/SpannerRepositoryInsertIntegrationTests.java index beaeba1d7c..7fa63d0af6 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/it/SpannerRepositoryInsertIntegrationTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/it/SpannerRepositoryInsertIntegrationTests.java @@ -35,7 +35,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; /** Integration tests for Spanner Repository. */ - @EnabledIfSystemProperty(named = "it.spanner", matches = "true") @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = {IntegrationTestConfiguration.class}) diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryMethodTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryMethodTests.java index 5f256691b4..ecc020461c 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryMethodTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryMethodTests.java @@ -39,7 +39,8 @@ void setUp() throws Exception { this.mockMetadata = mock(RepositoryMetadata.class); this.mockProjectionFactory = mock(ProjectionFactory.class); doReturn(TypeInformation.fromReturnTypeOf(Example.class.getMethod("someAnnotatedMethod"))) - .when(mockMetadata).getReturnType(any()); + .when(mockMetadata) + .getReturnType(any()); doAnswer(a -> String.class).when(mockMetadata).getReturnedDomainClass(any()); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryTests.java index 7f44d391ec..3e8da8a722 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryTests.java @@ -174,7 +174,9 @@ void compoundNameConventionTest() throws NoSuchMethodException { List.class, BigDecimal.class); when(this.queryMethod.getQueryMethod()).thenReturn(method); - doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))) + .when(this.queryMethod) + .getParameters(); this.partTreeSpannerQuery.execute(params); verify(this.spannerTemplate, times(1)).query((Class) any(), any(), any()); @@ -222,7 +224,9 @@ void compoundNameConventionCountTest() throws NoSuchMethodException { Object.class, Object.class, Object.class); - doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))) + .when(this.queryMethod) + .getParameters(); when(this.spannerTemplate.query((Function) any(), any(), any())) .thenAnswer( @@ -296,7 +300,9 @@ private void runPageableOrSortTest(Object[] params, Method method, String expect when(this.spannerTemplate.query((Function) any(), any(), any())) .thenReturn(Collections.singletonList(1L)); - doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))) + .when(this.queryMethod) + .getParameters(); when(this.spannerTemplate.query((Class) any(), any(), any())) .thenAnswer( @@ -325,7 +331,9 @@ void pageableNotLastParameterTest() throws NoSuchMethodException { // Test that preparePartTreeSqlTagParameterMap() can process cases // where Pageable is not the last parameter Object[] params = new Object[] {"BUY", PageRequest.of(1, 10, Sort.by("traderId")), "STOCK1"}; - Method method = QueryHolder.class.getMethod("repositoryMethod7", String.class, Pageable.class, String.class); + Method method = + QueryHolder.class.getMethod( + "repositoryMethod7", String.class, Pageable.class, String.class); when(this.queryMethod.getQueryMethod()).thenReturn(method); String expectedSql = @@ -334,14 +342,15 @@ void pageableNotLastParameterTest() throws NoSuchMethodException { + "WHERE ( action=@tag0 AND ticker=@tag1 ) " + "ORDER BY trader_id ASC LIMIT 10 OFFSET 10"; - when(this.queryMethod.getName()).thenReturn("findByActionAndSymbol"); this.partTreeSpannerQuery = spy(createQuery()); when(this.spannerTemplate.query((Function) any(), any(), any())) .thenReturn(Collections.singletonList(1L)); - doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))) + .when(this.queryMethod) + .getParameters(); when(this.spannerTemplate.query((Class) any(), any(), any())) .thenAnswer( @@ -378,7 +387,9 @@ void unspecifiedParametersTest() throws NoSuchMethodException { this.partTreeSpannerQuery = createQuery(); Method method = QueryHolder.class.getMethod("repositoryMethod4", Object.class, Object.class, Object.class); - doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))) + .when(this.queryMethod) + .getParameters(); // There are too few params specified, so the exception will occur. Object[] params = @@ -387,8 +398,8 @@ void unspecifiedParametersTest() throws NoSuchMethodException { }; assertThatThrownBy(() -> this.partTreeSpannerQuery.execute(params)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("The number of tags does not match the number of params."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("The number of tags does not match the number of params."); } @Test @@ -409,7 +420,9 @@ void unsupportedParamTypeTest() throws NoSuchMethodException { Trade.class, Object.class); - doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))) + .when(this.queryMethod) + .getParameters(); // This parameter is an unsupported type for Spanner SQL. Object[] params = @@ -418,22 +431,25 @@ void unsupportedParamTypeTest() throws NoSuchMethodException { }; assertThatThrownBy(() -> this.partTreeSpannerQuery.execute(params)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("is not a supported type: class com.google." - + "cloud.spring.data.spanner.repository.query.SpannerStatementQueryTests$Trade"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining( + "is not a supported type: class com.google." + + "cloud.spring.data.spanner.repository.query.SpannerStatementQueryTests$Trade"); } @Test void unSupportedPredicateTest() throws NoSuchMethodException { when(this.queryMethod.getName()).thenReturn("countByTraderIdBetween"); Method method = Object.class.getMethod("toString"); - doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))) + .when(this.queryMethod) + .getParameters(); this.partTreeSpannerQuery = createQuery(); assertThatThrownBy(() -> this.partTreeSpannerQuery.execute(EMPTY_PARAMETERS)) - .isInstanceOf(UnsupportedOperationException.class) - .hasMessage("The statement type: BETWEEN (2): [IsBetween, " + "Between] is not supported."); + .isInstanceOf(UnsupportedOperationException.class) + .hasMessage("The statement type: BETWEEN (2): [IsBetween, " + "Between] is not supported."); } @Table(name = "trades") diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java index 5806913683..850b5796b2 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java @@ -153,12 +153,13 @@ void noPageableParamQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn(toReturn); - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, toReturn, false); @@ -216,12 +217,13 @@ void pageableParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -283,12 +285,13 @@ void sortParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -351,12 +354,13 @@ void sortAndPageableQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -461,12 +465,13 @@ void compoundNameConventionTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Trade.class, false); @@ -535,12 +540,13 @@ void dmlTest() throws NoSuchMethodException { TransactionRunner transactionRunner = mock(TransactionRunner.class); when(this.databaseClient.readWriteTransaction()).thenReturn(transactionRunner); - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); when(transactionRunner.run(any())) .thenAnswer( @@ -584,12 +590,13 @@ void sqlCountWithWhereTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, long.class, false); @@ -652,12 +659,13 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { EvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setVariable(paramNames[0], params[0]); - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); @@ -706,8 +714,8 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { String sql = "SELECT detailsList from singer where stageName = @stageName"; - Object[] params = new Object[]{"STAGENAME"}; - String[] paramNames = new String[]{"stageName"}; + Object[] params = new Object[] {"STAGENAME"}; + String[] paramNames = new String[] {"stageName"}; when(queryMethod.isCollectionQuery()).thenReturn(true); ResultProcessor resultProcessor = mock(ResultProcessor.class); @@ -719,24 +727,25 @@ void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { EvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setVariable(paramNames[0], params[0]); - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); doAnswer( - invocation -> { - Statement statement = invocation.getArgument(1); - assertThat(statement.getSql()).isEqualTo(sql); - Map paramMap = statement.getParameters(); - assertThat(paramMap.get("stageName").getString()).isEqualTo(params[0]); - - return null; - }) + invocation -> { + Statement statement = invocation.getArgument(1); + assertThat(statement.getSql()).isEqualTo(sql); + Map paramMap = statement.getParameters(); + assertThat(paramMap.get("stageName").getString()).isEqualTo(params[0]); + + return null; + }) .when(this.spannerTemplate) .query((Function) any(), any(), any()); @@ -757,17 +766,22 @@ void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { Struct row = mock(Struct.class); when(row.getType()) - .thenReturn(Type.struct( - Arrays.asList(Type.StructField.of("detailsList", Type.array(Type.json()))))); + .thenReturn( + Type.struct( + Arrays.asList(Type.StructField.of("detailsList", Type.array(Type.json()))))); when(row.getColumnType(0)).thenReturn(Type.array(Type.json())); - when(row.getJsonList(0)).thenReturn(Arrays.asList("{\"p1\":\"address line\",\"p2\":\"5\"}", - "{\"p1\":\"address line 2\",\"p2\":\"6\"}")); + when(row.getJsonList(0)) + .thenReturn( + Arrays.asList( + "{\"p1\":\"address line\",\"p2\":\"5\"}", + "{\"p1\":\"address line 2\",\"p2\":\"6\"}")); when(row.getColumnType("detailsList")).thenReturn(Type.array(Type.json())); Object result = rowFunc.apply(row); assertThat(result).isInstanceOf(List.class); - assertThat((List) result).hasSize(2) + assertThat((List) result) + .hasSize(2) .containsExactly(new Detail("address line", "5"), new Detail("address line 2", "6")); } @@ -802,8 +816,7 @@ public boolean equals(Object o) { return false; } Detail detail = (Detail) o; - return Objects.equal(p1, detail.p1) - && Objects.equal(p2, detail.p2); + return Objects.equal(p1, detail.p1) && Objects.equal(p2, detail.p2); } @Override diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepositoryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepositoryTests.java index 018d5e040f..28beef7d94 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepositoryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepositoryTests.java @@ -62,16 +62,16 @@ void setup() { void constructorNullSpannerOperationsTest() { assertThatThrownBy(() -> new SimpleSpannerRepository(null, Object.class)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid SpannerTemplate object is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid SpannerTemplate object is required."); } @Test void constructorNullEntityTypeTest() { assertThatThrownBy(() -> new SimpleSpannerRepository(this.template, null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid entity type is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid entity type is required."); } @Test @@ -84,74 +84,77 @@ void getSpannerOperationsTest() { @Test void saveNullObjectTest() { - SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = + new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.save(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null entity is required for saving."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null entity is required for saving."); } @Test void findNullIdTest() { - SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = + new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.findById(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null ID is required."); - - + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null ID is required."); } @Test void existsNullIdTest() { - SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = + new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.existsById(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null ID is required."); - + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null ID is required."); } @Test void deleteNullIdTest() { - SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = + new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.deleteById(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null ID is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null ID is required."); } @Test void deleteNullEntityTest() { - SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = + new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.delete(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null entity is required."); - + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null entity is required."); } @Test void deleteAllNullEntityTest() { - SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = + new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.deleteAll(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null list of entities is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null list of entities is required."); } @Test void saveAllNullEntityTest() { - SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = + new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.saveAll(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null list of entities is required for saving."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null list of entities is required for saving."); } @Test @@ -188,13 +191,13 @@ void findByIdTest() { void findByIdKeyWritingThrowsAnException() { when(this.entityProcessor.convertToKey(any())).thenThrow(SpannerDataException.class); - SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = + new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.findById(new Object[] {})) - .isInstanceOf(SpannerDataException.class); + .isInstanceOf(SpannerDataException.class); } - @Test void existsByIdTestFound() { when(this.entityProcessor.convertToKey(A_KEY)).thenReturn(A_KEY); @@ -285,8 +288,7 @@ void findAllById_failsOnNull() { void findAllById_shortcutsToEmptyReturn() { SimpleSpannerRepository repo = new SimpleSpannerRepository<>(this.template, Object.class); - assertThat(repo.findAllById(new ArrayList<>())) - .isEmpty(); + assertThat(repo.findAllById(new ArrayList<>())).isEmpty(); verifyNoInteractions(this.template); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java index aab77e3191..d68592e77a 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java @@ -73,10 +73,11 @@ void getEntityInformationNotAvailableTest() { new SpannerRepositoryFactory(mock(SpannerMappingContext.class), this.spannerTemplate); assertThatThrownBy(() -> factory.getEntityInformation(TestEntity.class)) - .isInstanceOf(MappingException.class) - .hasMessage("Could not lookup mapping metadata for domain " - + "class com.google.cloud.spring.data.spanner.repository.support." - + "SpannerRepositoryFactoryTests$TestEntity!"); + .isInstanceOf(MappingException.class) + .hasMessage( + "Could not lookup mapping metadata for domain " + + "class com.google.cloud.spring.data.spanner.repository.support." + + "SpannerRepositoryFactoryTests$TestEntity!"); } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/SingerRepository.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/SingerRepository.java index 4c0a1b1498..75c4ab5d34 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/SingerRepository.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/SingerRepository.java @@ -26,5 +26,8 @@ public interface SingerRepository extends SpannerRepository { value = "INSERT INTO singers_list (singerId, firstName, lastName) VALUES (@singerId, @firstName," + " @lastName)") - void insert(@Param("singerId") Integer singerId, @Param("firstName") String firstName, @Param("lastName") String lastName); + void insert( + @Param("singerId") Integer singerId, + @Param("firstName") String firstName, + @Param("lastName") String lastName); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/Trade.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/Trade.java index 3e211cd337..c768292482 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/Trade.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/Trade.java @@ -325,8 +325,7 @@ public List
getAdditionalDetails() { return additionalDetails; } - public void setAdditionalDetails( - List
additionalDetails) { + public void setAdditionalDetails(List
additionalDetails) { this.additionalDetails = additionalDetails; } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/TradeRepository.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/TradeRepository.java index aa75ab52a6..3391f983c3 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/TradeRepository.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/TradeRepository.java @@ -152,6 +152,7 @@ public interface TradeRepository extends SpannerRepository { @NonNull Trade getByAction(String s); - @Query("SELECT symbol from :com.google.cloud.spring.data.spanner.test.domain.Trade: where id = @id") + @Query( + "SELECT symbol from :com.google.cloud.spring.data.spanner.test.domain.Trade: where id = @id") Optional getSymbolById(@Param("id") String id); } diff --git a/spring-cloud-gcp-data-spanner/src/test/resources/logback-test.xml b/spring-cloud-gcp-data-spanner/src/test/resources/logback-test.xml index e1d2038170..842c0b5cf0 100644 --- a/spring-cloud-gcp-data-spanner/src/test/resources/logback-test.xml +++ b/spring-cloud-gcp-data-spanner/src/test/resources/logback-test.xml @@ -1,16 +1,16 @@ - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + - + - - - + + + From 69b95d63669f5697ba8cb80d0498ed2d9564ff7a Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 13 Dec 2024 17:28:43 -0500 Subject: [PATCH 14/96] Revert "format" This reverts commit 290c7a2dbf99a8482ee8053c9dd0030001489ef6. --- .../aot/DatastoreCoreRuntimeHints.java | 3 +- .../aot/DatastoreQueryRuntimeHints.java | 3 +- .../datastore/core/DatastoreOperations.java | 8 +- .../datastore/core/DatastoreTemplate.java | 20 +- .../DefaultDatastoreEntityConverter.java | 6 +- .../core/convert/TwoStepsConversions.java | 54 +- .../data/datastore/core/util/SliceUtil.java | 2 +- .../config/DatastoreAuditingRegistrar.java | 2 +- .../repository/query/GqlDatastoreQuery.java | 29 +- .../support/DatastoreRepositoryFactory.java | 11 +- .../data/datastore/aot/TestRuntimeHints.java | 28 +- .../core/DatastoreTemplateAuditingTests.java | 3 +- .../core/DatastoreTemplateTests.java | 182 ++-- .../DatastoreTransactionManagerTests.java | 12 +- .../DatastoreTransactionTemplateTests.java | 14 +- ...tastoreServiceObjectToKeyFactoryTests.java | 51 +- .../DefaultDatastoreEntityConverterTests.java | 117 +-- .../EntityPropertyValueProviderTests.java | 7 +- .../DatastorePersistentEntityImplTests.java | 48 +- .../DatastorePersistentPropertyImplTests.java | 48 +- .../it/DatastoreIntegrationTests.java | 11 +- .../it/ParallelDatastoreIntegrationTests.java | 9 +- .../descendants/testdomains/EntityA.java | 3 +- .../it/testdomains/AncestorEntity.java | 6 +- .../data/datastore/it/testdomains/Event.java | 3 +- .../datastore/it/testdomains/LazyEntity.java | 3 +- .../it/testdomains/ReferenceLazyEntity.java | 3 +- .../DatastoreQueryLookupStrategyTests.java | 3 +- .../query/GqlDatastoreQueryTests.java | 3 +- .../query/PartTreeDatastoreQueryTests.java | 957 +++++++++--------- .../DatastoreRepositoryFactoryTests.java | 7 +- .../SimpleDatastoreRepositoryTests.java | 21 +- .../src/test/resources/index.yaml | 18 +- .../src/test/resources/logback-test.xml | 20 +- .../core/SpannerMutationFactoryImpl.java | 3 +- .../admin/SpannerDatabaseAdminTemplate.java | 9 +- ...verterAwareMappingSpannerEntityReader.java | 3 +- ...verterAwareMappingSpannerEntityWriter.java | 1 + .../core/convert/SpannerConverters.java | 1 - .../spanner/core/convert/StructAccessor.java | 14 +- .../convert/StructPropertyValueProvider.java | 5 +- .../SpannerPersistentPropertyImpl.java | 3 +- .../spanner/repository/SpannerRepository.java | 4 +- .../config/SpannerAuditingRegistrar.java | 2 +- .../query/SpannerStatementQueryExecutor.java | 3 +- .../repository/query/SqlSpannerQuery.java | 16 +- .../support/SpannerRepositoryFactory.java | 59 +- .../SpannerSchemaUtilsRuntimeHintsTests.java | 4 +- .../core/SpannerMutationFactoryImplTests.java | 24 +- .../spanner/core/SpannerReadOptionsTests.java | 8 +- .../SpannerSortPageQueryOptionsTests.java | 4 +- .../spanner/core/SpannerTemplateTests.java | 120 +-- ...pannerTemplateTransactionManagerTests.java | 8 +- .../SpannerDatabaseAdminTemplateTests.java | 16 +- .../core/admin/SpannerSchemaUtilsTests.java | 6 +- .../core/convert/KeyConversionTests.java | 1 + .../SpannerWriteMethodCoverageTests.java | 6 +- .../it/SpannerTemplateIntegrationTests.java | 19 +- .../core/mapping/SpannerKeyPropertyTests.java | 12 +- .../SpannerPersistentEntityImplTests.java | 108 +- .../SpannerPersistentPropertyImplTests.java | 65 +- .../typeadapter/InstantTypeAdapterTest.java | 1 + ...annerRepositoryInsertIntegrationTests.java | 1 + .../query/SpannerQueryMethodTests.java | 3 +- .../query/SpannerStatementQueryTests.java | 48 +- .../query/SqlSpannerQueryTests.java | 153 ++- .../support/SimpleSpannerRepositoryTests.java | 70 +- .../SpannerRepositoryFactoryTests.java | 9 +- .../spanner/test/domain/SingerRepository.java | 5 +- .../data/spanner/test/domain/Trade.java | 3 +- .../spanner/test/domain/TradeRepository.java | 3 +- .../src/test/resources/logback-test.xml | 22 +- 72 files changed, 1191 insertions(+), 1366 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreCoreRuntimeHints.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreCoreRuntimeHints.java index eaa31c6700..c39bdbc9f3 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreCoreRuntimeHints.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreCoreRuntimeHints.java @@ -29,7 +29,8 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) { hints .reflection() .registerTypes( - Arrays.asList(TypeReference.of(java.util.HashMap.class)), + Arrays.asList( + TypeReference.of(java.util.HashMap.class)), hint -> hint.withMembers( MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreQueryRuntimeHints.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreQueryRuntimeHints.java index 837af66a71..34f6bc3c1d 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreQueryRuntimeHints.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/aot/DatastoreQueryRuntimeHints.java @@ -30,7 +30,8 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) { hints .reflection() .registerTypes( - Arrays.asList(TypeReference.of(DatastorePageable.class)), + Arrays.asList( + TypeReference.of(DatastorePageable.class)), hint -> hint.withMembers( MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreOperations.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreOperations.java index dc096e485d..f04799c441 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreOperations.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreOperations.java @@ -73,8 +73,8 @@ public interface DatastoreOperations { Iterable saveAll(Iterable entities, Key... ancestors); /** - * Inserts an instance of an object to Cloud Datastore. Throws a DatastoreException if an entry - * with same ID already exists. Ancestors can be added only to entries with Key ids. + * Inserts an instance of an object to Cloud Datastore. Throws a DatastoreException if an entry with same ID + * already exists. Ancestors can be added only to entries with Key ids. * * @param instance the instance to save. * @param ancestors ancestors that should be added to the entry @@ -85,8 +85,8 @@ public interface DatastoreOperations { T insert(T instance, Key... ancestors); /** - * Saves multiple instances of objects to Cloud Datastore. Throws a DatastoreException if any - * entry with one of the IDs already exists. Ancestors can be added only to entries with Key ids. + * Saves multiple instances of objects to Cloud Datastore. Throws a DatastoreException if any entry with one of + * the IDs already exists. Ancestors can be added only to entries with Key ids. * * @param entities the objects to save. * @param ancestors ancestors that should be added to each entry diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplate.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplate.java index 8bcfc098ed..afe0818728 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplate.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplate.java @@ -176,8 +176,7 @@ public Iterable insertAll(final Iterable entities, final Key... ancest return entities; } - private void insertOrSaveEntities( - Iterable iterable, Key[] ancestors, Consumer[]> consumer) { + private void insertOrSaveEntities(Iterable iterable, Key[] ancestors, Consumer[]> consumer) { List instances; if (iterable instanceof List) { instances = (List) iterable; @@ -256,17 +255,16 @@ private void performDelete(Key[] keys, Iterable ids, Iterable entities, Class en @Override public long count(Class entityClass) { - KeyQuery baseQuery = - Query.newKeyQueryBuilder().setKind(getPersistentEntity(entityClass).kindName()).build(); + KeyQuery baseQuery = Query.newKeyQueryBuilder() + .setKind(getPersistentEntity(entityClass).kindName()) + .build(); - AggregationQuery countAggregationQuery = - Query.newAggregationQueryBuilder() - .over(baseQuery) - .addAggregation(Aggregation.count().as("total_count")) - .build(); + AggregationQuery countAggregationQuery = Query.newAggregationQueryBuilder() + .over(baseQuery) + .addAggregation(Aggregation.count().as("total_count")) + .build(); - AggregationResults aggregationResults = - getDatastoreReadWriter().runAggregation(countAggregationQuery); + AggregationResults aggregationResults = getDatastoreReadWriter().runAggregation(countAggregationQuery); maybeEmitEvent(new AfterQueryEvent(aggregationResults, countAggregationQuery)); AggregationResult aggregationResult = Iterables.getOnlyElement(aggregationResults); return aggregationResult.get("total_count"); diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverter.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverter.java index 6f350ae4fa..8f9f18c2e7 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverter.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverter.java @@ -226,7 +226,8 @@ public void write(Object source, @NonNull BaseEntity.Builder sink) { List discriminationValues = persistentEntity.getCompatibleDiscriminationValues(); if (!discriminationValues.isEmpty() || discriminationFieldName != null) { sink.set( - discriminationFieldName, discriminationValues.stream().map(StringValue::of).toList()); + discriminationFieldName, + discriminationValues.stream().map(StringValue::of).toList()); } PersistentPropertyAccessor accessor = persistentEntity.getPropertyAccessor(source); persistentEntity.doWithColumnBackedProperties( @@ -268,7 +269,8 @@ private Value setExcludeFromIndexes(Value convertedVal) { } else if (convertedVal.getClass().equals(ListValue.class)) { return ListValue.of( (List) - ((ListValue) convertedVal).get().stream().map(this::setExcludeFromIndexes).toList()); + ((ListValue) convertedVal) + .get().stream().map(this::setExcludeFromIndexes).toList()); } else { return convertedVal.toBuilder().setExcludeFromIndexes(true).build(); } diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/TwoStepsConversions.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/TwoStepsConversions.java index ded3a9b173..144f1c5ff6 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/TwoStepsConversions.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/convert/TwoStepsConversions.java @@ -138,18 +138,16 @@ private T convertOnRead( if (val == null) { return null; } - BiFunction, ?> readConverter = - switch (embeddedType) { - case EMBEDDED_MAP -> - (x, typeInformation) -> - convertOnReadSingleEmbeddedMap( - x, - Objects.requireNonNull(typeInformation.getComponentType()).getType(), - typeInformation.getMapValueType(), - targetComponentType); - case EMBEDDED_ENTITY -> this::convertOnReadSingleEmbedded; - case NOT_EMBEDDED -> this::convertOnReadSingle; - }; + BiFunction, ?> readConverter = switch (embeddedType) { + case EMBEDDED_MAP -> (x, typeInformation) -> + convertOnReadSingleEmbeddedMap( + x, + Objects.requireNonNull(typeInformation.getComponentType()).getType(), + typeInformation.getMapValueType(), + targetComponentType); + case EMBEDDED_ENTITY -> this::convertOnReadSingleEmbedded; + case NOT_EMBEDDED -> this::convertOnReadSingle; + }; if (ValueUtil.isCollectionLike(val.getClass()) && targetCollectionType != null @@ -193,7 +191,8 @@ private T convertOnReadSingleEmbedded( Object value, TypeInformation targetTypeInformation) { Assert.notNull(value, "Cannot convert a null value."); if (value instanceof BaseEntity baseEntity) { - return (T) this.datastoreEntityConverter.read(targetTypeInformation.getType(), baseEntity); + return (T) + this.datastoreEntityConverter.read(targetTypeInformation.getType(), baseEntity); } throw new DatastoreDataException( "Embedded entity was expected, but " + value.getClass() + " found"); @@ -262,15 +261,12 @@ private Value convertOnWrite( Function writeConverter = this::convertOnWriteSingle; if (proppertyVal != null) { - writeConverter = - switch (embeddedType) { - case EMBEDDED_MAP -> - x -> - convertOnWriteSingleEmbeddedMap( - x, fieldName, typeInformation.getMapValueType()); - case EMBEDDED_ENTITY -> x -> convertOnWriteSingleEmbedded(x, fieldName); - case NOT_EMBEDDED -> this::convertOnWriteSingle; - }; + writeConverter = switch (embeddedType) { + case EMBEDDED_MAP -> x -> convertOnWriteSingleEmbeddedMap(x, fieldName, + typeInformation.getMapValueType()); + case EMBEDDED_ENTITY -> x -> convertOnWriteSingleEmbedded(x, fieldName); + case NOT_EMBEDDED -> this::convertOnWriteSingle; + }; } val = ValueUtil.toListIfArray(val); @@ -293,16 +289,16 @@ private EntityValue applyEntityValueBuilder( builder = FullEntity.newBuilder(); } else { /* The following does 3 sequential null checks. We only want an ID value if the object isn't null, - has an ID property, and the ID property isn't null. - */ + has an ID property, and the ID property isn't null. + */ Optional idProp = Optional.ofNullable(val) .map(v -> this.datastoreMappingContext.getPersistentEntity(v.getClass())) .map(PersistentEntity::getIdProperty) .map( id -> - Objects.requireNonNull( - this.datastoreMappingContext.getPersistentEntity(val.getClass())) + Objects.requireNonNull(this.datastoreMappingContext + .getPersistentEntity(val.getClass())) .getPropertyAccessor(val) .getProperty(id)); @@ -325,7 +321,8 @@ private EntityValue convertOnWriteSingleEmbeddedMap( for (Map.Entry e : ((Map) val).entrySet()) { String field = convertOnReadSingle( - convertOnWriteSingle(e.getKey()).get(), TypeInformation.of(String.class)); + convertOnWriteSingle(e.getKey()).get(), + TypeInformation.of(String.class)); builder.set( field, convertOnWrite( @@ -415,7 +412,8 @@ public void registerEntityConverter(DatastoreEntityConverter datastoreEntityConv this.datastoreEntityConverter = datastoreEntityConverter; } - private record TypeTargets(Class firstStepTarget, Class secondStepTarget) { + private record TypeTargets(Class firstStepTarget, + Class secondStepTarget) { Class getFirstStepTarget() { return this.firstStepTarget; diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/util/SliceUtil.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/util/SliceUtil.java index bf5d04ad19..a71c8cf335 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/util/SliceUtil.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/core/util/SliceUtil.java @@ -20,7 +20,7 @@ import java.util.function.Consumer; /** - * @since 1.2 + * @since 1.2 */ public final class SliceUtil { diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/config/DatastoreAuditingRegistrar.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/config/DatastoreAuditingRegistrar.java index 64321f08c0..617e96c941 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/config/DatastoreAuditingRegistrar.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/config/DatastoreAuditingRegistrar.java @@ -59,7 +59,7 @@ protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder( AuditingConfiguration configuration) { return configureDefaultAuditHandlerAttributes( configuration, BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class)) - .addConstructorArgValue(PersistentEntities.of(new DatastoreMappingContext())); + .addConstructorArgValue(PersistentEntities.of(new DatastoreMappingContext())); } @Override diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java index 6358ed263a..ce49d16720 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java @@ -56,8 +56,11 @@ import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersParameterAccessor; +import org.springframework.data.repository.query.SpelEvaluator; +import org.springframework.data.repository.query.SpelQueryContext; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.data.repository.query.ValueExpressionQueryRewriter; +import org.springframework.expression.spel.standard.SpelCompiler; import org.springframework.util.StringUtils; /** @@ -83,8 +86,7 @@ public class GqlDatastoreQuery extends AbstractDatastoreQuery { private final ValueExpressionDelegate valueExpressionDelegate; - private ValueExpressionQueryRewriter.EvaluatingValueExpressionQueryRewriter - valueExpressionQueryRewriter; + private ValueExpressionQueryRewriter.EvaluatingValueExpressionQueryRewriter valueExpressionQueryRewriter; /** * Constructor. @@ -314,19 +316,16 @@ private void setGqlResolvedEntityClassName() { private void setEvaluatingSpelQueryContext() { Set originalTags = new HashSet<>(GqlDatastoreQuery.this.originalParamTags); - GqlDatastoreQuery.this.valueExpressionQueryRewriter = - ValueExpressionQueryRewriter.of( - valueExpressionDelegate, - (counter, spelExpression) -> { - String newTag; - do { - counter++; - newTag = "@SpELtag" + counter; - } while (originalTags.contains(newTag)); - originalTags.add(newTag); - return newTag; - }, - String::concat) + GqlDatastoreQuery.this.valueExpressionQueryRewriter = ValueExpressionQueryRewriter.of(valueExpressionDelegate, + (counter, spelExpression) -> { + String newTag; + do { + counter++; + newTag = "@SpELtag" + counter; + } while (originalTags.contains(newTag)); + originalTags.add(newTag); + return newTag; + }, String::concat) .withEvaluationContextAccessor(valueExpressionDelegate.getEvaluationContextAccessor()); } diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java index be484bef0e..26e71c7db3 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java @@ -25,14 +25,21 @@ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.expression.BeanFactoryAccessor; +import org.springframework.context.expression.BeanFactoryResolver; import org.springframework.data.mapping.MappingException; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryFactorySupport; +import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; +import org.springframework.data.spel.ExpressionDependencies; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -96,7 +103,9 @@ protected Optional getQueryLookupStrategy( return Optional.of( new DatastoreQueryLookupStrategy( - this.datastoreMappingContext, this.datastoreOperations, valueExpressionDelegate)); + this.datastoreMappingContext, + this.datastoreOperations, + valueExpressionDelegate)); } @Override diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/aot/TestRuntimeHints.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/aot/TestRuntimeHints.java index 34b2303e2e..62210a6c4c 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/aot/TestRuntimeHints.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/aot/TestRuntimeHints.java @@ -38,7 +38,9 @@ import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeReference; -/** Runtime hints for integration test. */ +/** + * Runtime hints for integration test. + */ public class TestRuntimeHints implements RuntimeHintsRegistrar { @Override @@ -63,24 +65,12 @@ public void registerHints(RuntimeHints hints, ClassLoader classLoader) { TypeReference.of(ServiceConfiguration.class), TypeReference.of(SubEntity.class), TypeReference.of(TreeCollection.class), - TypeReference.of( - com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains - .EntityA.class), - TypeReference.of( - com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains - .EntityB.class), - TypeReference.of( - com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains - .EntityC.class), - TypeReference.of( - com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains - .EntityA.class), - TypeReference.of( - com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains - .EntityB.class), - TypeReference.of( - com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains - .EntityC.class)), + TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains.EntityA.class), + TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains.EntityB.class), + TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.references.testdomains.EntityC.class), + TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains.EntityA.class), + TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains.EntityB.class), + TypeReference.of(com.google.cloud.spring.data.datastore.it.subclasses.descendants.testdomains.EntityC.class)), hint -> hint.withMembers( MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateAuditingTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateAuditingTests.java index 03a23c08ad..b109fa68be 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateAuditingTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateAuditingTests.java @@ -155,6 +155,7 @@ private static class TestEntity { @LastModifiedBy String lastUser; - @LastModifiedDate Instant lastTouched; + @LastModifiedDate + Instant lastTouched; } } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateTests.java index 5e2343711e..b2c8b40431 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTemplateTests.java @@ -584,7 +584,8 @@ void saveOrInsertReferenceLoopTest(SaveOrInsertMethod method) { datastorePutOrAddAll(method, ArgumentMatchers.any()), Collections.singletonList(this.e1)); - assertThat(saveOrInsert(method, referenceTestEntity)).isInstanceOf(ReferenceTestEntity.class); + assertThat(saveOrInsert(method, referenceTestEntity)) + .isInstanceOf(ReferenceTestEntity.class); Entity writtenEntity = Entity.newBuilder(this.key1).set("sibling", this.key1).build(); @@ -641,24 +642,23 @@ void saveOrInsertTestCommon(SaveOrInsertMethod method, TestEntity parent, boolea Entity writtenChildEntity7 = Entity.newBuilder(this.childKey7).build(); when(datastorePutOrAddAll(method, ArgumentMatchers.any())) - .thenAnswer( - invocation -> { - Object[] arguments = invocation.getArguments(); - assertThat(arguments).contains(writtenEntity); - assertThat(arguments).contains(writtenChildEntity2); - assertThat(arguments).contains(writtenChildEntity3); - assertThat(arguments).contains(writtenChildEntity4); - assertThat(arguments).contains(writtenChildEntity5); - assertThat(arguments).contains(writtenChildEntity6); - if (lazy) { - assertThat(arguments).hasSize(6); - } else { - assertThat(arguments).contains(writtenChildEntity7); - assertThat(arguments).hasSize(7); - } - - return null; - }); + .thenAnswer(invocation -> { + Object[] arguments = invocation.getArguments(); + assertThat(arguments).contains(writtenEntity); + assertThat(arguments).contains(writtenChildEntity2); + assertThat(arguments).contains(writtenChildEntity3); + assertThat(arguments).contains(writtenChildEntity4); + assertThat(arguments).contains(writtenChildEntity5); + assertThat(arguments).contains(writtenChildEntity6); + if (lazy) { + assertThat(arguments).hasSize(6); + } else { + assertThat(arguments).contains(writtenChildEntity7); + assertThat(arguments).hasSize(7); + } + + return null; + }); assertThat(saveOrInsert(method, parent)).isInstanceOf(TestEntity.class); verifyPutOrAdd(method, times(1)); @@ -702,6 +702,7 @@ void saveOrInsertTestNonKeyId(SaveOrInsertMethod method) { assertThatThrownBy(() -> saveOrInsert(method, this.ob1, testKey)) .isInstanceOf(DatastoreDataException.class) .hasMessage("Only Key types are allowed for descendants id"); + } @ParameterizedTest @@ -786,19 +787,18 @@ void saveOrInsertAndAllocateIdTest(SaveOrInsertMethod method) { Entity writtenChildEntity7 = Entity.newBuilder(this.childKey7).build(); when(datastorePutOrAddAll(method, ArgumentMatchers.any())) - .thenAnswer( - invocation -> { - assertThat(invocation.getArguments()) - .containsExactlyInAnyOrder( - writtenChildEntity2, - writtenChildEntity3, - writtenChildEntity4, - writtenChildEntity5, - writtenChildEntity6, - writtenEntity1, - writtenChildEntity7); - return null; - }); + .thenAnswer(invocation -> { + assertThat(invocation.getArguments()) + .containsExactlyInAnyOrder( + writtenChildEntity2, + writtenChildEntity3, + writtenChildEntity4, + writtenChildEntity5, + writtenChildEntity6, + writtenEntity1, + writtenChildEntity7); + return null; + }); assertThat(saveOrInsert(method, this.ob1)).isInstanceOf(TestEntity.class); verifyPutOrAdd(method, times(1)); @@ -828,20 +828,19 @@ void saveOrInsertAllTest(SaveOrInsertMethod method) { Entity writtenChildEntity7 = Entity.newBuilder(this.childKey7).build(); when(datastorePutOrAddAll(method, ArgumentMatchers.any())) - .thenAnswer( - invocation -> { - assertThat(invocation.getArguments()) - .containsExactlyInAnyOrder( - writtenChildEntity2, - writtenChildEntity3, - writtenChildEntity4, - writtenChildEntity5, - writtenChildEntity6, - writtenEntity1, - writtenEntity2, - writtenChildEntity7); - return null; - }); + .thenAnswer(invocation -> { + assertThat(invocation.getArguments()) + .containsExactlyInAnyOrder( + writtenChildEntity2, + writtenChildEntity3, + writtenChildEntity4, + writtenChildEntity5, + writtenChildEntity6, + writtenEntity1, + writtenEntity2, + writtenChildEntity7); + return null; + }); List expected = Arrays.asList( @@ -903,13 +902,12 @@ void saveOrInsertAllMaxWriteSizeTest(SaveOrInsertMethod method) { writtenEntity1, writtenEntity2)); when(datastorePutOrAddAll(method, ArgumentMatchers.any())) - .thenAnswer( - invocation -> { - assertThat(invocation.getArguments()).hasSize(1); - assertThat(entities).contains((Entity) invocation.getArguments()[0]); - entities.remove(invocation.getArguments()[0]); - return null; - }); + .thenAnswer(invocation -> { + assertThat(invocation.getArguments()).hasSize(1); + assertThat(entities).contains((Entity) invocation.getArguments()[0]); + entities.remove(invocation.getArguments()[0]); + return null; + }); List expected = Arrays.asList( @@ -951,8 +949,8 @@ private T saveOrInsert(SaveOrInsertMethod method, T instance, Key... ancesto } } - private Iterable saveOrInsertAll( - SaveOrInsertMethod method, Iterable entities, Key... ancestors) { + private Iterable saveOrInsertAll(SaveOrInsertMethod method, Iterable entities, + Key... ancestors) { if (SaveOrInsertMethod.SAVE == method) { return this.datastoreTemplate.saveAll(entities, ancestors); } else { @@ -977,8 +975,7 @@ private void verifyPutOrAdd(SaveOrInsertMethod method, VerificationMode verifica } private enum SaveOrInsertMethod { - SAVE, - INSERT; + SAVE, INSERT; } @Test @@ -1058,11 +1055,10 @@ void countTest() { when(aggregationResults.iterator()).thenReturn(List.of(aggregationResult).iterator()); KeyQuery baseQuery = Query.newKeyQueryBuilder().setKind("custom_test_kind").build(); - AggregationQuery countAggregationQuery = - Query.newAggregationQueryBuilder() - .over(baseQuery) - .addAggregation(Aggregation.count().as("total_count")) - .build(); + AggregationQuery countAggregationQuery = Query.newAggregationQueryBuilder() + .over(baseQuery) + .addAggregation(Aggregation.count().as("total_count")) + .build(); when(this.datastore.runAggregation(argThat(equalsTo(countAggregationQuery)))) .thenReturn(aggregationResults); @@ -1072,9 +1068,7 @@ void countTest() { private ArgumentMatcher equalsTo(AggregationQuery expectedAggregationQuery) { return actualAggregationQuery -> expectedAggregationQuery.getAggregations().equals(actualAggregationQuery.getAggregations()) - && expectedAggregationQuery - .getNestedStructuredQuery() - .equals(actualAggregationQuery.getNestedStructuredQuery()); + && expectedAggregationQuery.getNestedStructuredQuery().equals(actualAggregationQuery.getNestedStructuredQuery()); } @Test @@ -1324,11 +1318,10 @@ void queryByExampleIgnoreFieldTest() { @Test void queryByExampleDeepPathTest() { - Example testExample = - Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withIgnorePaths("intField.a")); + Example testExample = Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withIgnorePaths("intField.a")); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Ignored paths deeper than 1 are not supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Ignored paths deeper than 1 are not supported") + .isInstanceOf(DatastoreDataException.class); } @Test @@ -1361,23 +1354,19 @@ void queryByExampleNoNullValuesTest() { @Test void queryByExampleExactMatchTest() { - Example testExample = - Example.of( - new SimpleTestEntity(), - ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.REGEX)); + Example testExample = Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.REGEX)); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Unsupported StringMatcher. Only EXACT and DEFAULT are supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Unsupported StringMatcher. Only EXACT and DEFAULT are supported") + .isInstanceOf(DatastoreDataException.class); } @Test void queryByExampleIgnoreCaseTest() { - Example testExample = - Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withIgnoreCase()); + Example testExample = Example.of(new SimpleTestEntity(), ExampleMatcher.matching().withIgnoreCase()); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Ignore case matching is not supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Ignore case matching is not supported") + .isInstanceOf(DatastoreDataException.class); } @Test @@ -1385,44 +1374,42 @@ void queryByExampleAllMatchTest() { Example testExample = Example.of(new SimpleTestEntity(), ExampleMatcher.matchingAny()); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Unsupported MatchMode. Only MatchMode.ALL is supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Unsupported MatchMode. Only MatchMode.ALL is supported") + .isInstanceOf(DatastoreDataException.class); } @Test void queryByExamplePropertyMatchersTest() { - Example testExample = - Example.of( + Example testExample = Example.of( new SimpleTestEntity(), ExampleMatcher.matching() - .withMatcher( - "id", - ExampleMatcher.GenericPropertyMatcher.of(ExampleMatcher.StringMatcher.REGEX))); - assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Property matchers are not supported") - .isInstanceOf(DatastoreDataException.class); + .withMatcher( + "id", + ExampleMatcher.GenericPropertyMatcher.of(ExampleMatcher.StringMatcher.REGEX))); + assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) + .hasMessage("Property matchers are not supported") + .isInstanceOf(DatastoreDataException.class); } @Test void queryByExampleCaseSensitiveTest() { - Example testExample = - Example.of( + Example testExample = Example.of( new SimpleTestEntity(), ExampleMatcher.matching() - .withMatcher("id", ExampleMatcher.GenericPropertyMatcher::caseSensitive)); + .withMatcher("id", ExampleMatcher.GenericPropertyMatcher::caseSensitive)); assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(testExample, null)) - .hasMessage("Property matchers are not supported") - .isInstanceOf(DatastoreDataException.class); + .hasMessage("Property matchers are not supported") + .isInstanceOf(DatastoreDataException.class); } @Test void queryByExampleNullTest() { assertThatThrownBy(() -> this.datastoreTemplate.queryByExample(null, null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null example is expected"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null example is expected"); } @Test @@ -1494,7 +1481,8 @@ private static class TestEntity { @Reference LinkedList multipleReference; - @LazyReference List lazyMultipleReference; + @LazyReference + List lazyMultipleReference; @Override public boolean equals(Object o) { diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionManagerTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionManagerTests.java index 4efb0b31b2..f357a3eb50 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionManagerTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionManagerTests.java @@ -107,9 +107,9 @@ void testDoCommitFailure() { this.tx.setTransaction(this.transaction); assertThatThrownBy(() -> this.manager.doCommit(this.status)) - .isInstanceOf(TransactionSystemException.class) - .hasMessage("Cloud Datastore transaction failed to commit.") - .hasCause(exception); + .isInstanceOf(TransactionSystemException.class) + .hasMessage("Cloud Datastore transaction failed to commit.") + .hasCause(exception); } @Test @@ -136,9 +136,9 @@ void testDoRollbackFailure() { this.tx.setTransaction(this.transaction); assertThatThrownBy(() -> this.manager.doRollback(this.status)) - .isInstanceOf(TransactionSystemException.class) - .hasMessage("Cloud Datastore transaction failed to rollback.") - .hasCause(exception); + .isInstanceOf(TransactionSystemException.class) + .hasMessage("Cloud Datastore transaction failed to rollback.") + .hasCause(exception); } @Test diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionTemplateTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionTemplateTests.java index c7ab00cb2f..d2149d1fec 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionTemplateTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/DatastoreTransactionTemplateTests.java @@ -144,20 +144,18 @@ void doWithoutTransactionTest() { void unsupportedIsolationTest() { assertThatThrownBy(() -> this.transactionalService.doNothingUnsupportedIsolation()) - .isInstanceOf(IllegalStateException.class) - .hasMessage( - "DatastoreTransactionManager supports only " - + "isolation level TransactionDefinition.ISOLATION_DEFAULT or ISOLATION_SERIALIZABLE"); + .isInstanceOf(IllegalStateException.class) + .hasMessage("DatastoreTransactionManager supports only " + + "isolation level TransactionDefinition.ISOLATION_DEFAULT or ISOLATION_SERIALIZABLE"); } @Test void unsupportedPropagationTest() { assertThatThrownBy(() -> this.transactionalService.doNothingUnsupportedPropagation()) - .isInstanceOf(IllegalStateException.class) - .hasMessage( - "DatastoreTransactionManager supports only " - + "propagation behavior TransactionDefinition.PROPAGATION_REQUIRED"); + .isInstanceOf(IllegalStateException.class) + .hasMessage("DatastoreTransactionManager supports only " + + "propagation behavior TransactionDefinition.PROPAGATION_REQUIRED"); } /** Spring config for the tests. */ diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DatastoreServiceObjectToKeyFactoryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DatastoreServiceObjectToKeyFactoryTests.java index e609f4b17a..0bf821c6a9 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DatastoreServiceObjectToKeyFactoryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DatastoreServiceObjectToKeyFactoryTests.java @@ -68,10 +68,9 @@ void getKeyFromIdLongTest() { @Test void getKeyFromIdExceptionTest() { when(this.datastore.newKeyFactory()).thenReturn(new KeyFactory("p").setKind("k")); - assertThatThrownBy( - () -> this.datastoreServiceObjectToKeyFactory.getKeyFromId(true, "custom_test_kind")) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Keys can only be created using String or long values."); + assertThatThrownBy(() -> this.datastoreServiceObjectToKeyFactory.getKeyFromId(true, "custom_test_kind")) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Keys can only be created using String or long values."); } @Test @@ -91,17 +90,14 @@ void getKeyTest() { @Test void getKeyNoIdTest() { - DatastorePersistentEntity dpeTest = - this.datastoreMappingContext.getPersistentEntity(TestEntityNoId.class); + DatastorePersistentEntity dpeTest = this.datastoreMappingContext.getPersistentEntity(TestEntityNoId.class); Object entity = new TestEntityNoId(); - assertThatThrownBy( - () -> this.datastoreServiceObjectToKeyFactory.getKeyFromObject(entity, dpeTest)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage( - "An ID property was required but does not exist for the type: " - + "class com.google.cloud.spring.data.datastore.core.convert." - + "DatastoreServiceObjectToKeyFactoryTests$TestEntityNoId"); + assertThatThrownBy(() -> this.datastoreServiceObjectToKeyFactory.getKeyFromObject(entity, dpeTest)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("An ID property was required but does not exist for the type: " + + "class com.google.cloud.spring.data.datastore.core.convert." + + "DatastoreServiceObjectToKeyFactoryTests$TestEntityNoId"); } @Test @@ -159,17 +155,13 @@ void allocateIdForObjectNonKeyIdTest() { KeyFactory keyFactory = new KeyFactory("project").setKind("kind"); Key testKey = keyFactory.newKey("ancestor"); - DatastorePersistentEntity dpeTest = - this.datastoreMappingContext.getPersistentEntity(testEntityWithId.getClass()); + DatastorePersistentEntity dpeTest = this.datastoreMappingContext.getPersistentEntity(testEntityWithId.getClass()); when(this.datastore.newKeyFactory()).thenReturn(keyFactory); - assertThatThrownBy( - () -> - this.datastoreServiceObjectToKeyFactory.allocateKeyForObject( - testEntityWithId, dpeTest, testKey)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Only Key types are allowed for descendants id"); + assertThatThrownBy(() -> this.datastoreServiceObjectToKeyFactory.allocateKeyForObject(testEntityWithId, dpeTest, testKey)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Only Key types are allowed for descendants id"); } @Test @@ -179,17 +171,12 @@ void allocateIdForObjectUnsupportedKeyTypeIdTest() { KeyFactory keyFactory = new KeyFactory("project").setKind("kind"); Key testKey = keyFactory.newKey("key"); when(this.datastore.newKeyFactory()).thenReturn(keyFactory); - DatastorePersistentEntity dpeTest = - this.datastoreMappingContext.getPersistentEntity(testEntityWithStringId.getClass()); - - assertThatThrownBy( - () -> - this.datastoreServiceObjectToKeyFactory.allocateKeyForObject( - testEntityWithStringId, dpeTest, testKey)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage( - "Cloud Datastore can only allocate IDs for Long and Key properties. " - + "Cannot allocate for type: class java.lang.String"); + DatastorePersistentEntity dpeTest = this.datastoreMappingContext.getPersistentEntity(testEntityWithStringId.getClass()); + + assertThatThrownBy(() -> this.datastoreServiceObjectToKeyFactory.allocateKeyForObject(testEntityWithStringId, dpeTest, testKey)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Cloud Datastore can only allocate IDs for Long and Key properties. " + + "Cannot allocate for type: class java.lang.String"); } @com.google.cloud.spring.data.datastore.core.mapping.Entity(name = "custom_test_kind") diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverterTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverterTests.java index 8b8d31347c..a6d14b2906 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverterTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/DefaultDatastoreEntityConverterTests.java @@ -197,10 +197,8 @@ void conflictingDiscriminationTest() { .build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(DiscrimEntityY.class, entityY)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining( - "More than one class in an inheritance hierarchy " - + "has the same DiscriminatorValue: "); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("More than one class in an inheritance hierarchy " + "has the same DiscriminatorValue: "); } @Test @@ -227,16 +225,13 @@ void readNullTest() { @Test void testWrongTypeReadException() { - Entity entity = - getEntityBuilder().set("stringField", "string value").set("boolField", 123L).build(); + Entity entity = getEntityBuilder().set("stringField", "string value").set("boolField", 123L).build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(TestDatastoreItem.class, entity)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining( - "Unable to read " - + "com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItem entity") - .hasStackTraceContaining("Unable to read property boolField") - .hasStackTraceContaining( - "Unable to convert class java.lang.Long to class java.lang.Boolean"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("Unable to read " + + "com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItem entity") + .hasStackTraceContaining("Unable to read property boolField") + .hasStackTraceContaining("Unable to convert class java.lang.Long to class java.lang.Boolean"); } @Test @@ -246,8 +241,8 @@ void testObjectEntityException() { getEntityBuilder().set("stringField", "string value").set("boolField", 123L).build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(Object.class, entity)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage("Unable to convert Datastore Entity to class java.lang.Object"); + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Unable to convert Datastore Entity to class java.lang.Object"); } @Test @@ -260,14 +255,12 @@ void testWrongTypeReadExceptionList() { .build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(TestDatastoreItem.class, entity)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining( - "Unable to read " - + "com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItem entity") - .hasStackTraceContaining("Unable to read property boolField") - .hasStackTraceContaining( - "Unable to convert class " - + "com.google.common.collect.SingletonImmutableList to class java.lang.Boolean"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("Unable to read " + + "com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItem entity") + .hasStackTraceContaining("Unable to read property boolField") + .hasStackTraceContaining("Unable to convert class " + + "com.google.common.collect.SingletonImmutableList to class java.lang.Boolean"); } @Test @@ -370,12 +363,11 @@ void testUnsupportedTypeWriteException() { Entity.Builder builder = getEntityBuilder(); assertThatThrownBy(() -> ENTITY_CONVERTER.write(item, builder)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("Unable to write testItemUnsupportedFields.unsupportedField") - .hasStackTraceContaining( - "Unable to convert class " - + "com.google.cloud.spring.data.datastore.core.convert." - + "TestItemUnsupportedFields$NewType to Datastore supported type."); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("Unable to write testItemUnsupportedFields.unsupportedField") + .hasStackTraceContaining("Unable to convert class " + + "com.google.cloud.spring.data.datastore.core.convert." + + "TestItemUnsupportedFields$NewType to Datastore supported type."); } @Test @@ -410,8 +402,7 @@ void testUnsupportedTypeWrite() { @Test void testCollectionFieldsUnsupportedCollection() { - ComparableBeanContextSupport comparableBeanContextSupport = - new ComparableBeanContextSupport<>(); + ComparableBeanContextSupport comparableBeanContextSupport = new ComparableBeanContextSupport<>(); comparableBeanContextSupport.add("this implementation of Collection"); comparableBeanContextSupport.add("is unsupported out of the box!"); @@ -429,15 +420,13 @@ void testCollectionFieldsUnsupportedCollection() { Entity entity = builder.build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(TestDatastoreItemCollections.class, entity)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining( - "Unable to read" - + " com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItemCollections" - + " entity") - .hasStackTraceContaining("Unable to read property beanContext") - .hasStackTraceContaining( - "Failed to convert from type [java.util.ImmutableCollections$ListN] to type" - + " [com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItemCollections$ComparableBeanContextSupport]"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("Unable to read" + + " com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItemCollections" + + " entity") + .hasStackTraceContaining("Unable to read property beanContext") + .hasStackTraceContaining("Failed to convert from type [java.util.ImmutableCollections$ListN] to type" + + " [com.google.cloud.spring.data.datastore.core.convert.TestDatastoreItemCollections$ComparableBeanContextSupport]"); } @Test @@ -559,12 +548,11 @@ void testCollectionFieldsUnsupported() { Entity.Builder builder = getEntityBuilder(); assertThatThrownBy(() -> ENTITY_CONVERTER.write(item, builder)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("Unable to write collectionOfUnsupportedTypes.unsupportedElts") - .hasStackTraceContaining( - "Unable to convert " - + "class com.google.cloud.spring.data.datastore.core.convert." - + "TestItemUnsupportedFields$NewType to Datastore supported type."); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("Unable to write collectionOfUnsupportedTypes.unsupportedElts") + .hasStackTraceContaining("Unable to convert " + + "class com.google.cloud.spring.data.datastore.core.convert." + + "TestItemUnsupportedFields$NewType to Datastore supported type."); } @Test @@ -594,8 +582,7 @@ void testCollectionFieldsUnsupportedWriteOnly() { @Test void testCollectionFieldsUnsupportedWriteReadException() { - TestItemUnsupportedFields.CollectionOfUnsupportedTypes item = - getCollectionOfUnsupportedTypesItem(); + TestItemUnsupportedFields.CollectionOfUnsupportedTypes item = getCollectionOfUnsupportedTypesItem(); DatastoreEntityConverter entityConverter = new DefaultDatastoreEntityConverter( @@ -613,16 +600,14 @@ void testCollectionFieldsUnsupportedWriteReadException() { Class parameter = TestItemUnsupportedFields.CollectionOfUnsupportedTypes.class; assertThatThrownBy(() -> entityConverter.read(parameter, entity)) - .hasStackTraceContaining("Unable to read property unsupportedElts") - .hasStackTraceContaining("Unable process elements of a collection") - .hasStackTraceContaining( - "No converter found capable of converting from type [java.lang.Integer] " - + "to type [com.google.cloud.spring.data.datastore.core.convert." - + "TestItemUnsupportedFields$NewType]") - .hasStackTraceContaining( - "Unable to read com.google.cloud.spring.data.datastore.core.convert." - + "TestItemUnsupportedFields$CollectionOfUnsupportedTypes entity") - .isInstanceOf(DatastoreDataException.class); + .hasStackTraceContaining("Unable to read property unsupportedElts") + .hasStackTraceContaining("Unable process elements of a collection") + .hasStackTraceContaining("No converter found capable of converting from type [java.lang.Integer] " + + "to type [com.google.cloud.spring.data.datastore.core.convert." + + "TestItemUnsupportedFields$NewType]") + .hasStackTraceContaining("Unable to read com.google.cloud.spring.data.datastore.core.convert." + + "TestItemUnsupportedFields$CollectionOfUnsupportedTypes entity") + .isInstanceOf(DatastoreDataException.class); } @Test @@ -907,25 +892,21 @@ void privateCustomMapExceptionTest() { @Test void testMismatchedStringIdLongProperty() { - Entity testEntity = - Entity.newBuilder(this.datastore.newKeyFactory().setKind("aKind").newKey("a")).build(); + Entity testEntity = Entity.newBuilder(this.datastore.newKeyFactory().setKind("aKind").newKey("a")).build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(LongIdEntity.class, testEntity)) - .isInstanceOf(ConversionFailedException.class) - .hasStackTraceContaining( - "The given key doesn't have a numeric ID but a conversion to Long was attempted"); + .isInstanceOf(ConversionFailedException.class) + .hasStackTraceContaining("The given key doesn't have a numeric ID but a conversion to Long was attempted"); } @Test void testMismatchedLongIdStringProperty() { - Entity testEntity = - Entity.newBuilder(this.datastore.newKeyFactory().setKind("aKind").newKey(1)).build(); + Entity testEntity = Entity.newBuilder(this.datastore.newKeyFactory().setKind("aKind").newKey(1)).build(); assertThatThrownBy(() -> ENTITY_CONVERTER.read(StringIdEntity.class, testEntity)) - .isInstanceOf(ConversionFailedException.class) - .hasStackTraceContaining( - "The given key doesn't have a String name value but a conversion to String was attempted"); + .isInstanceOf(ConversionFailedException.class) + .hasStackTraceContaining("The given key doesn't have a String name value but a conversion to String was attempted"); } private Entity.Builder getEntityBuilder() { diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/EntityPropertyValueProviderTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/EntityPropertyValueProviderTests.java index 99b3152e9b..19c91d5cc8 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/EntityPropertyValueProviderTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/convert/EntityPropertyValueProviderTests.java @@ -126,9 +126,8 @@ void testException() { DatastorePersistentProperty testDpe = this.persistentEntity.getPersistentProperty("boolField"); assertThatThrownBy(() -> provider.getPropertyValue(testDpe)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("Unable to read property boolField") - .hasStackTraceContaining( - "Unable to convert class java.lang.Long to class java.lang.Boolean"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("Unable to read property boolField") + .hasStackTraceContaining("Unable to convert class java.lang.Long to class java.lang.Boolean"); } } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentEntityImplTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentEntityImplTests.java index 787c391c50..e15f6a51ad 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentEntityImplTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentEntityImplTests.java @@ -46,7 +46,8 @@ void testTableName() { @Test void testRawTableName() { DatastorePersistentEntityImpl entity = - new DatastorePersistentEntityImpl<>(TypeInformation.of(EntityNoCustomName.class), null); + new DatastorePersistentEntityImpl<>( + TypeInformation.of(EntityNoCustomName.class), null); assertThat(entity.kindName()).isEqualTo("entityNoCustomName"); } @@ -54,7 +55,8 @@ void testRawTableName() { @Test void testEmptyCustomTableName() { DatastorePersistentEntityImpl entity = - new DatastorePersistentEntityImpl<>(TypeInformation.of(EntityEmptyCustomName.class), null); + new DatastorePersistentEntityImpl<>( + TypeInformation.of(EntityEmptyCustomName.class), null); assertThat(entity.kindName()).isEqualTo("entityEmptyCustomName"); } @@ -62,17 +64,19 @@ void testEmptyCustomTableName() { @Test void testExpressionResolutionWithoutApplicationContext() { DatastorePersistentEntityImpl entity = - new DatastorePersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), null); + new DatastorePersistentEntityImpl<>( + TypeInformation.of(EntityWithExpression.class), null); assertThatThrownBy(entity::kindName) - .isInstanceOf(SpelEvaluationException.class) - .hasMessageContaining("Property or field 'kindPostfix' cannot be found on null"); + .isInstanceOf(SpelEvaluationException.class) + .hasMessageContaining("Property or field 'kindPostfix' cannot be found on null"); } @Test void testExpressionResolutionFromApplicationContext() { DatastorePersistentEntityImpl entity = - new DatastorePersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), null); + new DatastorePersistentEntityImpl<>( + TypeInformation.of(EntityWithExpression.class), null); ApplicationContext applicationContext = mock(ApplicationContext.class); when(applicationContext.getBean("kindPostfix")).thenReturn("something"); @@ -98,15 +102,15 @@ void testHasNoIdProperty() { @Test void testGetIdPropertyOrFail() { - DatastorePersistentEntity testEntity = - new DatastoreMappingContext().getPersistentEntity(EntityWithNoId.class); + DatastorePersistentEntity testEntity = new DatastoreMappingContext().getPersistentEntity(EntityWithNoId.class); assertThatThrownBy(testEntity::getIdPropertyOrFail) - .isInstanceOf(DatastoreDataException.class) - .hasMessage( - "An ID property was required but does not exist for the type: " - + "class com.google.cloud.spring.data.datastore.core.mapping." - + "DatastorePersistentEntityImplTests$EntityWithNoId"); + .isInstanceOf(DatastoreDataException.class) + .hasMessage("An ID property was required but does not exist for the type: " + + "class com.google.cloud.spring.data.datastore.core.mapping." + + "DatastorePersistentEntityImplTests$EntityWithNoId"); + + } @Test @@ -160,27 +164,25 @@ void testDiscriminationMetadata() { void testConflictingDiscriminationFieldNames() { assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(DiscrimEntityB.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining( - "This class and its super class both have " - + "discrimination fields but they are different fields: "); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("This class and its super class both have " + + "discrimination fields but they are different fields: "); + } @Test void testEntityMissingDiscriminationSuperclass() { - DatastorePersistentEntity dpe = - this.datastoreMappingContext.getPersistentEntity(TestEntityNoSuperclass.class); + DatastorePersistentEntity dpe = this.datastoreMappingContext.getPersistentEntity(TestEntityNoSuperclass.class); assertThatThrownBy(() -> dpe.kindName()) - .isInstanceOf(DatastoreDataException.class) - .hasMessageContaining("This class expects a discrimination field but none are designated"); + .isInstanceOf(DatastoreDataException.class) + .hasMessageContaining("This class expects a discrimination field but none are designated"); } @Test void testInterfaceProperty() { - DatastorePersistentEntity persistentEntity = - new DatastoreMappingContext().getPersistentEntity(EntityWithInterface.class); + DatastorePersistentEntity persistentEntity = new DatastoreMappingContext().getPersistentEntity(EntityWithInterface.class); assertThat(persistentEntity).isNotNull(); assertThat(persistentEntity.getPersistentProperty("text")).isNotNull(); } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentPropertyImplTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentPropertyImplTests.java index 957156d807..7504c5ddc1 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentPropertyImplTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/core/mapping/DatastorePersistentPropertyImplTests.java @@ -89,52 +89,38 @@ void testAssociations() { @Test void referenceDescendantAnnotatedTest() { - assertThatThrownBy( - () -> - this.datastoreMappingContext.getPersistentEntity( - DescendantReferenceAnnotatedEntity.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage( - "Property cannot be annotated both @Descendants and " + "@Reference: subEntity"); + assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(DescendantReferenceAnnotatedEntity.class)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Property cannot be annotated both @Descendants and " + "@Reference: subEntity"); } @Test void fieldDescendantAnnotatedTest() { - assertThatThrownBy( - () -> - this.datastoreMappingContext.getPersistentEntity( - DescendantFieldAnnotatedEntity.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage( - "Property cannot be annotated as @Field if it is " - + "annotated @Descendants or @Reference: name"); + assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(DescendantFieldAnnotatedEntity.class)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Property cannot be annotated as @Field if it is " + + "annotated @Descendants or @Reference: name"); } @Test void fieldReferenceAnnotatedTest() { - assertThatThrownBy( - () -> - this.datastoreMappingContext.getPersistentEntity( - FieldReferenceAnnotatedEntity.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage( - "Property cannot be annotated as @Field if it is " - + "annotated @Descendants or @Reference: name"); + assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(FieldReferenceAnnotatedEntity.class)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Property cannot be annotated as @Field if it is " + + "annotated @Descendants or @Reference: name"); + } @Test void fieldReferencedAnnotatedTest() { - assertThatThrownBy( - () -> - this.datastoreMappingContext.getPersistentEntity( - FieldReferencedAnnotatedEntity.class)) - .isInstanceOf(DatastoreDataException.class) - .hasMessage( - "Property cannot be annotated as @Field if it is " - + "annotated @Descendants or @Reference: name"); + assertThatThrownBy(() -> this.datastoreMappingContext.getPersistentEntity(FieldReferencedAnnotatedEntity.class)) + .isInstanceOf(DatastoreDataException.class) + .hasMessage("Property cannot be annotated as @Field if it is " + + "annotated @Descendants or @Reference: name"); + } @Entity(name = "custom_test_kind") diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/DatastoreIntegrationTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/DatastoreIntegrationTests.java index b960b7f92b..9fabfdc68a 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/DatastoreIntegrationTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/DatastoreIntegrationTests.java @@ -693,8 +693,7 @@ void ancestorsTest() { void referenceTest() { ReferenceEntity parent = saveReferenceEntitiesGraph(); - ReferenceEntity loadedParent = - this.datastoreTemplate.findById(parent.id, ReferenceEntity.class); + ReferenceEntity loadedParent = this.datastoreTemplate.findById(parent.id, ReferenceEntity.class); assertThat(loadedParent).isEqualTo(parent); parent.name = "parent updated"; @@ -719,8 +718,7 @@ void referenceTest() { void lazyReferenceCollectionTest() { ReferenceLazyEntity parent = saveEntitiesGraph(); - ReferenceLazyEntity lazyParent = - this.datastoreTemplate.findById(parent.id, ReferenceLazyEntity.class); + ReferenceLazyEntity lazyParent = this.datastoreTemplate.findById(parent.id, ReferenceLazyEntity.class); // Saving an entity with not loaded lazy field this.datastoreTemplate.save(lazyParent); @@ -768,8 +766,7 @@ void lazyReferenceTransactionTest() { // Exception should be produced if a lazy loaded property accessed outside of the initial // transaction - ReferenceLazyEntity finalLoadedParent = - this.transactionalTemplateService.findByIdLazy(parent.id); + ReferenceLazyEntity finalLoadedParent = this.transactionalTemplateService.findByIdLazy(parent.id); assertThatThrownBy(() -> finalLoadedParent.children.size()) .isInstanceOf(DatastoreDataException.class) .hasMessage("Lazy load should be invoked within the same transaction"); @@ -1019,6 +1016,8 @@ void sameClassDescendantsTest() { assertThat(readCompany.leaders.get(0).id).isEqualTo(entity1.id); } + + @Test void testPageableGqlEntityProjectionsPage() { Page page = diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/ParallelDatastoreIntegrationTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/ParallelDatastoreIntegrationTests.java index 278e544b86..1fe39482fe 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/ParallelDatastoreIntegrationTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/ParallelDatastoreIntegrationTests.java @@ -40,7 +40,8 @@ class ParallelDatastoreIntegrationTests extends AbstractDatastoreIntegrationTest private static final int PARALLEL_OPERATIONS = 10; - @Autowired TestEntityRepository testEntityRepository; + @Autowired + TestEntityRepository testEntityRepository; @AfterEach void deleteAll() { @@ -50,9 +51,9 @@ void deleteAll() { @Test void testParallelOperations() { performOperation( - x -> - this.testEntityRepository.save( - new TestEntity((long) x, "color", (long) x, null, null))); + x -> + this.testEntityRepository.save( + new TestEntity((long) x, "color", (long) x, null, null))); waitUntilTrue(() -> this.testEntityRepository.count() == PARALLEL_OPERATIONS - 1); diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/subclasses/descendants/testdomains/EntityA.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/subclasses/descendants/testdomains/EntityA.java index 259bf9713a..8b47edf6ec 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/subclasses/descendants/testdomains/EntityA.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/subclasses/descendants/testdomains/EntityA.java @@ -24,7 +24,8 @@ @Entity(name = "A") @DiscriminatorField(field = "type") public abstract class EntityA { - @Id private Key id; + @Id + private Key id; public Key getId() { return id; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/AncestorEntity.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/AncestorEntity.java index d9195b5b0c..21bb8a255d 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/AncestorEntity.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/AncestorEntity.java @@ -25,11 +25,13 @@ /** An ancestor entity for integration tests. */ public class AncestorEntity { - @Id public Long id; + @Id + public Long id; String name; - @Descendants public List descendants; + @Descendants + public List descendants; public AncestorEntity(String name, List descendants) { this.name = name; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/Event.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/Event.java index 560d160923..fd713d594f 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/Event.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/Event.java @@ -23,7 +23,8 @@ @Entity public class Event { - @Id private String eventName; + @Id + private String eventName; private Map preferences; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/LazyEntity.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/LazyEntity.java index c7a1ddc757..75e738cc05 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/LazyEntity.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/LazyEntity.java @@ -23,7 +23,8 @@ @Entity public class LazyEntity { - @Id public Long id; + @Id + public Long id; @LazyReference LazyEntity lazyChild; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/ReferenceLazyEntity.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/ReferenceLazyEntity.java index 0dbaf03f1a..5470c1d3cb 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/ReferenceLazyEntity.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/it/testdomains/ReferenceLazyEntity.java @@ -34,8 +34,7 @@ public class ReferenceLazyEntity { @LazyReference public List children; - public ReferenceLazyEntity( - String name, ReferenceLazyEntity sibling, List children) { + public ReferenceLazyEntity(String name, ReferenceLazyEntity sibling, List children) { this.name = name; this.sibling = sibling; this.children = children; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java index 5b9e709e50..5ee49ebbae 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java @@ -87,8 +87,7 @@ void resolveSqlQueryTest() { when(namedQueries.hasQuery(queryName)).thenReturn(true); when(namedQueries.getQuery(queryName)).thenReturn(query); - when(valueExpressionDelegate.getEvaluationContextAccessor()) - .thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); + when(valueExpressionDelegate.getEvaluationContextAccessor()).thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); this.datastoreQueryLookupStrategy.resolveQuery(null, null, null, namedQueries); diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java index ff7ea3c998..cf50260495 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java @@ -105,8 +105,7 @@ void initMocks() { .thenReturn(this.datastoreEntityConverter); when(this.datastoreEntityConverter.getConversions()).thenReturn(this.readWriteConversions); this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); - when(valueExpressionDelegate.getEvaluationContextAccessor()) - .thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); + when(valueExpressionDelegate.getEvaluationContextAccessor()).thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); } private GqlDatastoreQuery createQuery( diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/PartTreeDatastoreQueryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/PartTreeDatastoreQueryTests.java index f4290426c9..f7a180bd73 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/PartTreeDatastoreQueryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/PartTreeDatastoreQueryTests.java @@ -83,14 +83,14 @@ class PartTreeDatastoreQueryTests { private static final Object[] EMPTY_PARAMETERS = new Object[0]; private static final DatastoreResultsIterable EMPTY_RESPONSE = - new DatastoreResultsIterable<>(Collections.emptyIterator(), null); + new DatastoreResultsIterable<>(Collections.emptyIterator(), null); static final CompositeFilter FILTER = - CompositeFilter.and( - PropertyFilter.eq("action", "BUY"), - PropertyFilter.eq("ticker", "abcd"), - PropertyFilter.lt("price", 8.88), - PropertyFilter.ge("price", 3.33), - PropertyFilter.isNull("__key__")); + CompositeFilter.and( + PropertyFilter.eq("action", "BUY"), + PropertyFilter.eq("ticker", "abcd"), + PropertyFilter.lt("price", 8.88), + PropertyFilter.ge("price", 3.33), + PropertyFilter.isNull("__key__")); private DatastoreTemplate datastoreTemplate; @@ -112,36 +112,36 @@ void initMocks() { this.datastoreMappingContext = new DatastoreMappingContext(); this.datastoreEntityConverter = mock(DatastoreEntityConverter.class); this.readWriteConversions = - new TwoStepsConversions( - new DatastoreCustomConversions(), null, this.datastoreMappingContext); + new TwoStepsConversions( + new DatastoreCustomConversions(), null, this.datastoreMappingContext); when(this.datastoreTemplate.getDatastoreEntityConverter()) - .thenReturn(this.datastoreEntityConverter); + .thenReturn(this.datastoreEntityConverter); when(this.datastoreEntityConverter.getConversions()).thenReturn(this.readWriteConversions); } private PartTreeDatastoreQuery createQuery( - boolean isPageQuery, boolean isSliceQuery, ProjectionInformation projectionInformation) { + boolean isPageQuery, boolean isSliceQuery, ProjectionInformation projectionInformation) { ProjectionFactory projectionFactory = mock(ProjectionFactory.class); doReturn(projectionInformation != null ? projectionInformation : getProjectionInformationMock()) - .when(projectionFactory) - .getProjectionInformation(any()); + .when(projectionFactory) + .getProjectionInformation(any()); PartTreeDatastoreQuery tradePartTreeDatastoreQuery = - new PartTreeDatastoreQuery<>( - this.queryMethod, - this.datastoreTemplate, - this.datastoreMappingContext, - Trade.class, - projectionFactory); + new PartTreeDatastoreQuery<>( + this.queryMethod, + this.datastoreTemplate, + this.datastoreMappingContext, + Trade.class, + projectionFactory); PartTreeDatastoreQuery spy = spy(tradePartTreeDatastoreQuery); doReturn(isPageQuery).when(spy).isPageQuery(); doReturn(isSliceQuery).when(spy).isSliceQuery(); doAnswer(invocation -> invocation.getArguments()[0]) - .when(spy) - .processRawObjectForProjection(any()); + .when(spy) + .processRawObjectForProjection(any()); doAnswer(invocation -> invocation.getArguments()[0]) - .when(spy) - .convertResultCollection(any(), isNotNull()); + .when(spy) + .convertResultCollection(any(), isNotNull()); return spy; } @@ -155,19 +155,19 @@ private ProjectionInformation getProjectionInformationMock() { @Test void compoundNameConventionTest() throws NoSuchMethodException { queryWithMockResult( - "findTop333ByActionAndSymbolAndPriceLessThan" - + "AndPriceGreaterThanEqual" - + "AndEmbeddedEntityStringFieldEquals" - + "AndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - String.class)); + "findTop333ByActionAndSymbolAndPriceLessThan" + + "AndPriceGreaterThanEqual" + + "AndEmbeddedEntityStringFieldEquals" + + "AndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + String.class)); Object[] params = new Object[] { @@ -180,29 +180,29 @@ void compoundNameConventionTest() throws NoSuchMethodException { }; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); - - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter( - CompositeFilter.and( - PropertyFilter.eq("action", "BUY"), - PropertyFilter.eq("ticker", "abcd"), - PropertyFilter.lt("price", 8L), - PropertyFilter.ge("price", 3.33), - PropertyFilter.eq("embeddedEntity.stringField", "abc"), - PropertyFilter.isNull("__key__"))) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(333) - .build(); - - assertThat(statement).isEqualTo(expected); - - return EMPTY_RESPONSE; - }); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); + + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter( + CompositeFilter.and( + PropertyFilter.eq("action", "BUY"), + PropertyFilter.eq("ticker", "abcd"), + PropertyFilter.lt("price", 8L), + PropertyFilter.ge("price", 3.33), + PropertyFilter.eq("embeddedEntity.stringField", "abc"), + PropertyFilter.isNull("__key__"))) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(333) + .build(); + + assertThat(statement).isEqualTo(expected); + + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -211,68 +211,65 @@ void compoundNameConventionTest() throws NoSuchMethodException { } @Test - void compoundNameConventionProjectionTest() throws NoSuchMethodException, IntrospectionException { + void compoundNameConventionProjectionTest() + throws NoSuchMethodException, IntrospectionException { ProjectionInformation projectionInformation = mock(ProjectionInformation.class); doReturn(TradeProjection.class).when(projectionInformation).getType(); doReturn(true).when(projectionInformation).isClosed(); doReturn( Arrays.asList( - new PropertyDescriptor("id", null, null), - new PropertyDescriptor("symbol", null, null))) - .when(projectionInformation) - .getInputProperties(); + new PropertyDescriptor("id", null, null), + new PropertyDescriptor("symbol", null, null))) + .when(projectionInformation) + .getInputProperties(); queryWithMockResult( - "findTop333ByActionAndSymbolAndPriceLessThan" - + "AndPriceGreaterThanEqual" - + "AndEmbeddedEntityStringFieldEquals" - + "AndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethodProjection", - String.class, - String.class, - double.class, - double.class, - String.class), - projectionInformation); + "findTop333ByActionAndSymbolAndPriceLessThan" + + "AndPriceGreaterThanEqual" + + "AndEmbeddedEntityStringFieldEquals" + + "AndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethodProjection", + String.class, + String.class, + double.class, + double.class, + String.class), + projectionInformation); Object[] params = - new Object[] { - "BUY", - "abcd", - // this int param requires custom conversion - 8, - 3.33, - "abc" - }; + new Object[] {"BUY", "abcd", + // this int param requires custom conversion + 8, 3.33, "abc" + }; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - StructuredQuery statement = invocation.getArgument(0); - - StructuredQuery expected = - StructuredQuery.newProjectionEntityQueryBuilder() - .addProjection("__key__", "ticker") - .setFilter( - CompositeFilter.and( - PropertyFilter.eq("action", "BUY"), - PropertyFilter.eq("ticker", "abcd"), - PropertyFilter.lt("price", 8L), - PropertyFilter.ge("price", 3.33), - PropertyFilter.eq("embeddedEntity.stringField", "abc"), - PropertyFilter.isNull("__key__"))) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(333) - .build(); - - assertThat(statement).isEqualTo(expected); - - return EMPTY_RESPONSE; - }); + .thenAnswer( + invocation -> { + StructuredQuery statement = invocation.getArgument(0); + + StructuredQuery expected = + StructuredQuery.newProjectionEntityQueryBuilder() + .addProjection("__key__", "ticker") + .setFilter( + CompositeFilter.and( + PropertyFilter.eq("action", "BUY"), + PropertyFilter.eq("ticker", "abcd"), + PropertyFilter.lt("price", 8L), + PropertyFilter.ge("price", 3.33), + PropertyFilter.eq("embeddedEntity.stringField", "abc"), + PropertyFilter.isNull("__key__"))) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(333) + .build(); + + assertThat(statement).isEqualTo(expected); + + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -283,41 +280,40 @@ void compoundNameConventionProjectionTest() throws NoSuchMethodException, Intros @Test void ambiguousSortPageableParam() throws NoSuchMethodException { queryWithMockResult( - "findTop333ByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findTop333ByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); Object[] params = - new Object[] { - "BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 444, Sort.Direction.ASC, "price") - }; + new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 444, Sort.Direction.ASC, "price") + }; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOffset(444) - .setLimit(444) - .setOrderBy(OrderBy.desc("__key__"), OrderBy.asc("price")) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOffset(444) + .setLimit(444) + .setOrderBy(OrderBy.desc("__key__"), OrderBy.asc("price")) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -328,37 +324,37 @@ void ambiguousSortPageableParam() throws NoSuchMethodException { @Test void nullPageable() throws NoSuchMethodException { queryWithMockResult( - "findTop333ByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findTop333ByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); Object[] params = new Object[] {"BUY", "abcd", 8.88, 3.33, null}; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setLimit(333) - .setOrderBy(OrderBy.desc("__key__")) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setLimit(333) + .setOrderBy(OrderBy.desc("__key__")) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -369,32 +365,32 @@ void nullPageable() throws NoSuchMethodException { @Test void ambiguousSort() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Direction.ASC, "price")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Direction.ASC, "price")}; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__"), OrderBy.asc("price")) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__"), OrderBy.asc("price")) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -405,31 +401,31 @@ void ambiguousSort() throws NoSuchMethodException { @Test void nullSort() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); Object[] params = new Object[] {"BUY", "abcd", 8.88, 3.33, null}; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__")) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__")) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -440,73 +436,74 @@ void nullSort() throws NoSuchMethodException { @Test void caseInsensitiveSort() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Order.by("price").ignoreCase())}; + new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Order.by("price").ignoreCase())}; assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) - .hasMessage("Datastore doesn't support sorting ignoring case"); + .hasMessage("Datastore doesn't support sorting ignoring case"); } @Test void caseNullHandlingSort() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod( - "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod( + "tradeMethod", String.class, String.class, double.class, double.class, Sort.class)); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Order.by("price").nullsFirst())}; + new Object[] {"BUY", "abcd", 8.88, 3.33, Sort.by(Sort.Order.by("price").nullsFirst())}; + assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) - .hasMessage("Datastore supports only NullHandling.NATIVE null handling"); + .hasMessage("Datastore supports only NullHandling.NATIVE null handling"); } @Test void pageableParam() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 444, Sort.Direction.DESC, "id")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 444, Sort.Direction.DESC, "id")}; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOffset(444) - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(444) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOffset(444) + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(444) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - return EMPTY_RESPONSE; - }); + return EMPTY_RESPONSE; + }); when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class); @@ -517,21 +514,21 @@ void pageableParam() throws NoSuchMethodException { @Test void pageableQuery() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); this.partTreeDatastoreQuery = createQuery(true, false, null); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 2, Sort.Direction.DESC, "id")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 2, Sort.Direction.DESC, "id")}; preparePageResults(2, 2, null, Arrays.asList(3, 4), Arrays.asList(1, 2, 3, 4)); @@ -550,23 +547,23 @@ void pageableQuery() throws NoSuchMethodException { @Test void pageableQueryNextPage() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); this.partTreeDatastoreQuery = createQuery(true, false, null); PageRequest pageRequest = PageRequest.of(1, 2, Sort.Direction.DESC, "id"); Cursor cursor = Cursor.copyFrom("abc".getBytes()); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, DatastorePageable.from(pageRequest, cursor, 99L)}; + new Object[] {"BUY", "abcd", 8.88, 3.33, DatastorePageable.from(pageRequest, cursor, 99L)}; preparePageResults(2, 2, cursor, Arrays.asList(3, 4), Arrays.asList(1, 2, 3, 4)); @@ -583,11 +580,11 @@ void pageableQueryNextPage() throws NoSuchMethodException { @Test void pageableQueryMissingPageableParamReturnsAllResults() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod("tradeMethod", String.class, String.class, double.class, double.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod("tradeMethod", String.class, String.class, double.class, double.class)); this.partTreeDatastoreQuery = createQuery(true, false, null); @@ -609,21 +606,21 @@ void pageableQueryMissingPageableParamReturnsAllResults() throws NoSuchMethodExc @Test void sliceQueryLast() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); this.partTreeDatastoreQuery = createQuery(false, true, null); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 2, Sort.Direction.DESC, "id")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(1, 2, Sort.Direction.DESC, "id")}; prepareSliceResults(2, 2, true); @@ -638,11 +635,11 @@ void sliceQueryLast() throws NoSuchMethodException { @Test void sliceQueryNoPageableParam() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc", - null, - getClass() - .getMethod("tradeMethod", String.class, String.class, double.class, double.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc", + null, + getClass() + .getMethod("tradeMethod", String.class, String.class, double.class, double.class)); this.partTreeDatastoreQuery = createQuery(false, true, null); @@ -656,27 +653,27 @@ void sliceQueryNoPageableParam() throws NoSuchMethodException { assertThat(result.hasNext()).isFalse(); verify(this.datastoreTemplate, times(1)) - .queryEntitiesSlice(isA(EntityQuery.class), any(), any()); + .queryEntitiesSlice(isA(EntityQuery.class), any(), any()); } @Test void sliceQuery() throws NoSuchMethodException { queryWithMockResult( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", - null, - getClass() - .getMethod( - "tradeMethod", - String.class, - String.class, - double.class, - double.class, - Pageable.class)); + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + "ThanEqualAndIdIsNull", + null, + getClass() + .getMethod( + "tradeMethod", + String.class, + String.class, + double.class, + double.class, + Pageable.class)); this.partTreeDatastoreQuery = createQuery(false, true, null); Object[] params = - new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(0, 2, Sort.Direction.DESC, "id")}; + new Object[] {"BUY", "abcd", 8.88, 3.33, PageRequest.of(0, 2, Sort.Direction.DESC, "id")}; prepareSliceResults(0, 2, false); @@ -686,80 +683,80 @@ void sliceQuery() throws NoSuchMethodException { assertThat(result.hasNext()).isFalse(); verify(this.datastoreTemplate, times(1)) - .queryEntitiesSlice(isA(EntityQuery.class), any(), any()); + .queryEntitiesSlice(isA(EntityQuery.class), any(), any()); } private void preparePageResults( - int offset, - Integer limit, - Cursor cursor, - List pageResults, - List fullResults) { + int offset, + Integer limit, + Cursor cursor, + List pageResults, + List fullResults) { when(this.datastoreTemplate.queryKeysOrEntities(isA(EntityQuery.class), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setStartCursor(cursor) - .setOffset(cursor != null ? 0 : offset) - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(limit) - .build(); - - assertThat(statement).isEqualTo(expected); - return new DatastoreResultsIterable( - pageResults.iterator(), Cursor.copyFrom("abc".getBytes())); - }); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setStartCursor(cursor) + .setOffset(cursor != null ? 0 : offset) + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(limit) + .build(); + + assertThat(statement).isEqualTo(expected); + return new DatastoreResultsIterable( + pageResults.iterator(), Cursor.copyFrom("abc".getBytes())); + }); when(this.datastoreTemplate.queryKeysOrEntities(isA(KeyQuery.class), any())) - .thenAnswer( - invocation -> { - KeyQuery statement = invocation.getArgument(0); - KeyQuery expected = - StructuredQuery.newKeyQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOrderBy(OrderBy.desc("__key__")) - .build(); - - assertThat(statement).isEqualTo(expected); - return new DatastoreResultsIterable( - fullResults.iterator(), Cursor.copyFrom("def".getBytes())); - }); + .thenAnswer( + invocation -> { + KeyQuery statement = invocation.getArgument(0); + KeyQuery expected = + StructuredQuery.newKeyQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOrderBy(OrderBy.desc("__key__")) + .build(); + + assertThat(statement).isEqualTo(expected); + return new DatastoreResultsIterable( + fullResults.iterator(), Cursor.copyFrom("def".getBytes())); + }); } private void prepareSliceResults(int offset, Integer queryLimit, Boolean hasNext) { Cursor cursor = Cursor.copyFrom("abc".getBytes()); List datastoreMatchingRecords = Arrays.asList(3, 4, 5); when(this.datastoreTemplate.queryEntitiesSlice(isA(EntityQuery.class), any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(FILTER) - .setKind("trades") - .setOffset(offset) - .setOrderBy(OrderBy.desc("__key__")) - .setLimit(queryLimit) - .build(); - - assertThat(statement).isEqualTo(expected); - return new SliceImpl( - new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor) - .toList(), - Pageable.unpaged(), - hasNext); - }); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(FILTER) + .setKind("trades") + .setOffset(offset) + .setOrderBy(OrderBy.desc("__key__")) + .setLimit(queryLimit) + .build(); + + assertThat(statement).isEqualTo(expected); + return new SliceImpl( + new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor) + .toList(), + Pageable.unpaged(), + hasNext); + }); } @Test void deleteTest() throws NoSuchMethodException { queryWithMockResult( - "deleteByAction", null, getClass().getMethod("countByAction", String.class)); + "deleteByAction", null, getClass().getMethod("countByAction", String.class)); this.partTreeDatastoreQuery = createQuery(false, false, null); @@ -781,7 +778,7 @@ void deleteTest() throws NoSuchMethodException { @Test void deleteReturnCollectionTest() throws NoSuchMethodException { queryWithMockResult( - "deleteByAction", null, getClass().getMethod("countByAction", String.class)); + "deleteByAction", null, getClass().getMethod("countByAction", String.class)); this.partTreeDatastoreQuery = createQuery(false, false, null); @@ -805,40 +802,39 @@ private void prepareDeleteResults(boolean isCollection) { Cursor cursor = Cursor.copyFrom("abc".getBytes()); List datastoreMatchingRecords = Arrays.asList(3, 4, 5); when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - StructuredQuery statement = invocation.getArgument(0); - StructuredQuery.Builder builder = - isCollection - ? StructuredQuery.newEntityQueryBuilder() - : StructuredQuery.newKeyQueryBuilder(); - StructuredQuery expected = - builder.setFilter(PropertyFilter.eq("action", "BUY")).setKind("trades").build(); - - assertThat(statement).isEqualTo(expected); - return new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor); - }); + .thenAnswer( + invocation -> { + StructuredQuery statement = invocation.getArgument(0); + StructuredQuery.Builder builder = + isCollection + ? StructuredQuery.newEntityQueryBuilder() + : StructuredQuery.newKeyQueryBuilder(); + StructuredQuery expected = + builder.setFilter(PropertyFilter.eq("action", "BUY")).setKind("trades").build(); + + assertThat(statement).isEqualTo(expected); + return new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor); + }); } @Test void unspecifiedParametersTest() throws NoSuchMethodException { queryWithMockResult( - "countByTraderIdBetween", null, getClass().getMethod("countByAction", String.class)); + "countByTraderIdBetween", null, getClass().getMethod("countByAction", String.class)); when(this.queryMethod.getName()) - .thenReturn( - "findByActionAndSymbolAndPriceLessThanAndPriceGreater" - + "ThanEqualAndIdIsNullOrderByIdDesc"); + .thenReturn( + "findByActionAndSymbolAndPriceLessThanAndPriceGreater" + + "ThanEqualAndIdIsNullOrderByIdDesc"); this.partTreeDatastoreQuery = createQuery(false, false, null); // There are too few params specified, so the exception will occur. Object[] params = new Object[] {"BUY"}; assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) - .hasMessage( - "Too few parameters are provided for query method: " - + "findByActionAndSymbolAndPriceLessThanAndPriceGreaterThanEqualAndIdIsNullOrderByIdDesc"); + .hasMessage("Too few parameters are provided for query method: " + + "findByActionAndSymbolAndPriceLessThanAndPriceGreaterThanEqualAndIdIsNullOrderByIdDesc"); } @Test @@ -850,11 +846,10 @@ void unsupportedParamTypeTest() throws NoSuchMethodException { Object[] params = new Object[] {new Trade()}; - assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) - .hasMessage( - "Unable to convert class " - + "com.google.cloud.spring.data.datastore.repository.query." - + "PartTreeDatastoreQueryTests$Trade to Datastore supported type."); + assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(params)) + .hasMessage("Unable to convert class " + + "com.google.cloud.spring.data.datastore.repository.query." + + "PartTreeDatastoreQueryTests$Trade to Datastore supported type."); } @Test @@ -864,17 +859,17 @@ void unSupportedPredicateTest() throws NoSuchMethodException { this.partTreeDatastoreQuery = createQuery(false, false, null); assertThatThrownBy(() -> this.partTreeDatastoreQuery.execute(EMPTY_PARAMETERS)) - .hasMessageContaining("Unsupported predicate keyword: BETWEEN"); + .hasMessageContaining("Unsupported predicate keyword: BETWEEN"); + + } @Test void unSupportedOrTest() { - // PartTreeDatastoreQuery constructor will fail as part of queryWithMockResult setup - assertThatThrownBy( - () -> - queryWithMockResult( - "countByTraderIdOrPrice", null, getClass().getMethod("traderAndPrice"))) - .hasMessage("Cloud Datastore only supports multiple filters combined with AND."); + //PartTreeDatastoreQuery constructor will fail as part of queryWithMockResult setup + assertThatThrownBy(() -> queryWithMockResult("countByTraderIdOrPrice", null, getClass().getMethod("traderAndPrice"))) + .hasMessage("Cloud Datastore only supports multiple filters combined with AND."); + } @Test @@ -883,14 +878,12 @@ void countTest() throws NoSuchMethodException { results.add(new Trade()); queryWithMockResult( - "countByAction", results, getClass().getMethod("countByAction", String.class)); + "countByAction", results, getClass().getMethod("countByAction", String.class)); PartTreeDatastoreQuery spyQuery = this.partTreeDatastoreQuery; Object[] params = - new Object[] { - "BUY", - }; + new Object[] {"BUY", }; assertThat(spyQuery.execute(params)).isEqualTo(1L); } @@ -900,38 +893,34 @@ void existShouldBeTrueWhenResultSetIsNotEmpty() throws NoSuchMethodException { results.add(new Trade()); queryWithMockResult( - "existsByAction", results, getClass().getMethod("countByAction", String.class)); + "existsByAction", results, getClass().getMethod("countByAction", String.class)); PartTreeDatastoreQuery spyQuery = this.partTreeDatastoreQuery; doAnswer(invocation -> invocation.getArgument(0)) - .when(spyQuery) - .processRawObjectForProjection(any()); + .when(spyQuery) + .processRawObjectForProjection(any()); Object[] params = - new Object[] { - "BUY", - }; + new Object[] {"BUY", }; assertThat((boolean) spyQuery.execute(params)).isTrue(); } @Test void existShouldBeFalseWhenResultSetIsEmpty() throws NoSuchMethodException { queryWithMockResult( - "existsByAction", - Collections.emptyList(), - getClass().getMethod("countByAction", String.class)); + "existsByAction", + Collections.emptyList(), + getClass().getMethod("countByAction", String.class)); PartTreeDatastoreQuery spyQuery = this.partTreeDatastoreQuery; doAnswer(invocation -> invocation.getArgument(0)) - .when(spyQuery) - .processRawObjectForProjection(any()); + .when(spyQuery) + .processRawObjectForProjection(any()); Object[] params = - new Object[] { - "BUY", - }; + new Object[] {"BUY", }; assertThat((boolean) spyQuery.execute(params)).isFalse(); } @@ -939,30 +928,28 @@ void existShouldBeFalseWhenResultSetIsEmpty() throws NoSuchMethodException { void nonCollectionReturnType() throws NoSuchMethodException { Trade trade = new Trade(); queryWithMockResult( - "findByAction", null, getClass().getMethod("findByAction", String.class), true, null); + "findByAction", null, getClass().getMethod("findByAction", String.class), true, null); Object[] params = - new Object[] { - "BUY", - }; + new Object[] {"BUY", }; when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter(PropertyFilter.eq("action", "BUY")) - .setKind("trades") - .setLimit(1) - .build(); + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter(PropertyFilter.eq("action", "BUY")) + .setKind("trades") + .setLimit(1) + .build(); - assertThat(statement).isEqualTo(expected); + assertThat(statement).isEqualTo(expected); - List results = Collections.singletonList(trade); - return new DatastoreResultsIterable(results.iterator(), null); - }); + List results = Collections.singletonList(trade); + return new DatastoreResultsIterable(results.iterator(), null); + }); assertThat(this.partTreeDatastoreQuery.execute(params)).isEqualTo(trade); } @@ -971,41 +958,41 @@ void nonCollectionReturnType() throws NoSuchMethodException { void usingIdField() throws NoSuchMethodException { Trade trade = new Trade(); queryWithMockResult( - "findByActionAndId", - null, - getClass().getMethod("findByActionAndId", String.class, String.class), - true, - null); + "findByActionAndId", + null, + getClass().getMethod("findByActionAndId", String.class, String.class), + true, + null); Object[] params = new Object[] {"BUY", "id1"}; when(this.datastoreTemplate.createKey("trades", "id1")) - .thenAnswer( - invocation -> - Key.newBuilder("project", invocation.getArgument(0), invocation.getArgument(1)) - .build()); + .thenAnswer( + invocation -> + Key.newBuilder("project", invocation.getArgument(0), invocation.getArgument(1)) + .build()); when(this.datastoreTemplate.queryKeysOrEntities(any(), any())) - .thenAnswer( - invocation -> { - EntityQuery statement = invocation.getArgument(0); - - EntityQuery expected = - StructuredQuery.newEntityQueryBuilder() - .setFilter( - CompositeFilter.and( - PropertyFilter.eq("action", "BUY"), - PropertyFilter.eq( - "__key__", - KeyValue.of(Key.newBuilder("project", "trades", "id1").build())))) - .setKind("trades") - .setLimit(1) - .build(); - - assertThat(statement).isEqualTo(expected); - - List results = Collections.singletonList(trade); - return new DatastoreResultsIterable(results.iterator(), null); - }); + .thenAnswer( + invocation -> { + EntityQuery statement = invocation.getArgument(0); + + EntityQuery expected = + StructuredQuery.newEntityQueryBuilder() + .setFilter( + CompositeFilter.and( + PropertyFilter.eq("action", "BUY"), + PropertyFilter.eq( + "__key__", + KeyValue.of(Key.newBuilder("project", "trades", "id1").build())))) + .setKind("trades") + .setLimit(1) + .build(); + + assertThat(statement).isEqualTo(expected); + + List results = Collections.singletonList(trade); + return new DatastoreResultsIterable(results.iterator(), null); + }); assertThat(this.partTreeDatastoreQuery.execute(params)).isEqualTo(trade); } @@ -1013,32 +1000,28 @@ void usingIdField() throws NoSuchMethodException { @Test void nonCollectionReturnTypeNoResultsNullable() throws NoSuchMethodException { queryWithMockResult( - "findByAction", - Collections.emptyList(), - getClass().getMethod("findByActionNullable", String.class), - true, - null); + "findByAction", + Collections.emptyList(), + getClass().getMethod("findByActionNullable", String.class), + true, + null); Object[] params = - new Object[] { - "BUY", - }; + new Object[] {"BUY", }; assertThat(this.partTreeDatastoreQuery.execute(params)).isNull(); } @Test void nonCollectionReturnTypeNoResultsOptional() throws NoSuchMethodException { queryWithMockResult( - "findByAction", - Collections.emptyList(), - getClass().getMethod("findByActionOptional", String.class), - true, - null); + "findByAction", + Collections.emptyList(), + getClass().getMethod("findByActionOptional", String.class), + true, + null); Object[] params = - new Object[] { - "BUY", - }; + new Object[] {"BUY", }; assertThat((Optional) this.partTreeDatastoreQuery.execute(params)).isNotPresent(); } @@ -1049,21 +1032,19 @@ void streamResultTest() throws NoSuchMethodException { Trade tradeB = new Trade(); tradeB.id = "b"; queryWithMockResult( - "findStreamByAction", - Arrays.asList(tradeA, tradeB), - getClass().getMethod("findStreamByAction", String.class)); + "findStreamByAction", + Arrays.asList(tradeA, tradeB), + getClass().getMethod("findStreamByAction", String.class)); when(this.queryMethod.isStreamQuery()).thenReturn(true); Object[] params = - new Object[] { - "BUY", - }; + new Object[] {"BUY", }; Object result = this.partTreeDatastoreQuery.execute(params); assertThat(result).isInstanceOf(Stream.class); assertThat((Stream) result).hasSize(2).contains(tradeA, tradeB); } private void queryWithMockResult( - String queryName, List results, Method m, ProjectionInformation projectionInformation) { + String queryName, List results, Method m, ProjectionInformation projectionInformation) { queryWithMockResult(queryName, results, m, false, projectionInformation); } @@ -1072,11 +1053,11 @@ private void queryWithMockResult(String queryName, List results, Method m) { } private void queryWithMockResult( - String queryName, - List results, - Method m, - boolean mockOptionalNullable, - ProjectionInformation projectionInformation) { + String queryName, + List results, + Method m, + boolean mockOptionalNullable, + ProjectionInformation projectionInformation) { when(this.queryMethod.getName()).thenReturn(queryName); doReturn(new DefaultParameters(ParametersSource.of(m))).when(this.queryMethod).getParameters(); if (mockOptionalNullable) { @@ -1085,18 +1066,18 @@ private void queryWithMockResult( doReturn(TypeInformation.fromReturnTypeOf(m)).when(mockMetadata).getReturnType(m); doReturn(TypeInformation.fromReturnTypeOf(m)).when(mockMetadata).getDomainTypeInformation(); DatastoreQueryMethod datastoreQueryMethod = - new DatastoreQueryMethod(m, mockMetadata, mock(SpelAwareProxyProjectionFactory.class)); + new DatastoreQueryMethod(m, mockMetadata, mock(SpelAwareProxyProjectionFactory.class)); doReturn(datastoreQueryMethod.isOptionalReturnType()) - .when(this.queryMethod) - .isOptionalReturnType(); + .when(this.queryMethod) + .isOptionalReturnType(); doReturn(datastoreQueryMethod.isNullable()).when(this.queryMethod).isNullable(); } this.partTreeDatastoreQuery = createQuery(false, false, projectionInformation); when(this.datastoreTemplate.queryKeysOrEntities(any(), Mockito.>any())) - .thenReturn( - new DatastoreResultsIterable<>( - results != null ? results.iterator() : Collections.emptyIterator(), null)); + .thenReturn( + new DatastoreResultsIterable<>( + results != null ? results.iterator() : Collections.emptyIterator(), null)); } public Trade findByAction(String action) { @@ -1122,12 +1103,12 @@ public Optional findByActionOptional(String action) { } public List tradeMethod( - String action, String symbol, double pless, double pgreater, String embeddedProperty) { + String action, String symbol, double pless, double pgreater, String embeddedProperty) { return null; } public List tradeMethodProjection( - String action, String symbol, double pless, double pgreater, String embeddedProperty) { + String action, String symbol, double pless, double pgreater, String embeddedProperty) { return null; } @@ -1136,12 +1117,12 @@ public List tradeMethod(String action, String symbol, double pless, doubl } public List tradeMethod( - String action, String symbol, double pless, double pgreater, Pageable pageable) { + String action, String symbol, double pless, double pgreater, Pageable pageable) { return null; } public List tradeMethod( - String action, String symbol, double pless, double pgreater, Sort sort) { + String action, String symbol, double pless, double pgreater, Sort sort) { return null; } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactoryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactoryTests.java index aaf1374e27..02cf66b353 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactoryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactoryTests.java @@ -66,10 +66,9 @@ void getEntityInformationNotAvailableTest() { new DatastoreRepositoryFactory(mock(DatastoreMappingContext.class), this.datastoreTemplate); assertThatThrownBy(() -> factory.getEntityInformation(TestEntity.class)) - .isInstanceOf(MappingException.class) - .hasMessage( - "Could not lookup mapping metadata for domain class: com.google.cloud.spring.data.datastore.repository.support." - + "DatastoreRepositoryFactoryTests$TestEntity"); + .isInstanceOf(MappingException.class) + .hasMessage("Could not lookup mapping metadata for domain class: com.google.cloud.spring.data.datastore.repository.support." + + "DatastoreRepositoryFactoryTests$TestEntity"); } @Test diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/SimpleDatastoreRepositoryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/SimpleDatastoreRepositoryTests.java index 1f50128f80..3cce9a9723 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/SimpleDatastoreRepositoryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/support/SimpleDatastoreRepositoryTests.java @@ -304,11 +304,12 @@ void findAllByExamplePageCursor() { @Test void findAllByExamplePageNull() { - Example example = Example.of(new Object()); + Example example = Example.of(new Object()); + + assertThatThrownBy(() -> this.simpleDatastoreRepository.findAll(example, (Pageable) null)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null pageable is required."); - assertThatThrownBy(() -> this.simpleDatastoreRepository.findAll(example, (Pageable) null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null pageable is required."); } @Test @@ -495,19 +496,15 @@ void findByExampleFluentQueryAsUnsupported() { Example example = Example.of(new Object()); - assertThatThrownBy( - () -> this.simpleDatastoreRepository.findBy(example, q -> q.as(Object.class).all())) - .isInstanceOf(UnsupportedOperationException.class); + assertThatThrownBy(() -> this.simpleDatastoreRepository.findBy(example, q -> q.as(Object.class).all())) + .isInstanceOf(UnsupportedOperationException.class); } @Test void findByExampleFluentQueryProjectUnsupported() { Example example = Example.of(new Object()); - assertThatThrownBy( - () -> - this.simpleDatastoreRepository.findBy( - example, q -> q.project("firstProperty").all())) - .isInstanceOf(UnsupportedOperationException.class); + assertThatThrownBy(() -> this.simpleDatastoreRepository.findBy(example, q -> q.project("firstProperty").all())) + .isInstanceOf(UnsupportedOperationException.class); } } diff --git a/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml b/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml index 135030d329..7165b73e09 100644 --- a/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml +++ b/spring-cloud-gcp-data-datastore/src/test/resources/index.yaml @@ -1,13 +1,13 @@ # For running the ITs in local setups: `cd` into this folder and run `gcloud datastore indexes create index.yaml` indexes: - - kind: test_entities_ci - properties: - - name: size - - name: color +- kind: test_entities_ci + properties: + - name: size + - name: color - - kind: test_entities_ci - properties: - - name: color - - name: __key__ - direction: desc \ No newline at end of file +- kind: test_entities_ci + properties: + - name: color + - name: __key__ + direction: desc \ No newline at end of file diff --git a/spring-cloud-gcp-data-datastore/src/test/resources/logback-test.xml b/spring-cloud-gcp-data-datastore/src/test/resources/logback-test.xml index b36b736af4..5535de3c96 100644 --- a/spring-cloud-gcp-data-datastore/src/test/resources/logback-test.xml +++ b/spring-cloud-gcp-data-datastore/src/test/resources/logback-test.xml @@ -1,14 +1,14 @@ - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + - - - + + + diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java index 0f5752f85c..d9faf41745 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImpl.java @@ -164,8 +164,7 @@ private void verifyChildHasParentId( Iterator childKeyParts = this.spannerSchemaUtils.getKey(childObject).getParts().iterator(); int partNum = 1; while (parentKeyParts.hasNext()) { - if (!childKeyParts.hasNext() - || !Objects.equals(parentKeyParts.next(), childKeyParts.next())) { + if (!childKeyParts.hasNext() || !Objects.equals(parentKeyParts.next(), childKeyParts.next())) { throw new SpannerDataException( "A child entity's common primary key parts with its parent must " + "have the same values. Primary key component " diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplate.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplate.java index ecf835d821..efc0184629 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplate.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplate.java @@ -43,7 +43,7 @@ public class SpannerDatabaseAdminTemplate { private static final String TABLE_SCHEMA_COL_NAME = "table_schema"; - + private static final String TABLE_NAME_COL_NAME = "table_name"; private static final String PARENT_TABLE_NAME_COL_NAME = "parent_table_name"; @@ -158,7 +158,8 @@ public Map getChildParentTablesMap() { Struct row = results.getCurrentRowAsStruct(); relationships.put( getQualifiedTableName( - row.getString(TABLE_SCHEMA_COL_NAME), row.getString(TABLE_NAME_COL_NAME)), + row.getString(TABLE_SCHEMA_COL_NAME), + row.getString(TABLE_NAME_COL_NAME)), row.isNull(PARENT_TABLE_NAME_COL_NAME) ? null : getQualifiedTableName( @@ -170,14 +171,14 @@ public Map getChildParentTablesMap() { return relationships; } } - + private String getQualifiedTableName(String schema, String table) { if (schema == null || Objects.equals(schema, getDefaultSchemaName())) { return table; } return schema + "." + table; } - + private String getDefaultSchemaName() { // TODO: Get the default schema directly from the dialect when this is supported in the Spanner // Java client. diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityReader.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityReader.java index 71d5e3e6e0..ed42f46fd4 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityReader.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityReader.java @@ -70,8 +70,7 @@ public R read( SpannerPersistentEntity persistentEntity = (SpannerPersistentEntity) this.spannerMappingContext.getPersistentEntityOrFail(type); - StructAccessor structAccessor = - new StructAccessor(source, this.spannerMappingContext.getGson()); + StructAccessor structAccessor = new StructAccessor(source, this.spannerMappingContext.getGson()); StructPropertyValueProvider propertyValueProvider = new StructPropertyValueProvider(structAccessor, this.converter, this, allowMissingColumns); diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityWriter.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityWriter.java index 2435a48668..1dc3685ebf 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityWriter.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/ConverterAwareMappingSpannerEntityWriter.java @@ -327,6 +327,7 @@ private boolean attemptSetIterableValue( boolean valueSet = false; + if (spannerPersistentProperty.getAnnotatedColumnItemType() == Type.Code.JSON) { // if column annotated with JSON, convert directly valueBinder.toJsonArray(this.convertIterableJsonToValue(value)); diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/SpannerConverters.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/SpannerConverters.java index 6ad40c68ec..3bd09a243a 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/SpannerConverters.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/SpannerConverters.java @@ -140,7 +140,6 @@ public java.util.Date convert(Timestamp timestamp) { return timestamp.toDate(); } }; - /** A converter from {@link Instant} to the Spanner instantaneous time type. */ public static final Converter INSTANT_TIMESTAMP_CONVERTER = new CommitTimestampDecorator( diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructAccessor.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructAccessor.java index e6017fbd2a..72c09fadaf 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructAccessor.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructAccessor.java @@ -171,24 +171,26 @@ List getListJsonValue(String colName, Class colType) { } List jsonStringList = this.struct.getJsonList(colName); List result = new ArrayList<>(); - jsonStringList.forEach(item -> result.add(gson.fromJson(item, colType))); + jsonStringList.forEach(item -> + result.add(gson.fromJson(item, colType))); return result; } - public Object getJsonValue(int colIndex, Class colType) { + public Object getJsonValue(int colIndex, Class colType) { if (this.struct.getColumnType(colIndex).getCode() != Code.ARRAY) { return getSingleJsonValue(colIndex, colType); } return getListJsonValue(colIndex, colType); } - private List getListJsonValue(int colIndex, Class colType) { + private List getListJsonValue(int colIndex, Class colType) { if (this.struct.getColumnType(colIndex).getCode() != Code.ARRAY) { throw new SpannerDataException(EXCEPTION_COL_NOT_ARRAY + colIndex); } List jsonStringList = this.struct.getJsonList(colIndex); List result = new ArrayList<>(); - jsonStringList.forEach(item -> result.add(gson.fromJson(item, colType))); + jsonStringList.forEach(item -> + result.add(gson.fromJson(item, colType))); return result; } @@ -223,8 +225,8 @@ T getSingleJsonValue(String colName, Class colType) { return gson.fromJson(jsonString, colType); } - // TODO: change this to private in next major release - public T getSingleJsonValue(int colIndex, Class colType) { + //TODO: change this to private in next major release + public T getSingleJsonValue(int colIndex, Class colType) { if (this.struct.getColumnType(colIndex).getCode() != Code.JSON) { throw new SpannerDataException("Column of index " + colIndex + " not an JSON type."); } diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructPropertyValueProvider.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructPropertyValueProvider.java index 1d2fd76a1c..fe201b764f 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructPropertyValueProvider.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/convert/StructPropertyValueProvider.java @@ -127,9 +127,8 @@ private Iterable readIterableWithConversion( String colName = spannerPersistentProperty.getColumnName(); Type.Code spannerColumnType = spannerPersistentProperty.getAnnotatedColumnItemType(); if (spannerColumnType == Type.Code.JSON) { - return (List) - this.structAccessor.getListJsonValue( - colName, spannerPersistentProperty.getColumnInnerType()); + return (List) this.structAccessor.getListJsonValue(colName, + spannerPersistentProperty.getColumnInnerType()); } List listValue = this.structAccessor.getListValue(colName); return listValue.stream() diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImpl.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImpl.java index 15640e3af9..8de60840ab 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImpl.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImpl.java @@ -71,8 +71,7 @@ public class SpannerPersistentPropertyImpl @Override @NonNull public Iterable> getPersistentEntityTypeInformation() { - return StreamUtils.createStreamFromIterator( - super.getPersistentEntityTypeInformation().iterator()) + return StreamUtils.createStreamFromIterator(super.getPersistentEntityTypeInformation().iterator()) .filter(typeInfo -> typeInfo.getType().isAnnotationPresent(Table.class)) .toList(); } diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/SpannerRepository.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/SpannerRepository.java index 56b441637a..1bf6c4aaaa 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/SpannerRepository.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/SpannerRepository.java @@ -28,8 +28,8 @@ * @param the id type of the entity * @since 1.1 */ -public interface SpannerRepository - extends PagingAndSortingRepository, CrudRepository { +public interface SpannerRepository extends PagingAndSortingRepository, + CrudRepository { /** * Gets a {@link SpannerOperations}, which allows more-direct access to Google Cloud Spanner diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/config/SpannerAuditingRegistrar.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/config/SpannerAuditingRegistrar.java index 3980038b4f..1ce60ddb0b 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/config/SpannerAuditingRegistrar.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/config/SpannerAuditingRegistrar.java @@ -59,7 +59,7 @@ protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder( AuditingConfiguration configuration) { return configureDefaultAuditHandlerAttributes( configuration, BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class)) - .addConstructorArgValue(PersistentEntities.of(new SpannerMappingContext())); + .addConstructorArgValue(PersistentEntities.of(new SpannerMappingContext())); } @Override diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryExecutor.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryExecutor.java index b4d38bd383..35ad72da9a 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryExecutor.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryExecutor.java @@ -114,8 +114,7 @@ private static Map preparePartTreeSqlTagParameterMap( // query. // They are processed separately in applySort and buildLimit methods. if (param.getType() != Pageable.class && param.getType() != Sort.class) { - paramMetadataMap.put( - sqlStringAndPlaceholders.getPlaceholders().get(nextPlaceholderIdx++), param); + paramMetadataMap.put(sqlStringAndPlaceholders.getPlaceholders().get(nextPlaceholderIdx++), param); } } return paramMetadataMap; diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java index ae1a7ba64c..4c6376a413 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java @@ -159,12 +159,8 @@ private void resolveSpelTags(QueryTagValue queryTagValue) { StringBuilder sb = new StringBuilder(); Map valueToTag = new HashMap<>(); int tagNum = 0; - EvaluationContext evaluationContext = - this.valueExpressionDelegate - .getEvaluationContextAccessor() - .create(this.queryMethod.getParameters()) - .getEvaluationContext(queryTagValue.rawParams) - .getEvaluationContext(); + EvaluationContext evaluationContext = this.valueExpressionDelegate.getEvaluationContextAccessor().create(this.queryMethod.getParameters()) + .getEvaluationContext(queryTagValue.rawParams).getEvaluationContext(); for (Expression expression : expressions) { if (expression instanceof LiteralExpression) { sb.append(expression.getValue(String.class)); @@ -244,13 +240,11 @@ private List executeReadSql(Pageable pageable, Sort sort, QueryTagValue queryTag return this.spannerTemplate.query( struct -> new StructAccessor(struct).getSingleValue(0), statement, spannerQueryOptions); } - // check if returnedType is a field annotated as json or is inner-type of a field annotated as - // json + // check if returnedType is a field annotated as json or is inner-type of a field annotated as json if (isJsonFieldType(returnedType)) { return this.spannerTemplate.query( - struct -> - new StructAccessor(struct, this.spannerMappingContext.getGson()) - .getJsonValue(0, returnedType), + struct -> new StructAccessor(struct, + this.spannerMappingContext.getGson()).getJsonValue(0, returnedType), statement, spannerQueryOptions); } diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java index e1d3bbe7c5..fc31c4bccd 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java @@ -117,36 +117,35 @@ protected Optional getQueryLookupStrategy( private QueryMethodEvaluationContextProvider delegateContextProvider( ValueExpressionDelegate evaluationContextProvider) { return null; - // return new QueryMethodEvaluationContextProvider() { - // @Override - // public > EvaluationContext getEvaluationContext( - // T parameters, Object[] parameterValues) { - // StandardEvaluationContext evaluationContext = - // (StandardEvaluationContext) - // evaluationContextProvider.getEvaluationContext(parameters, parameterValues); - // evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); - // evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); - // evaluationContext.setBeanResolver( - // new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); - // return evaluationContext; - // } - // - // @Override - // public > EvaluationContext getEvaluationContext( - // T parameters, Object[] parameterValues, ExpressionDependencies - // expressionDependencies) { - // StandardEvaluationContext evaluationContext = - // (StandardEvaluationContext) - // evaluationContextProvider.getEvaluationContext( - // parameters, parameterValues, expressionDependencies); - // - // evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); - // evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); - // evaluationContext.setBeanResolver( - // new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); - // return evaluationContext; - // } - // }; +// return new QueryMethodEvaluationContextProvider() { +// @Override +// public > EvaluationContext getEvaluationContext( +// T parameters, Object[] parameterValues) { +// StandardEvaluationContext evaluationContext = +// (StandardEvaluationContext) +// evaluationContextProvider.getEvaluationContext(parameters, parameterValues); +// evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); +// evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); +// evaluationContext.setBeanResolver( +// new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); +// return evaluationContext; +// } +// +// @Override +// public > EvaluationContext getEvaluationContext( +// T parameters, Object[] parameterValues, ExpressionDependencies expressionDependencies) { +// StandardEvaluationContext evaluationContext = +// (StandardEvaluationContext) +// evaluationContextProvider.getEvaluationContext( +// parameters, parameterValues, expressionDependencies); +// +// evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); +// evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); +// evaluationContext.setBeanResolver( +// new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); +// return evaluationContext; +// } +// }; } @Override diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/aot/SpannerSchemaUtilsRuntimeHintsTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/aot/SpannerSchemaUtilsRuntimeHintsTests.java index da04526ad0..3c7b2bffeb 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/aot/SpannerSchemaUtilsRuntimeHintsTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/aot/SpannerSchemaUtilsRuntimeHintsTests.java @@ -28,6 +28,8 @@ void registerString() { RuntimeHints runtimeHints = new RuntimeHints(); SpannerSchemaUtilsRuntimeHints registrar = new SpannerSchemaUtilsRuntimeHints(); registrar.registerHints(runtimeHints, null); - assertThat(runtimeHints).matches(reflection().onType(String.class)); + assertThat(runtimeHints) + .matches( + reflection().onType(String.class)); } } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java index 5f146da69c..93f7d85907 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerMutationFactoryImplTests.java @@ -150,13 +150,12 @@ void insertChildrenMismatchIdTest() { // throws exception because child entity's id column does not match that of its // parent. assertThatThrownBy(() -> this.spannerMutationFactory.insert(t)) - .isInstanceOf(SpannerDataException.class) - .hasMessage( - "A child entity's common primary key parts with its parent must have the same values." - + " Primary key component 1 does not match for entities: class" - + " com.google.cloud.spring.data.spanner.core.SpannerMutationFactoryImplTests$TestEntity" - + " class" - + " com.google.cloud.spring.data.spanner.core.SpannerMutationFactoryImplTests$ChildEntity"); + .isInstanceOf(SpannerDataException.class) + .hasMessage("A child entity's common primary key parts with its parent must have the same values." + + " Primary key component 1 does not match for entities: class" + + " com.google.cloud.spring.data.spanner.core.SpannerMutationFactoryImplTests$TestEntity" + + " class" + + " com.google.cloud.spring.data.spanner.core.SpannerMutationFactoryImplTests$ChildEntity"); } @Test @@ -287,18 +286,23 @@ private static class EmbeddedKeyComponents { @Table private static class Parent { - @PrimaryKey @Column String keyOne; + @PrimaryKey + @Column + String keyOne; @PrimaryKey(keyOrder = 2) @Column Long keyTwo; - @Interleaved List children; + @Interleaved + List children; } @Table private static class Child { - @PrimaryKey @Column String keyOne; + @PrimaryKey + @Column + String keyOne; @PrimaryKey(keyOrder = 2) @Column diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerReadOptionsTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerReadOptionsTests.java index f6a1c6dd3c..99a8ad7055 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerReadOptionsTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerReadOptionsTests.java @@ -35,8 +35,8 @@ class SpannerReadOptionsTests { void addNullReadOptionTest() { SpannerReadOptions testSpannerReadOptions = new SpannerReadOptions(); assertThatThrownBy(() -> testSpannerReadOptions.addReadOption(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("Valid read option is required!"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Valid read option is required!"); } @Test @@ -64,8 +64,8 @@ void convertReadToQueryOptionTest_throwIfNotSupported() { ReadOption r1 = mock(ReadOption.class); spannerReadOptions.addReadOption(r1); assertThatThrownBy(spannerReadOptions::toQueryOptions) - .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("Can't convert"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Can't convert"); } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerSortPageQueryOptionsTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerSortPageQueryOptionsTests.java index c08442bedd..73d0647f29 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerSortPageQueryOptionsTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerSortPageQueryOptionsTests.java @@ -34,8 +34,8 @@ void addNullQueryOptionTest() { SpannerQueryOptions testSpannerQueryOptions = new SpannerQueryOptions(); assertThatThrownBy(() -> testSpannerQueryOptions.addQueryOption(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("Valid query option is required!"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Valid query option is required!"); } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTests.java index f4ae511d92..4ab8561d1a 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTests.java @@ -353,6 +353,7 @@ void readOnlyTransactionTest() { verify(readOnlyTransaction, times(2)).read(eq("custom_test_table"), any(), any()); } + @Test void readOnlyTransactionDmlTest() { @@ -362,19 +363,15 @@ void readOnlyTransactionDmlTest() { TimestampBound.ofReadTimestamp(Timestamp.ofTimeMicroseconds(333)))) .thenReturn(readOnlyTransaction); - SpannerReadOptions testSpannerReadOptions = - new SpannerReadOptions().setTimestamp(Timestamp.ofTimeMicroseconds(333)); - Function testSpannerOperations = - spannerOperations -> { - spannerOperations.executeDmlStatement(Statement.of("fail")); - return null; - }; + SpannerReadOptions testSpannerReadOptions = new SpannerReadOptions().setTimestamp(Timestamp.ofTimeMicroseconds(333)); + Function testSpannerOperations = spannerOperations -> { + spannerOperations.executeDmlStatement(Statement.of("fail")); + return null; + }; - assertThatThrownBy( - () -> - this.spannerTemplate.performReadOnlyTransaction( - testSpannerOperations, testSpannerReadOptions)) - .hasMessage("A read-only transaction template cannot execute DML."); + assertThatThrownBy(() -> this.spannerTemplate.performReadOnlyTransaction( + testSpannerOperations, testSpannerReadOptions)) + .hasMessage("A read-only transaction template cannot execute DML."); } @Test @@ -385,19 +382,15 @@ void readOnlyTransactionPartitionedDmlTest() { TimestampBound.ofReadTimestamp(Timestamp.ofTimeMicroseconds(333)))) .thenReturn(readOnlyTransaction); - SpannerReadOptions testSpannerReadOptions = - new SpannerReadOptions().setTimestamp(Timestamp.ofTimeMicroseconds(333)); - Function testSpannerOperations = - spannerOperations -> { - spannerOperations.executePartitionedDmlStatement(Statement.of("fail")); - return null; - }; + SpannerReadOptions testSpannerReadOptions = new SpannerReadOptions().setTimestamp(Timestamp.ofTimeMicroseconds(333)); + Function testSpannerOperations = spannerOperations -> { + spannerOperations.executePartitionedDmlStatement(Statement.of("fail")); + return null; + }; - assertThatThrownBy( - () -> - this.spannerTemplate.performReadOnlyTransaction( - testSpannerOperations, testSpannerReadOptions)) - .hasMessage("A read-only transaction template cannot execute partitioned DML."); + assertThatThrownBy(() -> this.spannerTemplate.performReadOnlyTransaction( + testSpannerOperations, testSpannerReadOptions)) + .hasMessage("A read-only transaction template cannot execute partitioned DML."); } @Test @@ -414,75 +407,49 @@ void readWriteTransactionPartitionedDmlTest() { TransactionCallable transactionCallable = invocation.getArgument(0); return transactionCallable.run(transactionContext); }); - Function testSpannerOperations = - spannerTemplate -> { - spannerTemplate.executePartitionedDmlStatement(Statement.of("DML statement here")); - return "all done"; - }; + Function testSpannerOperations = spannerTemplate -> { + spannerTemplate.executePartitionedDmlStatement(Statement.of("DML statement here")); + return "all done"; + }; - assertThatThrownBy( - () -> this.spannerTemplate.performReadWriteTransaction(testSpannerOperations)) - .hasMessage("A read-write transaction template cannot execute partitioned" + " DML."); + assertThatThrownBy(() -> this.spannerTemplate.performReadWriteTransaction(testSpannerOperations)) + .hasMessage("A read-write transaction template cannot execute partitioned" + " DML."); } @Test void nullDatabaseClientTest() { - assertThatThrownBy( - () -> - new SpannerTemplate( - null, - this.mappingContext, - this.objectMapper, - this.mutationFactory, - this.schemaUtils)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid database client for Spanner is required."); + assertThatThrownBy(() -> new SpannerTemplate( + null, this.mappingContext, this.objectMapper, this.mutationFactory, this.schemaUtils)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid database client for Spanner is required."); } @Test void nullMappingContextTest() { - assertThatThrownBy( - () -> - new SpannerTemplate( - () -> this.databaseClient, - null, - this.objectMapper, - this.mutationFactory, - this.schemaUtils)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid mapping context for Spanner is required."); + assertThatThrownBy(() -> new SpannerTemplate( + () -> this.databaseClient, null, this.objectMapper, this.mutationFactory, this.schemaUtils)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid mapping context for Spanner is required."); } @Test void nullObjectMapperTest() { - assertThatThrownBy( - () -> - new SpannerTemplate( - () -> this.databaseClient, - this.mappingContext, - null, - this.mutationFactory, - this.schemaUtils)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid entity processor for Spanner is required."); + assertThatThrownBy(() -> new SpannerTemplate( + () -> this.databaseClient, this.mappingContext, null, this.mutationFactory, this.schemaUtils)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid entity processor for Spanner is required."); } @Test void nullMutationFactoryTest() { - assertThatThrownBy( - () -> - new SpannerTemplate( - () -> this.databaseClient, - this.mappingContext, - this.objectMapper, - null, - this.schemaUtils)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid Spanner mutation factory is required."); + assertThatThrownBy(() -> new SpannerTemplate( + () -> this.databaseClient, this.mappingContext, this.objectMapper, null, this.schemaUtils)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid Spanner mutation factory is required."); } @Test @@ -557,9 +524,9 @@ void findKeySetTestEagerConvertedOptions() { SpannerTemplate spyTemplate = spy(this.spannerTemplate); KeySet keys = KeySet.newBuilder().addKey(Key.of("key1")).addKey(Key.of("key2")).build(); SpannerReadOptions options = - new SpannerReadOptions() - .addReadOption(mock(Options.ReadAndQueryOption.class)) - .addReadOption(mock(Options.ReadQueryUpdateTransactionOption.class)); + new SpannerReadOptions() + .addReadOption(mock(Options.ReadAndQueryOption.class)) + .addReadOption(mock(Options.ReadQueryUpdateTransactionOption.class)); spyTemplate.read(ParentEntity.class, keys, options); verify(spyTemplate).read(eq(ParentEntity.class), same(keys), eq(options)); verify(this.databaseClient, times(1)).singleUse(); @@ -1041,7 +1008,8 @@ private void verifyAfterEvents( @Table(name = "test_table_embedded_pk") private static class TestEntityEmbeddedPrimaryKey { - @Embedded @PrimaryKey EmbeddedPrimaryKey key; + @Embedded @PrimaryKey + EmbeddedPrimaryKey key; } private static class EmbeddedPrimaryKey { diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTransactionManagerTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTransactionManagerTests.java index 4c13fd02b6..2755c50792 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTransactionManagerTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/SpannerTemplateTransactionManagerTests.java @@ -210,25 +210,25 @@ void doWithoutTransaction() { @Test void readOnlySaveTest() { assertThatThrownBy(() -> this.transactionalService.writingInReadOnly(new TestEntity())) - .hasMessage("Spanner transaction cannot apply mutations because it is in readonly mode"); + .hasMessage("Spanner transaction cannot apply mutations because it is in readonly mode"); } @Test void readOnlyDeleteTest() { assertThatThrownBy(() -> this.transactionalService.deleteInReadOnly(new TestEntity())) - .hasMessage("Spanner transaction cannot apply mutations because it is in readonly mode"); + .hasMessage("Spanner transaction cannot apply mutations because it is in readonly mode"); } @Test void readOnlyDmlTest() { assertThatThrownBy(() -> this.transactionalService.dmlInReadOnly()) - .hasMessage("Spanner transaction cannot execute DML because it is in readonly mode"); + .hasMessage("Spanner transaction cannot execute DML because it is in readonly mode"); } @Test void partitionedDmlInTransactionTest() { assertThatThrownBy(() -> this.transactionalService.partitionedDmlInTransaction()) - .hasMessage("Cannot execute partitioned DML in a transaction."); + .hasMessage("Cannot execute partitioned DML in a transaction."); } /** Spring config for the tests. */ diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplateTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplateTests.java index 52b1fd3576..0c91520226 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplateTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerDatabaseAdminTemplateTests.java @@ -77,7 +77,8 @@ void setup() { @Test void getTableRelationshipsTest() { when(this.mockDatabasePage.getValues()) - .thenReturn(List.of(new Database(this.databaseId, State.READY, this.databaseAdminClient))); + .thenReturn( + List.of(new Database(this.databaseId, State.READY, this.databaseAdminClient))); ReadContext readContext = mock(ReadContext.class); Struct s1 = @@ -222,16 +223,17 @@ void getTableRelationshipsTest() { assertThat(this.spannerDatabaseAdminTemplate.isInterleaved("parent_b", "child")) .as("verify not parent-child relationship") .isFalse(); - - assertThat( - this.spannerDatabaseAdminTemplate.isInterleaved("my_schema.grandpa", "my_schema.dad")) + + assertThat(this.spannerDatabaseAdminTemplate + .isInterleaved("my_schema.grandpa", "my_schema.dad")) .as("verify my-schema grand-child relationship") .isTrue(); - assertThat( - this.spannerDatabaseAdminTemplate.isInterleaved("my_schema.grandpa", "my_schema.child")) + assertThat(this.spannerDatabaseAdminTemplate + .isInterleaved("my_schema.grandpa", "my_schema.child")) .as("verify my-schema grand-child relationship") .isTrue(); - assertThat(this.spannerDatabaseAdminTemplate.isInterleaved("my_schema.grandpa", "child")) + assertThat(this.spannerDatabaseAdminTemplate + .isInterleaved("my_schema.grandpa", "child")) .as("verify not my-schema grand-child relationship") .isFalse(); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerSchemaUtilsTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerSchemaUtilsTests.java index dd6b3b77f4..02fa5d67e3 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerSchemaUtilsTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/admin/SpannerSchemaUtilsTests.java @@ -175,11 +175,7 @@ void createDdlForJson() { assertColumnDdl( JsonColumn.class, null, "jsonCol", Type.Code.JSON, OptionalLong.empty(), "jsonCol JSON"); assertColumnDdl( - List.class, - JsonColumn.class, - "arrayJsonCol", - Type.Code.JSON, - OptionalLong.empty(), + List.class, JsonColumn.class, "arrayJsonCol", Type.Code.JSON, OptionalLong.empty(), "arrayJsonCol ARRAY"); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/KeyConversionTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/KeyConversionTests.java index 0977a7c7b3..508688f501 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/KeyConversionTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/KeyConversionTests.java @@ -32,6 +32,7 @@ import org.junit.jupiter.params.provider.MethodSource; /** Tests for converting Spanner keys. */ + class KeyConversionTests { private final SpannerWriteConverter writeConverter; diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/SpannerWriteMethodCoverageTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/SpannerWriteMethodCoverageTests.java index c2908f142d..ae0c4513db 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/SpannerWriteMethodCoverageTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/convert/SpannerWriteMethodCoverageTests.java @@ -37,9 +37,9 @@ void allKnownMappingTypesTest() throws NoSuchFieldException { // TODO: https://github.com/GoogleCloudPlatform/spring-cloud-gcp/issues/2574 // Until this is implemented, ignore the new column types by ignoring the methods // that have the new column types as a parameter - if (Arrays.stream(method.getParameterTypes()) - .map(Class::getName) - .anyMatch(x -> x.contains("ProtocolMessageEnum") || x.contains("AbstractMessage"))) { + if (Arrays.stream(method.getParameterTypes()).map(Class::getName) + .anyMatch(x -> x.contains("ProtocolMessageEnum") + || x.contains("AbstractMessage"))) { continue; } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/it/SpannerTemplateIntegrationTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/it/SpannerTemplateIntegrationTests.java index 5081fe7b76..18330cc429 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/it/SpannerTemplateIntegrationTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/it/SpannerTemplateIntegrationTests.java @@ -188,18 +188,17 @@ void readOnlyTransactionTest() { Trade trade = Trade.makeTrade(); - Function operation = - transactionOperations -> { - // cannot do mutate in a read-only transaction - transactionOperations.insert(trade); - return null; - }; + Function operation = transactionOperations -> { + // cannot do mutate in a read-only transaction + transactionOperations.insert(trade); + return null; + }; SpannerReadOptions readOptions = new SpannerReadOptions(); - assertThatThrownBy( - () -> this.spannerOperations.performReadOnlyTransaction(operation, readOptions)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("A read-only transaction template cannot perform mutations."); + assertThatThrownBy(() -> this.spannerOperations.performReadOnlyTransaction(operation, readOptions)) + .isInstanceOf(SpannerDataException.class) + .hasMessage("A read-only transaction template cannot perform mutations."); + } /** a transactional service for testing annotated transaction methods. */ diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerKeyPropertyTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerKeyPropertyTests.java index 41f8682782..8d94ebe2dd 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerKeyPropertyTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerKeyPropertyTests.java @@ -44,18 +44,18 @@ void setup() { @Test void nullSpannerPersistentEntityTest() { - assertThatThrownBy( - () -> new SpannerCompositeKeyProperty(null, new SpannerPersistentProperty[] {})) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid Cloud Spanner persistent entity is required."); + assertThatThrownBy(() -> new SpannerCompositeKeyProperty(null, new SpannerPersistentProperty[] {})) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid Cloud Spanner persistent entity is required."); } @Test void nullPropertiesTest() { assertThatThrownBy(() -> new SpannerCompositeKeyProperty(this.spannerPersistentEntity, null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid array of primary key properties is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid array of primary key properties is required."); + } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentEntityImplTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentEntityImplTests.java index c2556f1371..207a39f784 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentEntityImplTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentEntityImplTests.java @@ -47,17 +47,15 @@ class SpannerPersistentEntityImplTests { SpannerPersistentEntityImplTests() { this.spannerMappingContext = new SpannerMappingContext(); - this.spannerEntityProcessor = - new ConverterAwareMappingSpannerEntityProcessor(this.spannerMappingContext); + this.spannerEntityProcessor = new ConverterAwareMappingSpannerEntityProcessor( + this.spannerMappingContext); } @Test void testTableName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>( - TypeInformation.of(TestEntity.class), - this.spannerMappingContext, - this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>(TypeInformation.of(TestEntity.class), + this.spannerMappingContext, this.spannerEntityProcessor); assertThat(entity.tableName()).isEqualTo("custom_test_table"); } @@ -65,10 +63,8 @@ void testTableName() { @Test void testRawTableName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>( - TypeInformation.of(EntityNoCustomName.class), - this.spannerMappingContext, - this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityNoCustomName.class), + this.spannerMappingContext, this.spannerEntityProcessor); assertThat(entity.tableName()).isEqualTo("entityNoCustomName"); } @@ -76,10 +72,8 @@ void testRawTableName() { @Test void testEmptyCustomTableName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>( - TypeInformation.of(EntityEmptyCustomName.class), - this.spannerMappingContext, - this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityEmptyCustomName.class), + this.spannerMappingContext, this.spannerEntityProcessor); assertThat(entity.tableName()).isEqualTo("entityEmptyCustomName"); } @@ -94,24 +88,19 @@ void testColumns() { void testExpressionResolutionWithoutApplicationContext() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>( - TypeInformation.of(EntityWithExpression.class), - this.spannerMappingContext, - this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), + this.spannerMappingContext, this.spannerEntityProcessor); assertThatThrownBy(entity::tableName) .isInstanceOf(SpannerDataException.class) .hasMessage("Error getting table name for EntityWithExpression") - .hasStackTraceContaining( - "EL1007E: Property or field 'tablePostfix' cannot be found on null"); + .hasStackTraceContaining("EL1007E: Property or field 'tablePostfix' cannot be found on null"); } @Test void testExpressionResolutionFromApplicationContext() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>( - TypeInformation.of(EntityWithExpression.class), - this.spannerMappingContext, - this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), + this.spannerMappingContext, this.spannerEntityProcessor); ApplicationContext applicationContext = mock(ApplicationContext.class); when(applicationContext.getBean("tablePostfix")).thenReturn("something"); @@ -125,12 +114,9 @@ void testExpressionResolutionFromApplicationContext() { void testDuplicatePrimaryKeyOrder() { SpannerMappingContext spannerMappingContext = new SpannerMappingContext(); - assertThatThrownBy( - () -> - spannerMappingContext.getPersistentEntity(EntityWithDuplicatePrimaryKeyOrder.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessage( - "Two properties were annotated with the same primary key order: id2 and id in EntityWithDuplicatePrimaryKeyOrder."); + assertThatThrownBy(() -> spannerMappingContext.getPersistentEntity(EntityWithDuplicatePrimaryKeyOrder.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessage("Two properties were annotated with the same primary key order: id2 and id in EntityWithDuplicatePrimaryKeyOrder."); } @Test @@ -138,11 +124,10 @@ void testInvalidPrimaryKeyOrder() { SpannerMappingContext spannerMappingContext = new SpannerMappingContext(); - assertThatThrownBy( - () -> spannerMappingContext.getPersistentEntity(EntityWithWronglyOrderedKeys.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessage( - "The primary key columns were not given a consecutive order. There is no property annotated with order 2 in EntityWithWronglyOrderedKeys."); + assertThatThrownBy(() -> spannerMappingContext.getPersistentEntity(EntityWithWronglyOrderedKeys.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessage("The primary key columns were not given a consecutive order. There is no property annotated with order 2 in EntityWithWronglyOrderedKeys."); + } @Test @@ -193,8 +178,8 @@ void testSetIdPropertyLongerKey() { Key testKey = Key.of("blah", 123L, 123.45D, "abc"); assertThatThrownBy(() -> propertyAccessor.setProperty(idProperty, testKey)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("The number of key parts is not equal to the number of primary key properties"); + .isInstanceOf(SpannerDataException.class) + .hasMessage("The number of key parts is not equal to the number of primary key properties"); } @Test @@ -209,8 +194,9 @@ void testSetIdPropertyNullKey() { PersistentPropertyAccessor propertyAccessor = entity.getPropertyAccessor(t); assertThatThrownBy(() -> propertyAccessor.setProperty(idProperty, null)) - .isInstanceOf(SpannerDataException.class) - .hasMessage("The number of key parts is not equal to the number of primary key properties"); + .isInstanceOf(SpannerDataException.class) + .hasMessage("The number of key parts is not equal to the number of primary key properties"); + } @Test @@ -230,10 +216,8 @@ void testIgnoredProperty() { void testInvalidTableName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>( - TypeInformation.of(EntityBadName.class), - this.spannerMappingContext, - this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityBadName.class), + this.spannerMappingContext, this.spannerEntityProcessor); assertThatThrownBy(entity::tableName) .isInstanceOf(SpannerDataException.class) @@ -246,10 +230,8 @@ void testInvalidTableName() { void testSpelInvalidName() { SpannerPersistentEntityImpl entity = - new SpannerPersistentEntityImpl<>( - TypeInformation.of(EntityWithExpression.class), - this.spannerMappingContext, - this.spannerEntityProcessor); + new SpannerPersistentEntityImpl<>(TypeInformation.of(EntityWithExpression.class), + this.spannerMappingContext, this.spannerEntityProcessor); ApplicationContext applicationContext = mock(ApplicationContext.class); when(applicationContext.getBean("tablePostfix")).thenReturn("; DROP TABLE your_table;"); @@ -263,17 +245,18 @@ void testSpelInvalidName() { .hasStackTraceContaining( "Only letters, numbers, and underscores are allowed in table names: " + "table_; DROP TABLE your_table;"); + + } @Test void testDuplicateEmbeddedColumnName() { - assertThatThrownBy( - () -> - this.spannerMappingContext.getPersistentEntity(EmbeddedParentDuplicateColumn.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessage( - "Two properties resolve to the same column name: other in EmbeddedParentDuplicateColumn"); + + assertThatThrownBy(() -> this.spannerMappingContext.getPersistentEntity(EmbeddedParentDuplicateColumn.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessage("Two properties resolve to the same column name: other in EmbeddedParentDuplicateColumn"); + } @Test @@ -314,10 +297,9 @@ void testEmbeddedParentKeys() { @Test void testEmbeddedCollection() { - assertThatThrownBy( - () -> this.spannerMappingContext.getPersistentEntity(ChildCollectionEmbedded.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessageContaining("Embedded properties cannot be collections: "); + assertThatThrownBy(() -> this.spannerMappingContext.getPersistentEntity(ChildCollectionEmbedded.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessageContaining("Embedded properties cannot be collections: "); } @Test @@ -346,14 +328,10 @@ void doWithChildrenCollectionsTest() { @Test void testParentChildPkNamesMismatch() { - assertThatThrownBy( - () -> - this.spannerMappingContext.getPersistentEntity( - ParentInRelationshipMismatchedKeyName.class)) - .isInstanceOf(SpannerDataException.class) - .hasMessage( - "The child primary key column (ChildBinRelationship.id) at position 1 does not match that " - + "of its parent (ParentInRelationshipMismatchedKeyName.idNameDifferentThanChildren)."); + assertThatThrownBy(() -> this.spannerMappingContext.getPersistentEntity(ParentInRelationshipMismatchedKeyName.class)) + .isInstanceOf(SpannerDataException.class) + .hasMessage("The child primary key column (ChildBinRelationship.id) at position 1 does not match that " + + "of its parent (ParentInRelationshipMismatchedKeyName.idNameDifferentThanChildren)."); } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java index bce2eb8a6f..3dcdcddf14 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java @@ -37,7 +37,7 @@ class SpannerPersistentPropertyImplTests { @Test void testGetColumn() { assertThat(new SpannerMappingContext().getPersistentEntity(TestEntity.class).columns()) - .containsExactlyInAnyOrder("id", "custom_col", "other", "doubleList"); + .containsExactlyInAnyOrder("id", "custom_col", "other", "doubleList"); } @Test @@ -49,59 +49,58 @@ void testNullColumnName() { context.setFieldNamingStrategy(namingStrat); assertThatThrownBy(() -> context.getPersistentEntity(TestEntity.class)) - .hasMessageContaining( - "Invalid (null or empty) field name returned for " - + "property @com.google.cloud.spring.data.spanner.core.mapping.PrimaryKey") - .hasMessageContaining("keyOrder=1") - .hasMessageContaining("value=1") - .hasMessageContaining( - "java.lang.String com.google.cloud.spring.data.spanner.core.mapping." - + "SpannerPersistentPropertyImplTests$TestEntity.id by class " - + "org.springframework.data.mapping.model.FieldNamingStrategy$MockitoMock$"); + .hasMessageContaining("Invalid (null or empty) field name returned for " + + "property @com.google.cloud.spring.data.spanner.core.mapping.PrimaryKey") + .hasMessageContaining("keyOrder=1") + .hasMessageContaining("value=1") + .hasMessageContaining("java.lang.String com.google.cloud.spring.data.spanner.core.mapping." + + "SpannerPersistentPropertyImplTests$TestEntity.id by class " + + "org.springframework.data.mapping.model.FieldNamingStrategy$MockitoMock$"); } + @Test void testAssociations() { new SpannerMappingContext() - .getPersistentEntity(TestEntity.class) - .doWithProperties( - (PropertyHandler) - prop -> { - assertThat( - ((SpannerPersistentPropertyImpl) prop).createAssociation().getInverse()) - .isSameAs(prop); - assertThat( - ((SpannerPersistentPropertyImpl) prop).createAssociation().getObverse()) - .isNull(); - }); + .getPersistentEntity(TestEntity.class) + .doWithProperties( + (PropertyHandler) + prop -> { + assertThat( + ((SpannerPersistentPropertyImpl) prop).createAssociation().getInverse()) + .isSameAs(prop); + assertThat( + ((SpannerPersistentPropertyImpl) prop).createAssociation().getObverse()) + .isNull(); + }); } @Test void testColumnInnerType() { assertThat( new SpannerMappingContext() - .getPersistentEntity(TestEntity.class) - .getPersistentProperty("doubleList") - .getColumnInnerType()) - .isEqualTo(Double.class); + .getPersistentEntity(TestEntity.class) + .getPersistentProperty("doubleList") + .getColumnInnerType()) + .isEqualTo(Double.class); } @Test void testNoPojoIdProperties() { new SpannerMappingContext() - .getPersistentEntity(TestEntity.class) - .doWithProperties( - (PropertyHandler) - prop -> assertThat(prop.isIdProperty()).isFalse()); + .getPersistentEntity(TestEntity.class) + .doWithProperties( + (PropertyHandler) + prop -> assertThat(prop.isIdProperty()).isFalse()); } @Test void testIgnoredProperty() { new SpannerMappingContext() - .getPersistentEntity(TestEntity.class) - .doWithProperties( - (PropertyHandler) - prop -> assertThat(prop.getColumnName()).isNotEqualTo("not_mapped")); + .getPersistentEntity(TestEntity.class) + .doWithProperties( + (PropertyHandler) + prop -> assertThat(prop.getColumnName()).isNotEqualTo("not_mapped")); } @Table(name = "custom_test_table") diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/typeadapter/InstantTypeAdapterTest.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/typeadapter/InstantTypeAdapterTest.java index eabf00bbc8..b110d9aade 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/typeadapter/InstantTypeAdapterTest.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/typeadapter/InstantTypeAdapterTest.java @@ -22,6 +22,7 @@ public void writeInstantTest_epochSecond0() throws IOException { instantTypeAdapter.write(jsonWriter, instant); assertThat(stringWriter.toString()).isEqualTo("\"1970-01-01T00:00:00Z\""); + } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/it/SpannerRepositoryInsertIntegrationTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/it/SpannerRepositoryInsertIntegrationTests.java index 7fa63d0af6..beaeba1d7c 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/it/SpannerRepositoryInsertIntegrationTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/it/SpannerRepositoryInsertIntegrationTests.java @@ -35,6 +35,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; /** Integration tests for Spanner Repository. */ + @EnabledIfSystemProperty(named = "it.spanner", matches = "true") @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = {IntegrationTestConfiguration.class}) diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryMethodTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryMethodTests.java index ecc020461c..5f256691b4 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryMethodTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryMethodTests.java @@ -39,8 +39,7 @@ void setUp() throws Exception { this.mockMetadata = mock(RepositoryMetadata.class); this.mockProjectionFactory = mock(ProjectionFactory.class); doReturn(TypeInformation.fromReturnTypeOf(Example.class.getMethod("someAnnotatedMethod"))) - .when(mockMetadata) - .getReturnType(any()); + .when(mockMetadata).getReturnType(any()); doAnswer(a -> String.class).when(mockMetadata).getReturnedDomainClass(any()); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryTests.java index 3e8da8a722..7f44d391ec 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerStatementQueryTests.java @@ -174,9 +174,7 @@ void compoundNameConventionTest() throws NoSuchMethodException { List.class, BigDecimal.class); when(this.queryMethod.getQueryMethod()).thenReturn(method); - doReturn(new DefaultParameters(ParametersSource.of(method))) - .when(this.queryMethod) - .getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); this.partTreeSpannerQuery.execute(params); verify(this.spannerTemplate, times(1)).query((Class) any(), any(), any()); @@ -224,9 +222,7 @@ void compoundNameConventionCountTest() throws NoSuchMethodException { Object.class, Object.class, Object.class); - doReturn(new DefaultParameters(ParametersSource.of(method))) - .when(this.queryMethod) - .getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); when(this.spannerTemplate.query((Function) any(), any(), any())) .thenAnswer( @@ -300,9 +296,7 @@ private void runPageableOrSortTest(Object[] params, Method method, String expect when(this.spannerTemplate.query((Function) any(), any(), any())) .thenReturn(Collections.singletonList(1L)); - doReturn(new DefaultParameters(ParametersSource.of(method))) - .when(this.queryMethod) - .getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); when(this.spannerTemplate.query((Class) any(), any(), any())) .thenAnswer( @@ -331,9 +325,7 @@ void pageableNotLastParameterTest() throws NoSuchMethodException { // Test that preparePartTreeSqlTagParameterMap() can process cases // where Pageable is not the last parameter Object[] params = new Object[] {"BUY", PageRequest.of(1, 10, Sort.by("traderId")), "STOCK1"}; - Method method = - QueryHolder.class.getMethod( - "repositoryMethod7", String.class, Pageable.class, String.class); + Method method = QueryHolder.class.getMethod("repositoryMethod7", String.class, Pageable.class, String.class); when(this.queryMethod.getQueryMethod()).thenReturn(method); String expectedSql = @@ -342,15 +334,14 @@ void pageableNotLastParameterTest() throws NoSuchMethodException { + "WHERE ( action=@tag0 AND ticker=@tag1 ) " + "ORDER BY trader_id ASC LIMIT 10 OFFSET 10"; + when(this.queryMethod.getName()).thenReturn("findByActionAndSymbol"); this.partTreeSpannerQuery = spy(createQuery()); when(this.spannerTemplate.query((Function) any(), any(), any())) .thenReturn(Collections.singletonList(1L)); - doReturn(new DefaultParameters(ParametersSource.of(method))) - .when(this.queryMethod) - .getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); when(this.spannerTemplate.query((Class) any(), any(), any())) .thenAnswer( @@ -387,9 +378,7 @@ void unspecifiedParametersTest() throws NoSuchMethodException { this.partTreeSpannerQuery = createQuery(); Method method = QueryHolder.class.getMethod("repositoryMethod4", Object.class, Object.class, Object.class); - doReturn(new DefaultParameters(ParametersSource.of(method))) - .when(this.queryMethod) - .getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); // There are too few params specified, so the exception will occur. Object[] params = @@ -398,8 +387,8 @@ void unspecifiedParametersTest() throws NoSuchMethodException { }; assertThatThrownBy(() -> this.partTreeSpannerQuery.execute(params)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("The number of tags does not match the number of params."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("The number of tags does not match the number of params."); } @Test @@ -420,9 +409,7 @@ void unsupportedParamTypeTest() throws NoSuchMethodException { Trade.class, Object.class); - doReturn(new DefaultParameters(ParametersSource.of(method))) - .when(this.queryMethod) - .getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); // This parameter is an unsupported type for Spanner SQL. Object[] params = @@ -431,25 +418,22 @@ void unsupportedParamTypeTest() throws NoSuchMethodException { }; assertThatThrownBy(() -> this.partTreeSpannerQuery.execute(params)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining( - "is not a supported type: class com.google." - + "cloud.spring.data.spanner.repository.query.SpannerStatementQueryTests$Trade"); + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("is not a supported type: class com.google." + + "cloud.spring.data.spanner.repository.query.SpannerStatementQueryTests$Trade"); } @Test void unSupportedPredicateTest() throws NoSuchMethodException { when(this.queryMethod.getName()).thenReturn("countByTraderIdBetween"); Method method = Object.class.getMethod("toString"); - doReturn(new DefaultParameters(ParametersSource.of(method))) - .when(this.queryMethod) - .getParameters(); + doReturn(new DefaultParameters(ParametersSource.of(method))).when(this.queryMethod).getParameters(); this.partTreeSpannerQuery = createQuery(); assertThatThrownBy(() -> this.partTreeSpannerQuery.execute(EMPTY_PARAMETERS)) - .isInstanceOf(UnsupportedOperationException.class) - .hasMessage("The statement type: BETWEEN (2): [IsBetween, " + "Between] is not supported."); + .isInstanceOf(UnsupportedOperationException.class) + .hasMessage("The statement type: BETWEEN (2): [IsBetween, " + "Between] is not supported."); } @Table(name = "trades") diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java index 850b5796b2..5806913683 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java @@ -153,13 +153,12 @@ void noPageableParamQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn(toReturn); - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, toReturn, false); @@ -217,13 +216,12 @@ void pageableParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -285,13 +283,12 @@ void sortParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -354,13 +351,12 @@ void sortAndPageableQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -465,13 +461,12 @@ void compoundNameConventionTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Trade.class, false); @@ -540,13 +535,12 @@ void dmlTest() throws NoSuchMethodException { TransactionRunner transactionRunner = mock(TransactionRunner.class); when(this.databaseClient.readWriteTransaction()).thenReturn(transactionRunner); - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); when(transactionRunner.run(any())) .thenAnswer( @@ -590,13 +584,12 @@ void sqlCountWithWhereTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, long.class, false); @@ -659,13 +652,12 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { EvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setVariable(paramNames[0], params[0]); - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); @@ -714,8 +706,8 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { String sql = "SELECT detailsList from singer where stageName = @stageName"; - Object[] params = new Object[] {"STAGENAME"}; - String[] paramNames = new String[] {"stageName"}; + Object[] params = new Object[]{"STAGENAME"}; + String[] paramNames = new String[]{"stageName"}; when(queryMethod.isCollectionQuery()).thenReturn(true); ResultProcessor resultProcessor = mock(ResultProcessor.class); @@ -727,25 +719,24 @@ void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { EvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setVariable(paramNames[0], params[0]); - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); doAnswer( - invocation -> { - Statement statement = invocation.getArgument(1); - assertThat(statement.getSql()).isEqualTo(sql); - Map paramMap = statement.getParameters(); - assertThat(paramMap.get("stageName").getString()).isEqualTo(params[0]); - - return null; - }) + invocation -> { + Statement statement = invocation.getArgument(1); + assertThat(statement.getSql()).isEqualTo(sql); + Map paramMap = statement.getParameters(); + assertThat(paramMap.get("stageName").getString()).isEqualTo(params[0]); + + return null; + }) .when(this.spannerTemplate) .query((Function) any(), any(), any()); @@ -766,22 +757,17 @@ void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { Struct row = mock(Struct.class); when(row.getType()) - .thenReturn( - Type.struct( - Arrays.asList(Type.StructField.of("detailsList", Type.array(Type.json()))))); + .thenReturn(Type.struct( + Arrays.asList(Type.StructField.of("detailsList", Type.array(Type.json()))))); when(row.getColumnType(0)).thenReturn(Type.array(Type.json())); - when(row.getJsonList(0)) - .thenReturn( - Arrays.asList( - "{\"p1\":\"address line\",\"p2\":\"5\"}", - "{\"p1\":\"address line 2\",\"p2\":\"6\"}")); + when(row.getJsonList(0)).thenReturn(Arrays.asList("{\"p1\":\"address line\",\"p2\":\"5\"}", + "{\"p1\":\"address line 2\",\"p2\":\"6\"}")); when(row.getColumnType("detailsList")).thenReturn(Type.array(Type.json())); Object result = rowFunc.apply(row); assertThat(result).isInstanceOf(List.class); - assertThat((List) result) - .hasSize(2) + assertThat((List) result).hasSize(2) .containsExactly(new Detail("address line", "5"), new Detail("address line 2", "6")); } @@ -816,7 +802,8 @@ public boolean equals(Object o) { return false; } Detail detail = (Detail) o; - return Objects.equal(p1, detail.p1) && Objects.equal(p2, detail.p2); + return Objects.equal(p1, detail.p1) + && Objects.equal(p2, detail.p2); } @Override diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepositoryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepositoryTests.java index 28beef7d94..018d5e040f 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepositoryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SimpleSpannerRepositoryTests.java @@ -62,16 +62,16 @@ void setup() { void constructorNullSpannerOperationsTest() { assertThatThrownBy(() -> new SimpleSpannerRepository(null, Object.class)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid SpannerTemplate object is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid SpannerTemplate object is required."); } @Test void constructorNullEntityTypeTest() { assertThatThrownBy(() -> new SimpleSpannerRepository(this.template, null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A valid entity type is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A valid entity type is required."); } @Test @@ -84,77 +84,74 @@ void getSpannerOperationsTest() { @Test void saveNullObjectTest() { - SimpleSpannerRepository spannerRepository = - new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.save(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null entity is required for saving."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null entity is required for saving."); } @Test void findNullIdTest() { - SimpleSpannerRepository spannerRepository = - new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.findById(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null ID is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null ID is required."); + + } @Test void existsNullIdTest() { - SimpleSpannerRepository spannerRepository = - new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.existsById(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null ID is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null ID is required."); + } @Test void deleteNullIdTest() { - SimpleSpannerRepository spannerRepository = - new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.deleteById(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null ID is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null ID is required."); } @Test void deleteNullEntityTest() { - SimpleSpannerRepository spannerRepository = - new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.delete(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null entity is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null entity is required."); + } @Test void deleteAllNullEntityTest() { - SimpleSpannerRepository spannerRepository = - new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.deleteAll(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null list of entities is required."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null list of entities is required."); } @Test void saveAllNullEntityTest() { - SimpleSpannerRepository spannerRepository = - new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.saveAll(null)) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("A non-null list of entities is required for saving."); + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("A non-null list of entities is required for saving."); } @Test @@ -191,13 +188,13 @@ void findByIdTest() { void findByIdKeyWritingThrowsAnException() { when(this.entityProcessor.convertToKey(any())).thenThrow(SpannerDataException.class); - SimpleSpannerRepository spannerRepository = - new SimpleSpannerRepository(this.template, Object.class); + SimpleSpannerRepository spannerRepository = new SimpleSpannerRepository(this.template, Object.class); assertThatThrownBy(() -> spannerRepository.findById(new Object[] {})) - .isInstanceOf(SpannerDataException.class); + .isInstanceOf(SpannerDataException.class); } + @Test void existsByIdTestFound() { when(this.entityProcessor.convertToKey(A_KEY)).thenReturn(A_KEY); @@ -288,7 +285,8 @@ void findAllById_failsOnNull() { void findAllById_shortcutsToEmptyReturn() { SimpleSpannerRepository repo = new SimpleSpannerRepository<>(this.template, Object.class); - assertThat(repo.findAllById(new ArrayList<>())).isEmpty(); + assertThat(repo.findAllById(new ArrayList<>())) + .isEmpty(); verifyNoInteractions(this.template); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java index d68592e77a..aab77e3191 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java @@ -73,11 +73,10 @@ void getEntityInformationNotAvailableTest() { new SpannerRepositoryFactory(mock(SpannerMappingContext.class), this.spannerTemplate); assertThatThrownBy(() -> factory.getEntityInformation(TestEntity.class)) - .isInstanceOf(MappingException.class) - .hasMessage( - "Could not lookup mapping metadata for domain " - + "class com.google.cloud.spring.data.spanner.repository.support." - + "SpannerRepositoryFactoryTests$TestEntity!"); + .isInstanceOf(MappingException.class) + .hasMessage("Could not lookup mapping metadata for domain " + + "class com.google.cloud.spring.data.spanner.repository.support." + + "SpannerRepositoryFactoryTests$TestEntity!"); } @Test diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/SingerRepository.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/SingerRepository.java index 75c4ab5d34..4c0a1b1498 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/SingerRepository.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/SingerRepository.java @@ -26,8 +26,5 @@ public interface SingerRepository extends SpannerRepository { value = "INSERT INTO singers_list (singerId, firstName, lastName) VALUES (@singerId, @firstName," + " @lastName)") - void insert( - @Param("singerId") Integer singerId, - @Param("firstName") String firstName, - @Param("lastName") String lastName); + void insert(@Param("singerId") Integer singerId, @Param("firstName") String firstName, @Param("lastName") String lastName); } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/Trade.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/Trade.java index c768292482..3e211cd337 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/Trade.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/Trade.java @@ -325,7 +325,8 @@ public List
getAdditionalDetails() { return additionalDetails; } - public void setAdditionalDetails(List
additionalDetails) { + public void setAdditionalDetails( + List
additionalDetails) { this.additionalDetails = additionalDetails; } diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/TradeRepository.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/TradeRepository.java index 3391f983c3..aa75ab52a6 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/TradeRepository.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/domain/TradeRepository.java @@ -152,7 +152,6 @@ public interface TradeRepository extends SpannerRepository { @NonNull Trade getByAction(String s); - @Query( - "SELECT symbol from :com.google.cloud.spring.data.spanner.test.domain.Trade: where id = @id") + @Query("SELECT symbol from :com.google.cloud.spring.data.spanner.test.domain.Trade: where id = @id") Optional getSymbolById(@Param("id") String id); } diff --git a/spring-cloud-gcp-data-spanner/src/test/resources/logback-test.xml b/spring-cloud-gcp-data-spanner/src/test/resources/logback-test.xml index 842c0b5cf0..e1d2038170 100644 --- a/spring-cloud-gcp-data-spanner/src/test/resources/logback-test.xml +++ b/spring-cloud-gcp-data-spanner/src/test/resources/logback-test.xml @@ -1,16 +1,16 @@ - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + - + - - - + + + From 210af4485c6c1416b47875dd0d347249bfb0a36c Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 13 Dec 2024 17:37:33 -0500 Subject: [PATCH 15/96] fix style violations --- .../repository/query/GqlDatastoreQuery.java | 3 - .../support/DatastoreRepositoryFactory.java | 7 - .../query/GqlDatastoreQueryTests.java | 6 - .../query/SpannerQueryLookupStrategy.java | 2 - .../support/SpannerRepositoryFactory.java | 42 ----- .../query/SqlSpannerQueryTests.java | 153 ++++++++++-------- 6 files changed, 83 insertions(+), 130 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java index ce49d16720..53695fd735 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java @@ -56,11 +56,8 @@ import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersParameterAccessor; -import org.springframework.data.repository.query.SpelEvaluator; -import org.springframework.data.repository.query.SpelQueryContext; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.data.repository.query.ValueExpressionQueryRewriter; -import org.springframework.expression.spel.standard.SpelCompiler; import org.springframework.util.StringUtils; /** diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java index 26e71c7db3..d78884be6a 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java @@ -25,21 +25,14 @@ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; -import org.springframework.context.expression.BeanFactoryAccessor; -import org.springframework.context.expression.BeanFactoryResolver; import org.springframework.data.mapping.MappingException; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryFactorySupport; -import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; -import org.springframework.data.spel.ExpressionDependencies; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java index cf50260495..0cd8464197 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java @@ -18,7 +18,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; @@ -65,15 +64,10 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; -import org.springframework.data.expression.ValueEvaluationContext; -import org.springframework.data.expression.ValueEvaluationContextProvider; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.QueryMethodValueEvaluationContextAccessor; import org.springframework.data.repository.query.ValueExpressionDelegate; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.spel.support.StandardEvaluationContext; /** Tests for the GQL Query Method. */ class GqlDatastoreQueryTests { diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java index da41604c65..b6fd5eb1bb 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java @@ -19,8 +19,6 @@ import com.google.cloud.spring.data.spanner.core.SpannerTemplate; import com.google.cloud.spring.data.spanner.core.mapping.SpannerMappingContext; import java.lang.reflect.Method; - -import org.springframework.data.expression.ValueEvaluationContextProvider; import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.core.RepositoryMetadata; diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java index fc31c4bccd..5c266aa2a4 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java @@ -25,24 +25,16 @@ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; -import org.springframework.context.expression.BeanFactoryAccessor; -import org.springframework.context.expression.BeanFactoryResolver; -import org.springframework.data.expression.ValueEvaluationContextProvider; import org.springframework.data.mapping.MappingException; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryFactorySupport; -import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; -import org.springframework.data.repository.query.QueryMethodValueEvaluationContextAccessor; import org.springframework.data.repository.query.ValueExpressionDelegate; -import org.springframework.data.spel.ExpressionDependencies; -import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.standard.SpelExpressionParser; -import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -114,40 +106,6 @@ protected Optional getQueryLookupStrategy( EXPRESSION_PARSER)); } - private QueryMethodEvaluationContextProvider delegateContextProvider( - ValueExpressionDelegate evaluationContextProvider) { - return null; -// return new QueryMethodEvaluationContextProvider() { -// @Override -// public > EvaluationContext getEvaluationContext( -// T parameters, Object[] parameterValues) { -// StandardEvaluationContext evaluationContext = -// (StandardEvaluationContext) -// evaluationContextProvider.getEvaluationContext(parameters, parameterValues); -// evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); -// evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); -// evaluationContext.setBeanResolver( -// new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); -// return evaluationContext; -// } -// -// @Override -// public > EvaluationContext getEvaluationContext( -// T parameters, Object[] parameterValues, ExpressionDependencies expressionDependencies) { -// StandardEvaluationContext evaluationContext = -// (StandardEvaluationContext) -// evaluationContextProvider.getEvaluationContext( -// parameters, parameterValues, expressionDependencies); -// -// evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); -// evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); -// evaluationContext.setBeanResolver( -// new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); -// return evaluationContext; -// } -// }; - } - @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java index 5806913683..850b5796b2 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java @@ -153,12 +153,13 @@ void noPageableParamQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn(toReturn); - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, toReturn, false); @@ -216,12 +217,13 @@ void pageableParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -283,12 +285,13 @@ void sortParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -351,12 +354,13 @@ void sortAndPageableQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -461,12 +465,13 @@ void compoundNameConventionTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Trade.class, false); @@ -535,12 +540,13 @@ void dmlTest() throws NoSuchMethodException { TransactionRunner transactionRunner = mock(TransactionRunner.class); when(this.databaseClient.readWriteTransaction()).thenReturn(transactionRunner); - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); when(transactionRunner.run(any())) .thenAnswer( @@ -584,12 +590,13 @@ void sqlCountWithWhereTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, long.class, false); @@ -652,12 +659,13 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { EvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setVariable(paramNames[0], params[0]); - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); @@ -706,8 +714,8 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { String sql = "SELECT detailsList from singer where stageName = @stageName"; - Object[] params = new Object[]{"STAGENAME"}; - String[] paramNames = new String[]{"stageName"}; + Object[] params = new Object[] {"STAGENAME"}; + String[] paramNames = new String[] {"stageName"}; when(queryMethod.isCollectionQuery()).thenReturn(true); ResultProcessor resultProcessor = mock(ResultProcessor.class); @@ -719,24 +727,25 @@ void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { EvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setVariable(paramNames[0], params[0]); - ValueEvaluationContextProvider evaluationContextProvider = mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.createValueContextProvider(any())) + .thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); doAnswer( - invocation -> { - Statement statement = invocation.getArgument(1); - assertThat(statement.getSql()).isEqualTo(sql); - Map paramMap = statement.getParameters(); - assertThat(paramMap.get("stageName").getString()).isEqualTo(params[0]); - - return null; - }) + invocation -> { + Statement statement = invocation.getArgument(1); + assertThat(statement.getSql()).isEqualTo(sql); + Map paramMap = statement.getParameters(); + assertThat(paramMap.get("stageName").getString()).isEqualTo(params[0]); + + return null; + }) .when(this.spannerTemplate) .query((Function) any(), any(), any()); @@ -757,17 +766,22 @@ void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { Struct row = mock(Struct.class); when(row.getType()) - .thenReturn(Type.struct( - Arrays.asList(Type.StructField.of("detailsList", Type.array(Type.json()))))); + .thenReturn( + Type.struct( + Arrays.asList(Type.StructField.of("detailsList", Type.array(Type.json()))))); when(row.getColumnType(0)).thenReturn(Type.array(Type.json())); - when(row.getJsonList(0)).thenReturn(Arrays.asList("{\"p1\":\"address line\",\"p2\":\"5\"}", - "{\"p1\":\"address line 2\",\"p2\":\"6\"}")); + when(row.getJsonList(0)) + .thenReturn( + Arrays.asList( + "{\"p1\":\"address line\",\"p2\":\"5\"}", + "{\"p1\":\"address line 2\",\"p2\":\"6\"}")); when(row.getColumnType("detailsList")).thenReturn(Type.array(Type.json())); Object result = rowFunc.apply(row); assertThat(result).isInstanceOf(List.class); - assertThat((List) result).hasSize(2) + assertThat((List) result) + .hasSize(2) .containsExactly(new Detail("address line", "5"), new Detail("address line 2", "6")); } @@ -802,8 +816,7 @@ public boolean equals(Object o) { return false; } Detail detail = (Detail) o; - return Objects.equal(p1, detail.p1) - && Objects.equal(p2, detail.p2); + return Objects.equal(p1, detail.p1) && Objects.equal(p2, detail.p2); } @Override From 5ba948735659d6524a4cc7b99124d63e275f705f Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 13 Dec 2024 17:51:45 -0500 Subject: [PATCH 16/96] remove unused imports --- .../spring/data/spanner/repository/query/SqlSpannerQuery.java | 1 - .../spanner/repository/support/SpannerRepositoryFactory.java | 1 - .../spanner/core/mapping/SpannerPersistentPropertyImplTests.java | 1 - .../repository/query/SpannerQueryLookupStrategyTests.java | 1 - .../repository/support/SpannerRepositoryFactoryTests.java | 1 - .../spring/data/spanner/test/AbstractSpannerIntegrationTest.java | 1 - 6 files changed, 6 deletions(-) diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java index 4c6376a413..2e9949506f 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java @@ -41,7 +41,6 @@ import java.util.stream.StreamSupport; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.data.expression.ValueEvaluationContext; import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.ParameterAccessor; diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java index 5c266aa2a4..9904f7e7d2 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java @@ -32,7 +32,6 @@ import org.springframework.data.repository.core.support.RepositoryFactorySupport; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.lang.Nullable; diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java index 3dcdcddf14..7421891218 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/core/mapping/SpannerPersistentPropertyImplTests.java @@ -25,7 +25,6 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.data.mapping.MappingException; import org.springframework.data.mapping.PropertyHandler; import org.springframework.data.mapping.model.FieldNamingStrategy; import org.springframework.test.context.junit.jupiter.SpringExtension; diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java index 931035b3d6..8212e49ee0 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java @@ -49,7 +49,6 @@ import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.spel.standard.SpelExpressionParser; diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java index aab77e3191..b4886726bb 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java @@ -35,7 +35,6 @@ import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.query.QueryLookupStrategy; -import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; /** Tests for the Spanner repository factory. */ diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/AbstractSpannerIntegrationTest.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/AbstractSpannerIntegrationTest.java index 51b38f59a2..d420685210 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/AbstractSpannerIntegrationTest.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/test/AbstractSpannerIntegrationTest.java @@ -17,7 +17,6 @@ package com.google.cloud.spring.data.spanner.test; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assumptions.assumeThat; import com.google.cloud.spring.data.spanner.core.SpannerOperations; import com.google.cloud.spring.data.spanner.core.admin.SpannerDatabaseAdminTemplate; From cb7d2475ee64506673803c38919e6f7b80b60103 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 16 Dec 2024 12:05:13 -0500 Subject: [PATCH 17/96] remove unused imports in autoconfigure --- .../spanner/SpannerTransactionManagerAutoConfiguration.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java index 527e478eae..b6478fcbbe 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/spanner/SpannerTransactionManagerAutoConfiguration.java @@ -28,7 +28,6 @@ import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration; import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; import org.springframework.context.annotation.Bean; -import org.springframework.transaction.TransactionManager; /** * Auto-configuration for {@link SpannerTransactionManager}. From da3e2e4d36a36cc5a0b821d723bd3d2443e1fe91 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 16 Dec 2024 12:26:16 -0500 Subject: [PATCH 18/96] fix imports in pubsub emulator --- .../google/cloud/spring/stream/binder/pubsub/PubSubEmulator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubEmulator.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubEmulator.java index 30699b673e..4f82db1951 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubEmulator.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubEmulator.java @@ -36,7 +36,6 @@ import java.util.StringTokenizer; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; - import org.apache.commons.lang3.SystemUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; From 72f5be7ce0536e97248532af67d551c0ab861efe Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 16 Dec 2024 12:57:32 -0500 Subject: [PATCH 19/96] fix gql datastore query test --- .../repository/query/GqlDatastoreQuery.java | 4 +-- .../query/GqlDatastoreQueryTests.java | 25 ++----------------- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java index 53695fd735..fd0811385c 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java @@ -314,7 +314,7 @@ private void setGqlResolvedEntityClassName() { private void setEvaluatingSpelQueryContext() { Set originalTags = new HashSet<>(GqlDatastoreQuery.this.originalParamTags); GqlDatastoreQuery.this.valueExpressionQueryRewriter = ValueExpressionQueryRewriter.of(valueExpressionDelegate, - (counter, spelExpression) -> { + (Integer counter, String spelExpression) -> { String newTag; do { counter++; @@ -322,7 +322,7 @@ private void setEvaluatingSpelQueryContext() { } while (originalTags.contains(newTag)); originalTags.add(newTag); return newTag; - }, String::concat) + }, (left, right) -> right) .withEvaluationContextAccessor(valueExpressionDelegate.getEvaluationContextAccessor()); } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java index 0cd8464197..612b1181a4 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java @@ -529,35 +529,14 @@ private Parameters buildParameters(Object[] params, String[] paramNames) { when(parameters.getParameter(eq(index))).thenAnswer(invocation -> param); } when(parameters.getNumberOfParameters()).thenReturn(paramNames.length); - - Supplier iteratorSupplier = - () -> { - Iterator parameterIterator = mock(Iterator.class); - if (paramNames.length == 0) { - when(parameterIterator.hasNext()).thenReturn(false); - } else { - // every hasNext() call will return true except for the last one - Boolean[] hasNextResponses = new Boolean[paramNames.length]; - Arrays.fill(hasNextResponses, true); - hasNextResponses[hasNextResponses.length - 1] = false; - when(parameterIterator.hasNext()).thenReturn(true, hasNextResponses); - - // Then we set up the sequence of returned values for the params - Parameter[] restOfParameters = new Parameter[parameterList.size() - 1]; - parameterList.subList(1, parameterList.size()).toArray(restOfParameters); - when(parameterIterator.next()).thenReturn(parameterList.getFirst(), restOfParameters); - } - return parameterIterator; - }; // we return a new iterator each time. This is because foreach loops call iterable.iterator() - // once and parameters - // is iterated over several times. + // once per foreach loop. when(parameters.iterator()) .thenAnswer( new Answer() { @Override public Iterator answer(InvocationOnMock invocation) throws Throwable { - return iteratorSupplier.get(); + return parameterList.iterator(); } }); return parameters; From ea12ab393aa7a10a515b7e5912c7852c0a9c7c07 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 16 Dec 2024 13:16:37 -0500 Subject: [PATCH 20/96] remove spring boot 3.2 compatibility check --- .github/workflows/integrationTests.yaml | 108 ------------------------ 1 file changed, 108 deletions(-) diff --git a/.github/workflows/integrationTests.yaml b/.github/workflows/integrationTests.yaml index 4a1e3f08ed..d4a34f36ec 100644 --- a/.github/workflows/integrationTests.yaml +++ b/.github/workflows/integrationTests.yaml @@ -109,114 +109,6 @@ jobs: --batch-mode \ --define aggregate=true \ surefire-report:failsafe-report-only - - name: Archive logs - if: always() - continue-on-error: true - uses: actions/upload-artifact@v4 - with: - name: Integration Test Logs - ${{ matrix.it}} - path: | - **/target/failsafe-reports/* - **/target/site - - spring-boot-3-2-compatibility: - if: | - github.actor != 'dependabot[bot]' && (( - github.event_name == 'pull_request' && github.repository == github.event.pull_request.head.repo.full_name - ) || (github.event_name != 'pull_request')) - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - it: - - alloydb - - bigquery - - cloudsql - - config - - datastore - - firestore - - kms - - kotlin - - logging - - metrics - - multisample - - pubsub - - pubsub-bus - - pubsub-docs - - pubsub-emulator - - pubsub-integration - - secretmanager - - spanner - - storage - # trace excluded - - vision - steps: - - name: Get current date - id: date - run: echo "date=$(date +'%Y-%m-%d' --utc)" >> $GITHUB_OUTPUT - - uses: actions/checkout@v2 - - name: Setup Java 17 - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: 17 - - name: Set Up Authentication - uses: google-github-actions/auth@v1 - with: - credentials_json: ${{ secrets.SPRING_CLOUD_GCP_CI_SA_KEY }} - - name: Setup gcloud - uses: google-github-actions/setup-gcloud@v1 - with: - version: latest - project_id: spring-cloud-gcp-ci - export_default_credentials: true - - name: Install pubsub-emulator - if: ${{ matrix.it == 'pubsub-emulator' }} - run: | - gcloud components install pubsub-emulator beta && \ - gcloud components update - - name: Mvn install # Need this when the directory/pom structure changes - id: install - run: | - ./mvnw \ - --batch-mode \ - --no-transfer-progress \ - --threads 1.5C \ - --define maven.test.skip=true \ - --define maven.javadoc.skip=true \ - --define org.slf4j.simpleLogger.showDateTime=true \ - --define org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS \ - install - - name: Update samples to use Spring Boot Starter 3.2.5 - working-directory: ./spring-cloud-gcp-samples - run: | - sudo apt-get update && sudo apt-get install -y xmlstarlet - xmlstarlet ed -L -N x=http://maven.apache.org/POM/4.0.0 \ - -u '/x:project/x:parent/x:version' -v '3.2.5' pom.xml - - name: Integration Tests - id: intTest - env: - DB_PASSWORD: ${{ secrets.SPRING_CLOUD_GCP_CI_DB_ROOT_PASSWORD }} - run: | - ./mvnw \ - --batch-mode \ - --no-transfer-progress \ - --activate-profiles spring-cloud-gcp-ci-it \ - --define maven.javadoc.skip=true \ - --define skip.surefire.tests=true \ - --define org.slf4j.simpleLogger.showDateTime=true \ - --define org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS \ - --define "spring.datasource.password=${DB_PASSWORD}" \ - --define "spring.r2dbc.password=${DB_PASSWORD}" \ - --define "spring.cloud.gcp.sql.database-name=code_samples_test_db2" \ - --define it.${{ matrix.it }}=true \ - verify - - name: Aggregate Report - run: | - ./mvnw \ - --batch-mode \ - --define aggregate=true \ - surefire-report:failsafe-report-only - name: Archive logs if: always() continue-on-error: true From 66b4439b04f88c61507f1969c89b1d8198c4e517 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 16 Dec 2024 13:24:04 -0500 Subject: [PATCH 21/96] remove config module --- .github/workflows/integrationTests.yaml | 1 - .../README.adoc | 66 ------------------- .../spring-cloud-gcp-config-sample/pom.xml | 65 ------------------ .../main/java/com/example/Application.java | 30 --------- .../java/com/example/HelloController.java | 36 ---------- .../java/com/example/MyAppProperties.java | 46 ------------- .../src/main/resources/application.properties | 2 - .../src/main/resources/bootstrap.properties | 13 ---- ...nfigSampleApplicationIntegrationTests.java | 51 -------------- .../src/test/resources/logback-test.xml | 14 ---- spring-cloud-gcp-starters/pom.xml | 1 - .../.repo-metadata.json | 11 ---- .../spring-cloud-gcp-starter-config/pom.xml | 61 ----------------- 13 files changed, 397 deletions(-) delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/Application.java delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/HelloController.java delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/MyAppProperties.java delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/application.properties delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/bootstrap.properties delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/java/com/example/ConfigSampleApplicationIntegrationTests.java delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/resources/logback-test.xml delete mode 100644 spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/.repo-metadata.json delete mode 100644 spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml diff --git a/.github/workflows/integrationTests.yaml b/.github/workflows/integrationTests.yaml index d4a34f36ec..d757914bad 100644 --- a/.github/workflows/integrationTests.yaml +++ b/.github/workflows/integrationTests.yaml @@ -30,7 +30,6 @@ jobs: - alloydb - bigquery - cloudsql - - config - datastore - firestore - kms diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc deleted file mode 100644 index 62154018ae..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc +++ /dev/null @@ -1,66 +0,0 @@ -= Spring Framework on Google Cloud Config Client Starter Code Sample - -This sample application demonstrates using the link:../../spring-cloud-gcp-starters/spring-cloud-gcp-starter-config[Spring Framework on Google Cloud Config Client Starter] in your code. - -The same content is also available in the https://codelabs.developers.google.com/codelabs/cloud-spring-runtime-config/index.html[Dynamic configuration for Spring Boot applications] codelab. - -== Setup & Configuration - -image:http://gstatic.com/cloudssh/images/open-btn.svg[link=https://ssh.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fspring-cloud-gcp&cloudshell_open_in_editor=spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc] - -1. Run `$ mvn clean install` from the root directory of the project. -2. Move to the config sample directory by running `$ cd spring-cloud-gcp-samples/spring-cloud-gcp-config-sample` -3. Checkout the code of this sample. -4. Enable the Google https://console.cloud.google.com/apis/api/runtimeconfig.googleapis.com/overview[Runtime Configuration API]. -5. Create a configuration using the https://cloud.google.com/sdk/[Google Cloud SDK]. -+ -.... -$ gcloud beta runtime-config configs create myapp_prod -.... -+ -Then set the variables that your application will load: -+ -.... -$ gcloud beta runtime-config configs variables set \ - myapp.queue-size 25 \ - --config-name myapp_prod - -$ gcloud beta runtime-config configs variables set \ - myapp.feature-x-enabled true \ - --config-name myapp_prod -.... - -6. Update link:src/main/resources/bootstrap.properties[]: -+ -.... -spring.cloud.gcp.config.enabled=true -spring.cloud.gcp.config.name=myapp - -#default profile = default -spring.cloud.gcp.config.profile=prod -.... -7. Notice that link:src/main/java/com/example/MyAppProperties.java[MyAppProperties.java] uses `@ConfigurationProperties` to bind the `myapp` namespace from the environment. - -8. Note that in order to expose /actuator/refresh endpoint, link:src/resources/application.properties[application.properties] file includes the following property: -+ -.... -management.endpoints.web.exposure.include=refresh -.... -9. Run the application using the `$ mvn spring-boot:run` command and verify the values are set appropriately at http://localhost:8080/ or use the `Web Preview` button in Cloud Shell to preview the app on port 8080. -10. Update a property with `gcloud`: -+ -.... -$ gcloud beta runtime-config configs variables set \ - myapp.queue-size 200 \ - --config-name myapp_prod - -$ gcloud beta runtime-config configs variables set \ - myapp.feature-x-enabled false \ - --config-name myapp_prod -.... -11. Send a POST request to the refresh endpoint: -+ -.... -$ curl -XPOST http://localhost:8080/actuator/refresh -.... -12. Verify the values are updated at http://localhost:8080/ or Cloud Shell `Web Preview`. diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml deleted file mode 100644 index b74d5830bb..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - spring-cloud-gcp-samples - com.google.cloud - 5.9.1-SNAPSHOT - - - 4.0.0 - spring-cloud-gcp-config-sample - Spring Framework on Google Cloud Code Sample - Runtime Configuration - - - - org.springframework.boot - spring-boot-starter-web - - - - - com.google.cloud - spring-cloud-gcp-starter-config - ${project.version} - - - - - org.springframework.boot - spring-boot-starter-actuator - - - - - org.awaitility - awaitility - 4.2.2 - test - - - junit - junit - test - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - maven-deploy-plugin - - true - - - - - diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/Application.java b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/Application.java deleted file mode 100644 index af8c02470a..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/Application.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2017-2018 the original author or authors. - * - * 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 - * - * https://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.example; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.properties.EnableConfigurationProperties; - -/** Sample spring boot application. */ -@SpringBootApplication -@EnableConfigurationProperties(MyAppProperties.class) -public class Application { - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } -} diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/HelloController.java b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/HelloController.java deleted file mode 100644 index f6dda87c41..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/HelloController.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2017-2018 the original author or authors. - * - * 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 - * - * https://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.example; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -/** Sample REST Controller to demonstrate Google Cloud Configuration Integration. */ -@RestController -public class HelloController { - - private final MyAppProperties sampleConfig; - - public HelloController(MyAppProperties sampleConfig) { - this.sampleConfig = sampleConfig; - } - - @GetMapping("/") - public MyAppProperties json() { - return this.sampleConfig; - } -} diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/MyAppProperties.java b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/MyAppProperties.java deleted file mode 100644 index 2e84973559..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/MyAppProperties.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2017-2018 the original author or authors. - * - * 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 - * - * https://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.example; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.cloud.context.config.annotation.RefreshScope; - -/** Sample Configuration class with property values loaded using the Runtime Configurator API. */ -@RefreshScope -@ConfigurationProperties("myapp") -public class MyAppProperties { - - private int queueSize; - - private boolean isFeatureXEnabled; - - public int getQueueSize() { - return this.queueSize; - } - - public void setQueueSize(int size) { - this.queueSize = size; - } - - public boolean isFeatureXEnabled() { - return this.isFeatureXEnabled; - } - - public void setFeatureXEnabled(boolean featureXEnabled) { - this.isFeatureXEnabled = featureXEnabled; - } -} diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/application.properties deleted file mode 100644 index ac25495356..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -# To allow unrestricted access to /actuator/refresh for testing -management.endpoints.web.exposure.include=refresh diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/bootstrap.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/bootstrap.properties deleted file mode 100644 index a2af94ef78..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/bootstrap.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Sample bootstrap configuration -spring.cloud.gcp.config.enabled=true - -spring.application.name=myapp - -spring.profiles.active=prod - -# Config server API timeout in milliseconds, default : 60000 (1 minute) -spring.cloud.gcp.config.timeout-millis=120000 - -# Provide project id, credentials to override default -#spring.cloud.gcp.config.project-id=my-gcp-project-id -#spring.cloud.gcp.config.credentials.location=my-credentials-file-location diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/java/com/example/ConfigSampleApplicationIntegrationTests.java b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/java/com/example/ConfigSampleApplicationIntegrationTests.java deleted file mode 100644 index ca1621be7d..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/java/com/example/ConfigSampleApplicationIntegrationTests.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2017-2018 the original author or authors. - * - * 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 - * - * https://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.example; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.web.servlet.MockMvc; - -/** Tests for config sample. */ -// Please use "-Dit.config=true" to enable the tests. -@ExtendWith(SpringExtension.class) -@EnabledIfSystemProperty(named = "it.config", matches = "true") -@SpringBootTest( - classes = {Application.class}, - webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@AutoConfigureMockMvc -class ConfigSampleApplicationIntegrationTests { - @Autowired private MockMvc mvc; - - @Test - void basicTest() throws Exception { - this.mvc - .perform(get("/").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().json("{'queueSize':200,'featureXEnabled':true}")); - } -} diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/resources/logback-test.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/resources/logback-test.xml deleted file mode 100644 index 5535de3c96..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/resources/logback-test.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - diff --git a/spring-cloud-gcp-starters/pom.xml b/spring-cloud-gcp-starters/pom.xml index c393ba9d01..c6854ad67e 100644 --- a/spring-cloud-gcp-starters/pom.xml +++ b/spring-cloud-gcp-starters/pom.xml @@ -24,7 +24,6 @@ spring-cloud-gcp-starter-bus-pubsub spring-cloud-gcp-starter-cloudfoundry spring-cloud-gcp-starter-pubsub - spring-cloud-gcp-starter-config spring-cloud-gcp-starter-storage spring-cloud-gcp-starter-data-spanner spring-cloud-gcp-starter-data-datastore diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/.repo-metadata.json b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/.repo-metadata.json deleted file mode 100644 index 8c7b8ef48f..0000000000 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/.repo-metadata.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "spring-cloud-gcp-starter-config", - "name_pretty": "Spring Cloud Config Support for Google Runtime Configuration API", - "client_documentation": "https://spring.io/projects/spring-cloud-gcp", - "api_description": "Spring Cloud GCP makes it possible to use the Google Runtime Configuration API as a Spring Cloud Config server to remotely store your application configuration data.", - "release_level": "ga", - "language": "java", - "repo": "googlecloudplatform/spring-cloud-gcp", - "repo_short": "spring-cloud-gcp", - "distribution_name": "com.google.cloud:spring-cloud-gcp-starter-config" -} diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml deleted file mode 100644 index 9aef523e34..0000000000 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - 4.0.0 - - com.google.cloud - spring-cloud-gcp-starters - 5.9.1-SNAPSHOT - - spring-cloud-gcp-starter-config - Spring Framework on Google Cloud Starter - Config - Starter for Spring Cloud Config Client using Google Runtime Configuration API - https://github.com/GoogleCloudPlatform/spring-cloud-gcp/tree/main/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config - - Google - https://cloud.google.com - - - ${basedir}/../.. - - - - com.google.cloud - spring-cloud-gcp-starter - - - org.springframework.cloud - spring-cloud-context - - - org.springframework.cloud - spring-cloud-starter-bootstrap - - - - - - - skip-unreleased-modules - - - - maven-deploy-plugin - - true - - - - org.sonatype.plugins - nexus-staging-maven-plugin - true - - true - ossrh - https://oss.sonatype.org/ - - - - - - - From aec62c414baf3022fa4094f5c9cff47101895769 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 16 Dec 2024 13:42:19 -0500 Subject: [PATCH 22/96] remove unused module --- spring-cloud-gcp-samples/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-cloud-gcp-samples/pom.xml b/spring-cloud-gcp-samples/pom.xml index cdd8f249ee..e90586a748 100644 --- a/spring-cloud-gcp-samples/pom.xml +++ b/spring-cloud-gcp-samples/pom.xml @@ -52,7 +52,6 @@ - spring-cloud-gcp-config-sample spring-cloud-gcp-trace-sample spring-cloud-gcp-logging-sample spring-cloud-gcp-sql-mysql-sample From e4cfff5841a6543bf9bd070eda7844d5c6fa47d7 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 16 Dec 2024 20:21:16 -0500 Subject: [PATCH 23/96] fix secretmanager sample --- .../java/com/example/SecretManagerWebController.java | 10 +++++++--- .../src/main/resources/application.properties | 7 ++++++- ...SecretManagerSampleLoadSecretsIntegrationTests.java | 3 +++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java index ed2e1a05d5..c16edf2a30 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java @@ -39,12 +39,16 @@ public class SecretManagerWebController { // secret can be refreshed when decorated with @RefreshScope on the class. private final SecretConfiguration configuration; - // For the default value takes place, there should be no property called `application-fake` + // For the default value to take place, there should be no property called `application-fake` // in property files. - @Value("${${sm://application-fake}:DEFAULT}") + // Note that the colon symbol must be escaped with a backslash. See + // https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 + @Value("${sm\\://application-fake:DEFAULT}") private String defaultSecret; // Application secrets can be accessed using @Value syntax. - @Value("${sm://application-secret}") + // Note that the colon symbol must be escaped with a backslash. See + // https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 + @Value("${sm\\://application-secret}") private String appSecretFromValue; public SecretManagerWebController(SecretManagerTemplate secretManagerTemplate, diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties index a785080cd1..a4ed883478 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties @@ -12,6 +12,11 @@ management.endpoints.web.exposure.include=refresh # enable external resource from GCP Secret Manager. spring.config.import=sm:// -application.secret=${sm://application-secret} + +# Here we declare the application secret to be a secret located in sm://application-secret (implies +# a request to Secret Manager. +# Note that the colon symbol must be escaped with a backslash. See +# https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 +application.secret=${sm\\://application-secret} # enable default secret value when accessing non-exited secret. spring.cloud.gcp.secretmanager.allow-default-secret=true diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java index 2a56ca8998..f2c5cf28fb 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java @@ -44,11 +44,14 @@ class SecretManagerSampleLoadSecretsIntegrationTests { @Autowired private TestRestTemplate testRestTemplate; private static final String SECRET_CONTENT = "Hello world."; + private static final String DEFAULT_SECRET_CONTENT = "DEFAULT"; @Test void testApplicationStartupSecretLoadsCorrectly() { ResponseEntity response = this.testRestTemplate.getForEntity("/", String.class); assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); + assertThat(response.getBody()) + .contains("Default Application secret if not found: "+ DEFAULT_SECRET_CONTENT +"
"); assertThat(response.getBody()) .contains("Application secret from @Value: " + SECRET_CONTENT + ""); assertThat(response.getBody()) From 26127eebd7602a2f3f63da9cd1b649e9bd991978 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 16 Dec 2024 20:42:29 -0500 Subject: [PATCH 24/96] fix whitespace in it --- .../example/SecretManagerSampleLoadSecretsIntegrationTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java index f2c5cf28fb..f85081c942 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java @@ -51,7 +51,7 @@ void testApplicationStartupSecretLoadsCorrectly() { ResponseEntity response = this.testRestTemplate.getForEntity("/", String.class); assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); assertThat(response.getBody()) - .contains("Default Application secret if not found: "+ DEFAULT_SECRET_CONTENT +"
"); + .contains("Default Application secret if not found: " + DEFAULT_SECRET_CONTENT + "
"); assertThat(response.getBody()) .contains("Application secret from @Value: " + SECRET_CONTENT + ""); assertThat(response.getBody()) From 0a6601abd11e547e4a430b91e678fcfd13f3f4c0 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 16 Dec 2024 21:08:57 -0500 Subject: [PATCH 25/96] add native config for alloydb sample --- .../com/google/alloydb-sample-scgcp/native-image.properties | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/src/main/resources/META-INF/native-image/com/google/alloydb-sample-scgcp/native-image.properties diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/src/main/resources/META-INF/native-image/com/google/alloydb-sample-scgcp/native-image.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/src/main/resources/META-INF/native-image/com/google/alloydb-sample-scgcp/native-image.properties new file mode 100644 index 0000000000..3b4b8cb50a --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/src/main/resources/META-INF/native-image/com/google/alloydb-sample-scgcp/native-image.properties @@ -0,0 +1,3 @@ +Args=--initialize-at-build-time=org.apache.commons.logging.LogFactory,\ + org.apache.commons.logging.LogFactoryService,\ + com.google.api.gax.core.GaxProperties From da8e462ec1899dc331b63318a3227d5ed962d3cf Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 17 Dec 2024 12:12:46 -0500 Subject: [PATCH 26/96] update libraries bom --- spring-cloud-gcp-dependencies/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gcp-dependencies/pom.xml b/spring-cloud-gcp-dependencies/pom.xml index f62609aef9..cb3f9a9793 100644 --- a/spring-cloud-gcp-dependencies/pom.xml +++ b/spring-cloud-gcp-dependencies/pom.xml @@ -34,7 +34,7 @@ - 26.51.0 + 26.52.0 1.21.0 1.0.7.RELEASE 1.3.0 From 0eb38a7e19b5fe46302cf34e29811f09cc0a8891 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 17 Dec 2024 12:30:51 -0500 Subject: [PATCH 27/96] remove unused method in pubsub --- .../spring/pubsub/support/DefaultPublisherFactoryTests.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-cloud-gcp-pubsub/src/test/java/com/google/cloud/spring/pubsub/support/DefaultPublisherFactoryTests.java b/spring-cloud-gcp-pubsub/src/test/java/com/google/cloud/spring/pubsub/support/DefaultPublisherFactoryTests.java index 71b94953a1..786619e894 100644 --- a/spring-cloud-gcp-pubsub/src/test/java/com/google/cloud/spring/pubsub/support/DefaultPublisherFactoryTests.java +++ b/spring-cloud-gcp-pubsub/src/test/java/com/google/cloud/spring/pubsub/support/DefaultPublisherFactoryTests.java @@ -47,7 +47,6 @@ public void setUp() throws IOException { factory.setCredentialsProvider(NoCredentialsProvider.create()); TransportChannelProvider mockChannelProvider = mock(TransportChannelProvider.class); TransportChannel mockTransportChannel = mock(TransportChannel.class); - when(mockChannelProvider.withUseS2A(anyBoolean())).thenReturn(mockChannelProvider); when(mockChannelProvider.getTransportChannel()).thenReturn(mockTransportChannel); ApiCallContext mockContext = mock(ApiCallContext.class); when(mockTransportChannel.getEmptyCallContext()).thenReturn(mockContext); From da0214bd43bfbff6403109a429bf9350ec0fb47d Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 17 Dec 2024 12:48:48 -0500 Subject: [PATCH 28/96] fix 2sa usage --- .../language/v2/spring/LanguageAutoConfigurationTests.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/spring-cloud-previews/google-cloud-language-spring-starter/src/test/java/com/google/cloud/language/v2/spring/LanguageAutoConfigurationTests.java b/spring-cloud-previews/google-cloud-language-spring-starter/src/test/java/com/google/cloud/language/v2/spring/LanguageAutoConfigurationTests.java index fcc1f2af4c..72e5c13e54 100644 --- a/spring-cloud-previews/google-cloud-language-spring-starter/src/test/java/com/google/cloud/language/v2/spring/LanguageAutoConfigurationTests.java +++ b/spring-cloud-previews/google-cloud-language-spring-starter/src/test/java/com/google/cloud/language/v2/spring/LanguageAutoConfigurationTests.java @@ -198,8 +198,6 @@ void testExecutorThreadCountFromProperties() { void testCustomTransportChannelProviderUsedWhenProvided() throws IOException { when(mockTransportChannelProvider.getTransportName()).thenReturn("grpc"); when(mockTransportChannelProvider.getTransportChannel()).thenReturn(mockTransportChannel); - when(mockTransportChannelProvider.withUseS2A(anyBoolean())) - .thenReturn(mockTransportChannelProvider); when(mockTransportChannel.getEmptyCallContext()).thenReturn(mockApiCallContext); when(mockApiCallContext.withCredentials(any())).thenReturn(mockApiCallContext); when(mockApiCallContext.withTransportChannel(any())).thenReturn(mockApiCallContext); From 30d6ec8ad2f3a0887c68a5d6f966b04360155f1f Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 17 Dec 2024 13:12:42 -0500 Subject: [PATCH 29/96] fix spanner units --- .../query/SqlSpannerQueryTests.java | 98 +++---------------- 1 file changed, 13 insertions(+), 85 deletions(-) diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java index 850b5796b2..bed4d00652 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java @@ -72,6 +72,7 @@ import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersSource; +import org.springframework.data.repository.query.QueryMethodValueEvaluationContextAccessor; import org.springframework.data.repository.query.ResultProcessor; import org.springframework.data.repository.query.ReturnedType; import org.springframework.data.repository.query.ValueExpressionDelegate; @@ -94,6 +95,8 @@ class SqlSpannerQueryTests { private SpannerMappingContext spannerMappingContext = new SpannerMappingContext(new Gson()); + private ValueEvaluationContext valueEvaluationContext; + private final Sort sort = Sort.by(Order.asc("COLA"), Order.desc("COLB")); private final Pageable pageable = PageRequest.of(3, 10, this.sort); @@ -102,6 +105,7 @@ class SqlSpannerQueryTests { private final DatabaseClient databaseClient = mock(DatabaseClient.class); + @BeforeEach void initMocks() throws NoSuchMethodException { this.queryMethod = mock(SpannerQueryMethod.class); @@ -121,6 +125,15 @@ void initMocks() throws NoSuchMethodException { this.spannerMappingContext, this.spannerEntityProcessor, true))); this.expressionParser = new SpelExpressionParser(); this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); + QueryMethodValueEvaluationContextAccessor evaluationContextAccessor = mock(QueryMethodValueEvaluationContextAccessor.class); + ValueEvaluationContextProvider evaluationContextProvider = + mock(ValueEvaluationContextProvider.class); + this.valueEvaluationContext = mock(ValueEvaluationContext.class); + when(this.valueExpressionDelegate.getEvaluationContextAccessor()) + .thenReturn(evaluationContextAccessor); + when(evaluationContextAccessor.create(any())).thenReturn(evaluationContextProvider); + when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); + when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); } private SqlSpannerQuery createQuery(String sql, Class theClass, boolean isDml) { @@ -153,14 +166,6 @@ void noPageableParamQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn(toReturn); - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, toReturn, false); doAnswer( @@ -217,13 +222,6 @@ void pageableParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); @@ -281,18 +279,6 @@ void sortParamQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn((Class) Child.class); - EvaluationContext evaluationContext = new StandardEvaluationContext(); - for (int i = 0; i < params.length; i++) { - evaluationContext.setVariable(paramNames[i], params[i]); - } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); doAnswer( @@ -350,18 +336,6 @@ void sortAndPageableQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn((Class) Child.class); - EvaluationContext evaluationContext = new StandardEvaluationContext(); - for (int i = 0; i < params.length; i++) { - evaluationContext.setVariable(paramNames[i], params[i]); - } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); doAnswer( @@ -465,12 +439,6 @@ void compoundNameConventionTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Trade.class, false); @@ -540,12 +508,6 @@ void dmlTest() throws NoSuchMethodException { TransactionRunner transactionRunner = mock(TransactionRunner.class); when(this.databaseClient.readWriteTransaction()).thenReturn(transactionRunner); - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); when(transactionRunner.run(any())) @@ -586,18 +548,6 @@ void sqlCountWithWhereTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn((Class) long.class); - EvaluationContext evaluationContext = new StandardEvaluationContext(); - for (int i = 0; i < params.length; i++) { - evaluationContext.setVariable(paramNames[i], params[i]); - } - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, long.class, false); Struct row = mock(Struct.class); @@ -656,17 +606,6 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { when(resultProcessor.getReturnedType()).thenReturn(returnedType); when(returnedType.getReturnedType()).thenReturn((Class) Detail.class); - EvaluationContext evaluationContext = new StandardEvaluationContext(); - - evaluationContext.setVariable(paramNames[0], params[0]); - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); doAnswer( @@ -724,17 +663,6 @@ void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { when(resultProcessor.getReturnedType()).thenReturn(returnedType); when(returnedType.getReturnedType()).thenReturn((Class) Detail.class); - EvaluationContext evaluationContext = new StandardEvaluationContext(); - - evaluationContext.setVariable(paramNames[0], params[0]); - ValueEvaluationContextProvider evaluationContextProvider = - mock(ValueEvaluationContextProvider.class); - ValueEvaluationContext valueEvaluationContext = mock(ValueEvaluationContext.class); - when(this.valueExpressionDelegate.createValueContextProvider(any())) - .thenReturn(evaluationContextProvider); - when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); - when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); doAnswer( From 6ac6cad9ac70b6710e96399acbdbef861b33e0b0 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 17 Dec 2024 15:14:34 -0500 Subject: [PATCH 30/96] fix units in pubsub --- .../pubsub/support/DefaultSubscriberFactoryTests.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gcp-pubsub/src/test/java/com/google/cloud/spring/pubsub/support/DefaultSubscriberFactoryTests.java b/spring-cloud-gcp-pubsub/src/test/java/com/google/cloud/spring/pubsub/support/DefaultSubscriberFactoryTests.java index 67f3279c94..f3d41e2d74 100644 --- a/spring-cloud-gcp-pubsub/src/test/java/com/google/cloud/spring/pubsub/support/DefaultSubscriberFactoryTests.java +++ b/spring-cloud-gcp-pubsub/src/test/java/com/google/cloud/spring/pubsub/support/DefaultSubscriberFactoryTests.java @@ -384,9 +384,9 @@ void testCreateSubscriber_validateSetProperties() { assertThat(expectedSubscriber.getFlowControlSettings().getLimitExceededBehavior()) .isEqualTo(FlowController.LimitExceededBehavior.Ignore); assertThat(expectedSubscriber) - .hasFieldOrPropertyWithValue("maxAckExtensionPeriod", Duration.ofSeconds(2L)) - .hasFieldOrPropertyWithValue("minDurationPerAckExtension", Duration.ofSeconds(3L)) - .hasFieldOrPropertyWithValue("maxDurationPerAckExtension", Duration.ofSeconds(4L)) + .hasFieldOrPropertyWithValue("maxAckExtensionPeriod", java.time.Duration.ofSeconds(2L)) + .hasFieldOrPropertyWithValue("minDurationPerAckExtension", java.time.Duration.ofSeconds(3L)) + .hasFieldOrPropertyWithValue("maxDurationPerAckExtension", java.time.Duration.ofSeconds(4L)) .hasFieldOrPropertyWithValue("numPullers", 2) .hasFieldOrPropertyWithValue("subStubSettings.endpoint", "test.endpoint") .hasFieldOrPropertyWithValue("subStubSettings.universeDomain", "example.com"); From cc4dfa5ac69510979d4cb98f62c8eb3d3b315709 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 17 Dec 2024 15:26:24 -0500 Subject: [PATCH 31/96] try new native config --- pom.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pom.xml b/pom.xml index 887f481750..20e0fae0ad 100644 --- a/pom.xml +++ b/pom.xml @@ -263,6 +263,15 @@ + + org.graalvm.buildtools + native-maven-plugin + + + 0.3.14 + + + From 34b51ea06d744f1d58f7d4bbb7f6ddb4cc126f37 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 17 Dec 2024 21:00:40 -0500 Subject: [PATCH 32/96] use custom placeholder configurer in secretmanager --- .../GcpSecretManagerAutoConfiguration.java | 20 +++++++- .../SecretManagerPlaceholderConfigurer.java | 49 +++++++++++++++++++ .../example/SecretManagerWebController.java | 7 +-- .../src/main/resources/application.properties | 2 +- 4 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java index 365ef6739f..d633c423ed 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java @@ -24,9 +24,13 @@ import com.google.cloud.spring.secretmanager.SecretManagerTemplate; import java.io.IOException; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration; +import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -37,14 +41,22 @@ */ @AutoConfiguration @EnableConfigurationProperties(GcpSecretManagerProperties.class) -@ConditionalOnClass(SecretManagerTemplate.class) +@ConditionalOnClass({SecretManagerTemplate.class, SecretManagerPlaceholderConfigurer.class}) @ConditionalOnProperty(value = "spring.cloud.gcp.secretmanager.enabled", matchIfMissing = true) +@AutoConfigureBefore(PropertyPlaceholderAutoConfiguration.class) +@AutoConfigureAfter(ConfigurationPropertiesAutoConfiguration.class) public class GcpSecretManagerAutoConfiguration { private final GcpProjectIdProvider gcpProjectIdProvider; private final GcpSecretManagerProperties properties; private final CredentialsProvider credentialsProvider; + public GcpSecretManagerAutoConfiguration() { + this.credentialsProvider = null; + this.properties = null; + this.gcpProjectIdProvider = null; + } + public GcpSecretManagerAutoConfiguration( CredentialsProvider credentialsProvider, GcpSecretManagerProperties properties, @@ -78,4 +90,10 @@ public SecretManagerTemplate secretManagerTemplate(SecretManagerServiceClient cl return new SecretManagerTemplate(client, this.gcpProjectIdProvider) .setAllowDefaultSecretValue(this.properties.isAllowDefaultSecret()); } + + @Bean + @ConditionalOnMissingBean + public SecretManagerPlaceholderConfigurer secretManagerPlaceholderConfigurer() { + return new SecretManagerPlaceholderConfigurer(); + } } diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java new file mode 100644 index 0000000000..0f1f89db99 --- /dev/null +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java @@ -0,0 +1,49 @@ +/* + * Copyright 2024 the original author or authors. + * + * 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 + * + * https://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.google.cloud.spring.autoconfigure.secretmanager; + +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.env.ConfigurablePropertyResolver; +import org.springframework.core.env.MutablePropertySources; +import org.springframework.core.env.PropertySourcesPropertyResolver; + +public class SecretManagerPlaceholderConfigurer extends + PropertySourcesPlaceholderConfigurer { + + public SecretManagerPlaceholderConfigurer() { + super(); + } + + @Override + protected ConfigurablePropertyResolver createPropertyResolver( + MutablePropertySources propertySources) { + return new PropertySourcesPropertyResolver(propertySources) { + private String getEscapedKey(String key) { + String escapedKey = key.replaceAll("sm:\\/\\/", "sm\\\\://"); + return escapedKey; + } + @Override + public String resolvePlaceholders(String key) { + return super.resolvePlaceholders(getEscapedKey(key)); + } + + @Override + public String resolveRequiredPlaceholders(String key) { + return super.resolvePlaceholders(getEscapedKey(key)); + } + }; + } +} diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java index c16edf2a30..f859ae20dc 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java @@ -43,15 +43,16 @@ public class SecretManagerWebController { // in property files. // Note that the colon symbol must be escaped with a backslash. See // https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 - @Value("${sm\\://application-fake:DEFAULT}") + @Value("${sm://application-fake:DEFAULT}") private String defaultSecret; // Application secrets can be accessed using @Value syntax. // Note that the colon symbol must be escaped with a backslash. See // https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 - @Value("${sm\\://application-secret}") + @Value("${sm://application-secret:value}") private String appSecretFromValue; - public SecretManagerWebController(SecretManagerTemplate secretManagerTemplate, + public SecretManagerWebController( + SecretManagerTemplate secretManagerTemplate, SecretConfiguration configuration ) { this.secretManagerTemplate = secretManagerTemplate; diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties index a4ed883478..f87734d20c 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties @@ -17,6 +17,6 @@ spring.config.import=sm:// # a request to Secret Manager. # Note that the colon symbol must be escaped with a backslash. See # https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 -application.secret=${sm\\://application-secret} +application.secret=${sm://application-secret} # enable default secret value when accessing non-exited secret. spring.cloud.gcp.secretmanager.allow-default-secret=true From 4da4251040f8a8111c35b91d793cf05ba5e15500 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Wed, 18 Dec 2024 09:09:29 -0500 Subject: [PATCH 33/96] fix style in secretmanager --- .../secretmanager/SecretManagerPlaceholderConfigurer.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java index 0f1f89db99..8cc6d83df9 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.google.cloud.spring.autoconfigure.secretmanager; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; @@ -31,10 +32,12 @@ public SecretManagerPlaceholderConfigurer() { protected ConfigurablePropertyResolver createPropertyResolver( MutablePropertySources propertySources) { return new PropertySourcesPropertyResolver(propertySources) { + private String getEscapedKey(String key) { String escapedKey = key.replaceAll("sm:\\/\\/", "sm\\\\://"); return escapedKey; } + @Override public String resolvePlaceholders(String key) { return super.resolvePlaceholders(getEscapedKey(key)); From 0feea0d16cd5fbdd5f38af5a5596e3cdd2e9ac1b Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 19 Dec 2024 10:38:30 -0500 Subject: [PATCH 34/96] use static bean --- .../GcpSecretManagerAutoConfiguration.java | 12 +++++++----- .../main/java/com/example/SecretConfiguration.java | 2 +- .../src/main/resources/application.properties | 6 +++++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java index d633c423ed..bec2dfc771 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java @@ -24,15 +24,17 @@ import com.google.cloud.spring.secretmanager.SecretManagerTemplate; import java.io.IOException; import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; /** * Autoconfiguration for GCP Secret Manager. @@ -44,7 +46,6 @@ @ConditionalOnClass({SecretManagerTemplate.class, SecretManagerPlaceholderConfigurer.class}) @ConditionalOnProperty(value = "spring.cloud.gcp.secretmanager.enabled", matchIfMissing = true) @AutoConfigureBefore(PropertyPlaceholderAutoConfiguration.class) -@AutoConfigureAfter(ConfigurationPropertiesAutoConfiguration.class) public class GcpSecretManagerAutoConfiguration { private final GcpProjectIdProvider gcpProjectIdProvider; @@ -92,8 +93,9 @@ public SecretManagerTemplate secretManagerTemplate(SecretManagerServiceClient cl } @Bean - @ConditionalOnMissingBean - public SecretManagerPlaceholderConfigurer secretManagerPlaceholderConfigurer() { + @Order(Ordered.HIGHEST_PRECEDENCE) + @ConditionalOnMissingBean(value = SecretManagerPlaceholderConfigurer.class, search = SearchStrategy.ALL) + public static PropertySourcesPlaceholderConfigurer secretManagerPropertySourcesPlaceholderConfigurer() { return new SecretManagerPlaceholderConfigurer(); } } diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java index 01a4058738..6063bbf264 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java @@ -30,6 +30,6 @@ public void setSecret(String secret) { } public String getSecret() { - return secret; + return this.secret; } } diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties index f87734d20c..53fa5f4ac3 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties @@ -14,9 +14,13 @@ management.endpoints.web.exposure.include=refresh spring.config.import=sm:// # Here we declare the application secret to be a secret located in sm://application-secret (implies -# a request to Secret Manager. +# a request to Secret Manager). # Note that the colon symbol must be escaped with a backslash. See # https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 application.secret=${sm://application-secret} # enable default secret value when accessing non-exited secret. spring.cloud.gcp.secretmanager.allow-default-secret=true +debug=true +logging.level.org.springframework.boot.autoconfigure.logging=DEBUG +logging.level.org.springframework.context=DEBUG +logging.level.org.springframework.beans.factory=DEBUG From cac795271196423d972d017c0c970b811fbf8ca3 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 19 Dec 2024 14:36:11 -0500 Subject: [PATCH 35/96] add default value for secret manager sample config file --- .../src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties index 53fa5f4ac3..7308338dc2 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties @@ -17,7 +17,7 @@ spring.config.import=sm:// # a request to Secret Manager). # Note that the colon symbol must be escaped with a backslash. See # https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 -application.secret=${sm://application-secret} +application.secret=${sm://application-secret:from-file} # enable default secret value when accessing non-exited secret. spring.cloud.gcp.secretmanager.allow-default-secret=true debug=true From 19835e6b0c4459be3a87a6868c40c4fe56289cca Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 20 Dec 2024 22:00:05 -0500 Subject: [PATCH 36/96] configure netty for firestore sample --- .../spring-cloud-gcp-data-firestore-sample/pom.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml index eb96433028..c0ec654e13 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml @@ -68,6 +68,17 @@ true + + + + org.graalvm.buildtools + native-maven-plugin + + + 0.3.14 + + + From 8363e289d4573d80d5f1ad1fdd89d670cf311617 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 20 Dec 2024 22:29:25 -0500 Subject: [PATCH 37/96] fix netty usage for native image building in pubsub sample --- .../spring-cloud-gcp-pubsub-sample/pom.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml index ea749b1b6d..61fd614be6 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml @@ -71,6 +71,17 @@ true + + + + org.graalvm.buildtools + native-maven-plugin + + + 0.3.14 + + + From c3866690a9fadd933412e3a74dea266d9726f3cb Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 23 Dec 2024 16:08:22 -0500 Subject: [PATCH 38/96] fix native tests for data-firestore This approach avoids using @Autowired given its close-world assumption. We instead rely on @Value to resolve for the database-id property in the now fixed integration test. --- ...irestoreIntegrationTestsConfiguration.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/spring-cloud-gcp-data-firestore/src/test/java/com/google/cloud/spring/data/firestore/FirestoreIntegrationTestsConfiguration.java b/spring-cloud-gcp-data-firestore/src/test/java/com/google/cloud/spring/data/firestore/FirestoreIntegrationTestsConfiguration.java index 921816ac9e..65669e5ec1 100644 --- a/spring-cloud-gcp-data-firestore/src/test/java/com/google/cloud/spring/data/firestore/FirestoreIntegrationTestsConfiguration.java +++ b/spring-cloud-gcp-data-firestore/src/test/java/com/google/cloud/spring/data/firestore/FirestoreIntegrationTestsConfiguration.java @@ -51,21 +51,24 @@ @EnableReactiveFirestoreRepositories(basePackageClasses = UserRepository.class) @EnableTransactionManagement public class FirestoreIntegrationTestsConfiguration { - String defaultParent; - String uuid = UUID.randomUUID().toString(); String projectId; + @Value("${test.integration.firestore.database-id:(default)}") String databaseId; - @Autowired - public FirestoreIntegrationTestsConfiguration( - @Value("${test.integration.firestore.database-id:(default)}") String databaseId) { + String defaultParent = null; + + public FirestoreIntegrationTestsConfiguration() { this.projectId = new DefaultGcpProjectIdProvider().getProjectId(); - this.databaseId = databaseId; - this.defaultParent = - String.format("projects/%s/databases/%s/documents", this.projectId, databaseId); + } + + private String getDefaultParent() { + if (defaultParent == null) { + defaultParent = String.format("projects/%s/databases/%s/documents", this.projectId, databaseId); + } + return defaultParent; } private static final PercentEscaper PERCENT_ESCAPER = new PercentEscaper("._-~"); @@ -95,7 +98,7 @@ public FirestoreTemplate firestoreTemplate( FirestoreClassMapper classMapper, FirestoreMappingContext firestoreMappingContext) { return new FirestoreTemplate( - firestoreStub, this.defaultParent, classMapper, firestoreMappingContext, uuid); + firestoreStub, this.getDefaultParent(), classMapper, firestoreMappingContext, uuid); } @Bean @@ -134,6 +137,6 @@ public FirestoreClassMapper getClassMapper(FirestoreMappingContext mappingContex @ConditionalOnMissingBean public ReactiveFirestoreTransactionManager firestoreTransactionManager( FirestoreGrpc.FirestoreStub firestoreStub, FirestoreClassMapper classMapper) { - return new ReactiveFirestoreTransactionManager(firestoreStub, this.defaultParent, classMapper); + return new ReactiveFirestoreTransactionManager(firestoreStub, this.getDefaultParent(), classMapper); } } From dd81242627975cab16083263fa689cd2361d73ac Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 23 Dec 2024 16:28:31 -0500 Subject: [PATCH 39/96] fix storage sample test This uses the same approach as of data-firestore: we will not rely on autowired constructors --- .../example/GcsSpringIntegrationTestConfiguration.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/src/test/java/com/example/GcsSpringIntegrationTestConfiguration.java b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/src/test/java/com/example/GcsSpringIntegrationTestConfiguration.java index fd7a9b5eea..bdab02ac72 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/src/test/java/com/example/GcsSpringIntegrationTestConfiguration.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/src/test/java/com/example/GcsSpringIntegrationTestConfiguration.java @@ -26,13 +26,14 @@ public class GcsSpringIntegrationTestConfiguration { private String uniqueDirectory; - public GcsSpringIntegrationTestConfiguration( - @Value("${gcs-local-directory}") String localDirectory) { - uniqueDirectory = String.format("%s-%s", localDirectory, UUID.randomUUID()); - } + @Value("${gcs-local-directory}") + String localDirectory; @Bean("localDirectoryName") public String uniqueDirectory() { + if (uniqueDirectory == null) { + uniqueDirectory = String.format("%s-%s", localDirectory, UUID.randomUUID()); + } return uniqueDirectory; } } From 170ad640017cba5929b1075521b4269225859199 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 23 Dec 2024 16:41:12 -0500 Subject: [PATCH 40/96] restore secret manager to latest of `main` We will wait for https://github.com/spring-projects/spring-framework/milestone/388 to be finished. This will translate into spring-framework:6.2.2 that will fix the regression disallowing normal use of `${sm://secret}` placeholders. --- .../GcpSecretManagerAutoConfiguration.java | 22 +------------------ .../java/com/example/SecretConfiguration.java | 2 +- .../example/SecretManagerWebController.java | 13 ++++------- .../src/main/resources/application.properties | 11 +--------- ...agerSampleLoadSecretsIntegrationTests.java | 3 --- 5 files changed, 7 insertions(+), 44 deletions(-) diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java index bec2dfc771..365ef6739f 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/GcpSecretManagerAutoConfiguration.java @@ -24,17 +24,11 @@ import com.google.cloud.spring.secretmanager.SecretManagerTemplate; import java.io.IOException; import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.condition.SearchStrategy; -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; /** * Autoconfiguration for GCP Secret Manager. @@ -43,21 +37,14 @@ */ @AutoConfiguration @EnableConfigurationProperties(GcpSecretManagerProperties.class) -@ConditionalOnClass({SecretManagerTemplate.class, SecretManagerPlaceholderConfigurer.class}) +@ConditionalOnClass(SecretManagerTemplate.class) @ConditionalOnProperty(value = "spring.cloud.gcp.secretmanager.enabled", matchIfMissing = true) -@AutoConfigureBefore(PropertyPlaceholderAutoConfiguration.class) public class GcpSecretManagerAutoConfiguration { private final GcpProjectIdProvider gcpProjectIdProvider; private final GcpSecretManagerProperties properties; private final CredentialsProvider credentialsProvider; - public GcpSecretManagerAutoConfiguration() { - this.credentialsProvider = null; - this.properties = null; - this.gcpProjectIdProvider = null; - } - public GcpSecretManagerAutoConfiguration( CredentialsProvider credentialsProvider, GcpSecretManagerProperties properties, @@ -91,11 +78,4 @@ public SecretManagerTemplate secretManagerTemplate(SecretManagerServiceClient cl return new SecretManagerTemplate(client, this.gcpProjectIdProvider) .setAllowDefaultSecretValue(this.properties.isAllowDefaultSecret()); } - - @Bean - @Order(Ordered.HIGHEST_PRECEDENCE) - @ConditionalOnMissingBean(value = SecretManagerPlaceholderConfigurer.class, search = SearchStrategy.ALL) - public static PropertySourcesPlaceholderConfigurer secretManagerPropertySourcesPlaceholderConfigurer() { - return new SecretManagerPlaceholderConfigurer(); - } } diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java index 6063bbf264..01a4058738 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java @@ -30,6 +30,6 @@ public void setSecret(String secret) { } public String getSecret() { - return this.secret; + return secret; } } diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java index f859ae20dc..ed2e1a05d5 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java @@ -39,20 +39,15 @@ public class SecretManagerWebController { // secret can be refreshed when decorated with @RefreshScope on the class. private final SecretConfiguration configuration; - // For the default value to take place, there should be no property called `application-fake` + // For the default value takes place, there should be no property called `application-fake` // in property files. - // Note that the colon symbol must be escaped with a backslash. See - // https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 - @Value("${sm://application-fake:DEFAULT}") + @Value("${${sm://application-fake}:DEFAULT}") private String defaultSecret; // Application secrets can be accessed using @Value syntax. - // Note that the colon symbol must be escaped with a backslash. See - // https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 - @Value("${sm://application-secret:value}") + @Value("${sm://application-secret}") private String appSecretFromValue; - public SecretManagerWebController( - SecretManagerTemplate secretManagerTemplate, + public SecretManagerWebController(SecretManagerTemplate secretManagerTemplate, SecretConfiguration configuration ) { this.secretManagerTemplate = secretManagerTemplate; diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties index 7308338dc2..a785080cd1 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties @@ -12,15 +12,6 @@ management.endpoints.web.exposure.include=refresh # enable external resource from GCP Secret Manager. spring.config.import=sm:// - -# Here we declare the application secret to be a secret located in sm://application-secret (implies -# a request to Secret Manager). -# Note that the colon symbol must be escaped with a backslash. See -# https://github.com/spring-projects/spring-framework/commit/00e05e603d4423d33c99dadeb52fef26be71dfb8 -application.secret=${sm://application-secret:from-file} +application.secret=${sm://application-secret} # enable default secret value when accessing non-exited secret. spring.cloud.gcp.secretmanager.allow-default-secret=true -debug=true -logging.level.org.springframework.boot.autoconfigure.logging=DEBUG -logging.level.org.springframework.context=DEBUG -logging.level.org.springframework.beans.factory=DEBUG diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java index f85081c942..2a56ca8998 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java @@ -44,14 +44,11 @@ class SecretManagerSampleLoadSecretsIntegrationTests { @Autowired private TestRestTemplate testRestTemplate; private static final String SECRET_CONTENT = "Hello world."; - private static final String DEFAULT_SECRET_CONTENT = "DEFAULT"; @Test void testApplicationStartupSecretLoadsCorrectly() { ResponseEntity response = this.testRestTemplate.getForEntity("/", String.class); assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); - assertThat(response.getBody()) - .contains("Default Application secret if not found: " + DEFAULT_SECRET_CONTENT + "
"); assertThat(response.getBody()) .contains("Application secret from @Value: " + SECRET_CONTENT + ""); assertThat(response.getBody()) From 10bf82ba79b890970f7ee8d4a5451d823afc8f0a Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 15:54:43 -0500 Subject: [PATCH 41/96] fix pubsub binder units this fix changes the way the extended properties bean is injected into the tests. With the upgrade, the bean is no w detected as two beans, producing a collision. In this new way we declare a user configuration with a custom bean. --- .../pubsub/PubSubMessageChannelBinderTests.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java index f0f8a882d4..067d193bc5 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java @@ -104,11 +104,13 @@ void init() { new ApplicationContextRunner() .withBean(PubSubTemplate.class, () -> pubSubTemplate) .withBean(PubSubAdmin.class, () -> pubSubAdmin) + .withPropertyValues("logging.level.root=DEBUG", "debug=true") + .withUserConfiguration(BaseTestConfiguration.class) .withConfiguration( AutoConfigurations.of( - PubSubBinderConfiguration.class, - PubSubExtendedBindingProperties.class)); - this.binder = new PubSubMessageChannelBinder(new String[0], this.channelProvisioner, this.pubSubTemplate, this.properties); + PubSubBinderConfiguration.class + )); + this.binder = new PubSubMessageChannelBinder(new String[0], this.channelProvisioner, this.pubSubTemplate, null); } @Test @@ -364,6 +366,14 @@ void testConsumerEndpointCreationWithHeadersProvided() { }); } + @EnableAutoConfiguration + public static class BaseTestConfiguration { + @Bean + public PubSubExtendedBindingProperties pubSubExtendedBindingProperties() { + return new PubSubExtendedBindingProperties(); + } + } + @EnableAutoConfiguration public static class PubSubBinderTestConfig { From 759d5a89cc67a5ce64d54e57da2b7f6e8138b61a Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 16:01:09 -0500 Subject: [PATCH 42/96] add recommended netty config for postgress samples --- .../pom.xml | 15 +++++++++++++++ .../spring-cloud-gcp-sql-postgres-sample/pom.xml | 16 +++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml index bd474e7665..c05ed7f3ef 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml @@ -44,4 +44,19 @@ + + + + + + org.graalvm.buildtools + native-maven-plugin + + + 0.3.14 + + + + + \ No newline at end of file diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml index a812211293..67f9379a0c 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml @@ -60,5 +60,19 @@ test - + + + + + + org.graalvm.buildtools + native-maven-plugin + + + 0.3.14 + + + + + From 7b8240041252076173ad52f7d5e96a5ae0d04a69 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 22:51:26 -0500 Subject: [PATCH 43/96] fix pubsub binder tests We set a base configuration bean with mock credentials, project ID provider and extended properties --- .../PubSubMessageChannelBinderTests.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java index 067d193bc5..bff87760e7 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java @@ -21,6 +21,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.fasterxml.jackson.databind.ser.Serializers.Base; import com.google.api.gax.core.CredentialsProvider; import com.google.auth.CredentialTypeForMetrics; import com.google.auth.Credentials; @@ -104,7 +105,6 @@ void init() { new ApplicationContextRunner() .withBean(PubSubTemplate.class, () -> pubSubTemplate) .withBean(PubSubAdmin.class, () -> pubSubAdmin) - .withPropertyValues("logging.level.root=DEBUG", "debug=true") .withUserConfiguration(BaseTestConfiguration.class) .withConfiguration( AutoConfigurations.of( @@ -372,6 +372,16 @@ public static class BaseTestConfiguration { public PubSubExtendedBindingProperties pubSubExtendedBindingProperties() { return new PubSubExtendedBindingProperties(); } + + @Bean + public CredentialsProvider googleCredentials() { + return () -> TestUtils.MOCK_CREDENTIALS; + } + + @Bean + public GcpProjectIdProvider projectIdProvider() { + return () -> "fake project"; + } } @EnableAutoConfiguration @@ -397,15 +407,5 @@ public Supplier> producer() { public Consumer consumer() { return str -> LOGGER.info("received " + str); } - - @Bean - public GcpProjectIdProvider projectIdProvider() { - return () -> "fake project"; - } - - @Bean - public CredentialsProvider googleCredentials() { - return () -> TestUtils.MOCK_CREDENTIALS; - } } } From a6cdfce3d7c309d6e0b0136fda934e66ae7e0850 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 22:58:56 -0500 Subject: [PATCH 44/96] upgrade to spring-boot 3.4.1 --- pom.xml | 2 +- .../pom.xml | 11 ----------- .../spring-cloud-gcp-pubsub-sample/pom.xml | 11 ----------- .../pom.xml | 16 +--------------- .../spring-cloud-gcp-sql-postgres-sample/pom.xml | 15 --------------- 5 files changed, 2 insertions(+), 53 deletions(-) diff --git a/pom.xml b/pom.xml index 20e0fae0ad..35fa35e217 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ ${project.version} 2024.0.0 - 3.4.0 + 3.4.1 ${project.parent.version} 2.2.5 2.5.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml index c0ec654e13..eb96433028 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml @@ -68,17 +68,6 @@ true - - - - org.graalvm.buildtools - native-maven-plugin - - - 0.3.14 - - - diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml index 61fd614be6..ea749b1b6d 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml @@ -71,17 +71,6 @@ true - - - - org.graalvm.buildtools - native-maven-plugin - - - 0.3.14 - - - diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml index c05ed7f3ef..128e00f2f0 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml @@ -44,19 +44,5 @@ - - - - - - org.graalvm.buildtools - native-maven-plugin - - - 0.3.14 - - - - - + \ No newline at end of file diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml index 67f9379a0c..dfb6c63055 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml @@ -60,19 +60,4 @@ test - - - - - - org.graalvm.buildtools - native-maven-plugin - - - 0.3.14 - - - - - From e16c6dee8327e27a305aa2212f5c9ccd5eb329b8 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 23:07:12 -0500 Subject: [PATCH 45/96] remove placeholder configurer from secret manager --- .../SecretManagerPlaceholderConfigurer.java | 52 ------------------- 1 file changed, 52 deletions(-) delete mode 100644 spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java deleted file mode 100644 index 8cc6d83df9..0000000000 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerPlaceholderConfigurer.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2024 the original author or authors. - * - * 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 - * - * https://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.google.cloud.spring.autoconfigure.secretmanager; - -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.core.env.ConfigurablePropertyResolver; -import org.springframework.core.env.MutablePropertySources; -import org.springframework.core.env.PropertySourcesPropertyResolver; - -public class SecretManagerPlaceholderConfigurer extends - PropertySourcesPlaceholderConfigurer { - - public SecretManagerPlaceholderConfigurer() { - super(); - } - - @Override - protected ConfigurablePropertyResolver createPropertyResolver( - MutablePropertySources propertySources) { - return new PropertySourcesPropertyResolver(propertySources) { - - private String getEscapedKey(String key) { - String escapedKey = key.replaceAll("sm:\\/\\/", "sm\\\\://"); - return escapedKey; - } - - @Override - public String resolvePlaceholders(String key) { - return super.resolvePlaceholders(getEscapedKey(key)); - } - - @Override - public String resolveRequiredPlaceholders(String key) { - return super.resolvePlaceholders(getEscapedKey(key)); - } - }; - } -} From a1858a5b5125055b82a88d1ba3bc61803f8b1bca Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 23:12:17 -0500 Subject: [PATCH 46/96] restore datastore autoconfig this had an unintended/unnecessary change --- .../DatastoreTransactionManagerAutoConfiguration.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/datastore/DatastoreTransactionManagerAutoConfiguration.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/datastore/DatastoreTransactionManagerAutoConfiguration.java index 8465b615da..3fc709b8d6 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/datastore/DatastoreTransactionManagerAutoConfiguration.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/datastore/DatastoreTransactionManagerAutoConfiguration.java @@ -26,7 +26,6 @@ import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration; import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; import org.springframework.context.annotation.Bean; -import org.springframework.transaction.TransactionManager; /** * Auto-configuration for {@link DatastoreTransactionManager}. @@ -64,7 +63,7 @@ public DatastoreTransactionManager datastoreTransactionManager() { DatastoreTransactionManager transactionManager = new DatastoreTransactionManager(this.datastore); if (this.transactionManagerCustomizers != null) { - this.transactionManagerCustomizers.customize((TransactionManager) transactionManager); + this.transactionManagerCustomizers.customize(transactionManager); } return transactionManager; } From cfa3fa4b3ee8394357ec9b29f9a463e7846c41f1 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 23:14:03 -0500 Subject: [PATCH 47/96] restore graalvm config in main pom.xml This change was unnecessary --- pom.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pom.xml b/pom.xml index 35fa35e217..a91fa720f1 100644 --- a/pom.xml +++ b/pom.xml @@ -263,15 +263,6 @@ - - org.graalvm.buildtools - native-maven-plugin - - - 0.3.14 - - - From a486b1f836960082dccfffbcddf7612df202c218 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 23:15:07 -0500 Subject: [PATCH 48/96] remove unused import in stream binder --- .../PubSubMessageChannelBinderEmulatorIntegrationTests.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderEmulatorIntegrationTests.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderEmulatorIntegrationTests.java index 35bdb4843e..a1ec157874 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderEmulatorIntegrationTests.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderEmulatorIntegrationTests.java @@ -26,7 +26,6 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.cloud.stream.binder.AbstractBinderTests; import org.springframework.cloud.stream.binder.Binding; From c6369b9cbc10b7cff8b6c67e1217e48ce2166c11 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 23:17:38 -0500 Subject: [PATCH 49/96] cleanup of pubsub binder tests --- .../binder/pubsub/PubSubMessageChannelBinderTests.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java index bff87760e7..645d128d20 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java @@ -17,14 +17,10 @@ package com.google.cloud.spring.stream.binder.pubsub; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.fasterxml.jackson.databind.ser.Serializers.Base; import com.google.api.gax.core.CredentialsProvider; -import com.google.auth.CredentialTypeForMetrics; -import com.google.auth.Credentials; import com.google.cloud.spring.core.GcpProjectIdProvider; import com.google.cloud.spring.pubsub.PubSubAdmin; import com.google.cloud.spring.pubsub.core.PubSubTemplate; @@ -110,7 +106,7 @@ void init() { AutoConfigurations.of( PubSubBinderConfiguration.class )); - this.binder = new PubSubMessageChannelBinder(new String[0], this.channelProvisioner, this.pubSubTemplate, null); + this.binder = new PubSubMessageChannelBinder(new String[0], this.channelProvisioner, this.pubSubTemplate, this.properties); } @Test From f4cf009c8690420a91390b2b3e8dcc2b1f372e66 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 23:17:48 -0500 Subject: [PATCH 50/96] use spring boot 3.4.1 in samples --- spring-cloud-gcp-samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gcp-samples/pom.xml b/spring-cloud-gcp-samples/pom.xml index e90586a748..9882944e1c 100644 --- a/spring-cloud-gcp-samples/pom.xml +++ b/spring-cloud-gcp-samples/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.1 From 3e8ea01d2240aab0ba8cb66b6c82736f707b46bb Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 23:19:34 -0500 Subject: [PATCH 51/96] remove native config for alloydb sample --- .../com/google/alloydb-sample-scgcp/native-image.properties | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/src/main/resources/META-INF/native-image/com/google/alloydb-sample-scgcp/native-image.properties diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/src/main/resources/META-INF/native-image/com/google/alloydb-sample-scgcp/native-image.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/src/main/resources/META-INF/native-image/com/google/alloydb-sample-scgcp/native-image.properties deleted file mode 100644 index 3b4b8cb50a..0000000000 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/src/main/resources/META-INF/native-image/com/google/alloydb-sample-scgcp/native-image.properties +++ /dev/null @@ -1,3 +0,0 @@ -Args=--initialize-at-build-time=org.apache.commons.logging.LogFactory,\ - org.apache.commons.logging.LogFactoryService,\ - com.google.api.gax.core.GaxProperties From b3fb48cf07c739c095b04b843df894ad1107371e Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 23:20:41 -0500 Subject: [PATCH 52/96] remove unused whitespace in poms --- .../spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml | 1 - .../spring-cloud-gcp-sql-postgres-sample/pom.xml | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml index 128e00f2f0..bd474e7665 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml @@ -44,5 +44,4 @@ - \ No newline at end of file diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml index dfb6c63055..a812211293 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml @@ -60,4 +60,5 @@ test + From cfd9bf0f226a8a6d3280f512f77c1f4b3f735ad6 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 27 Dec 2024 23:23:35 -0500 Subject: [PATCH 53/96] Revert "fix storage sample test" This reverts commit dd81242627975cab16083263fa689cd2361d73ac. --- .../example/GcsSpringIntegrationTestConfiguration.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/src/test/java/com/example/GcsSpringIntegrationTestConfiguration.java b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/src/test/java/com/example/GcsSpringIntegrationTestConfiguration.java index bdab02ac72..fd7a9b5eea 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/src/test/java/com/example/GcsSpringIntegrationTestConfiguration.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/src/test/java/com/example/GcsSpringIntegrationTestConfiguration.java @@ -26,14 +26,13 @@ public class GcsSpringIntegrationTestConfiguration { private String uniqueDirectory; - @Value("${gcs-local-directory}") - String localDirectory; + public GcsSpringIntegrationTestConfiguration( + @Value("${gcs-local-directory}") String localDirectory) { + uniqueDirectory = String.format("%s-%s", localDirectory, UUID.randomUUID()); + } @Bean("localDirectoryName") public String uniqueDirectory() { - if (uniqueDirectory == null) { - uniqueDirectory = String.format("%s-%s", localDirectory, UUID.randomUUID()); - } return uniqueDirectory; } } From 14c40cc36f0877b4c6f1d8d683384bdc7bbf3711 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Sun, 29 Dec 2024 23:36:42 -0500 Subject: [PATCH 54/96] try using unchanged firestore IT config --- ...irestoreIntegrationTestsConfiguration.java | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/spring-cloud-gcp-data-firestore/src/test/java/com/google/cloud/spring/data/firestore/FirestoreIntegrationTestsConfiguration.java b/spring-cloud-gcp-data-firestore/src/test/java/com/google/cloud/spring/data/firestore/FirestoreIntegrationTestsConfiguration.java index 65669e5ec1..921816ac9e 100644 --- a/spring-cloud-gcp-data-firestore/src/test/java/com/google/cloud/spring/data/firestore/FirestoreIntegrationTestsConfiguration.java +++ b/spring-cloud-gcp-data-firestore/src/test/java/com/google/cloud/spring/data/firestore/FirestoreIntegrationTestsConfiguration.java @@ -51,24 +51,21 @@ @EnableReactiveFirestoreRepositories(basePackageClasses = UserRepository.class) @EnableTransactionManagement public class FirestoreIntegrationTestsConfiguration { + String defaultParent; + String uuid = UUID.randomUUID().toString(); String projectId; - @Value("${test.integration.firestore.database-id:(default)}") String databaseId; - String defaultParent = null; - - public FirestoreIntegrationTestsConfiguration() { + @Autowired + public FirestoreIntegrationTestsConfiguration( + @Value("${test.integration.firestore.database-id:(default)}") String databaseId) { this.projectId = new DefaultGcpProjectIdProvider().getProjectId(); - } - - private String getDefaultParent() { - if (defaultParent == null) { - defaultParent = String.format("projects/%s/databases/%s/documents", this.projectId, databaseId); - } - return defaultParent; + this.databaseId = databaseId; + this.defaultParent = + String.format("projects/%s/databases/%s/documents", this.projectId, databaseId); } private static final PercentEscaper PERCENT_ESCAPER = new PercentEscaper("._-~"); @@ -98,7 +95,7 @@ public FirestoreTemplate firestoreTemplate( FirestoreClassMapper classMapper, FirestoreMappingContext firestoreMappingContext) { return new FirestoreTemplate( - firestoreStub, this.getDefaultParent(), classMapper, firestoreMappingContext, uuid); + firestoreStub, this.defaultParent, classMapper, firestoreMappingContext, uuid); } @Bean @@ -137,6 +134,6 @@ public FirestoreClassMapper getClassMapper(FirestoreMappingContext mappingContex @ConditionalOnMissingBean public ReactiveFirestoreTransactionManager firestoreTransactionManager( FirestoreGrpc.FirestoreStub firestoreStub, FirestoreClassMapper classMapper) { - return new ReactiveFirestoreTransactionManager(firestoreStub, this.getDefaultParent(), classMapper); + return new ReactiveFirestoreTransactionManager(firestoreStub, this.defaultParent, classMapper); } } From be28c7278c81188c0ed44b05ad5a4a97e3a93a65 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Sun, 29 Dec 2024 23:56:34 -0500 Subject: [PATCH 55/96] Revert "fix pubsub binder tests" This reverts commit 7b8240041252076173ad52f7d5e96a5ae0d04a69. --- .../PubSubMessageChannelBinderTests.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java index 645d128d20..1c44b3f568 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java @@ -101,6 +101,7 @@ void init() { new ApplicationContextRunner() .withBean(PubSubTemplate.class, () -> pubSubTemplate) .withBean(PubSubAdmin.class, () -> pubSubAdmin) + .withPropertyValues("logging.level.root=DEBUG", "debug=true") .withUserConfiguration(BaseTestConfiguration.class) .withConfiguration( AutoConfigurations.of( @@ -368,16 +369,6 @@ public static class BaseTestConfiguration { public PubSubExtendedBindingProperties pubSubExtendedBindingProperties() { return new PubSubExtendedBindingProperties(); } - - @Bean - public CredentialsProvider googleCredentials() { - return () -> TestUtils.MOCK_CREDENTIALS; - } - - @Bean - public GcpProjectIdProvider projectIdProvider() { - return () -> "fake project"; - } } @EnableAutoConfiguration @@ -403,5 +394,15 @@ public Supplier> producer() { public Consumer consumer() { return str -> LOGGER.info("received " + str); } + + @Bean + public GcpProjectIdProvider projectIdProvider() { + return () -> "fake project"; + } + + @Bean + public CredentialsProvider googleCredentials() { + return () -> TestUtils.MOCK_CREDENTIALS; + } } } From c14b6596ba1cbcad331e878e0671c4c5da6bf91f Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Sun, 29 Dec 2024 23:57:20 -0500 Subject: [PATCH 56/96] Reapply "fix pubsub binder tests" This reverts commit be28c7278c81188c0ed44b05ad5a4a97e3a93a65. --- .../PubSubMessageChannelBinderTests.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java index 1c44b3f568..645d128d20 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java @@ -101,7 +101,6 @@ void init() { new ApplicationContextRunner() .withBean(PubSubTemplate.class, () -> pubSubTemplate) .withBean(PubSubAdmin.class, () -> pubSubAdmin) - .withPropertyValues("logging.level.root=DEBUG", "debug=true") .withUserConfiguration(BaseTestConfiguration.class) .withConfiguration( AutoConfigurations.of( @@ -369,6 +368,16 @@ public static class BaseTestConfiguration { public PubSubExtendedBindingProperties pubSubExtendedBindingProperties() { return new PubSubExtendedBindingProperties(); } + + @Bean + public CredentialsProvider googleCredentials() { + return () -> TestUtils.MOCK_CREDENTIALS; + } + + @Bean + public GcpProjectIdProvider projectIdProvider() { + return () -> "fake project"; + } } @EnableAutoConfiguration @@ -394,15 +403,5 @@ public Supplier> producer() { public Consumer consumer() { return str -> LOGGER.info("received " + str); } - - @Bean - public GcpProjectIdProvider projectIdProvider() { - return () -> "fake project"; - } - - @Bean - public CredentialsProvider googleCredentials() { - return () -> TestUtils.MOCK_CREDENTIALS; - } } } From 4eae5e74a79b44cd5412afb054e5d28991657009 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Sun, 29 Dec 2024 23:58:37 -0500 Subject: [PATCH 57/96] test reverting changes in pubsub binder --- .../PubSubMessageChannelBinderTests.java | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java index 645d128d20..f0f8a882d4 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java @@ -17,10 +17,13 @@ package com.google.cloud.spring.stream.binder.pubsub; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.google.api.gax.core.CredentialsProvider; +import com.google.auth.CredentialTypeForMetrics; +import com.google.auth.Credentials; import com.google.cloud.spring.core.GcpProjectIdProvider; import com.google.cloud.spring.pubsub.PubSubAdmin; import com.google.cloud.spring.pubsub.core.PubSubTemplate; @@ -101,11 +104,10 @@ void init() { new ApplicationContextRunner() .withBean(PubSubTemplate.class, () -> pubSubTemplate) .withBean(PubSubAdmin.class, () -> pubSubAdmin) - .withUserConfiguration(BaseTestConfiguration.class) .withConfiguration( AutoConfigurations.of( - PubSubBinderConfiguration.class - )); + PubSubBinderConfiguration.class, + PubSubExtendedBindingProperties.class)); this.binder = new PubSubMessageChannelBinder(new String[0], this.channelProvisioner, this.pubSubTemplate, this.properties); } @@ -362,24 +364,6 @@ void testConsumerEndpointCreationWithHeadersProvided() { }); } - @EnableAutoConfiguration - public static class BaseTestConfiguration { - @Bean - public PubSubExtendedBindingProperties pubSubExtendedBindingProperties() { - return new PubSubExtendedBindingProperties(); - } - - @Bean - public CredentialsProvider googleCredentials() { - return () -> TestUtils.MOCK_CREDENTIALS; - } - - @Bean - public GcpProjectIdProvider projectIdProvider() { - return () -> "fake project"; - } - } - @EnableAutoConfiguration public static class PubSubBinderTestConfig { @@ -403,5 +387,15 @@ public Supplier> producer() { public Consumer consumer() { return str -> LOGGER.info("received " + str); } + + @Bean + public GcpProjectIdProvider projectIdProvider() { + return () -> "fake project"; + } + + @Bean + public CredentialsProvider googleCredentials() { + return () -> TestUtils.MOCK_CREDENTIALS; + } } } From e71948161939d8134ed3fe3cbd6a17d51ada7453 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 30 Dec 2024 09:53:33 -0500 Subject: [PATCH 58/96] Revert "test reverting changes in pubsub binder" This reverts commit 4eae5e74a79b44cd5412afb054e5d28991657009. --- .../PubSubMessageChannelBinderTests.java | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java index f0f8a882d4..645d128d20 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java +++ b/spring-cloud-gcp-pubsub-stream-binder/src/test/java/com/google/cloud/spring/stream/binder/pubsub/PubSubMessageChannelBinderTests.java @@ -17,13 +17,10 @@ package com.google.cloud.spring.stream.binder.pubsub; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.google.api.gax.core.CredentialsProvider; -import com.google.auth.CredentialTypeForMetrics; -import com.google.auth.Credentials; import com.google.cloud.spring.core.GcpProjectIdProvider; import com.google.cloud.spring.pubsub.PubSubAdmin; import com.google.cloud.spring.pubsub.core.PubSubTemplate; @@ -104,10 +101,11 @@ void init() { new ApplicationContextRunner() .withBean(PubSubTemplate.class, () -> pubSubTemplate) .withBean(PubSubAdmin.class, () -> pubSubAdmin) + .withUserConfiguration(BaseTestConfiguration.class) .withConfiguration( AutoConfigurations.of( - PubSubBinderConfiguration.class, - PubSubExtendedBindingProperties.class)); + PubSubBinderConfiguration.class + )); this.binder = new PubSubMessageChannelBinder(new String[0], this.channelProvisioner, this.pubSubTemplate, this.properties); } @@ -364,6 +362,24 @@ void testConsumerEndpointCreationWithHeadersProvided() { }); } + @EnableAutoConfiguration + public static class BaseTestConfiguration { + @Bean + public PubSubExtendedBindingProperties pubSubExtendedBindingProperties() { + return new PubSubExtendedBindingProperties(); + } + + @Bean + public CredentialsProvider googleCredentials() { + return () -> TestUtils.MOCK_CREDENTIALS; + } + + @Bean + public GcpProjectIdProvider projectIdProvider() { + return () -> "fake project"; + } + } + @EnableAutoConfiguration public static class PubSubBinderTestConfig { @@ -387,15 +403,5 @@ public Supplier> producer() { public Consumer consumer() { return str -> LOGGER.info("received " + str); } - - @Bean - public GcpProjectIdProvider projectIdProvider() { - return () -> "fake project"; - } - - @Bean - public CredentialsProvider googleCredentials() { - return () -> TestUtils.MOCK_CREDENTIALS; - } } } From 2afede257074118d3a9d5456d21430eee1002a33 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 30 Dec 2024 17:51:21 -0500 Subject: [PATCH 59/96] add support for value expressions and query method evaluators in datastore --- .../query/DatastoreQueryLookupStrategy.java | 28 ++++- .../repository/query/GqlDatastoreQuery.java | 103 ++++++++++++++---- .../support/DatastoreRepositoryFactory.java | 65 +++++++++++ 3 files changed, 176 insertions(+), 20 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java index 92141cbb51..0e0d7ed8b3 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java @@ -24,6 +24,7 @@ import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryMethod; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.RepositoryQuery; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.util.Assert; @@ -41,6 +42,9 @@ public class DatastoreQueryLookupStrategy implements QueryLookupStrategy { private final ValueExpressionDelegate valueExpressionDelegate; + @SuppressWarnings("deprecation") + private final QueryMethodEvaluationContextProvider queryEvaluationContextProvider; + public DatastoreQueryLookupStrategy( DatastoreMappingContext datastoreMappingContext, DatastoreOperations datastoreOperations, @@ -50,6 +54,19 @@ public DatastoreQueryLookupStrategy( Assert.notNull(valueExpressionDelegate, "A non-null ValueExpressionDelegate is required."); this.datastoreMappingContext = datastoreMappingContext; this.valueExpressionDelegate = valueExpressionDelegate; + this.queryEvaluationContextProvider = null; + this.datastoreOperations = datastoreOperations; + } + public DatastoreQueryLookupStrategy( + DatastoreMappingContext datastoreMappingContext, + DatastoreOperations datastoreOperations, + @SuppressWarnings("deprecation") QueryMethodEvaluationContextProvider queryEvaluationContextProvider) { + Assert.notNull(datastoreMappingContext, "A non-null DatastoreMappingContext is required."); + Assert.notNull(datastoreOperations, "A non-null DatastoreOperations is required."); + Assert.notNull(queryEvaluationContextProvider, "A non-null EvaluationContextProvider is required."); + this.datastoreMappingContext = datastoreMappingContext; + this.valueExpressionDelegate = null; + this.queryEvaluationContextProvider = queryEvaluationContextProvider; this.datastoreOperations = datastoreOperations; } @@ -80,12 +97,21 @@ public RepositoryQuery resolveQuery( GqlDatastoreQuery createGqlDatastoreQuery( Class entityType, DatastoreQueryMethod queryMethod, String gql) { + if (valueExpressionDelegate != null) { + return new GqlDatastoreQuery<>( + entityType, + queryMethod, + this.datastoreOperations, + gql, + this.valueExpressionDelegate, + this.datastoreMappingContext); + } return new GqlDatastoreQuery<>( entityType, queryMethod, this.datastoreOperations, gql, - this.valueExpressionDelegate, + this.queryEvaluationContextProvider, this.datastoreMappingContext); } diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java index fd0811385c..e5b0053093 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java @@ -41,6 +41,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.function.BiFunction; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -56,6 +57,9 @@ import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersParameterAccessor; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; +import org.springframework.data.repository.query.SpelEvaluator; +import org.springframework.data.repository.query.SpelQueryContext; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.data.repository.query.ValueExpressionQueryRewriter; import org.springframework.util.StringUtils; @@ -83,8 +87,12 @@ public class GqlDatastoreQuery extends AbstractDatastoreQuery { private final ValueExpressionDelegate valueExpressionDelegate; + private final QueryMethodEvaluationContextProvider queryEvaluationContextProvider; + private ValueExpressionQueryRewriter.EvaluatingValueExpressionQueryRewriter valueExpressionQueryRewriter; + private SpelQueryContext.EvaluatingSpelQueryContext evaluatingSpelQueryContext; + /** * Constructor. * @@ -104,6 +112,32 @@ public GqlDatastoreQuery( DatastoreMappingContext datastoreMappingContext) { super(queryMethod, datastoreTemplate, datastoreMappingContext, type); this.valueExpressionDelegate = valueExpressionDelegate; + this.queryEvaluationContextProvider = null; + this.originalGql = StringUtils.trimTrailingCharacter(gql.trim(), ';'); + setOriginalParamTags(); + setEvaluatingSpelQueryContext(); + setGqlResolvedEntityClassName(); + } + /** + * Constructor. + * + * @param type the underlying entity type + * @param queryMethod the underlying query method to support. + * @param datastoreTemplate used for executing queries. + * @param gql the query text. + * @param evaluationContextProvider the provider used to evaluate SpEL expressions in queries. + * @param datastoreMappingContext used for getting metadata about entities. + */ + public GqlDatastoreQuery( + Class type, + DatastoreQueryMethod queryMethod, + DatastoreOperations datastoreTemplate, + String gql, + QueryMethodEvaluationContextProvider evaluationContextProvider, + DatastoreMappingContext datastoreMappingContext) { + super(queryMethod, datastoreTemplate, datastoreMappingContext, type); + this.valueExpressionDelegate = null; + this.queryEvaluationContextProvider = evaluationContextProvider; this.originalGql = StringUtils.trimTrailingCharacter(gql.trim(), ';'); setOriginalParamTags(); setEvaluatingSpelQueryContext(); @@ -311,19 +345,30 @@ private void setGqlResolvedEntityClassName() { this.gqlResolvedEntityClassName = result; } + @SuppressWarnings("deprecation") private void setEvaluatingSpelQueryContext() { Set originalTags = new HashSet<>(GqlDatastoreQuery.this.originalParamTags); - GqlDatastoreQuery.this.valueExpressionQueryRewriter = ValueExpressionQueryRewriter.of(valueExpressionDelegate, - (Integer counter, String spelExpression) -> { - String newTag; - do { - counter++; - newTag = "@SpELtag" + counter; - } while (originalTags.contains(newTag)); - originalTags.add(newTag); - return newTag; - }, (left, right) -> right) - .withEvaluationContextAccessor(valueExpressionDelegate.getEvaluationContextAccessor()); + BiFunction parameterNameSource = (Integer counter, String spelExpression) -> { + String newTag; + do { + counter++; + newTag = "@SpELtag" + counter; + } while (originalTags.contains(newTag)); + originalTags.add(newTag); + return newTag; + }; + // We favor ValueExpressionDelegate since it's not deprecated + if (valueExpressionDelegate != null) { + GqlDatastoreQuery.this.valueExpressionQueryRewriter = ValueExpressionQueryRewriter.of(valueExpressionDelegate, + parameterNameSource, (left, right) -> right) + .withEvaluationContextAccessor(valueExpressionDelegate.getEvaluationContextAccessor()); + } else { + GqlDatastoreQuery.this.evaluatingSpelQueryContext = + SpelQueryContext.of( + parameterNameSource, + (prefix, newTag) -> newTag) + .withEvaluationContextProvider(GqlDatastoreQuery.this.queryEvaluationContextProvider); + } } // Convenience class to hold a grouping of GQL, tags, and parameter values. @@ -348,6 +393,32 @@ private class ParsedQueryWithTagsAndValues { int limitPosition; + Map evaluationResults; + + /** + * This method prepares the Gql query and its evaluation results. It will favor + * {@link ValueExpressionDelegate} over the deprecated + * {@link QueryMethodEvaluationContextProvider}. + */ + @SuppressWarnings("deprecation") + private void evaluateGql() { + if (GqlDatastoreQuery.this.valueExpressionDelegate != null) { + ValueExpressionQueryRewriter.QueryExpressionEvaluator spelEvaluator = + GqlDatastoreQuery.this.valueExpressionQueryRewriter.parse( + GqlDatastoreQuery.this.gqlResolvedEntityClassName, + GqlDatastoreQuery.this.queryMethod.getParameters()); + this.evaluationResults = spelEvaluator.evaluate(this.rawParams); + this.finalGql = spelEvaluator.getQueryString(); + } else { + SpelEvaluator spelEvaluator = + GqlDatastoreQuery.this.evaluatingSpelQueryContext.parse( + GqlDatastoreQuery.this.gqlResolvedEntityClassName, + GqlDatastoreQuery.this.queryMethod.getParameters()); + this.evaluationResults = spelEvaluator.evaluate(this.rawParams); + this.finalGql = spelEvaluator.getQueryString(); + } + } + ParsedQueryWithTagsAndValues(List initialTags, Object[] rawParams) { this.params = Arrays.stream(rawParams) @@ -355,15 +426,9 @@ private class ParsedQueryWithTagsAndValues { .collect(Collectors.toList()); this.rawParams = rawParams; this.tagsOrdered = new ArrayList<>(initialTags); + evaluateGql(); - ValueExpressionQueryRewriter.QueryExpressionEvaluator spelEvaluator = - GqlDatastoreQuery.this.valueExpressionQueryRewriter.parse( - GqlDatastoreQuery.this.gqlResolvedEntityClassName, - GqlDatastoreQuery.this.queryMethod.getParameters()); - Map results = spelEvaluator.evaluate(this.rawParams); - this.finalGql = spelEvaluator.getQueryString(); - - for (Map.Entry entry : results.entrySet()) { + for (Map.Entry entry : this.evaluationResults.entrySet()) { this.params.add(entry.getValue()); // Cloud Datastore requires the tag name without the @ this.tagsOrdered.add(entry.getKey().substring(1)); diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java index d78884be6a..0925031fe4 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/support/DatastoreRepositoryFactory.java @@ -25,14 +25,22 @@ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.expression.BeanFactoryAccessor; +import org.springframework.context.expression.BeanFactoryResolver; import org.springframework.data.mapping.MappingException; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryFactorySupport; +import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; +import org.springframework.data.spel.EvaluationContextProvider; +import org.springframework.data.spel.ExpressionDependencies; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -101,8 +109,65 @@ protected Optional getQueryLookupStrategy( valueExpressionDelegate)); } + /** + * @deprecated in favor of {@link #getQueryLookupStrategy(Key, ValueExpressionDelegate)} + */ + @Override + @SuppressWarnings("deprecation") + @Deprecated(since = "6.0") + protected Optional getQueryLookupStrategy( + @Nullable Key key, QueryMethodEvaluationContextProvider evaluationContextProvider) { + + return Optional.of( + new DatastoreQueryLookupStrategy( + this.datastoreMappingContext, + this.datastoreOperations, + delegateContextProvider(evaluationContextProvider))); + + } + @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } + + @SuppressWarnings("deprecation") + private QueryMethodEvaluationContextProvider delegateContextProvider( + QueryMethodEvaluationContextProvider evaluationContextProvider) { + + return new QueryMethodEvaluationContextProvider() { + @Override + public > EvaluationContext getEvaluationContext( + T parameters, Object[] parameterValues) { + StandardEvaluationContext evaluationContext = + (StandardEvaluationContext) + evaluationContextProvider.getEvaluationContext(parameters, parameterValues); + evaluationContext.setRootObject(DatastoreRepositoryFactory.this.applicationContext); + evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); + evaluationContext.setBeanResolver( + new BeanFactoryResolver(DatastoreRepositoryFactory.this.applicationContext)); + return evaluationContext; + } + + @Override + public > EvaluationContext getEvaluationContext( + T parameters, Object[] parameterValues, ExpressionDependencies expressionDependencies) { + StandardEvaluationContext evaluationContext = + (StandardEvaluationContext) + evaluationContextProvider.getEvaluationContext( + parameters, parameterValues, expressionDependencies); + + evaluationContext.setRootObject(DatastoreRepositoryFactory.this.applicationContext); + evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); + evaluationContext.setBeanResolver( + new BeanFactoryResolver(DatastoreRepositoryFactory.this.applicationContext)); + return evaluationContext; + } + + @Override + public EvaluationContextProvider getEvaluationContextProvider() { + return (EvaluationContextProvider) evaluationContextProvider; + } + }; + } } From e85801746682c241340fb5b2d0c151b09257c024 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 30 Dec 2024 21:34:59 -0500 Subject: [PATCH 60/96] test both value expressions and query method expressions in datastore --- .../DatastoreQueryLookupStrategyTests.java | 51 +++++++-- .../query/GqlDatastoreQueryTests.java | 105 ++++++++++++------ 2 files changed, 113 insertions(+), 43 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java index 5ee49ebbae..aaab61e504 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java @@ -32,6 +32,8 @@ import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mockito; import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.query.Parameter; @@ -49,21 +51,32 @@ class DatastoreQueryLookupStrategyTests { private DatastoreQueryMethod queryMethod; - private DatastoreQueryLookupStrategy datastoreQueryLookupStrategy; + private DatastoreQueryLookupStrategy[] lookupStrategies; private ValueExpressionDelegate valueExpressionDelegate; + private QueryMethodEvaluationContextProvider evaluationContextProvider; + @BeforeEach void initMocks() { this.datastoreTemplate = mock(DatastoreTemplate.class); this.datastoreMappingContext = new DatastoreMappingContext(); this.queryMethod = mock(DatastoreQueryMethod.class); this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); - this.datastoreQueryLookupStrategy = getDatastoreQueryLookupStrategy(); + this.evaluationContextProvider = mock(QueryMethodEvaluationContextProvider.class); + this.lookupStrategies = new DatastoreQueryLookupStrategy[] { + getDatastoreQueryLookupStrategy(this.valueExpressionDelegate), + getDatastoreQueryLookupStrategy(this.evaluationContextProvider), + }; } - @Test - void resolveSqlQueryTest() { + /** + * int parameters are used as indexes of the two lookup strategies we use + */ + @ParameterizedTest + @ValueSource(ints = {0, 1}) + void resolveSqlQueryTest(int lookupStrategyIndex) { + DatastoreQueryLookupStrategy lookupStrategy = this.lookupStrategies[lookupStrategyIndex]; String queryName = "fakeNamedQueryName"; String query = "fake query"; when(this.queryMethod.getNamedQueryName()).thenReturn(queryName); @@ -89,23 +102,37 @@ void resolveSqlQueryTest() { when(namedQueries.getQuery(queryName)).thenReturn(query); when(valueExpressionDelegate.getEvaluationContextAccessor()).thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); - this.datastoreQueryLookupStrategy.resolveQuery(null, null, null, namedQueries); + lookupStrategy.resolveQuery(null, null, null, namedQueries); - verify(this.datastoreQueryLookupStrategy, times(1)) + verify(lookupStrategy, times(1)) .createGqlDatastoreQuery(eq(Object.class), same(this.queryMethod), eq(query)); } - private DatastoreQueryLookupStrategy getDatastoreQueryLookupStrategy() { - DatastoreQueryLookupStrategy spannerQueryLookupStrategy = + private DatastoreQueryLookupStrategy getDatastoreQueryLookupStrategy(ValueExpressionDelegate valueExpressionDelegate) { + DatastoreQueryLookupStrategy lookupStrategy = spy( new DatastoreQueryLookupStrategy( this.datastoreMappingContext, this.datastoreTemplate, - this.valueExpressionDelegate)); - doReturn(Object.class).when(spannerQueryLookupStrategy).getEntityType(any()); + valueExpressionDelegate)); + return prepareDatastoreQueryLookupStrategy(lookupStrategy); + } + + private DatastoreQueryLookupStrategy getDatastoreQueryLookupStrategy(QueryMethodEvaluationContextProvider evaluationContextProvider) { + DatastoreQueryLookupStrategy lookupStrategy = + spy( + new DatastoreQueryLookupStrategy( + this.datastoreMappingContext, + this.datastoreTemplate, + evaluationContextProvider)); + return prepareDatastoreQueryLookupStrategy(lookupStrategy); + } + + private DatastoreQueryLookupStrategy prepareDatastoreQueryLookupStrategy(DatastoreQueryLookupStrategy base) { + doReturn(Object.class).when(base).getEntityType(any()); doReturn(this.queryMethod) - .when(spannerQueryLookupStrategy) + .when(base) .createQueryMethod(any(), any(), any()); - return spannerQueryLookupStrategy; + return base; } } diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java index 612b1181a4..17ff0602f1 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQueryTests.java @@ -56,6 +56,8 @@ import org.assertj.core.data.Offset; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -66,8 +68,11 @@ import org.springframework.data.domain.Sort; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.QueryMethodValueEvaluationContextAccessor; import org.springframework.data.repository.query.ValueExpressionDelegate; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.spel.support.StandardEvaluationContext; /** Tests for the GQL Query Method. */ class GqlDatastoreQueryTests { @@ -87,6 +92,8 @@ class GqlDatastoreQueryTests { private ValueExpressionDelegate valueExpressionDelegate; + private QueryMethodEvaluationContextProvider evaluationContextProvider; + @BeforeEach void initMocks() { this.queryMethod = mock(DatastoreQueryMethod.class); @@ -100,26 +107,45 @@ void initMocks() { when(this.datastoreEntityConverter.getConversions()).thenReturn(this.readWriteConversions); this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); when(valueExpressionDelegate.getEvaluationContextAccessor()).thenReturn(mock(QueryMethodValueEvaluationContextAccessor.class)); + this.evaluationContextProvider = mock(QueryMethodEvaluationContextProvider.class); + } + + private GqlDatastoreQuery createQuerySpy( + String gql, boolean isPageQuery, boolean isSliceQuery, boolean useValueExpressionDelegate) { + GqlDatastoreQuery spy; + if (useValueExpressionDelegate) { + spy = + spy( + new GqlDatastoreQuery<>( + Trade.class, + this.queryMethod, + this.datastoreTemplate, + gql, + this.valueExpressionDelegate, + this.datastoreMappingContext)); + } else { + spy = spy(new GqlDatastoreQuery<>( + Trade.class, + this.queryMethod, + this.datastoreTemplate, + gql, + this.evaluationContextProvider, + this.datastoreMappingContext)); + } + return spy; } private GqlDatastoreQuery createQuery( - String gql, boolean isPageQuery, boolean isSliceQuery) { - GqlDatastoreQuery spy = - spy( - new GqlDatastoreQuery<>( - Trade.class, - this.queryMethod, - this.datastoreTemplate, - gql, - this.valueExpressionDelegate, - this.datastoreMappingContext)); + String gql, boolean isPageQuery, boolean isSliceQuery, boolean useValueExpressionDelegate) { + GqlDatastoreQuery spy = createQuerySpy(gql, isPageQuery, isSliceQuery, useValueExpressionDelegate); doReturn(isPageQuery).when(spy).isPageQuery(); doReturn(isSliceQuery).when(spy).isSliceQuery(); return spy; } - @Test - void compoundNameConventionTest() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void compoundNameConventionTest(boolean useValueExpressionDelegate) { String gql = "SELECT * FROM " @@ -169,9 +195,20 @@ void compoundNameConventionTest() { doReturn(key).when(this.datastoreTemplate).getKey(any()); + // to be used when using a query method evaluation context + EvaluationContext evaluationContext = new StandardEvaluationContext(); + for (int i = 0; i < paramVals.length; i++) { + evaluationContext.setVariable(paramNames[i], paramVals[i]); + } + when(this.evaluationContextProvider.getEvaluationContext(any(), any())) + .thenReturn(evaluationContext); + when(this.evaluationContextProvider.getEvaluationContext(any(), any(), any())) + .thenReturn(evaluationContext); + + // to be used when testing with a value expression delegate this.valueExpressionDelegate = ValueExpressionDelegate.create(); - GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, false); + GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, false, useValueExpressionDelegate); doAnswer( invocation -> { @@ -223,8 +260,9 @@ void compoundNameConventionTest() { verify(this.datastoreTemplate, times(1)).queryKeysOrEntities(any(), eq(Trade.class)); } - @Test - void pageableTest() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void pageableTest(boolean useValueExpressionDelegate) { String gql = "SELECT * FROM trades WHERE price=@price"; @@ -237,7 +275,7 @@ void pageableTest() { when(parameters.hasPageableParameter()).thenReturn(true); when(parameters.getPageableIndex()).thenReturn(1); - GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, false); + GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, false, useValueExpressionDelegate); doAnswer( invocation -> { @@ -264,8 +302,9 @@ void pageableTest() { verify(this.datastoreTemplate, times(1)).queryKeysOrEntities(any(), eq(Trade.class)); } - @Test - void pageableTestSort() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void pageableTestSort(boolean useValueExpressionDelegate) { String gql = "SELECT * FROM trades WHERE price=@price"; @@ -278,7 +317,7 @@ void pageableTestSort() { when(parameters.hasSortParameter()).thenReturn(true); when(parameters.getSortIndex()).thenReturn(1); - GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, false); + GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, false, useValueExpressionDelegate); doAnswer( invocation -> { @@ -303,8 +342,9 @@ void pageableTestSort() { verify(this.datastoreTemplate, times(1)).queryKeysOrEntities(any(), eq(Trade.class)); } - @Test - void pageableTestSlice() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void pageableTestSlice(boolean useValueExpressionDelegate) { String gql = "SELECT * FROM trades WHERE price=@price"; @@ -318,7 +358,7 @@ void pageableTestSlice() { when(parameters.hasPageableParameter()).thenReturn(true); when(parameters.getPageableIndex()).thenReturn(1); - GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, true); + GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, false, true, useValueExpressionDelegate); Cursor cursor = Cursor.copyFrom("abc".getBytes()); List params = new ArrayList<>(); @@ -358,8 +398,9 @@ void pageableTestSlice() { assertThat(params.get(1)).containsEntry("offset", cursor); } - @Test - void pageableTestPage() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void pageableTestPage(boolean useValueExpressionDelegate) { String gql = "SELECT * FROM trades WHERE price=@price"; String expected = "SELECT * FROM trades WHERE price=@price LIMIT @limit OFFSET @offset"; @@ -374,7 +415,7 @@ void pageableTestPage() { when(parameters.hasPageableParameter()).thenReturn(true); when(parameters.getPageableIndex()).thenReturn(1); - GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, true, true); + GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, true, true, useValueExpressionDelegate); Cursor cursor = Cursor.copyFrom("abc".getBytes()); @@ -419,8 +460,9 @@ void pageableTestPage() { verify(this.datastoreTemplate, times(2)).queryKeysOrEntities(any(), eq(Trade.class)); } - @Test - void pageableTestPageCursor() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void pageableTestPageCursor(boolean useValueExpressionDelegate) { String gql = "SELECT * FROM trades WHERE price=@price"; String expected = "SELECT * FROM trades WHERE price=@price LIMIT @limit OFFSET @offset"; @@ -439,7 +481,7 @@ void pageableTestPageCursor() { when(parameters.hasPageableParameter()).thenReturn(true); when(parameters.getPageableIndex()).thenReturn(1); - GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, true, true); + GqlDatastoreQuery gqlDatastoreQuery = createQuery(gql, true, true, useValueExpressionDelegate); Cursor cursor = Cursor.copyFrom("abc".getBytes()); @@ -475,8 +517,9 @@ void pageableTestPageCursor() { verify(this.datastoreTemplate, times(1)).queryKeysOrEntities(any(), eq(Trade.class)); } - @Test - void streamResultTest() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void streamResultTest(boolean useValueExpressionDelegate) { Mockito.when(this.queryMethod.getReturnedObjectType()).thenReturn(Trade.class); Parameters parameters = mock(Parameters.class); when(this.queryMethod.getParameters()).thenReturn(parameters); @@ -500,7 +543,7 @@ void streamResultTest() { .when(this.datastoreTemplate) .queryKeysOrEntities(any(), eq(Trade.class)); - GqlDatastoreQuery gqlDatastoreQuery = createQuery("unusedGqlString", false, false); + GqlDatastoreQuery gqlDatastoreQuery = createQuery("unusedGqlString", false, false, useValueExpressionDelegate); Object result = gqlDatastoreQuery.execute(new Parameters[0]); assertThat(result).isInstanceOf(Stream.class); From ea60c6bb2e6a0ce68d5a3b67002454bd6c7c564a Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 30 Dec 2024 22:35:32 -0500 Subject: [PATCH 61/96] fix style --- .../datastore/repository/query/DatastoreQueryLookupStrategy.java | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java index 0e0d7ed8b3..80becb0aac 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategy.java @@ -57,6 +57,7 @@ public DatastoreQueryLookupStrategy( this.queryEvaluationContextProvider = null; this.datastoreOperations = datastoreOperations; } + public DatastoreQueryLookupStrategy( DatastoreMappingContext datastoreMappingContext, DatastoreOperations datastoreOperations, From 3b3c24ea20fdd8315f22dd507903ede2b9168499 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 30 Dec 2024 22:45:22 -0500 Subject: [PATCH 62/96] fix style ii --- .../data/datastore/repository/query/GqlDatastoreQuery.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java index e5b0053093..28dab76d56 100644 --- a/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java +++ b/spring-cloud-gcp-data-datastore/src/main/java/com/google/cloud/spring/data/datastore/repository/query/GqlDatastoreQuery.java @@ -118,6 +118,7 @@ public GqlDatastoreQuery( setEvaluatingSpelQueryContext(); setGqlResolvedEntityClassName(); } + /** * Constructor. * @@ -404,9 +405,9 @@ private class ParsedQueryWithTagsAndValues { private void evaluateGql() { if (GqlDatastoreQuery.this.valueExpressionDelegate != null) { ValueExpressionQueryRewriter.QueryExpressionEvaluator spelEvaluator = - GqlDatastoreQuery.this.valueExpressionQueryRewriter.parse( - GqlDatastoreQuery.this.gqlResolvedEntityClassName, - GqlDatastoreQuery.this.queryMethod.getParameters()); + GqlDatastoreQuery.this.valueExpressionQueryRewriter.parse( + GqlDatastoreQuery.this.gqlResolvedEntityClassName, + GqlDatastoreQuery.this.queryMethod.getParameters()); this.evaluationResults = spelEvaluator.evaluate(this.rawParams); this.finalGql = spelEvaluator.getQueryString(); } else { From 5306b5902e4cfc98f3e035777f1434033388dbec Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 15:08:01 -0500 Subject: [PATCH 63/96] introduce support for value expression delegate and query method evaluation context in spanner --- .../query/SpannerQueryLookupStrategy.java | 43 ++++++++++++- .../repository/query/SqlSpannerQuery.java | 41 +++++++++++- .../support/SpannerRepositoryFactory.java | 62 +++++++++++++++++++ 3 files changed, 140 insertions(+), 6 deletions(-) diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java index b6fd5eb1bb..860517fefe 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java @@ -24,6 +24,7 @@ import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryMethod; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.RepositoryQuery; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.spel.standard.SpelExpressionParser; @@ -41,9 +42,11 @@ public class SpannerQueryLookupStrategy implements QueryLookupStrategy { private final SpannerMappingContext spannerMappingContext; - private ValueExpressionDelegate valueExpressionDelegate; + private final ValueExpressionDelegate valueExpressionDelegate; - private SpelExpressionParser expressionParser; + private final SpelExpressionParser expressionParser; + + private QueryMethodEvaluationContextProvider evaluationContextProvider; public SpannerQueryLookupStrategy( SpannerMappingContext spannerMappingContext, @@ -56,6 +59,29 @@ public SpannerQueryLookupStrategy( Assert.notNull(expressionParser, "A valid SpelExpressionParser is required."); this.spannerMappingContext = spannerMappingContext; this.valueExpressionDelegate = valueExpressionDelegate; + this.evaluationContextProvider = null; + this.spannerTemplate = spannerTemplate; + this.expressionParser = expressionParser; + } + + /** + * @deprecated Use + * {@link SpannerQueryLookupStrategy(SpannerMappingContext, SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} + * instead. + */ + @Deprecated + public SpannerQueryLookupStrategy( + SpannerMappingContext spannerMappingContext, + SpannerTemplate spannerTemplate, + QueryMethodEvaluationContextProvider evaluationContextProvider, + SpelExpressionParser expressionParser) { + Assert.notNull(spannerMappingContext, "A valid SpannerMappingContext is required."); + Assert.notNull(spannerTemplate, "A valid SpannerTemplate is required."); + Assert.notNull(evaluationContextProvider, "A valid EvaluationContextProvider is required."); + Assert.notNull(expressionParser, "A valid SpelExpressionParser is required."); + this.spannerMappingContext = spannerMappingContext; + this.valueExpressionDelegate = null; + this.evaluationContextProvider = evaluationContextProvider; this.spannerTemplate = spannerTemplate; this.expressionParser = expressionParser; } @@ -92,12 +118,23 @@ public RepositoryQuery resolveQuery( SqlSpannerQuery createSqlSpannerQuery( Class entityType, SpannerQueryMethod queryMethod, String sql, boolean isDml) { + if (this.valueExpressionDelegate != null) { + return new SqlSpannerQuery<>( + entityType, + queryMethod, + this.spannerTemplate, + sql, + this.valueExpressionDelegate, + this.expressionParser, + this.spannerMappingContext, + isDml); + } return new SqlSpannerQuery<>( entityType, queryMethod, this.spannerTemplate, sql, - this.valueExpressionDelegate, + this.evaluationContextProvider, this.expressionParser, this.spannerMappingContext, isDml); diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java index 2e9949506f..729a08509a 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java @@ -46,6 +46,7 @@ import org.springframework.data.repository.query.ParameterAccessor; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersParameterAccessor; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; @@ -80,7 +81,9 @@ public class SqlSpannerQuery extends AbstractSpannerQuery { return builder.build(); }; - private ValueExpressionDelegate valueExpressionDelegate; + private final QueryMethodEvaluationContextProvider evaluationContextProvider; + + private final ValueExpressionDelegate valueExpressionDelegate; private SpelExpressionParser expressionParser; @@ -94,12 +97,36 @@ public class SqlSpannerQuery extends AbstractSpannerQuery { SpannerMappingContext spannerMappingContext, boolean isDml) { super(type, queryMethod, spannerTemplate, spannerMappingContext); + this.evaluationContextProvider = null; this.valueExpressionDelegate = valueExpressionDelegate; this.expressionParser = expressionParser; this.sql = StringUtils.trimTrailingCharacter(sql.trim(), ';'); this.isDml = isDml; } + /** + * @deprecated Use + * {@link SpannerQueryLookupStrategy(SpannerMappingContext, SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} + * instead. + */ + @Deprecated + SqlSpannerQuery( + Class type, + SpannerQueryMethod queryMethod, + SpannerTemplate spannerTemplate, + String sql, + QueryMethodEvaluationContextProvider evaluationContextProvider, + SpelExpressionParser expressionParser, + SpannerMappingContext spannerMappingContext, + boolean isDml) { + super(type, queryMethod, spannerTemplate, spannerMappingContext); + this.evaluationContextProvider = evaluationContextProvider; + this.valueExpressionDelegate = null; + this.expressionParser = expressionParser; + this.sql = StringUtils.trimTrailingCharacter(sql.trim(), ';'); + this.isDml = isDml; + } + private boolean isPageableOrSort(Class type) { return Pageable.class.isAssignableFrom(type) || Sort.class.isAssignableFrom(type); } @@ -153,13 +180,21 @@ private static String resolveEntityClassNames( return result; } + private EvaluationContext getEvaluationContext(QueryTagValue queryTagValue) { + if (evaluationContextProvider != null) { + return this.evaluationContextProvider.getEvaluationContext( + this.queryMethod.getParameters(), queryTagValue.rawParams); + } + return this.valueExpressionDelegate.getEvaluationContextAccessor().create(this.queryMethod.getParameters()) + .getEvaluationContext(queryTagValue.rawParams).getEvaluationContext(); + } + private void resolveSpelTags(QueryTagValue queryTagValue) { Expression[] expressions = detectExpressions(queryTagValue.sql); StringBuilder sb = new StringBuilder(); Map valueToTag = new HashMap<>(); int tagNum = 0; - EvaluationContext evaluationContext = this.valueExpressionDelegate.getEvaluationContextAccessor().create(this.queryMethod.getParameters()) - .getEvaluationContext(queryTagValue.rawParams).getEvaluationContext(); + EvaluationContext evaluationContext = getEvaluationContext(queryTagValue); for (Expression expression : expressions) { if (expression instanceof LiteralExpression) { sb.append(expression.getValue(String.class)); diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java index 9904f7e7d2..041e542671 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactory.java @@ -25,15 +25,23 @@ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.expression.BeanFactoryAccessor; +import org.springframework.context.expression.BeanFactoryResolver; import org.springframework.data.mapping.MappingException; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryFactorySupport; +import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryLookupStrategy; import org.springframework.data.repository.query.QueryLookupStrategy.Key; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; +import org.springframework.data.spel.EvaluationContextProvider; +import org.springframework.data.spel.ExpressionDependencies; +import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -105,6 +113,60 @@ protected Optional getQueryLookupStrategy( EXPRESSION_PARSER)); } + /** + * @deprecated Use {@link #getQueryLookupStrategy(Key, ValueExpressionDelegate)} instead. + */ + @Override + @Deprecated + protected Optional getQueryLookupStrategy( + @Nullable Key key, QueryMethodEvaluationContextProvider evaluationContextProvider) { + + return Optional.of( + new SpannerQueryLookupStrategy( + this.spannerMappingContext, + this.spannerTemplate, + delegateContextProvider(evaluationContextProvider), + EXPRESSION_PARSER)); + } + + private QueryMethodEvaluationContextProvider delegateContextProvider( + QueryMethodEvaluationContextProvider evaluationContextProvider) { + return new QueryMethodEvaluationContextProvider() { + @Override + public > EvaluationContext getEvaluationContext( + T parameters, Object[] parameterValues) { + StandardEvaluationContext evaluationContext = + (StandardEvaluationContext) + evaluationContextProvider.getEvaluationContext(parameters, parameterValues); + evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); + evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); + evaluationContext.setBeanResolver( + new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); + return evaluationContext; + } + + @Override + public > EvaluationContext getEvaluationContext( + T parameters, Object[] parameterValues, ExpressionDependencies expressionDependencies) { + StandardEvaluationContext evaluationContext = + (StandardEvaluationContext) + evaluationContextProvider.getEvaluationContext( + parameters, parameterValues, expressionDependencies); + + evaluationContext.setRootObject(SpannerRepositoryFactory.this.applicationContext); + evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); + evaluationContext.setBeanResolver( + new BeanFactoryResolver(SpannerRepositoryFactory.this.applicationContext)); + return evaluationContext; + } + + @Override + public EvaluationContextProvider getEvaluationContextProvider() { + return (EvaluationContextProvider) evaluationContextProvider; + } + }; + } + @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; From d7d3b9cb857146b48d97491e636506b2140f4b8f Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 15:32:38 -0500 Subject: [PATCH 64/96] adapt spanner tests --- .../SpannerQueryLookupStrategyTests.java | 65 +++++++---- .../query/SqlSpannerQueryTests.java | 110 +++++++++++++----- .../SpannerRepositoryFactoryTests.java | 5 + 3 files changed, 130 insertions(+), 50 deletions(-) diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java index 8212e49ee0..7db35d5066 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategyTests.java @@ -44,11 +44,13 @@ import java.util.List; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mockito; import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; import org.springframework.expression.spel.standard.SpelExpressionParser; @@ -65,6 +67,8 @@ class SpannerQueryLookupStrategyTests { private ValueExpressionDelegate valueExpressionDelegate; + private QueryMethodEvaluationContextProvider evaluationContextProvider; + private SpelExpressionParser spelExpressionParser; @BeforeEach @@ -74,8 +78,8 @@ void initMocks() { this.spannerTemplate = mock(SpannerTemplate.class); this.queryMethod = mock(SpannerQueryMethod.class); this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); + this.evaluationContextProvider = mock(QueryMethodEvaluationContextProvider.class); this.spelExpressionParser = new SpelExpressionParser(); - this.spannerQueryLookupStrategy = getSpannerQueryLookupStrategy(); when(this.queryMethod.getQueryAnnotation()) .thenReturn( @@ -97,8 +101,10 @@ public boolean dmlStatement() { }); } - @Test - void resolveSqlQueryTest() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void resolveSqlQueryTest(boolean useValueExpressionDelegate) { + this.spannerQueryLookupStrategy = getSpannerQueryLookupStrategy(useValueExpressionDelegate); String queryName = "fakeNamedQueryName"; String query = "fake query"; when(this.queryMethod.getNamedQueryName()).thenReturn(queryName); @@ -131,8 +137,10 @@ void resolveSqlQueryTest() { .createSqlSpannerQuery(eq(Object.class), same(this.queryMethod), eq(query), eq(false)); } - @Test - void resolvePartTreeQueryTest() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void resolvePartTreeQueryTest(boolean useValueExpressionDelegate) { + this.spannerQueryLookupStrategy = getSpannerQueryLookupStrategy(useValueExpressionDelegate); String queryName = "fakeNamedQueryName"; when(this.queryMethod.getNamedQueryName()).thenReturn(queryName); NamedQueries namedQueries = mock(NamedQueries.class); @@ -144,14 +152,25 @@ void resolvePartTreeQueryTest() { .createPartTreeSpannerQuery(eq(Object.class), same(this.queryMethod)); } - private SpannerQueryLookupStrategy getSpannerQueryLookupStrategy() { - SpannerQueryLookupStrategy spannerQueryLookupStrategy = - spy( - new SpannerQueryLookupStrategy( - this.spannerMappingContext, - this.spannerTemplate, - this.valueExpressionDelegate, - this.spelExpressionParser)); + private SpannerQueryLookupStrategy getSpannerQueryLookupStrategy(boolean useValueExpressionDelegate) { + SpannerQueryLookupStrategy spannerQueryLookupStrategy; + if (useValueExpressionDelegate) { + spannerQueryLookupStrategy = + spy( + new SpannerQueryLookupStrategy( + this.spannerMappingContext, + this.spannerTemplate, + this.valueExpressionDelegate, + this.spelExpressionParser)); + } else { + spannerQueryLookupStrategy = + spy( + new SpannerQueryLookupStrategy( + this.spannerMappingContext, + this.spannerTemplate, + this.evaluationContextProvider, + this.spelExpressionParser)); + } doReturn(Object.class).when(spannerQueryLookupStrategy).getEntityType(any()); doReturn(null).when(spannerQueryLookupStrategy).createPartTreeSpannerQuery(any(), any()); doReturn(this.queryMethod) @@ -160,8 +179,10 @@ private SpannerQueryLookupStrategy getSpannerQueryLookupStrategy() { return spannerQueryLookupStrategy; } - @Test - void getChildrenRowsQueryTest() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void getChildrenRowsQueryTest(boolean useValueExpressionDelegate) { + this.spannerQueryLookupStrategy = getSpannerQueryLookupStrategy(useValueExpressionDelegate); TestEntity t = new TestEntity(); t.id = "key"; t.id2 = "key2"; @@ -182,8 +203,10 @@ void getChildrenRowsQueryTest() { assertThat(statement.getParameters().get("tag1").getString()).isEqualTo("key2"); } - @Test - void getColumnsStringForSelectTest() { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void getColumnsStringForSelectTest(boolean useValueExpressionDelegate) { + this.spannerQueryLookupStrategy = getSpannerQueryLookupStrategy(useValueExpressionDelegate); TestEntity t = new TestEntity(); t.id = "key"; t.id2 = "key2"; @@ -201,9 +224,11 @@ void getColumnsStringForSelectTest() { + " childEntities"); } - @Test + @ParameterizedTest @SuppressWarnings("unchecked") - void getColumnsStringForSelectMultipleTest() { + @ValueSource(booleans = {true, false}) + void getColumnsStringForSelectMultipleTest(boolean useValueExpressionDelegate) { + this.spannerQueryLookupStrategy = getSpannerQueryLookupStrategy(useValueExpressionDelegate); final SpannerPersistentEntity entity = (SpannerPersistentEntity) this.spannerMappingContext.getPersistentEntity(TestEntity.class); diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java index bed4d00652..aeed194810 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java @@ -59,7 +59,8 @@ import java.util.function.Function; import org.assertj.core.data.Offset; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import org.springframework.data.domain.PageRequest; @@ -72,6 +73,7 @@ import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersSource; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.QueryMethodValueEvaluationContextAccessor; import org.springframework.data.repository.query.ResultProcessor; import org.springframework.data.repository.query.ReturnedType; @@ -91,6 +93,8 @@ class SqlSpannerQueryTests { private ValueExpressionDelegate valueExpressionDelegate; + private QueryMethodEvaluationContextProvider evaluationContextProvider; + private SpelExpressionParser expressionParser; private SpannerMappingContext spannerMappingContext = new SpannerMappingContext(new Gson()); @@ -124,6 +128,8 @@ void initMocks() throws NoSuchMethodException { new SpannerSchemaUtils( this.spannerMappingContext, this.spannerEntityProcessor, true))); this.expressionParser = new SpelExpressionParser(); + this.evaluationContextProvider = mock(QueryMethodEvaluationContextProvider.class); + this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); QueryMethodValueEvaluationContextAccessor evaluationContextAccessor = mock(QueryMethodValueEvaluationContextAccessor.class); ValueEvaluationContextProvider evaluationContextProvider = @@ -134,22 +140,36 @@ void initMocks() throws NoSuchMethodException { when(evaluationContextAccessor.create(any())).thenReturn(evaluationContextProvider); when(evaluationContextProvider.getEvaluationContext(any())).thenReturn(valueEvaluationContext); when(valueEvaluationContext.getEvaluationContext()).thenReturn(mock(EvaluationContext.class)); + } - private SqlSpannerQuery createQuery(String sql, Class theClass, boolean isDml) { + @SuppressWarnings("deprecation") + private SqlSpannerQuery createQuery(String sql, Class theClass, boolean isDml,boolean useValueExpressionDelegate) { + if (useValueExpressionDelegate) { + return new SqlSpannerQuery( + theClass, + this.queryMethod, + this.spannerTemplate, + sql, + this.valueExpressionDelegate, + this.expressionParser, + this.spannerMappingContext, + isDml); + } return new SqlSpannerQuery( theClass, this.queryMethod, this.spannerTemplate, sql, - this.valueExpressionDelegate, + this.evaluationContextProvider, this.expressionParser, this.spannerMappingContext, isDml); } - @Test - void noPageableParamQueryTest() throws NoSuchMethodException { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void noPageableParamQueryTest(boolean useValueExpressionDelegate) throws NoSuchMethodException { String sql = "SELECT DISTINCT * FROM " + ":com.google.cloud.spring.data.spanner.repository.query.SqlSpannerQueryTests$Trade:"; @@ -166,7 +186,11 @@ void noPageableParamQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn(toReturn); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, toReturn, false); + EvaluationContext evaluationContext = new StandardEvaluationContext(); + when(this.evaluationContextProvider.getEvaluationContext(any(), any())) + .thenReturn(evaluationContext); + + SqlSpannerQuery sqlSpannerQuery = createQuery(sql, toReturn, false, useValueExpressionDelegate); doAnswer( invocation -> { @@ -195,8 +219,9 @@ void noPageableParamQueryTest() throws NoSuchMethodException { .query(eq(Trade.class), any(Statement.class), any(SpannerQueryOptions.class)); } - @Test - void pageableParamQueryTest() throws NoSuchMethodException { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void pageableParamQueryTest(boolean useValueExpressionDelegate) throws NoSuchMethodException { String sql = "SELECT * FROM" @@ -222,8 +247,10 @@ void pageableParamQueryTest() throws NoSuchMethodException { for (int i = 0; i < params.length; i++) { evaluationContext.setVariable(paramNames[i], params[i]); } + when(this.evaluationContextProvider.getEvaluationContext(any(), any())) + .thenReturn(evaluationContext); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); + SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false, useValueExpressionDelegate); doAnswer( invocation -> { @@ -257,8 +284,9 @@ void pageableParamQueryTest() throws NoSuchMethodException { verify(this.spannerTemplate, times(1)).executeQuery(any(), any()); } - @Test - void sortParamQueryTest() throws NoSuchMethodException { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void sortParamQueryTest(boolean useValueExpressionDelegate) throws NoSuchMethodException { String sql = "SELECT * FROM" @@ -279,7 +307,14 @@ void sortParamQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn((Class) Child.class); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); + EvaluationContext evaluationContext = new StandardEvaluationContext(); + for (int i = 0; i < params.length; i++) { + evaluationContext.setVariable(paramNames[i], params[i]); + } + when(this.evaluationContextProvider.getEvaluationContext(any(), any())) + .thenReturn(evaluationContext); + + SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false, useValueExpressionDelegate); doAnswer( invocation -> { @@ -313,8 +348,9 @@ void sortParamQueryTest() throws NoSuchMethodException { verify(this.spannerTemplate, times(1)).executeQuery(any(), any()); } - @Test - void sortAndPageableQueryTest() throws NoSuchMethodException { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void sortAndPageableQueryTest(boolean useValueExpressionDelegate) throws NoSuchMethodException { String sql = "SELECT * FROM" @@ -336,7 +372,14 @@ void sortAndPageableQueryTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn((Class) Child.class); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false); + EvaluationContext evaluationContext = new StandardEvaluationContext(); + for (int i = 0; i < params.length; i++) { + evaluationContext.setVariable(paramNames[i], params[i]); + } + when(this.evaluationContextProvider.getEvaluationContext(any(), any())) + .thenReturn(evaluationContext); + + SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Child.class, false, useValueExpressionDelegate); doAnswer( invocation -> { @@ -370,8 +413,9 @@ void sortAndPageableQueryTest() throws NoSuchMethodException { verify(this.spannerTemplate, times(1)).executeQuery(any(), any()); } - @Test - void compoundNameConventionTest() throws NoSuchMethodException { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void compoundNameConventionTest(boolean useValueExpressionDelegate) throws NoSuchMethodException { String sql = "SELECT DISTINCT * FROM " @@ -440,8 +484,10 @@ void compoundNameConventionTest() throws NoSuchMethodException { evaluationContext.setVariable(paramNames[i], params[i]); } when(valueEvaluationContext.getEvaluationContext()).thenReturn(evaluationContext); + when(this.evaluationContextProvider.getEvaluationContext(any(), any())) + .thenReturn(evaluationContext); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Trade.class, false); + SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Trade.class, false, useValueExpressionDelegate); doAnswer( invocation -> { @@ -500,8 +546,9 @@ void compoundNameConventionTest() throws NoSuchMethodException { verify(this.spannerTemplate, times(1)).executeQuery(any(), any()); } - @Test - void dmlTest() throws NoSuchMethodException { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void dmlTest(boolean useValueExpressionDelegate) throws NoSuchMethodException { String sql = "dml statement here"; TransactionContext context = mock(TransactionContext.class); @@ -522,7 +569,7 @@ void dmlTest() throws NoSuchMethodException { Mockito.when(this.queryMethod.getParameters()) .thenReturn(new DefaultParameters(ParametersSource.of(method))); - SqlSpannerQuery sqlSpannerQuery = spy(createQuery(sql, Trade.class, true)); + SqlSpannerQuery sqlSpannerQuery = spy(createQuery(sql, Trade.class, true, useValueExpressionDelegate)); doReturn(long.class).when(sqlSpannerQuery).getReturnedSimpleConvertableItemType(); doReturn(null).when(sqlSpannerQuery).convertToSimpleReturnType(any(), any()); @@ -532,8 +579,9 @@ void dmlTest() throws NoSuchMethodException { verify(this.spannerTemplate, times(1)).executeDmlStatement(any()); } - @Test - void sqlCountWithWhereTest() throws NoSuchMethodException { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void sqlCountWithWhereTest(boolean useValueExpressionDelegate) throws NoSuchMethodException { String sql = "SELECT count(1) FROM" + " :com.google.cloud.spring.data.spanner.repository.query.SqlSpannerQueryTests$Child:" @@ -548,7 +596,7 @@ void sqlCountWithWhereTest() throws NoSuchMethodException { when(queryMethod.isCollectionQuery()).thenReturn(false); when(queryMethod.getReturnedObjectType()).thenReturn((Class) long.class); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, long.class, false); + SqlSpannerQuery sqlSpannerQuery = createQuery(sql, long.class, false, useValueExpressionDelegate); Struct row = mock(Struct.class); when(row.getType()) @@ -592,8 +640,9 @@ void sqlCountWithWhereTest() throws NoSuchMethodException { verify(this.spannerTemplate).executeQuery(any(), any()); } - @Test - void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void sqlReturnTypeIsJsonFieldTest(boolean useValueExpressionDelegate) throws NoSuchMethodException { String sql = "SELECT details from singer where stageName = @stageName"; Object[] params = new Object[] {"STAGENAME"}; @@ -606,7 +655,7 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { when(resultProcessor.getReturnedType()).thenReturn(returnedType); when(returnedType.getReturnedType()).thenReturn((Class) Detail.class); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); + SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false, useValueExpressionDelegate); doAnswer( invocation -> { @@ -649,8 +698,9 @@ void sqlReturnTypeIsJsonFieldTest() throws NoSuchMethodException { assertThat(((Detail) result).p2).isEqualTo("5"); } - @Test - void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void sqlReturnTypeIsArrayJsonFieldTest(boolean useValueExpressionDelegate) throws NoSuchMethodException { String sql = "SELECT detailsList from singer where stageName = @stageName"; Object[] params = new Object[] {"STAGENAME"}; @@ -663,7 +713,7 @@ void sqlReturnTypeIsArrayJsonFieldTest() throws NoSuchMethodException { when(resultProcessor.getReturnedType()).thenReturn(returnedType); when(returnedType.getReturnedType()).thenReturn((Class) Detail.class); - SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false); + SqlSpannerQuery sqlSpannerQuery = createQuery(sql, Singer.class, false, useValueExpressionDelegate); doAnswer( invocation -> { diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java index b4886726bb..70c7624e30 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/support/SpannerRepositoryFactoryTests.java @@ -35,6 +35,7 @@ import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.query.QueryLookupStrategy; +import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider; import org.springframework.data.repository.query.ValueExpressionDelegate; /** Tests for the Spanner repository factory. */ @@ -102,6 +103,10 @@ void getQueryLookupStrategyTest() { this.spannerRepositoryFactory.getQueryLookupStrategy( null, mock(ValueExpressionDelegate.class)); assertThat(qls.get()).isInstanceOf(SpannerQueryLookupStrategy.class); + qls = + this.spannerRepositoryFactory.getQueryLookupStrategy( + null, mock(QueryMethodEvaluationContextProvider.class)); + assertThat(qls.get()).isInstanceOf(SpannerQueryLookupStrategy.class); } @Table(name = "custom_test_table") From b2a6a04bc2bc24cdf9929227d88df1d2b6a4502f Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 15:38:57 -0500 Subject: [PATCH 65/96] standardize to parameterized booleans --- .../DatastoreQueryLookupStrategyTests.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java index aaab61e504..55e9487217 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java @@ -31,7 +31,6 @@ import com.google.cloud.spring.data.datastore.core.mapping.DatastoreMappingContext; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mockito; @@ -51,8 +50,6 @@ class DatastoreQueryLookupStrategyTests { private DatastoreQueryMethod queryMethod; - private DatastoreQueryLookupStrategy[] lookupStrategies; - private ValueExpressionDelegate valueExpressionDelegate; private QueryMethodEvaluationContextProvider evaluationContextProvider; @@ -64,19 +61,15 @@ void initMocks() { this.queryMethod = mock(DatastoreQueryMethod.class); this.valueExpressionDelegate = mock(ValueExpressionDelegate.class); this.evaluationContextProvider = mock(QueryMethodEvaluationContextProvider.class); - this.lookupStrategies = new DatastoreQueryLookupStrategy[] { - getDatastoreQueryLookupStrategy(this.valueExpressionDelegate), - getDatastoreQueryLookupStrategy(this.evaluationContextProvider), - }; } /** * int parameters are used as indexes of the two lookup strategies we use */ @ParameterizedTest - @ValueSource(ints = {0, 1}) - void resolveSqlQueryTest(int lookupStrategyIndex) { - DatastoreQueryLookupStrategy lookupStrategy = this.lookupStrategies[lookupStrategyIndex]; + @ValueSource(booleans = {true, false}) + void resolveSqlQueryTest(boolean useValueExpressionDelegate) { + DatastoreQueryLookupStrategy lookupStrategy = getDatastoreQueryLookupStrategy(useValueExpressionDelegate); String queryName = "fakeNamedQueryName"; String query = "fake query"; when(this.queryMethod.getNamedQueryName()).thenReturn(queryName); @@ -108,6 +101,12 @@ void resolveSqlQueryTest(int lookupStrategyIndex) { .createGqlDatastoreQuery(eq(Object.class), same(this.queryMethod), eq(query)); } + private DatastoreQueryLookupStrategy getDatastoreQueryLookupStrategy(boolean useValueExpressionDelegate) { + return useValueExpressionDelegate ? + getDatastoreQueryLookupStrategy(this.valueExpressionDelegate) + : getDatastoreQueryLookupStrategy(this.evaluationContextProvider); + } + private DatastoreQueryLookupStrategy getDatastoreQueryLookupStrategy(ValueExpressionDelegate valueExpressionDelegate) { DatastoreQueryLookupStrategy lookupStrategy = spy( From 2130836f940cd6d54c6805d1b68181189144cc3c Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 16:03:31 -0500 Subject: [PATCH 66/96] add support info on root readme --- README.adoc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.adoc b/README.adoc index 232d070f5e..f23be56fe2 100644 --- a/README.adoc +++ b/README.adoc @@ -54,6 +54,12 @@ This project has dependency and transitive dependencies on Spring Projects. The |=== | Spring Framework on Google Cloud | Spring Cloud | Spring Boot | Spring Framework | Supported +|6.x +|https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2024.0-Release-Notes[2024.0.x] (Moorgate) +|https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.4-Release-Notes[3.4.x] +|https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-6.2-Release-Notes[6.2.x] +|Yes + |5.x |https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2023.0-Release-Notes[2023.0.x] (Leyton) |https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes[3.2.x]*, https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.3-Release-Notes[3.3.x] From 48cd789d9e40f8e2c84199c762c750c77cf607b7 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 16:05:25 -0500 Subject: [PATCH 67/96] add spring cloud 2024 support info in gettin-started --- docs/src/main/asciidoc/getting-started.adoc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/src/main/asciidoc/getting-started.adoc b/docs/src/main/asciidoc/getting-started.adoc index c31fac4d94..290927fc36 100644 --- a/docs/src/main/asciidoc/getting-started.adoc +++ b/docs/src/main/asciidoc/getting-started.adoc @@ -8,6 +8,8 @@ Spring Framework on Google Cloud has dependency and transitive dependencies on S |=== | Spring Framework on Google Cloud | Spring Cloud | Spring Boot | Spring Framework | Supported + +|6.x |https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2024.0-Release-Notes[2024.0.x] (Moorgate)|https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.4-Release-Notes[3.4.x]|https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-6.2-Release-Notes[6.2.x]|Yes |5.x | https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2023.0-Release-Notes[2023.0.x] (Leyton) |https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes[3.2.x]*, https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.3-Release-Notes[3.3.x] | https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-6.x#whats-new-in-version-61[6.1.x]| Yes |4.x | https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2022.0-Release-Notes[2022.0.x] (Kilburn) |https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes[3.0.x], https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.1-Release-Notes[3.1.x]| https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-6.x#whats-new-in-version-60[6.x]| Yes From ce5d80934a791d931288e9f9c6a5e26124c92a53 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 16:20:24 -0500 Subject: [PATCH 68/96] introduce 5.x to 6.x migration guide --- .../main/asciidoc/migration-guide-5.x.adoc | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 docs/src/main/asciidoc/migration-guide-5.x.adoc diff --git a/docs/src/main/asciidoc/migration-guide-5.x.adoc b/docs/src/main/asciidoc/migration-guide-5.x.adoc new file mode 100644 index 0000000000..ed6905e249 --- /dev/null +++ b/docs/src/main/asciidoc/migration-guide-5.x.adoc @@ -0,0 +1,65 @@ +== Migration Guide from Spring Cloud GCP 5.x to 6.x +=== Before you start +==== Upgrade to the 5.x version +This doc assumes you are running with Spring Cloud GCP 5.x. + +If you are currently running with an earlier major version of Spring Cloud GCP, i.e., 1.x or 2.x, we recommend that you upgrade to [Spring Cloud GCP 5.x] before migrating to Spring Cloud GCP 6.x. + +* link:migration-guide-1.x.adoc[Migration guide from Spring Cloud GCP 1.x to 2.x] +* link:migration-guide-3.x.adoc[Migration guide from Spring Cloud GCP 3.x to 4.x] + +Note that since Spring Cloud GCP 5.0 has few breaking changes, we have only provided release notes +as reference. + +==== Review System requirements +Spring Cloud GCP 6.0 is built on Spring Boot 3.4.x and Spring Framework 6.2.x, which requires Java 17 at minimum. +If you are currently on Java 8 or Java 11, you need to upgrade your JDK before you can develop an application based on Spring Cloud GCP 6.0. + +=== Upgrade to Spring Cloud GCP 6.0 +==== Update Bill of Materials (BOM) +If you’re a Maven user, add our BOM to your pom.xml `` section. +This will allow you to not specify versions for any of the Maven dependencies and instead delegate versioning to the BOM. + +[source, xml] +---- + + + + com.google.cloud + spring-cloud-gcp-dependencies + 6.0.0 + pom + import + + + +---- + +===== Review Dependencies +Run `mvn dependency:tree` (`gradlew dependencies` for Gradle projects) to see the dependency tree of your project. +Ensure Spring-related dependencies have matching versions: + +* Spring Boot 3.4.x +* Spring Cloud 2024.x +** For detailed dependency versions, see "2024.0 (Moorgate)" column in link:https://github.com/spring-cloud/spring-cloud-release/wiki/Supported-Versions#supported-releases[Spring Cloud: Supported Versions] table. + +==== Secret Manager +Introduced support for the `${sm@secret_id}` syntax. This new syntax is encouraged over the (still +supported) `${sm://secret_id}` syntax. Users still relying on the `sm://` syntax will be issued a +warning. + +For example: +[source, java] +@Value("${sm@my_secret}") +String mySecret; +--- + +==== Datastore +Introduced support for `ValueExpressionDelegate`. This class is suggested over +`QueryMethodEvaluationContextProvider`. + +==== Spanner +Introduced support for `ValueExpressionDelegate`. This class is suggested over +`QueryMethodEvaluationContextProvider`. + + From 4015f3f2316fc845fd0527c8b180b6315820c2c7 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 16:28:03 -0500 Subject: [PATCH 69/96] update project.version to 6.0.0-SNAPSHOT --- docs/pom.xml | 2 +- pom.xml | 2 +- spring-cloud-gcp-autoconfigure/pom.xml | 2 +- spring-cloud-gcp-bigquery/pom.xml | 2 +- spring-cloud-gcp-cloudfoundry/pom.xml | 2 +- spring-cloud-gcp-core/pom.xml | 2 +- spring-cloud-gcp-data-datastore/pom.xml | 2 +- spring-cloud-gcp-data-firestore/pom.xml | 2 +- spring-cloud-gcp-data-spanner/pom.xml | 2 +- spring-cloud-gcp-dependencies/pom.xml | 2 +- spring-cloud-gcp-kms/pom.xml | 2 +- spring-cloud-gcp-logging/pom.xml | 2 +- spring-cloud-gcp-pubsub-stream-binder/pom.xml | 2 +- spring-cloud-gcp-pubsub/pom.xml | 2 +- spring-cloud-gcp-samples/pom.xml | 2 +- .../spring-cloud-gcp-alloydb-sample/pom.xml | 2 +- .../spring-cloud-gcp-bigquery-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-datastore-basic-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-datastore-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-firestore-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-jpa-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-multi-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-spanner-repository-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-spanner-template-sample/pom.xml | 2 +- .../spring-cloud-gcp-integration-pubsub-json-sample/pom.xml | 2 +- .../spring-cloud-gcp-integration-pubsub-sample/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml | 2 +- .../spring-cloud-gcp-integration-pubsub-sample-test/pom.xml | 2 +- .../spring-cloud-gcp-integration-storage-sample/pom.xml | 2 +- spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml | 2 +- .../spring-cloud-gcp-kotlin-samples/pom.xml | 4 ++-- .../spring-cloud-gcp-kotlin-app-sample/pom.xml | 2 +- .../spring-cloud-gcp-logging-sample/pom.xml | 2 +- .../spring-cloud-gcp-metrics-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-bus-config-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-reactive-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-gcp-secretmanager-sample/pom.xml | 2 +- .../spring-cloud-gcp-security-firebase-sample/pom.xml | 2 +- .../spring-cloud-gcp-security-iap-sample/pom.xml | 2 +- .../spring-cloud-gcp-sql-mysql-sample/pom.xml | 2 +- .../spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml | 2 +- .../spring-cloud-gcp-sql-postgres-sample/pom.xml | 2 +- .../spring-cloud-gcp-starter-firestore-sample/pom.xml | 2 +- .../spring-cloud-gcp-storage-resource-sample/pom.xml | 2 +- .../spring-cloud-gcp-trace-sample/pom.xml | 2 +- .../spring-cloud-gcp-vision-api-sample/pom.xml | 2 +- .../spring-cloud-gcp-vision-ocr-demo/pom.xml | 2 +- .../spring-cloud-spanner-r2dbc-samples/pom.xml | 2 +- spring-cloud-gcp-secretmanager/pom.xml | 2 +- spring-cloud-gcp-security-firebase/pom.xml | 2 +- spring-cloud-gcp-security-iap/pom.xml | 2 +- spring-cloud-gcp-starters/pom.xml | 2 +- .../spring-cloud-gcp-starter-alloydb/pom.xml | 2 +- .../spring-cloud-gcp-starter-bigquery/pom.xml | 2 +- .../spring-cloud-gcp-starter-bus-pubsub/pom.xml | 2 +- .../spring-cloud-gcp-starter-cloudfoundry/pom.xml | 2 +- .../spring-cloud-gcp-starter-data-datastore/pom.xml | 2 +- .../spring-cloud-gcp-starter-data-firestore/pom.xml | 2 +- .../spring-cloud-gcp-starter-data-spanner/pom.xml | 2 +- .../spring-cloud-gcp-starter-firestore/pom.xml | 2 +- .../spring-cloud-gcp-starter-kms/pom.xml | 2 +- .../spring-cloud-gcp-starter-logging/pom.xml | 2 +- .../spring-cloud-gcp-starter-metrics/pom.xml | 2 +- .../spring-cloud-gcp-starter-pubsub/pom.xml | 2 +- .../spring-cloud-gcp-starter-secretmanager/pom.xml | 2 +- .../spring-cloud-gcp-starter-security-firebase/pom.xml | 2 +- .../spring-cloud-gcp-starter-security-iap/pom.xml | 2 +- .../spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml | 2 +- .../spring-cloud-gcp-starter-sql-mysql/pom.xml | 2 +- .../spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml | 2 +- .../spring-cloud-gcp-starter-sql-postgresql/pom.xml | 2 +- .../spring-cloud-gcp-starter-storage/pom.xml | 2 +- .../spring-cloud-gcp-starter-trace/pom.xml | 2 +- .../spring-cloud-gcp-starter-vision/pom.xml | 2 +- spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml | 2 +- spring-cloud-gcp-storage/pom.xml | 2 +- spring-cloud-gcp-vision/pom.xml | 2 +- spring-cloud-generator/pom.xml | 2 +- .../showcase/showcase-spring-starter/pom.xml | 2 +- spring-cloud-generator/spring-cloud-previews-template/pom.xml | 2 +- .../google-cloud-accessapproval-spring-starter/pom.xml | 2 +- .../google-cloud-advisorynotifications-spring-starter/pom.xml | 2 +- .../google-cloud-aiplatform-spring-starter/pom.xml | 2 +- .../google-cloud-analyticshub-spring-starter/pom.xml | 2 +- .../google-cloud-api-gateway-spring-starter/pom.xml | 2 +- .../google-cloud-apigee-connect-spring-starter/pom.xml | 2 +- .../google-cloud-apikeys-spring-starter/pom.xml | 2 +- .../google-cloud-appengine-admin-spring-starter/pom.xml | 2 +- .../google-cloud-artifact-registry-spring-starter/pom.xml | 2 +- .../google-cloud-asset-spring-starter/pom.xml | 2 +- .../google-cloud-assured-workloads-spring-starter/pom.xml | 2 +- .../google-cloud-automl-spring-starter/pom.xml | 2 +- .../google-cloud-backupdr-spring-starter/pom.xml | 2 +- .../google-cloud-bigqueryconnection-spring-starter/pom.xml | 2 +- .../google-cloud-bigquerydatatransfer-spring-starter/pom.xml | 2 +- .../google-cloud-bigqueryreservation-spring-starter/pom.xml | 2 +- .../google-cloud-billing-spring-starter/pom.xml | 2 +- .../google-cloud-billingbudgets-spring-starter/pom.xml | 2 +- .../google-cloud-binary-authorization-spring-starter/pom.xml | 2 +- .../google-cloud-build-spring-starter/pom.xml | 2 +- .../google-cloud-channel-spring-starter/pom.xml | 2 +- .../google-cloud-cloudcontrolspartner-spring-starter/pom.xml | 2 +- .../google-cloud-cloudquotas-spring-starter/pom.xml | 2 +- .../google-cloud-compute-spring-starter/pom.xml | 2 +- .../pom.xml | 2 +- .../google-cloud-container-spring-starter/pom.xml | 2 +- .../google-cloud-containeranalysis-spring-starter/pom.xml | 2 +- .../google-cloud-data-fusion-spring-starter/pom.xml | 2 +- .../google-cloud-datacatalog-spring-starter/pom.xml | 2 +- .../google-cloud-datalineage-spring-starter/pom.xml | 2 +- .../google-cloud-dataplex-spring-starter/pom.xml | 2 +- .../google-cloud-dataproc-metastore-spring-starter/pom.xml | 2 +- .../google-cloud-dataproc-spring-starter/pom.xml | 2 +- .../google-cloud-datastream-spring-starter/pom.xml | 2 +- .../google-cloud-debugger-client-spring-starter/pom.xml | 2 +- .../google-cloud-deploy-spring-starter/pom.xml | 2 +- .../google-cloud-dialogflow-spring-starter/pom.xml | 2 +- .../google-cloud-discoveryengine-spring-starter/pom.xml | 2 +- .../google-cloud-distributedcloudedge-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml | 2 +- .../google-cloud-document-ai-spring-starter/pom.xml | 2 +- .../google-cloud-domains-spring-starter/pom.xml | 2 +- .../google-cloud-edgenetwork-spring-starter/pom.xml | 2 +- .../google-cloud-essential-contacts-spring-starter/pom.xml | 2 +- .../google-cloud-eventarc-spring-starter/pom.xml | 2 +- .../google-cloud-filestore-spring-starter/pom.xml | 2 +- .../google-cloud-functions-spring-starter/pom.xml | 2 +- .../google-cloud-gkehub-spring-starter/pom.xml | 2 +- .../google-cloud-gsuite-addons-spring-starter/pom.xml | 2 +- .../google-cloud-iamcredentials-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml | 2 +- .../google-cloud-infra-manager-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml | 2 +- .../google-cloud-language-spring-starter/pom.xml | 2 +- .../google-cloud-managed-identities-spring-starter/pom.xml | 2 +- .../google-cloud-memcache-spring-starter/pom.xml | 2 +- .../google-cloud-monitoring-dashboard-spring-starter/pom.xml | 2 +- .../google-cloud-network-management-spring-starter/pom.xml | 2 +- .../google-cloud-network-security-spring-starter/pom.xml | 2 +- .../google-cloud-networkconnectivity-spring-starter/pom.xml | 2 +- .../google-cloud-notebooks-spring-starter/pom.xml | 2 +- .../google-cloud-optimization-spring-starter/pom.xml | 2 +- .../google-cloud-orchestration-airflow-spring-starter/pom.xml | 2 +- .../google-cloud-orgpolicy-spring-starter/pom.xml | 2 +- .../google-cloud-os-config-spring-starter/pom.xml | 2 +- .../google-cloud-os-login-spring-starter/pom.xml | 2 +- .../google-cloud-policy-troubleshooter-spring-starter/pom.xml | 2 +- .../google-cloud-profiler-spring-starter/pom.xml | 2 +- .../google-cloud-publicca-spring-starter/pom.xml | 2 +- .../google-cloud-recaptchaenterprise-spring-starter/pom.xml | 2 +- .../google-cloud-recommender-spring-starter/pom.xml | 2 +- .../google-cloud-redis-spring-starter/pom.xml | 2 +- .../google-cloud-resource-settings-spring-starter/pom.xml | 2 +- .../google-cloud-retail-spring-starter/pom.xml | 2 +- .../google-cloud-scheduler-spring-starter/pom.xml | 2 +- .../google-cloud-securesourcemanager-spring-starter/pom.xml | 2 +- .../google-cloud-security-private-ca-spring-starter/pom.xml | 2 +- .../google-cloud-securitycenter-spring-starter/pom.xml | 2 +- .../pom.xml | 2 +- .../google-cloud-securityposture-spring-starter/pom.xml | 2 +- .../google-cloud-service-control-spring-starter/pom.xml | 2 +- .../google-cloud-service-management-spring-starter/pom.xml | 2 +- .../google-cloud-service-usage-spring-starter/pom.xml | 2 +- .../google-cloud-servicedirectory-spring-starter/pom.xml | 2 +- .../google-cloud-shell-spring-starter/pom.xml | 2 +- .../google-cloud-speech-spring-starter/pom.xml | 2 +- .../google-cloud-storage-transfer-spring-starter/pom.xml | 2 +- .../google-cloud-talent-spring-starter/pom.xml | 2 +- .../google-cloud-tasks-spring-starter/pom.xml | 2 +- .../google-cloud-telcoautomation-spring-starter/pom.xml | 2 +- .../google-cloud-texttospeech-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml | 2 +- .../google-cloud-trace-spring-starter/pom.xml | 2 +- .../google-cloud-translate-spring-starter/pom.xml | 2 +- .../google-cloud-video-intelligence-spring-starter/pom.xml | 2 +- .../google-cloud-video-stitcher-spring-starter/pom.xml | 2 +- .../google-cloud-video-transcoder-spring-starter/pom.xml | 2 +- .../google-cloud-vmmigration-spring-starter/pom.xml | 2 +- .../google-cloud-vpcaccess-spring-starter/pom.xml | 2 +- .../google-cloud-webrisk-spring-starter/pom.xml | 2 +- .../google-cloud-websecurityscanner-spring-starter/pom.xml | 2 +- .../google-cloud-workflow-executions-spring-starter/pom.xml | 2 +- .../google-cloud-workflows-spring-starter/pom.xml | 2 +- .../google-cloud-workstations-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-iam-admin-spring-starter/pom.xml | 2 +- .../google-iam-policy-spring-starter/pom.xml | 2 +- .../pom.xml | 2 +- spring-cloud-previews/pom.xml | 2 +- spring-cloud-spanner-spring-data-r2dbc/pom.xml | 2 +- 203 files changed, 204 insertions(+), 204 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index ec75605916..5b0f57d87d 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -13,7 +13,7 @@ Spring Framework on Google Cloud Documentation com.google.cloud spring-cloud-gcp-docs - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT pom diff --git a/pom.xml b/pom.xml index a91fa720f1..c611b3f6fc 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.google.cloud spring-cloud-gcp - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT Spring Framework on Google Cloud Spring Framework on Google Cloud https://spring.io/projects/spring-cloud-gcp diff --git a/spring-cloud-gcp-autoconfigure/pom.xml b/spring-cloud-gcp-autoconfigure/pom.xml index a5707a18b5..c298a4eba5 100644 --- a/spring-cloud-gcp-autoconfigure/pom.xml +++ b/spring-cloud-gcp-autoconfigure/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-bigquery/pom.xml b/spring-cloud-gcp-bigquery/pom.xml index 0c414ddc5e..2ef94f9d8e 100644 --- a/spring-cloud-gcp-bigquery/pom.xml +++ b/spring-cloud-gcp-bigquery/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-bigquery diff --git a/spring-cloud-gcp-cloudfoundry/pom.xml b/spring-cloud-gcp-cloudfoundry/pom.xml index a221e8a59e..95f7fcf812 100644 --- a/spring-cloud-gcp-cloudfoundry/pom.xml +++ b/spring-cloud-gcp-cloudfoundry/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-cloudfoundry diff --git a/spring-cloud-gcp-core/pom.xml b/spring-cloud-gcp-core/pom.xml index eb1209ded3..70a3eb4334 100644 --- a/spring-cloud-gcp-core/pom.xml +++ b/spring-cloud-gcp-core/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-core diff --git a/spring-cloud-gcp-data-datastore/pom.xml b/spring-cloud-gcp-data-datastore/pom.xml index ec098a3dd7..92fa1b0055 100644 --- a/spring-cloud-gcp-data-datastore/pom.xml +++ b/spring-cloud-gcp-data-datastore/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-data-datastore Spring Framework on Google Cloud Module - Datastore diff --git a/spring-cloud-gcp-data-firestore/pom.xml b/spring-cloud-gcp-data-firestore/pom.xml index a0fb9dba81..79d6b19642 100644 --- a/spring-cloud-gcp-data-firestore/pom.xml +++ b/spring-cloud-gcp-data-firestore/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-data-firestore diff --git a/spring-cloud-gcp-data-spanner/pom.xml b/spring-cloud-gcp-data-spanner/pom.xml index 8b9f5ce4b8..b8099d7a6b 100644 --- a/spring-cloud-gcp-data-spanner/pom.xml +++ b/spring-cloud-gcp-data-spanner/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-data-spanner Spring Framework on Google Cloud Module - Cloud Spanner diff --git a/spring-cloud-gcp-dependencies/pom.xml b/spring-cloud-gcp-dependencies/pom.xml index cb3f9a9793..ff148c78d6 100644 --- a/spring-cloud-gcp-dependencies/pom.xml +++ b/spring-cloud-gcp-dependencies/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.google.cloud spring-cloud-gcp-dependencies - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT Spring Framework on Google Cloud Dependencies Spring Framework on Google Cloud Dependencies https://spring.io/projects/spring-cloud-gcp diff --git a/spring-cloud-gcp-kms/pom.xml b/spring-cloud-gcp-kms/pom.xml index d09bdbc1c4..589634d127 100644 --- a/spring-cloud-gcp-kms/pom.xml +++ b/spring-cloud-gcp-kms/pom.xml @@ -4,7 +4,7 @@ com.google.cloud spring-cloud-gcp - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-logging/pom.xml b/spring-cloud-gcp-logging/pom.xml index 9361f4b464..fd8d15c02f 100644 --- a/spring-cloud-gcp-logging/pom.xml +++ b/spring-cloud-gcp-logging/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT diff --git a/spring-cloud-gcp-pubsub-stream-binder/pom.xml b/spring-cloud-gcp-pubsub-stream-binder/pom.xml index 7d3f160858..02b5570651 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/pom.xml +++ b/spring-cloud-gcp-pubsub-stream-binder/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-pubsub/pom.xml b/spring-cloud-gcp-pubsub/pom.xml index c3b1caa4cb..cc0026e914 100644 --- a/spring-cloud-gcp-pubsub/pom.xml +++ b/spring-cloud-gcp-pubsub/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-pubsub diff --git a/spring-cloud-gcp-samples/pom.xml b/spring-cloud-gcp-samples/pom.xml index 9882944e1c..263edb3631 100644 --- a/spring-cloud-gcp-samples/pom.xml +++ b/spring-cloud-gcp-samples/pom.xml @@ -13,7 +13,7 @@ Spring Framework on Google Cloud Code Samples spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT pom 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/pom.xml index a54e42ebb0..e4bec44958 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-bigquery-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-bigquery-sample/pom.xml index a9c078b3d9..8dcec161ea 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-bigquery-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-bigquery-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-basic-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-basic-sample/pom.xml index d8fa5ebb88..6650a5f0fd 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-basic-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-basic-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-sample/pom.xml index 07b06eb23c..9bd10532ec 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml index eb96433028..f1ec7583cb 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-jpa-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-jpa-sample/pom.xml index 9e1a2c8e1b..6a1a291762 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-jpa-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-jpa-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-multi-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-multi-sample/pom.xml index b5771d6fe5..9f8c706b08 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-multi-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-multi-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-repository-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-repository-sample/pom.xml index 8e59ad0e19..6a81411373 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-repository-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-repository-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 spring-cloud-gcp-data-spanner-repository-sample diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-template-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-template-sample/pom.xml index 7306e7838e..46e4e42dc9 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-template-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-template-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 spring-cloud-gcp-data-spanner-template-sample diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-json-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-json-sample/pom.xml index dc537caa13..526af613f9 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-json-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-json-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/pom.xml index c53b8c2cad..532763e541 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-integration-pubsub-sample diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-polling-receiver/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-polling-receiver/pom.xml index 6980faa453..9e3f6ffdee 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-polling-receiver/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-polling-receiver/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-integration-pubsub-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-receiver/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-receiver/pom.xml index 313f66a9bf..25a9bbf5c0 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-receiver/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-receiver/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-integration-pubsub-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml index 3be6d71086..438fc30a5b 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-integration-pubsub-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-test/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-test/pom.xml index 989ee8434f..4943aba5a8 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-test/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-test/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-integration-pubsub-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/pom.xml index db4ae5979d..91214b0d90 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml index edfee35097..1186206848 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/pom.xml index a25bb3c6a5..fa2e7682b5 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/pom.xml @@ -7,11 +7,11 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-kotlin-samples - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT Spring Framework on Google Cloud Code Samples - Kotlin 4.0.0 pom diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/pom.xml index 6bf1f6ee9e..c55c4b88b1 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-kotlin-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-logging-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-logging-sample/pom.xml index bfdb063d22..2588ea86c0 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-logging-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-logging-sample/pom.xml @@ -10,7 +10,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-metrics-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-metrics-sample/pom.xml index 2005e9a5af..0813fd1c52 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-metrics-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-metrics-sample/pom.xml @@ -10,7 +10,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml index e220bfc457..d1e8880bc2 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml index 2fcbb1bba8..825e18f5c9 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-bus-config-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-github/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-github/pom.xml index 8c0829a08e..67579185d7 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-github/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-github/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-bus-config-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-local/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-local/pom.xml index a69ed67378..83c4cfc915 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-local/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-local/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-bus-config-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml index 2baab8db49..7fdf9c1a70 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-bus-config-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-reactive-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-reactive-sample/pom.xml index 60aa441097..4e7b99a8b8 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-reactive-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-reactive-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml index ea749b1b6d..31280c45e9 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml index bae2472c3e..b408dc7336 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml index a43278c3a5..459829d9bd 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-sink/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-sink/pom.xml index f436e9a8e6..f0a3e698c7 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-sink/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-sink/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-stream-functional-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-source/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-source/pom.xml index ad77d34eb3..5b69d29f43 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-source/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-source/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-pubsub-stream-functional-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-test/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-test/pom.xml index 105226f9ee..5cfa657a25 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-test/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-test/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-pubsub-stream-functional-sample com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml index 0ba156d52f..7d1697a4e4 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-security-firebase-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-security-firebase-sample/pom.xml index 057db8a5b3..105dd28a9f 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-security-firebase-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-security-firebase-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-security-iap-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-security-iap-sample/pom.xml index c4d09dcb5d..6a6767044a 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-security-iap-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-security-iap-sample/pom.xml @@ -11,7 +11,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-mysql-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-mysql-sample/pom.xml index d7ce2ffa5c..8bf5a32b57 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-mysql-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-mysql-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml index bd474e7665..1c7f94758d 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml index a812211293..e090403453 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-starter-firestore-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-starter-firestore-sample/pom.xml index 343728068b..3991282b6e 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-starter-firestore-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-starter-firestore-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample/pom.xml index abdc7437ec..9a10693822 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-trace-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-trace-sample/pom.xml index c06d9234f5..ee079b7864 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-trace-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-trace-sample/pom.xml @@ -10,7 +10,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-vision-api-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-vision-api-sample/pom.xml index 7cf7d9ed78..9cbfe8f77a 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-vision-api-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-vision-api-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-vision-ocr-demo/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-vision-ocr-demo/pom.xml index 2acb931ad8..ecf9e8d068 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-vision-ocr-demo/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-vision-ocr-demo/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-spanner-r2dbc-samples/pom.xml b/spring-cloud-gcp-samples/spring-cloud-spanner-r2dbc-samples/pom.xml index 37b63c1b4c..c422cce19b 100644 --- a/spring-cloud-gcp-samples/spring-cloud-spanner-r2dbc-samples/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-spanner-r2dbc-samples/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-secretmanager/pom.xml b/spring-cloud-gcp-secretmanager/pom.xml index 0b7e0c2e85..63c31334c9 100644 --- a/spring-cloud-gcp-secretmanager/pom.xml +++ b/spring-cloud-gcp-secretmanager/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-security-firebase/pom.xml b/spring-cloud-gcp-security-firebase/pom.xml index 2494f9875f..971985b85c 100644 --- a/spring-cloud-gcp-security-firebase/pom.xml +++ b/spring-cloud-gcp-security-firebase/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-security-firebase diff --git a/spring-cloud-gcp-security-iap/pom.xml b/spring-cloud-gcp-security-iap/pom.xml index ce06c5adb7..f27f650334 100644 --- a/spring-cloud-gcp-security-iap/pom.xml +++ b/spring-cloud-gcp-security-iap/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-security-iap diff --git a/spring-cloud-gcp-starters/pom.xml b/spring-cloud-gcp-starters/pom.xml index c6854ad67e..c3075db9ad 100644 --- a/spring-cloud-gcp-starters/pom.xml +++ b/spring-cloud-gcp-starters/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT pom Spring Framework on Google Cloud Starters diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-alloydb/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-alloydb/pom.xml index 8697f91a8a..41ebc70493 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-alloydb/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-alloydb/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bigquery/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bigquery/pom.xml index f5d58c89c6..54fe06fa24 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bigquery/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bigquery/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bus-pubsub/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bus-pubsub/pom.xml index 60f6ee11e4..c490aa8521 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bus-pubsub/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bus-pubsub/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-starter-bus-pubsub diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-cloudfoundry/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-cloudfoundry/pom.xml index b3e8b15517..a7ef5a9461 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-cloudfoundry/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-cloudfoundry/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-datastore/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-datastore/pom.xml index 93abe3006a..5b53b1d2b7 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-datastore/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-datastore/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-starter-data-datastore Spring Framework on Google Cloud Starter - Datastore diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-firestore/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-firestore/pom.xml index f07e821672..c4049844b5 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-firestore/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-firestore/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-starter-data-firestore Spring Framework on Google Cloud Starter - Firestore diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-spanner/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-spanner/pom.xml index e65dd0bcb2..70f045dfe7 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-spanner/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-spanner/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-starter-data-spanner Spring Framework on Google Cloud Starter - Spanner diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-firestore/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-firestore/pom.xml index 12f39f93b7..2f2847fabc 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-firestore/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-firestore/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-starter-firestore Spring Framework on Google Cloud Starter - Firestore diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-kms/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-kms/pom.xml index 84be96cd02..396c4a9d73 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-kms/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-kms/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-logging/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-logging/pom.xml index beedff4508..ba3c5d76aa 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-logging/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-logging/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-metrics/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-metrics/pom.xml index 97a24c5104..25988c85d9 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-metrics/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-metrics/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-pubsub/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-pubsub/pom.xml index def603034d..6c3054d6d8 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-pubsub/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-pubsub/pom.xml @@ -4,7 +4,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-starter-pubsub Spring Framework on Google Cloud Starter - Pub/Sub diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-secretmanager/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-secretmanager/pom.xml index 5e999b0c34..18e3f609b9 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-secretmanager/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-secretmanager/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-firebase/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-firebase/pom.xml index 9f8880ff8c..e7390e6c29 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-firebase/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-firebase/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-iap/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-iap/pom.xml index ad910671b9..8417e2d878 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-iap/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-iap/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml index 8b5fbb3507..a1bea84fb3 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql/pom.xml index 650e261f29..85471a2e0e 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml index c71b1a5354..f4b3f9ae8b 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgresql/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgresql/pom.xml index f13973bec1..909ea2dbdb 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgresql/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgresql/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-storage/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-storage/pom.xml index 17cd17e982..02d41be4e1 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-storage/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-storage/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-starter-storage Spring Framework on Google Cloud Starter - Storage diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-trace/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-trace/pom.xml index 2ced44fc6b..a1a8c7b17b 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-trace/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-trace/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-vision/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-vision/pom.xml index 6c7953f512..acd4a670b7 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-vision/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-vision/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml index 48f392a784..2574e7046e 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml @@ -4,7 +4,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-starter Spring Framework on Google Cloud Starter - Support diff --git a/spring-cloud-gcp-storage/pom.xml b/spring-cloud-gcp-storage/pom.xml index e9412644f4..0c249f0000 100644 --- a/spring-cloud-gcp-storage/pom.xml +++ b/spring-cloud-gcp-storage/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-storage Spring Framework on Google Cloud Module - Storage diff --git a/spring-cloud-gcp-vision/pom.xml b/spring-cloud-gcp-vision/pom.xml index 72098d4bc0..cd45b4d441 100644 --- a/spring-cloud-gcp-vision/pom.xml +++ b/spring-cloud-gcp-vision/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-generator/pom.xml b/spring-cloud-generator/pom.xml index d28efaeaae..7b06120e66 100644 --- a/spring-cloud-generator/pom.xml +++ b/spring-cloud-generator/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT com.google.cloud diff --git a/spring-cloud-generator/showcase/showcase-spring-starter/pom.xml b/spring-cloud-generator/showcase/showcase-spring-starter/pom.xml index 32d195cdf2..d83f9aae04 100644 --- a/spring-cloud-generator/showcase/showcase-spring-starter/pom.xml +++ b/spring-cloud-generator/showcase/showcase-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../../spring-cloud-gcp-starters/pom.xml gapic-showcase-spring-starter diff --git a/spring-cloud-generator/spring-cloud-previews-template/pom.xml b/spring-cloud-generator/spring-cloud-previews-template/pom.xml index 729d0b29c4..c0bb588e0a 100644 --- a/spring-cloud-generator/spring-cloud-previews-template/pom.xml +++ b/spring-cloud-generator/spring-cloud-previews-template/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-previews/google-cloud-accessapproval-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-accessapproval-spring-starter/pom.xml index db82908fc1..dac2bf8f51 100644 --- a/spring-cloud-previews/google-cloud-accessapproval-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-accessapproval-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-accessapproval-spring-starter diff --git a/spring-cloud-previews/google-cloud-advisorynotifications-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-advisorynotifications-spring-starter/pom.xml index 61786e2742..52d58a6977 100644 --- a/spring-cloud-previews/google-cloud-advisorynotifications-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-advisorynotifications-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-advisorynotifications-spring-starter diff --git a/spring-cloud-previews/google-cloud-aiplatform-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-aiplatform-spring-starter/pom.xml index 0233f552e5..fa8f9a90d6 100644 --- a/spring-cloud-previews/google-cloud-aiplatform-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-aiplatform-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-aiplatform-spring-starter diff --git a/spring-cloud-previews/google-cloud-analyticshub-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-analyticshub-spring-starter/pom.xml index 3d543d080c..fda1620a7a 100644 --- a/spring-cloud-previews/google-cloud-analyticshub-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-analyticshub-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-analyticshub-spring-starter diff --git a/spring-cloud-previews/google-cloud-api-gateway-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-api-gateway-spring-starter/pom.xml index 3023a55e6e..d6b17006dd 100644 --- a/spring-cloud-previews/google-cloud-api-gateway-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-api-gateway-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-api-gateway-spring-starter diff --git a/spring-cloud-previews/google-cloud-apigee-connect-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-apigee-connect-spring-starter/pom.xml index 83e8d523fc..3a3a0816fa 100644 --- a/spring-cloud-previews/google-cloud-apigee-connect-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-apigee-connect-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-apigee-connect-spring-starter diff --git a/spring-cloud-previews/google-cloud-apikeys-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-apikeys-spring-starter/pom.xml index 267ddb0616..ad4848cbdb 100644 --- a/spring-cloud-previews/google-cloud-apikeys-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-apikeys-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-apikeys-spring-starter diff --git a/spring-cloud-previews/google-cloud-appengine-admin-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-appengine-admin-spring-starter/pom.xml index 078abd624c..5a9c716c1f 100644 --- a/spring-cloud-previews/google-cloud-appengine-admin-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-appengine-admin-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-appengine-admin-spring-starter diff --git a/spring-cloud-previews/google-cloud-artifact-registry-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-artifact-registry-spring-starter/pom.xml index 8abe4c668d..9998cb994b 100644 --- a/spring-cloud-previews/google-cloud-artifact-registry-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-artifact-registry-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-artifact-registry-spring-starter diff --git a/spring-cloud-previews/google-cloud-asset-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-asset-spring-starter/pom.xml index 6dba947292..023cc7c0a3 100644 --- a/spring-cloud-previews/google-cloud-asset-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-asset-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-asset-spring-starter diff --git a/spring-cloud-previews/google-cloud-assured-workloads-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-assured-workloads-spring-starter/pom.xml index de6d748274..ff81be465c 100644 --- a/spring-cloud-previews/google-cloud-assured-workloads-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-assured-workloads-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-assured-workloads-spring-starter diff --git a/spring-cloud-previews/google-cloud-automl-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-automl-spring-starter/pom.xml index 232b7a208f..c5c58e5348 100644 --- a/spring-cloud-previews/google-cloud-automl-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-automl-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-automl-spring-starter diff --git a/spring-cloud-previews/google-cloud-backupdr-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-backupdr-spring-starter/pom.xml index fc10e5f7ee..9dab66d383 100644 --- a/spring-cloud-previews/google-cloud-backupdr-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-backupdr-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-backupdr-spring-starter diff --git a/spring-cloud-previews/google-cloud-bigqueryconnection-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-bigqueryconnection-spring-starter/pom.xml index b459f807c0..97cc4a102b 100644 --- a/spring-cloud-previews/google-cloud-bigqueryconnection-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-bigqueryconnection-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-bigqueryconnection-spring-starter diff --git a/spring-cloud-previews/google-cloud-bigquerydatatransfer-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-bigquerydatatransfer-spring-starter/pom.xml index 29bb98c322..a6ea0f8078 100644 --- a/spring-cloud-previews/google-cloud-bigquerydatatransfer-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-bigquerydatatransfer-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-bigquerydatatransfer-spring-starter diff --git a/spring-cloud-previews/google-cloud-bigqueryreservation-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-bigqueryreservation-spring-starter/pom.xml index 00e237ad78..b0046f312a 100644 --- a/spring-cloud-previews/google-cloud-bigqueryreservation-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-bigqueryreservation-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-bigqueryreservation-spring-starter diff --git a/spring-cloud-previews/google-cloud-billing-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-billing-spring-starter/pom.xml index ff8a3d49f5..0f2199c0b8 100644 --- a/spring-cloud-previews/google-cloud-billing-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-billing-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-billing-spring-starter diff --git a/spring-cloud-previews/google-cloud-billingbudgets-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-billingbudgets-spring-starter/pom.xml index 03514027ee..61963cb818 100644 --- a/spring-cloud-previews/google-cloud-billingbudgets-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-billingbudgets-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-billingbudgets-spring-starter diff --git a/spring-cloud-previews/google-cloud-binary-authorization-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-binary-authorization-spring-starter/pom.xml index 714c7c5f03..eed1a29edd 100644 --- a/spring-cloud-previews/google-cloud-binary-authorization-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-binary-authorization-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-binary-authorization-spring-starter diff --git a/spring-cloud-previews/google-cloud-build-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-build-spring-starter/pom.xml index 44d728e837..927c523436 100644 --- a/spring-cloud-previews/google-cloud-build-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-build-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-build-spring-starter diff --git a/spring-cloud-previews/google-cloud-channel-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-channel-spring-starter/pom.xml index 323fd1c209..37c2d5381f 100644 --- a/spring-cloud-previews/google-cloud-channel-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-channel-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-channel-spring-starter diff --git a/spring-cloud-previews/google-cloud-cloudcontrolspartner-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-cloudcontrolspartner-spring-starter/pom.xml index 01d6950255..dc05d5affe 100644 --- a/spring-cloud-previews/google-cloud-cloudcontrolspartner-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-cloudcontrolspartner-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-cloudcontrolspartner-spring-starter diff --git a/spring-cloud-previews/google-cloud-cloudquotas-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-cloudquotas-spring-starter/pom.xml index b2386efa88..e4d1983762 100644 --- a/spring-cloud-previews/google-cloud-cloudquotas-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-cloudquotas-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-cloudquotas-spring-starter diff --git a/spring-cloud-previews/google-cloud-compute-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-compute-spring-starter/pom.xml index 6810c0151b..69f6ef0062 100644 --- a/spring-cloud-previews/google-cloud-compute-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-compute-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-compute-spring-starter diff --git a/spring-cloud-previews/google-cloud-contact-center-insights-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-contact-center-insights-spring-starter/pom.xml index 6a257479e3..e2425b568d 100644 --- a/spring-cloud-previews/google-cloud-contact-center-insights-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-contact-center-insights-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-contact-center-insights-spring-starter diff --git a/spring-cloud-previews/google-cloud-container-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-container-spring-starter/pom.xml index 98efd8472a..4936b87ecb 100644 --- a/spring-cloud-previews/google-cloud-container-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-container-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-container-spring-starter diff --git a/spring-cloud-previews/google-cloud-containeranalysis-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-containeranalysis-spring-starter/pom.xml index 3b89e84025..856111cc36 100644 --- a/spring-cloud-previews/google-cloud-containeranalysis-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-containeranalysis-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-containeranalysis-spring-starter diff --git a/spring-cloud-previews/google-cloud-data-fusion-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-data-fusion-spring-starter/pom.xml index 10d1cddaf1..e8a53789ed 100644 --- a/spring-cloud-previews/google-cloud-data-fusion-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-data-fusion-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-data-fusion-spring-starter diff --git a/spring-cloud-previews/google-cloud-datacatalog-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-datacatalog-spring-starter/pom.xml index 3aec1c059c..830be60806 100644 --- a/spring-cloud-previews/google-cloud-datacatalog-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-datacatalog-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-datacatalog-spring-starter diff --git a/spring-cloud-previews/google-cloud-datalineage-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-datalineage-spring-starter/pom.xml index 3ab7695882..7575362120 100644 --- a/spring-cloud-previews/google-cloud-datalineage-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-datalineage-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-datalineage-spring-starter diff --git a/spring-cloud-previews/google-cloud-dataplex-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dataplex-spring-starter/pom.xml index 5afd8b160f..e0fae93b69 100644 --- a/spring-cloud-previews/google-cloud-dataplex-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dataplex-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dataplex-spring-starter diff --git a/spring-cloud-previews/google-cloud-dataproc-metastore-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dataproc-metastore-spring-starter/pom.xml index 41e50c7c29..06aab5cdfa 100644 --- a/spring-cloud-previews/google-cloud-dataproc-metastore-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dataproc-metastore-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dataproc-metastore-spring-starter diff --git a/spring-cloud-previews/google-cloud-dataproc-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dataproc-spring-starter/pom.xml index 39a6ec2947..8b5e7f6ac5 100644 --- a/spring-cloud-previews/google-cloud-dataproc-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dataproc-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dataproc-spring-starter diff --git a/spring-cloud-previews/google-cloud-datastream-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-datastream-spring-starter/pom.xml index a9587f1725..30e5d9df05 100644 --- a/spring-cloud-previews/google-cloud-datastream-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-datastream-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-datastream-spring-starter diff --git a/spring-cloud-previews/google-cloud-debugger-client-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-debugger-client-spring-starter/pom.xml index f38eb2abcc..a0825c5d58 100644 --- a/spring-cloud-previews/google-cloud-debugger-client-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-debugger-client-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-debugger-client-spring-starter diff --git a/spring-cloud-previews/google-cloud-deploy-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-deploy-spring-starter/pom.xml index f2e1a0d99f..43691e0762 100644 --- a/spring-cloud-previews/google-cloud-deploy-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-deploy-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-deploy-spring-starter diff --git a/spring-cloud-previews/google-cloud-dialogflow-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dialogflow-spring-starter/pom.xml index b543087081..32d78652b4 100644 --- a/spring-cloud-previews/google-cloud-dialogflow-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dialogflow-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dialogflow-spring-starter diff --git a/spring-cloud-previews/google-cloud-discoveryengine-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-discoveryengine-spring-starter/pom.xml index 22c62b3255..7d0749b621 100644 --- a/spring-cloud-previews/google-cloud-discoveryengine-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-discoveryengine-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-discoveryengine-spring-starter diff --git a/spring-cloud-previews/google-cloud-distributedcloudedge-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-distributedcloudedge-spring-starter/pom.xml index ed34c5c2c9..796bea6110 100644 --- a/spring-cloud-previews/google-cloud-distributedcloudedge-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-distributedcloudedge-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-distributedcloudedge-spring-starter diff --git a/spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml index 68a9268032..9955cc98e9 100644 --- a/spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dlp-spring-starter diff --git a/spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml index 1e8f1e68c2..d1692889df 100644 --- a/spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dms-spring-starter diff --git a/spring-cloud-previews/google-cloud-document-ai-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-document-ai-spring-starter/pom.xml index ad23f2a056..7a14338cdc 100644 --- a/spring-cloud-previews/google-cloud-document-ai-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-document-ai-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-document-ai-spring-starter diff --git a/spring-cloud-previews/google-cloud-domains-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-domains-spring-starter/pom.xml index 2498ed0000..2b9b3d8889 100644 --- a/spring-cloud-previews/google-cloud-domains-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-domains-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-domains-spring-starter diff --git a/spring-cloud-previews/google-cloud-edgenetwork-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-edgenetwork-spring-starter/pom.xml index 8256ee6454..a147d2bb74 100644 --- a/spring-cloud-previews/google-cloud-edgenetwork-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-edgenetwork-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-edgenetwork-spring-starter diff --git a/spring-cloud-previews/google-cloud-essential-contacts-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-essential-contacts-spring-starter/pom.xml index 70ae5a8e4c..14be7d3aaf 100644 --- a/spring-cloud-previews/google-cloud-essential-contacts-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-essential-contacts-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-essential-contacts-spring-starter diff --git a/spring-cloud-previews/google-cloud-eventarc-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-eventarc-spring-starter/pom.xml index 02715ddc3b..ad1cfa0c06 100644 --- a/spring-cloud-previews/google-cloud-eventarc-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-eventarc-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-eventarc-spring-starter diff --git a/spring-cloud-previews/google-cloud-filestore-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-filestore-spring-starter/pom.xml index 3724cc4955..cb8add0b94 100644 --- a/spring-cloud-previews/google-cloud-filestore-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-filestore-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-filestore-spring-starter diff --git a/spring-cloud-previews/google-cloud-functions-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-functions-spring-starter/pom.xml index 5888d36e78..60864b708c 100644 --- a/spring-cloud-previews/google-cloud-functions-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-functions-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-functions-spring-starter diff --git a/spring-cloud-previews/google-cloud-gkehub-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-gkehub-spring-starter/pom.xml index 84ea7c890f..0ed163ef81 100644 --- a/spring-cloud-previews/google-cloud-gkehub-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-gkehub-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-gkehub-spring-starter diff --git a/spring-cloud-previews/google-cloud-gsuite-addons-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-gsuite-addons-spring-starter/pom.xml index 2483e93b47..5f4b5b6ec8 100644 --- a/spring-cloud-previews/google-cloud-gsuite-addons-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-gsuite-addons-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-gsuite-addons-spring-starter diff --git a/spring-cloud-previews/google-cloud-iamcredentials-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-iamcredentials-spring-starter/pom.xml index 3b025e2a26..07471fb56f 100644 --- a/spring-cloud-previews/google-cloud-iamcredentials-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-iamcredentials-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-iamcredentials-spring-starter diff --git a/spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml index bb7fb7a521..bac2dd85ee 100644 --- a/spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-iap-spring-starter diff --git a/spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml index 94c0c647c4..0d4fa574fb 100644 --- a/spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-ids-spring-starter diff --git a/spring-cloud-previews/google-cloud-infra-manager-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-infra-manager-spring-starter/pom.xml index 3f466e7b4d..eb5b8afc68 100644 --- a/spring-cloud-previews/google-cloud-infra-manager-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-infra-manager-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-infra-manager-spring-starter diff --git a/spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml index f954fb68e6..e337fb9718 100644 --- a/spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-iot-spring-starter diff --git a/spring-cloud-previews/google-cloud-language-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-language-spring-starter/pom.xml index dd4825a44d..dc2b719724 100644 --- a/spring-cloud-previews/google-cloud-language-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-language-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-language-spring-starter diff --git a/spring-cloud-previews/google-cloud-managed-identities-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-managed-identities-spring-starter/pom.xml index 4d1b009100..f7d5887672 100644 --- a/spring-cloud-previews/google-cloud-managed-identities-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-managed-identities-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-managed-identities-spring-starter diff --git a/spring-cloud-previews/google-cloud-memcache-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-memcache-spring-starter/pom.xml index 9071727ec1..15265c34db 100644 --- a/spring-cloud-previews/google-cloud-memcache-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-memcache-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-memcache-spring-starter diff --git a/spring-cloud-previews/google-cloud-monitoring-dashboard-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-monitoring-dashboard-spring-starter/pom.xml index 876ff0b446..532123a226 100644 --- a/spring-cloud-previews/google-cloud-monitoring-dashboard-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-monitoring-dashboard-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-monitoring-dashboard-spring-starter diff --git a/spring-cloud-previews/google-cloud-network-management-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-network-management-spring-starter/pom.xml index 7d677df71c..845e366e6b 100644 --- a/spring-cloud-previews/google-cloud-network-management-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-network-management-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-network-management-spring-starter diff --git a/spring-cloud-previews/google-cloud-network-security-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-network-security-spring-starter/pom.xml index c6bcc89678..54b45315ab 100644 --- a/spring-cloud-previews/google-cloud-network-security-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-network-security-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-network-security-spring-starter diff --git a/spring-cloud-previews/google-cloud-networkconnectivity-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-networkconnectivity-spring-starter/pom.xml index 51478481a2..141f7bb39c 100644 --- a/spring-cloud-previews/google-cloud-networkconnectivity-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-networkconnectivity-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-networkconnectivity-spring-starter diff --git a/spring-cloud-previews/google-cloud-notebooks-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-notebooks-spring-starter/pom.xml index ec50372548..ba82e7bb5a 100644 --- a/spring-cloud-previews/google-cloud-notebooks-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-notebooks-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-notebooks-spring-starter diff --git a/spring-cloud-previews/google-cloud-optimization-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-optimization-spring-starter/pom.xml index 66c47fd3bb..6ea163658d 100644 --- a/spring-cloud-previews/google-cloud-optimization-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-optimization-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-optimization-spring-starter diff --git a/spring-cloud-previews/google-cloud-orchestration-airflow-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-orchestration-airflow-spring-starter/pom.xml index 75eb447b41..e0983f4f60 100644 --- a/spring-cloud-previews/google-cloud-orchestration-airflow-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-orchestration-airflow-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-orchestration-airflow-spring-starter diff --git a/spring-cloud-previews/google-cloud-orgpolicy-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-orgpolicy-spring-starter/pom.xml index 17c7429514..a02ad352d5 100644 --- a/spring-cloud-previews/google-cloud-orgpolicy-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-orgpolicy-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-orgpolicy-spring-starter diff --git a/spring-cloud-previews/google-cloud-os-config-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-os-config-spring-starter/pom.xml index 3971b63710..52c497205e 100644 --- a/spring-cloud-previews/google-cloud-os-config-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-os-config-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-os-config-spring-starter diff --git a/spring-cloud-previews/google-cloud-os-login-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-os-login-spring-starter/pom.xml index 1226da6b27..0af507229f 100644 --- a/spring-cloud-previews/google-cloud-os-login-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-os-login-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-os-login-spring-starter diff --git a/spring-cloud-previews/google-cloud-policy-troubleshooter-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-policy-troubleshooter-spring-starter/pom.xml index 72252128d7..5307652f74 100644 --- a/spring-cloud-previews/google-cloud-policy-troubleshooter-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-policy-troubleshooter-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-policy-troubleshooter-spring-starter diff --git a/spring-cloud-previews/google-cloud-profiler-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-profiler-spring-starter/pom.xml index 1065c13656..0b9a2ef8a4 100644 --- a/spring-cloud-previews/google-cloud-profiler-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-profiler-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-profiler-spring-starter diff --git a/spring-cloud-previews/google-cloud-publicca-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-publicca-spring-starter/pom.xml index 5ceaf0e612..277cf0de20 100644 --- a/spring-cloud-previews/google-cloud-publicca-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-publicca-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-publicca-spring-starter diff --git a/spring-cloud-previews/google-cloud-recaptchaenterprise-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-recaptchaenterprise-spring-starter/pom.xml index 4b18af9569..1d9b57c8e7 100644 --- a/spring-cloud-previews/google-cloud-recaptchaenterprise-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-recaptchaenterprise-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-recaptchaenterprise-spring-starter diff --git a/spring-cloud-previews/google-cloud-recommender-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-recommender-spring-starter/pom.xml index d4d55cec1f..7bd300461a 100644 --- a/spring-cloud-previews/google-cloud-recommender-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-recommender-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-recommender-spring-starter diff --git a/spring-cloud-previews/google-cloud-redis-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-redis-spring-starter/pom.xml index 9443c84add..92433293a0 100644 --- a/spring-cloud-previews/google-cloud-redis-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-redis-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-redis-spring-starter diff --git a/spring-cloud-previews/google-cloud-resource-settings-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-resource-settings-spring-starter/pom.xml index 9716a4d704..b282784b78 100644 --- a/spring-cloud-previews/google-cloud-resource-settings-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-resource-settings-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-resource-settings-spring-starter diff --git a/spring-cloud-previews/google-cloud-retail-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-retail-spring-starter/pom.xml index 25cbe160d6..ccc14dc9df 100644 --- a/spring-cloud-previews/google-cloud-retail-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-retail-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-retail-spring-starter diff --git a/spring-cloud-previews/google-cloud-scheduler-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-scheduler-spring-starter/pom.xml index ce4952a264..5eecd1e3c1 100644 --- a/spring-cloud-previews/google-cloud-scheduler-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-scheduler-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-scheduler-spring-starter diff --git a/spring-cloud-previews/google-cloud-securesourcemanager-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-securesourcemanager-spring-starter/pom.xml index 810011e353..e02194c064 100644 --- a/spring-cloud-previews/google-cloud-securesourcemanager-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-securesourcemanager-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-securesourcemanager-spring-starter diff --git a/spring-cloud-previews/google-cloud-security-private-ca-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-security-private-ca-spring-starter/pom.xml index b13a77eafe..315cdd98fd 100644 --- a/spring-cloud-previews/google-cloud-security-private-ca-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-security-private-ca-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-security-private-ca-spring-starter diff --git a/spring-cloud-previews/google-cloud-securitycenter-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-securitycenter-spring-starter/pom.xml index a768dedf90..d564b4884e 100644 --- a/spring-cloud-previews/google-cloud-securitycenter-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-securitycenter-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-securitycenter-spring-starter diff --git a/spring-cloud-previews/google-cloud-securitycentermanagement-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-securitycentermanagement-spring-starter/pom.xml index 4eacc0d5ba..dc8efcbc19 100644 --- a/spring-cloud-previews/google-cloud-securitycentermanagement-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-securitycentermanagement-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-securitycentermanagement-spring-starter diff --git a/spring-cloud-previews/google-cloud-securityposture-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-securityposture-spring-starter/pom.xml index 748b549f51..565b0253d6 100644 --- a/spring-cloud-previews/google-cloud-securityposture-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-securityposture-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-securityposture-spring-starter diff --git a/spring-cloud-previews/google-cloud-service-control-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-service-control-spring-starter/pom.xml index 319409e38c..9eca3d25d4 100644 --- a/spring-cloud-previews/google-cloud-service-control-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-service-control-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-service-control-spring-starter diff --git a/spring-cloud-previews/google-cloud-service-management-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-service-management-spring-starter/pom.xml index 9922e964e9..8dae372be9 100644 --- a/spring-cloud-previews/google-cloud-service-management-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-service-management-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-service-management-spring-starter diff --git a/spring-cloud-previews/google-cloud-service-usage-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-service-usage-spring-starter/pom.xml index 78b6492fcd..9ac345509b 100644 --- a/spring-cloud-previews/google-cloud-service-usage-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-service-usage-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-service-usage-spring-starter diff --git a/spring-cloud-previews/google-cloud-servicedirectory-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-servicedirectory-spring-starter/pom.xml index e445ab5fcd..c77bf41579 100644 --- a/spring-cloud-previews/google-cloud-servicedirectory-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-servicedirectory-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-servicedirectory-spring-starter diff --git a/spring-cloud-previews/google-cloud-shell-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-shell-spring-starter/pom.xml index fd47c89d89..d8ce6e944e 100644 --- a/spring-cloud-previews/google-cloud-shell-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-shell-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-shell-spring-starter diff --git a/spring-cloud-previews/google-cloud-speech-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-speech-spring-starter/pom.xml index 79beb05ff5..d1d676333b 100644 --- a/spring-cloud-previews/google-cloud-speech-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-speech-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-speech-spring-starter diff --git a/spring-cloud-previews/google-cloud-storage-transfer-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-storage-transfer-spring-starter/pom.xml index e6bae884c5..1af96c1db2 100644 --- a/spring-cloud-previews/google-cloud-storage-transfer-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-storage-transfer-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-storage-transfer-spring-starter diff --git a/spring-cloud-previews/google-cloud-talent-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-talent-spring-starter/pom.xml index afbe35bd72..2557bb46d8 100644 --- a/spring-cloud-previews/google-cloud-talent-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-talent-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-talent-spring-starter diff --git a/spring-cloud-previews/google-cloud-tasks-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-tasks-spring-starter/pom.xml index 0fbae31904..7681e0e0f9 100644 --- a/spring-cloud-previews/google-cloud-tasks-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-tasks-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-tasks-spring-starter diff --git a/spring-cloud-previews/google-cloud-telcoautomation-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-telcoautomation-spring-starter/pom.xml index c0d8c1beeb..8b250ca42d 100644 --- a/spring-cloud-previews/google-cloud-telcoautomation-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-telcoautomation-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-telcoautomation-spring-starter diff --git a/spring-cloud-previews/google-cloud-texttospeech-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-texttospeech-spring-starter/pom.xml index e84557ba26..3b2ae4dd38 100644 --- a/spring-cloud-previews/google-cloud-texttospeech-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-texttospeech-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-texttospeech-spring-starter diff --git a/spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml index 0591a6a94c..02b2b954dc 100644 --- a/spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-tpu-spring-starter diff --git a/spring-cloud-previews/google-cloud-trace-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-trace-spring-starter/pom.xml index 003f6521b8..74ab95b215 100644 --- a/spring-cloud-previews/google-cloud-trace-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-trace-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-trace-spring-starter diff --git a/spring-cloud-previews/google-cloud-translate-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-translate-spring-starter/pom.xml index d8a567a34b..c56d164c41 100644 --- a/spring-cloud-previews/google-cloud-translate-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-translate-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-translate-spring-starter diff --git a/spring-cloud-previews/google-cloud-video-intelligence-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-video-intelligence-spring-starter/pom.xml index 1c4060b0ba..96a99d8b7d 100644 --- a/spring-cloud-previews/google-cloud-video-intelligence-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-video-intelligence-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-video-intelligence-spring-starter diff --git a/spring-cloud-previews/google-cloud-video-stitcher-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-video-stitcher-spring-starter/pom.xml index afecd8aef9..331653d974 100644 --- a/spring-cloud-previews/google-cloud-video-stitcher-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-video-stitcher-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-video-stitcher-spring-starter diff --git a/spring-cloud-previews/google-cloud-video-transcoder-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-video-transcoder-spring-starter/pom.xml index a589d70a46..f8835e4c87 100644 --- a/spring-cloud-previews/google-cloud-video-transcoder-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-video-transcoder-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-video-transcoder-spring-starter diff --git a/spring-cloud-previews/google-cloud-vmmigration-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-vmmigration-spring-starter/pom.xml index 0c38746dd8..2b6878463b 100644 --- a/spring-cloud-previews/google-cloud-vmmigration-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-vmmigration-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-vmmigration-spring-starter diff --git a/spring-cloud-previews/google-cloud-vpcaccess-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-vpcaccess-spring-starter/pom.xml index 883b23742d..e1a54f3850 100644 --- a/spring-cloud-previews/google-cloud-vpcaccess-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-vpcaccess-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-vpcaccess-spring-starter diff --git a/spring-cloud-previews/google-cloud-webrisk-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-webrisk-spring-starter/pom.xml index 538da8ecd9..6708cb2cb7 100644 --- a/spring-cloud-previews/google-cloud-webrisk-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-webrisk-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-webrisk-spring-starter diff --git a/spring-cloud-previews/google-cloud-websecurityscanner-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-websecurityscanner-spring-starter/pom.xml index c1d43b168a..a5ba5f63be 100644 --- a/spring-cloud-previews/google-cloud-websecurityscanner-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-websecurityscanner-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-websecurityscanner-spring-starter diff --git a/spring-cloud-previews/google-cloud-workflow-executions-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-workflow-executions-spring-starter/pom.xml index 57004cf4a9..57907e74f4 100644 --- a/spring-cloud-previews/google-cloud-workflow-executions-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-workflow-executions-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-workflow-executions-spring-starter diff --git a/spring-cloud-previews/google-cloud-workflows-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-workflows-spring-starter/pom.xml index fa2ea6037d..886f9b3929 100644 --- a/spring-cloud-previews/google-cloud-workflows-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-workflows-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-workflows-spring-starter diff --git a/spring-cloud-previews/google-cloud-workstations-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-workstations-spring-starter/pom.xml index af9766939f..51194996af 100644 --- a/spring-cloud-previews/google-cloud-workstations-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-workstations-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-workstations-spring-starter diff --git a/spring-cloud-previews/google-iam-admin-spring-starter/pom.xml b/spring-cloud-previews/google-iam-admin-spring-starter/pom.xml index 17b2231038..7cef6fa17f 100644 --- a/spring-cloud-previews/google-iam-admin-spring-starter/pom.xml +++ b/spring-cloud-previews/google-iam-admin-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-iam-admin-spring-starter diff --git a/spring-cloud-previews/google-iam-policy-spring-starter/pom.xml b/spring-cloud-previews/google-iam-policy-spring-starter/pom.xml index ec693dcf33..3297534520 100644 --- a/spring-cloud-previews/google-iam-policy-spring-starter/pom.xml +++ b/spring-cloud-previews/google-iam-policy-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-iam-policy-spring-starter diff --git a/spring-cloud-previews/google-identity-accesscontextmanager-spring-starter/pom.xml b/spring-cloud-previews/google-identity-accesscontextmanager-spring-starter/pom.xml index c457a70422..ad1178dc62 100644 --- a/spring-cloud-previews/google-identity-accesscontextmanager-spring-starter/pom.xml +++ b/spring-cloud-previews/google-identity-accesscontextmanager-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-identity-accesscontextmanager-spring-starter diff --git a/spring-cloud-previews/pom.xml b/spring-cloud-previews/pom.xml index 7d420d49e5..69e2df716f 100644 --- a/spring-cloud-previews/pom.xml +++ b/spring-cloud-previews/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-spanner-spring-data-r2dbc/pom.xml b/spring-cloud-spanner-spring-data-r2dbc/pom.xml index 15a45dbe61..6204da7eac 100644 --- a/spring-cloud-spanner-spring-data-r2dbc/pom.xml +++ b/spring-cloud-spanner-spring-data-r2dbc/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 From 8a0eac308cadb8d988db12ccb67cff8a35a83980 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 16:28:36 -0500 Subject: [PATCH 70/96] Revert "remove config module" This reverts commit 66b4439b04f88c61507f1969c89b1d8198c4e517. --- .github/workflows/integrationTests.yaml | 1 + .../README.adoc | 66 +++++++++++++++++++ .../spring-cloud-gcp-config-sample/pom.xml | 65 ++++++++++++++++++ .../main/java/com/example/Application.java | 30 +++++++++ .../java/com/example/HelloController.java | 36 ++++++++++ .../java/com/example/MyAppProperties.java | 46 +++++++++++++ .../src/main/resources/application.properties | 2 + .../src/main/resources/bootstrap.properties | 13 ++++ ...nfigSampleApplicationIntegrationTests.java | 51 ++++++++++++++ .../src/test/resources/logback-test.xml | 14 ++++ spring-cloud-gcp-starters/pom.xml | 1 + .../.repo-metadata.json | 11 ++++ .../spring-cloud-gcp-starter-config/pom.xml | 61 +++++++++++++++++ 13 files changed, 397 insertions(+) create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/Application.java create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/HelloController.java create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/MyAppProperties.java create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/application.properties create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/bootstrap.properties create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/java/com/example/ConfigSampleApplicationIntegrationTests.java create mode 100644 spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/resources/logback-test.xml create mode 100644 spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/.repo-metadata.json create mode 100644 spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml diff --git a/.github/workflows/integrationTests.yaml b/.github/workflows/integrationTests.yaml index d757914bad..d4a34f36ec 100644 --- a/.github/workflows/integrationTests.yaml +++ b/.github/workflows/integrationTests.yaml @@ -30,6 +30,7 @@ jobs: - alloydb - bigquery - cloudsql + - config - datastore - firestore - kms diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc new file mode 100644 index 0000000000..62154018ae --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc @@ -0,0 +1,66 @@ += Spring Framework on Google Cloud Config Client Starter Code Sample + +This sample application demonstrates using the link:../../spring-cloud-gcp-starters/spring-cloud-gcp-starter-config[Spring Framework on Google Cloud Config Client Starter] in your code. + +The same content is also available in the https://codelabs.developers.google.com/codelabs/cloud-spring-runtime-config/index.html[Dynamic configuration for Spring Boot applications] codelab. + +== Setup & Configuration + +image:http://gstatic.com/cloudssh/images/open-btn.svg[link=https://ssh.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2FGoogleCloudPlatform%2Fspring-cloud-gcp&cloudshell_open_in_editor=spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/README.adoc] + +1. Run `$ mvn clean install` from the root directory of the project. +2. Move to the config sample directory by running `$ cd spring-cloud-gcp-samples/spring-cloud-gcp-config-sample` +3. Checkout the code of this sample. +4. Enable the Google https://console.cloud.google.com/apis/api/runtimeconfig.googleapis.com/overview[Runtime Configuration API]. +5. Create a configuration using the https://cloud.google.com/sdk/[Google Cloud SDK]. ++ +.... +$ gcloud beta runtime-config configs create myapp_prod +.... ++ +Then set the variables that your application will load: ++ +.... +$ gcloud beta runtime-config configs variables set \ + myapp.queue-size 25 \ + --config-name myapp_prod + +$ gcloud beta runtime-config configs variables set \ + myapp.feature-x-enabled true \ + --config-name myapp_prod +.... + +6. Update link:src/main/resources/bootstrap.properties[]: ++ +.... +spring.cloud.gcp.config.enabled=true +spring.cloud.gcp.config.name=myapp + +#default profile = default +spring.cloud.gcp.config.profile=prod +.... +7. Notice that link:src/main/java/com/example/MyAppProperties.java[MyAppProperties.java] uses `@ConfigurationProperties` to bind the `myapp` namespace from the environment. + +8. Note that in order to expose /actuator/refresh endpoint, link:src/resources/application.properties[application.properties] file includes the following property: ++ +.... +management.endpoints.web.exposure.include=refresh +.... +9. Run the application using the `$ mvn spring-boot:run` command and verify the values are set appropriately at http://localhost:8080/ or use the `Web Preview` button in Cloud Shell to preview the app on port 8080. +10. Update a property with `gcloud`: ++ +.... +$ gcloud beta runtime-config configs variables set \ + myapp.queue-size 200 \ + --config-name myapp_prod + +$ gcloud beta runtime-config configs variables set \ + myapp.feature-x-enabled false \ + --config-name myapp_prod +.... +11. Send a POST request to the refresh endpoint: ++ +.... +$ curl -XPOST http://localhost:8080/actuator/refresh +.... +12. Verify the values are updated at http://localhost:8080/ or Cloud Shell `Web Preview`. diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml new file mode 100644 index 0000000000..b74d5830bb --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml @@ -0,0 +1,65 @@ + + + + + + spring-cloud-gcp-samples + com.google.cloud + 5.9.1-SNAPSHOT + + + 4.0.0 + spring-cloud-gcp-config-sample + Spring Framework on Google Cloud Code Sample - Runtime Configuration + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.google.cloud + spring-cloud-gcp-starter-config + ${project.version} + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + org.awaitility + awaitility + 4.2.2 + test + + + junit + junit + test + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + maven-deploy-plugin + + true + + + + + diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/Application.java b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/Application.java new file mode 100644 index 0000000000..af8c02470a --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/Application.java @@ -0,0 +1,30 @@ +/* + * Copyright 2017-2018 the original author or authors. + * + * 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 + * + * https://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.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; + +/** Sample spring boot application. */ +@SpringBootApplication +@EnableConfigurationProperties(MyAppProperties.class) +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/HelloController.java b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/HelloController.java new file mode 100644 index 0000000000..f6dda87c41 --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/HelloController.java @@ -0,0 +1,36 @@ +/* + * Copyright 2017-2018 the original author or authors. + * + * 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 + * + * https://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.example; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** Sample REST Controller to demonstrate Google Cloud Configuration Integration. */ +@RestController +public class HelloController { + + private final MyAppProperties sampleConfig; + + public HelloController(MyAppProperties sampleConfig) { + this.sampleConfig = sampleConfig; + } + + @GetMapping("/") + public MyAppProperties json() { + return this.sampleConfig; + } +} diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/MyAppProperties.java b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/MyAppProperties.java new file mode 100644 index 0000000000..2e84973559 --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/java/com/example/MyAppProperties.java @@ -0,0 +1,46 @@ +/* + * Copyright 2017-2018 the original author or authors. + * + * 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 + * + * https://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.example; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; + +/** Sample Configuration class with property values loaded using the Runtime Configurator API. */ +@RefreshScope +@ConfigurationProperties("myapp") +public class MyAppProperties { + + private int queueSize; + + private boolean isFeatureXEnabled; + + public int getQueueSize() { + return this.queueSize; + } + + public void setQueueSize(int size) { + this.queueSize = size; + } + + public boolean isFeatureXEnabled() { + return this.isFeatureXEnabled; + } + + public void setFeatureXEnabled(boolean featureXEnabled) { + this.isFeatureXEnabled = featureXEnabled; + } +} diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/application.properties new file mode 100644 index 0000000000..ac25495356 --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/application.properties @@ -0,0 +1,2 @@ +# To allow unrestricted access to /actuator/refresh for testing +management.endpoints.web.exposure.include=refresh diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/bootstrap.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/bootstrap.properties new file mode 100644 index 0000000000..a2af94ef78 --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/main/resources/bootstrap.properties @@ -0,0 +1,13 @@ +# Sample bootstrap configuration +spring.cloud.gcp.config.enabled=true + +spring.application.name=myapp + +spring.profiles.active=prod + +# Config server API timeout in milliseconds, default : 60000 (1 minute) +spring.cloud.gcp.config.timeout-millis=120000 + +# Provide project id, credentials to override default +#spring.cloud.gcp.config.project-id=my-gcp-project-id +#spring.cloud.gcp.config.credentials.location=my-credentials-file-location diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/java/com/example/ConfigSampleApplicationIntegrationTests.java b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/java/com/example/ConfigSampleApplicationIntegrationTests.java new file mode 100644 index 0000000000..ca1621be7d --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/java/com/example/ConfigSampleApplicationIntegrationTests.java @@ -0,0 +1,51 @@ +/* + * Copyright 2017-2018 the original author or authors. + * + * 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 + * + * https://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.example; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.web.servlet.MockMvc; + +/** Tests for config sample. */ +// Please use "-Dit.config=true" to enable the tests. +@ExtendWith(SpringExtension.class) +@EnabledIfSystemProperty(named = "it.config", matches = "true") +@SpringBootTest( + classes = {Application.class}, + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@AutoConfigureMockMvc +class ConfigSampleApplicationIntegrationTests { + @Autowired private MockMvc mvc; + + @Test + void basicTest() throws Exception { + this.mvc + .perform(get("/").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().json("{'queueSize':200,'featureXEnabled':true}")); + } +} diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/resources/logback-test.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/resources/logback-test.xml new file mode 100644 index 0000000000..5535de3c96 --- /dev/null +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/src/test/resources/logback-test.xml @@ -0,0 +1,14 @@ + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + diff --git a/spring-cloud-gcp-starters/pom.xml b/spring-cloud-gcp-starters/pom.xml index c3075db9ad..07e9596de5 100644 --- a/spring-cloud-gcp-starters/pom.xml +++ b/spring-cloud-gcp-starters/pom.xml @@ -24,6 +24,7 @@ spring-cloud-gcp-starter-bus-pubsub spring-cloud-gcp-starter-cloudfoundry spring-cloud-gcp-starter-pubsub + spring-cloud-gcp-starter-config spring-cloud-gcp-starter-storage spring-cloud-gcp-starter-data-spanner spring-cloud-gcp-starter-data-datastore diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/.repo-metadata.json b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/.repo-metadata.json new file mode 100644 index 0000000000..8c7b8ef48f --- /dev/null +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/.repo-metadata.json @@ -0,0 +1,11 @@ +{ + "name": "spring-cloud-gcp-starter-config", + "name_pretty": "Spring Cloud Config Support for Google Runtime Configuration API", + "client_documentation": "https://spring.io/projects/spring-cloud-gcp", + "api_description": "Spring Cloud GCP makes it possible to use the Google Runtime Configuration API as a Spring Cloud Config server to remotely store your application configuration data.", + "release_level": "ga", + "language": "java", + "repo": "googlecloudplatform/spring-cloud-gcp", + "repo_short": "spring-cloud-gcp", + "distribution_name": "com.google.cloud:spring-cloud-gcp-starter-config" +} diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml new file mode 100644 index 0000000000..9aef523e34 --- /dev/null +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + com.google.cloud + spring-cloud-gcp-starters + 5.9.1-SNAPSHOT + + spring-cloud-gcp-starter-config + Spring Framework on Google Cloud Starter - Config + Starter for Spring Cloud Config Client using Google Runtime Configuration API + https://github.com/GoogleCloudPlatform/spring-cloud-gcp/tree/main/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config + + Google + https://cloud.google.com + + + ${basedir}/../.. + + + + com.google.cloud + spring-cloud-gcp-starter + + + org.springframework.cloud + spring-cloud-context + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + + + skip-unreleased-modules + + + + maven-deploy-plugin + + true + + + + org.sonatype.plugins + nexus-staging-maven-plugin + true + + true + ossrh + https://oss.sonatype.org/ + + + + + + + From ce401259b2e80c2c44e99ac3a89d7b9eabe3deed Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 16:32:29 -0500 Subject: [PATCH 71/96] update project.version in config integrations --- spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml | 2 +- .../spring-cloud-gcp-starter-config/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml index b74d5830bb..11a28763ee 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml index 9aef523e34..e483fcc8c3 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml @@ -4,7 +4,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT spring-cloud-gcp-starter-config Spring Framework on Google Cloud Starter - Config From 3eeef1eb8cb9e38375ec94c8a813a8b7cadd44e6 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 16:33:52 -0500 Subject: [PATCH 72/96] update versions.txt --- versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.txt b/versions.txt index 03703fe173..79b28084c4 100644 --- a/versions.txt +++ b/versions.txt @@ -1,4 +1,4 @@ # Format: # module:released-version:current-version -spring-cloud-gcp:5.9.0:5.9.1-SNAPSHOT +spring-cloud-gcp:6.0.0:6.0.1-SNAPSHOT From 0fabdbfcbe4cc944010d73481eb6c5a8e923ebf1 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 16:41:25 -0500 Subject: [PATCH 73/96] update project.version in spring-cloud-generator --- .../scripts/resources/googleapis_modification_string.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-generator/scripts/resources/googleapis_modification_string.txt b/spring-cloud-generator/scripts/resources/googleapis_modification_string.txt index c1d1c974cb..816a020432 100644 --- a/spring-cloud-generator/scripts/resources/googleapis_modification_string.txt +++ b/spring-cloud-generator/scripts/resources/googleapis_modification_string.txt @@ -1,4 +1,4 @@ -_spring_cloud_generator_version = "5.9.1-SNAPSHOT" # {x-version-update:spring-cloud-gcp:current} +_spring_cloud_generator_version = "6.0.0-SNAPSHOT" # {x-version-update:spring-cloud-gcp:current} maven_install( artifacts = [ From 56351ab4661ca478312922942a1aec1e7d53b799 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 16:59:33 -0500 Subject: [PATCH 74/96] retrigger tests From ab3b09765eb33965c1fae8c07a75396de461ec20 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 22:07:50 -0500 Subject: [PATCH 75/96] fix checkstyle violations in spanner --- .../spanner/repository/query/SpannerQueryLookupStrategy.java | 2 +- .../spring/data/spanner/repository/query/SqlSpannerQuery.java | 2 +- .../data/spanner/repository/query/SqlSpannerQueryTests.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java index 860517fefe..6723f61cdc 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java @@ -66,7 +66,7 @@ public SpannerQueryLookupStrategy( /** * @deprecated Use - * {@link SpannerQueryLookupStrategy(SpannerMappingContext, SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} + * {@link SpannerQueryLookupStrategy#SpannerQueryLookupStrategy(SpannerMappingContext, SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} * instead. */ @Deprecated diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java index 729a08509a..e98d3827fb 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java @@ -106,7 +106,7 @@ public class SqlSpannerQuery extends AbstractSpannerQuery { /** * @deprecated Use - * {@link SpannerQueryLookupStrategy(SpannerMappingContext, SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} + * {@link SpannerQueryLookupStrategy#SpannerQueryLookupStrategy(SpannerMappingContext, SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} * instead. */ @Deprecated diff --git a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java index aeed194810..727619fe87 100644 --- a/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java +++ b/spring-cloud-gcp-data-spanner/src/test/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQueryTests.java @@ -144,7 +144,7 @@ void initMocks() throws NoSuchMethodException { } @SuppressWarnings("deprecation") - private SqlSpannerQuery createQuery(String sql, Class theClass, boolean isDml,boolean useValueExpressionDelegate) { + private SqlSpannerQuery createQuery(String sql, Class theClass, boolean isDml, boolean useValueExpressionDelegate) { if (useValueExpressionDelegate) { return new SqlSpannerQuery( theClass, From 56d395d9353c03c4594a1045d9ac7397718d2e5c Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 2 Jan 2025 22:08:49 -0500 Subject: [PATCH 76/96] fix checkstyle violations in datastore --- .../repository/query/DatastoreQueryLookupStrategyTests.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java index 55e9487217..314ebed614 100644 --- a/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java +++ b/spring-cloud-gcp-data-datastore/src/test/java/com/google/cloud/spring/data/datastore/repository/query/DatastoreQueryLookupStrategyTests.java @@ -102,8 +102,8 @@ void resolveSqlQueryTest(boolean useValueExpressionDelegate) { } private DatastoreQueryLookupStrategy getDatastoreQueryLookupStrategy(boolean useValueExpressionDelegate) { - return useValueExpressionDelegate ? - getDatastoreQueryLookupStrategy(this.valueExpressionDelegate) + return useValueExpressionDelegate + ? getDatastoreQueryLookupStrategy(this.valueExpressionDelegate) : getDatastoreQueryLookupStrategy(this.evaluationContextProvider); } From eaf04dcd0fe2f132219e6217ec8e62c08f01c823 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 3 Jan 2025 16:12:30 -0500 Subject: [PATCH 77/96] update valkey to 6.x --- .../google-cloud-valkey-spring-starter/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-previews/google-cloud-valkey-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-valkey-spring-starter/pom.xml index e4a06e32b0..dcaa88a111 100644 --- a/spring-cloud-previews/google-cloud-valkey-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-valkey-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 5.9.1-SNAPSHOT + 6.0.0-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-valkey-spring-starter From dc1b24b795157a7833c64595cea1c09a53406cdd Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 3 Jan 2025 16:42:46 -0500 Subject: [PATCH 78/96] fix checkstyle in data-spanner --- .../repository/query/SpannerQueryLookupStrategy.java | 6 +++--- .../data/spanner/repository/query/SqlSpannerQuery.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java index 6723f61cdc..1b063da017 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SpannerQueryLookupStrategy.java @@ -65,9 +65,9 @@ public SpannerQueryLookupStrategy( } /** - * @deprecated Use - * {@link SpannerQueryLookupStrategy#SpannerQueryLookupStrategy(SpannerMappingContext, SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} - * instead. + * @deprecated Use {@link + * SpannerQueryLookupStrategy#SpannerQueryLookupStrategy(SpannerMappingContext, + * SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} instead. */ @Deprecated public SpannerQueryLookupStrategy( diff --git a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java index e98d3827fb..4e1c21c847 100644 --- a/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java +++ b/spring-cloud-gcp-data-spanner/src/main/java/com/google/cloud/spring/data/spanner/repository/query/SqlSpannerQuery.java @@ -105,9 +105,9 @@ public class SqlSpannerQuery extends AbstractSpannerQuery { } /** - * @deprecated Use - * {@link SpannerQueryLookupStrategy#SpannerQueryLookupStrategy(SpannerMappingContext, SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} - * instead. + * @deprecated Use {@link + * SpannerQueryLookupStrategy#SpannerQueryLookupStrategy(SpannerMappingContext, + * SpannerTemplate, ValueExpressionDelegate, SpelExpressionParser)} instead. */ @Deprecated SqlSpannerQuery( From 37c117b119de572343dcac61f2bf29e8653e13d9 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 3 Jan 2025 17:05:37 -0500 Subject: [PATCH 79/96] replace golden copyright year --- .../composer/goldens/EchoSpringAutoConfigurationFull.golden | 2 +- .../spring/composer/goldens/EchoSpringPropertiesFull.golden | 2 +- .../spring/composer/goldens/SpringPackageInfoFull.golden | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden b/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden index 66d2536758..111be521eb 100644 --- a/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden +++ b/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/EchoSpringPropertiesFull.golden b/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/EchoSpringPropertiesFull.golden index 22ad2ea40f..10fad64925 100644 --- a/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/EchoSpringPropertiesFull.golden +++ b/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/EchoSpringPropertiesFull.golden @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/SpringPackageInfoFull.golden b/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/SpringPackageInfoFull.golden index 6907d12b6c..11ca702db1 100644 --- a/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/SpringPackageInfoFull.golden +++ b/spring-cloud-generator/src/test/java/com/google/cloud/generator/spring/composer/goldens/SpringPackageInfoFull.golden @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * Copyright 2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 90547dffe03099f52ec402344b700befc8aaa964 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 3 Jan 2025 17:15:38 -0500 Subject: [PATCH 80/96] Revert "update valkey to 6.x" This reverts commit eaf04dcd0fe2f132219e6217ec8e62c08f01c823. --- .../google-cloud-valkey-spring-starter/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-previews/google-cloud-valkey-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-valkey-spring-starter/pom.xml index dcaa88a111..e4a06e32b0 100644 --- a/spring-cloud-previews/google-cloud-valkey-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-valkey-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-valkey-spring-starter From 1703926d0ace49ed02e52dcd15bcfc89e9862c34 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 3 Jan 2025 17:16:15 -0500 Subject: [PATCH 81/96] Revert "update project.version in spring-cloud-generator" This reverts commit 0fabdbfcbe4cc944010d73481eb6c5a8e923ebf1. --- .../scripts/resources/googleapis_modification_string.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-generator/scripts/resources/googleapis_modification_string.txt b/spring-cloud-generator/scripts/resources/googleapis_modification_string.txt index ed8974b9d1..be7e0e3cf2 100644 --- a/spring-cloud-generator/scripts/resources/googleapis_modification_string.txt +++ b/spring-cloud-generator/scripts/resources/googleapis_modification_string.txt @@ -1,4 +1,4 @@ -_spring_cloud_generator_version = "6.0.0-SNAPSHOT" # {x-version-update:spring-cloud-gcp:current} +_spring_cloud_generator_version = "5.9.1-SNAPSHOT" # {x-version-update:spring-cloud-gcp:current} maven_install( artifacts = [ From 9b21c9dbdfb401630b391760900f3f6fb433cb54 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 3 Jan 2025 17:16:18 -0500 Subject: [PATCH 82/96] Revert "update versions.txt" This reverts commit 3eeef1eb8cb9e38375ec94c8a813a8b7cadd44e6. --- versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.txt b/versions.txt index 79b28084c4..03703fe173 100644 --- a/versions.txt +++ b/versions.txt @@ -1,4 +1,4 @@ # Format: # module:released-version:current-version -spring-cloud-gcp:6.0.0:6.0.1-SNAPSHOT +spring-cloud-gcp:5.9.0:5.9.1-SNAPSHOT From 08efb74a2459699bdef86f14fe437bf281c6afb6 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 3 Jan 2025 17:16:20 -0500 Subject: [PATCH 83/96] Revert "update project.version in config integrations" This reverts commit ce401259b2e80c2c44e99ac3a89d7b9eabe3deed. --- spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml | 2 +- .../spring-cloud-gcp-starter-config/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml index 11a28763ee..b74d5830bb 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-config-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml index e483fcc8c3..9aef523e34 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-config/pom.xml @@ -4,7 +4,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-starter-config Spring Framework on Google Cloud Starter - Config From 95281f21b749b76be42372cfd80c5514874e668d Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Fri, 3 Jan 2025 17:16:23 -0500 Subject: [PATCH 84/96] Revert "update project.version to 6.0.0-SNAPSHOT" This reverts commit 4015f3f2316fc845fd0527c8b180b6315820c2c7. --- docs/pom.xml | 2 +- pom.xml | 2 +- spring-cloud-gcp-autoconfigure/pom.xml | 2 +- spring-cloud-gcp-bigquery/pom.xml | 2 +- spring-cloud-gcp-cloudfoundry/pom.xml | 2 +- spring-cloud-gcp-core/pom.xml | 2 +- spring-cloud-gcp-data-datastore/pom.xml | 2 +- spring-cloud-gcp-data-firestore/pom.xml | 2 +- spring-cloud-gcp-data-spanner/pom.xml | 2 +- spring-cloud-gcp-dependencies/pom.xml | 2 +- spring-cloud-gcp-kms/pom.xml | 2 +- spring-cloud-gcp-logging/pom.xml | 2 +- spring-cloud-gcp-pubsub-stream-binder/pom.xml | 2 +- spring-cloud-gcp-pubsub/pom.xml | 2 +- spring-cloud-gcp-samples/pom.xml | 2 +- .../spring-cloud-gcp-alloydb-sample/pom.xml | 2 +- .../spring-cloud-gcp-bigquery-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-datastore-basic-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-datastore-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-firestore-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-jpa-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-multi-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-spanner-repository-sample/pom.xml | 2 +- .../spring-cloud-gcp-data-spanner-template-sample/pom.xml | 2 +- .../spring-cloud-gcp-integration-pubsub-json-sample/pom.xml | 2 +- .../spring-cloud-gcp-integration-pubsub-sample/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml | 2 +- .../spring-cloud-gcp-integration-pubsub-sample-test/pom.xml | 2 +- .../spring-cloud-gcp-integration-storage-sample/pom.xml | 2 +- spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml | 2 +- .../spring-cloud-gcp-kotlin-samples/pom.xml | 4 ++-- .../spring-cloud-gcp-kotlin-app-sample/pom.xml | 2 +- .../spring-cloud-gcp-logging-sample/pom.xml | 2 +- .../spring-cloud-gcp-metrics-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-bus-config-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-reactive-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml | 2 +- .../spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../pom.xml | 2 +- .../spring-cloud-gcp-secretmanager-sample/pom.xml | 2 +- .../spring-cloud-gcp-security-firebase-sample/pom.xml | 2 +- .../spring-cloud-gcp-security-iap-sample/pom.xml | 2 +- .../spring-cloud-gcp-sql-mysql-sample/pom.xml | 2 +- .../spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml | 2 +- .../spring-cloud-gcp-sql-postgres-sample/pom.xml | 2 +- .../spring-cloud-gcp-starter-firestore-sample/pom.xml | 2 +- .../spring-cloud-gcp-storage-resource-sample/pom.xml | 2 +- .../spring-cloud-gcp-trace-sample/pom.xml | 2 +- .../spring-cloud-gcp-vision-api-sample/pom.xml | 2 +- .../spring-cloud-gcp-vision-ocr-demo/pom.xml | 2 +- .../spring-cloud-spanner-r2dbc-samples/pom.xml | 2 +- spring-cloud-gcp-secretmanager/pom.xml | 2 +- spring-cloud-gcp-security-firebase/pom.xml | 2 +- spring-cloud-gcp-security-iap/pom.xml | 2 +- spring-cloud-gcp-starters/pom.xml | 2 +- .../spring-cloud-gcp-starter-alloydb/pom.xml | 2 +- .../spring-cloud-gcp-starter-bigquery/pom.xml | 2 +- .../spring-cloud-gcp-starter-bus-pubsub/pom.xml | 2 +- .../spring-cloud-gcp-starter-cloudfoundry/pom.xml | 2 +- .../spring-cloud-gcp-starter-data-datastore/pom.xml | 2 +- .../spring-cloud-gcp-starter-data-firestore/pom.xml | 2 +- .../spring-cloud-gcp-starter-data-spanner/pom.xml | 2 +- .../spring-cloud-gcp-starter-firestore/pom.xml | 2 +- .../spring-cloud-gcp-starter-kms/pom.xml | 2 +- .../spring-cloud-gcp-starter-logging/pom.xml | 2 +- .../spring-cloud-gcp-starter-metrics/pom.xml | 2 +- .../spring-cloud-gcp-starter-pubsub/pom.xml | 2 +- .../spring-cloud-gcp-starter-secretmanager/pom.xml | 2 +- .../spring-cloud-gcp-starter-security-firebase/pom.xml | 2 +- .../spring-cloud-gcp-starter-security-iap/pom.xml | 2 +- .../spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml | 2 +- .../spring-cloud-gcp-starter-sql-mysql/pom.xml | 2 +- .../spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml | 2 +- .../spring-cloud-gcp-starter-sql-postgresql/pom.xml | 2 +- .../spring-cloud-gcp-starter-storage/pom.xml | 2 +- .../spring-cloud-gcp-starter-trace/pom.xml | 2 +- .../spring-cloud-gcp-starter-vision/pom.xml | 2 +- spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml | 2 +- spring-cloud-gcp-storage/pom.xml | 2 +- spring-cloud-gcp-vision/pom.xml | 2 +- spring-cloud-generator/pom.xml | 2 +- .../showcase/showcase-spring-starter/pom.xml | 2 +- spring-cloud-generator/spring-cloud-previews-template/pom.xml | 2 +- .../google-cloud-accessapproval-spring-starter/pom.xml | 2 +- .../google-cloud-advisorynotifications-spring-starter/pom.xml | 2 +- .../google-cloud-aiplatform-spring-starter/pom.xml | 2 +- .../google-cloud-analyticshub-spring-starter/pom.xml | 2 +- .../google-cloud-api-gateway-spring-starter/pom.xml | 2 +- .../google-cloud-apigee-connect-spring-starter/pom.xml | 2 +- .../google-cloud-apikeys-spring-starter/pom.xml | 2 +- .../google-cloud-appengine-admin-spring-starter/pom.xml | 2 +- .../google-cloud-artifact-registry-spring-starter/pom.xml | 2 +- .../google-cloud-asset-spring-starter/pom.xml | 2 +- .../google-cloud-assured-workloads-spring-starter/pom.xml | 2 +- .../google-cloud-automl-spring-starter/pom.xml | 2 +- .../google-cloud-backupdr-spring-starter/pom.xml | 2 +- .../google-cloud-bigqueryconnection-spring-starter/pom.xml | 2 +- .../google-cloud-bigquerydatatransfer-spring-starter/pom.xml | 2 +- .../google-cloud-bigqueryreservation-spring-starter/pom.xml | 2 +- .../google-cloud-billing-spring-starter/pom.xml | 2 +- .../google-cloud-billingbudgets-spring-starter/pom.xml | 2 +- .../google-cloud-binary-authorization-spring-starter/pom.xml | 2 +- .../google-cloud-build-spring-starter/pom.xml | 2 +- .../google-cloud-channel-spring-starter/pom.xml | 2 +- .../google-cloud-cloudcontrolspartner-spring-starter/pom.xml | 2 +- .../google-cloud-cloudquotas-spring-starter/pom.xml | 2 +- .../google-cloud-compute-spring-starter/pom.xml | 2 +- .../pom.xml | 2 +- .../google-cloud-container-spring-starter/pom.xml | 2 +- .../google-cloud-containeranalysis-spring-starter/pom.xml | 2 +- .../google-cloud-data-fusion-spring-starter/pom.xml | 2 +- .../google-cloud-datacatalog-spring-starter/pom.xml | 2 +- .../google-cloud-datalineage-spring-starter/pom.xml | 2 +- .../google-cloud-dataplex-spring-starter/pom.xml | 2 +- .../google-cloud-dataproc-metastore-spring-starter/pom.xml | 2 +- .../google-cloud-dataproc-spring-starter/pom.xml | 2 +- .../google-cloud-datastream-spring-starter/pom.xml | 2 +- .../google-cloud-debugger-client-spring-starter/pom.xml | 2 +- .../google-cloud-deploy-spring-starter/pom.xml | 2 +- .../google-cloud-dialogflow-spring-starter/pom.xml | 2 +- .../google-cloud-discoveryengine-spring-starter/pom.xml | 2 +- .../google-cloud-distributedcloudedge-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml | 2 +- .../google-cloud-document-ai-spring-starter/pom.xml | 2 +- .../google-cloud-domains-spring-starter/pom.xml | 2 +- .../google-cloud-edgenetwork-spring-starter/pom.xml | 2 +- .../google-cloud-essential-contacts-spring-starter/pom.xml | 2 +- .../google-cloud-eventarc-spring-starter/pom.xml | 2 +- .../google-cloud-filestore-spring-starter/pom.xml | 2 +- .../google-cloud-functions-spring-starter/pom.xml | 2 +- .../google-cloud-gkehub-spring-starter/pom.xml | 2 +- .../google-cloud-gsuite-addons-spring-starter/pom.xml | 2 +- .../google-cloud-iamcredentials-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml | 2 +- .../google-cloud-infra-manager-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml | 2 +- .../google-cloud-language-spring-starter/pom.xml | 2 +- .../google-cloud-managed-identities-spring-starter/pom.xml | 2 +- .../google-cloud-memcache-spring-starter/pom.xml | 2 +- .../google-cloud-monitoring-dashboard-spring-starter/pom.xml | 2 +- .../google-cloud-network-management-spring-starter/pom.xml | 2 +- .../google-cloud-network-security-spring-starter/pom.xml | 2 +- .../google-cloud-networkconnectivity-spring-starter/pom.xml | 2 +- .../google-cloud-notebooks-spring-starter/pom.xml | 2 +- .../google-cloud-optimization-spring-starter/pom.xml | 2 +- .../google-cloud-orchestration-airflow-spring-starter/pom.xml | 2 +- .../google-cloud-orgpolicy-spring-starter/pom.xml | 2 +- .../google-cloud-os-config-spring-starter/pom.xml | 2 +- .../google-cloud-os-login-spring-starter/pom.xml | 2 +- .../google-cloud-policy-troubleshooter-spring-starter/pom.xml | 2 +- .../google-cloud-profiler-spring-starter/pom.xml | 2 +- .../google-cloud-publicca-spring-starter/pom.xml | 2 +- .../google-cloud-recaptchaenterprise-spring-starter/pom.xml | 2 +- .../google-cloud-recommender-spring-starter/pom.xml | 2 +- .../google-cloud-redis-spring-starter/pom.xml | 2 +- .../google-cloud-resource-settings-spring-starter/pom.xml | 2 +- .../google-cloud-retail-spring-starter/pom.xml | 2 +- .../google-cloud-scheduler-spring-starter/pom.xml | 2 +- .../google-cloud-securesourcemanager-spring-starter/pom.xml | 2 +- .../google-cloud-security-private-ca-spring-starter/pom.xml | 2 +- .../google-cloud-securitycenter-spring-starter/pom.xml | 2 +- .../pom.xml | 2 +- .../google-cloud-securityposture-spring-starter/pom.xml | 2 +- .../google-cloud-service-control-spring-starter/pom.xml | 2 +- .../google-cloud-service-management-spring-starter/pom.xml | 2 +- .../google-cloud-service-usage-spring-starter/pom.xml | 2 +- .../google-cloud-servicedirectory-spring-starter/pom.xml | 2 +- .../google-cloud-shell-spring-starter/pom.xml | 2 +- .../google-cloud-speech-spring-starter/pom.xml | 2 +- .../google-cloud-storage-transfer-spring-starter/pom.xml | 2 +- .../google-cloud-talent-spring-starter/pom.xml | 2 +- .../google-cloud-tasks-spring-starter/pom.xml | 2 +- .../google-cloud-telcoautomation-spring-starter/pom.xml | 2 +- .../google-cloud-texttospeech-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml | 2 +- .../google-cloud-trace-spring-starter/pom.xml | 2 +- .../google-cloud-translate-spring-starter/pom.xml | 2 +- .../google-cloud-video-intelligence-spring-starter/pom.xml | 2 +- .../google-cloud-video-stitcher-spring-starter/pom.xml | 2 +- .../google-cloud-video-transcoder-spring-starter/pom.xml | 2 +- .../google-cloud-vmmigration-spring-starter/pom.xml | 2 +- .../google-cloud-vpcaccess-spring-starter/pom.xml | 2 +- .../google-cloud-webrisk-spring-starter/pom.xml | 2 +- .../google-cloud-websecurityscanner-spring-starter/pom.xml | 2 +- .../google-cloud-workflow-executions-spring-starter/pom.xml | 2 +- .../google-cloud-workflows-spring-starter/pom.xml | 2 +- .../google-cloud-workstations-spring-starter/pom.xml | 2 +- spring-cloud-previews/google-iam-admin-spring-starter/pom.xml | 2 +- .../google-iam-policy-spring-starter/pom.xml | 2 +- .../pom.xml | 2 +- spring-cloud-previews/pom.xml | 2 +- spring-cloud-spanner-spring-data-r2dbc/pom.xml | 2 +- 203 files changed, 204 insertions(+), 204 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 5b0f57d87d..ec75605916 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -13,7 +13,7 @@ Spring Framework on Google Cloud Documentation com.google.cloud spring-cloud-gcp-docs - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT pom diff --git a/pom.xml b/pom.xml index c611b3f6fc..a91fa720f1 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.google.cloud spring-cloud-gcp - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT Spring Framework on Google Cloud Spring Framework on Google Cloud https://spring.io/projects/spring-cloud-gcp diff --git a/spring-cloud-gcp-autoconfigure/pom.xml b/spring-cloud-gcp-autoconfigure/pom.xml index c298a4eba5..a5707a18b5 100644 --- a/spring-cloud-gcp-autoconfigure/pom.xml +++ b/spring-cloud-gcp-autoconfigure/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-bigquery/pom.xml b/spring-cloud-gcp-bigquery/pom.xml index 2ef94f9d8e..0c414ddc5e 100644 --- a/spring-cloud-gcp-bigquery/pom.xml +++ b/spring-cloud-gcp-bigquery/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-bigquery diff --git a/spring-cloud-gcp-cloudfoundry/pom.xml b/spring-cloud-gcp-cloudfoundry/pom.xml index 95f7fcf812..a221e8a59e 100644 --- a/spring-cloud-gcp-cloudfoundry/pom.xml +++ b/spring-cloud-gcp-cloudfoundry/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-cloudfoundry diff --git a/spring-cloud-gcp-core/pom.xml b/spring-cloud-gcp-core/pom.xml index 70a3eb4334..eb1209ded3 100644 --- a/spring-cloud-gcp-core/pom.xml +++ b/spring-cloud-gcp-core/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-core diff --git a/spring-cloud-gcp-data-datastore/pom.xml b/spring-cloud-gcp-data-datastore/pom.xml index 92fa1b0055..ec098a3dd7 100644 --- a/spring-cloud-gcp-data-datastore/pom.xml +++ b/spring-cloud-gcp-data-datastore/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-data-datastore Spring Framework on Google Cloud Module - Datastore diff --git a/spring-cloud-gcp-data-firestore/pom.xml b/spring-cloud-gcp-data-firestore/pom.xml index 79d6b19642..a0fb9dba81 100644 --- a/spring-cloud-gcp-data-firestore/pom.xml +++ b/spring-cloud-gcp-data-firestore/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-data-firestore diff --git a/spring-cloud-gcp-data-spanner/pom.xml b/spring-cloud-gcp-data-spanner/pom.xml index b8099d7a6b..8b9f5ce4b8 100644 --- a/spring-cloud-gcp-data-spanner/pom.xml +++ b/spring-cloud-gcp-data-spanner/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-data-spanner Spring Framework on Google Cloud Module - Cloud Spanner diff --git a/spring-cloud-gcp-dependencies/pom.xml b/spring-cloud-gcp-dependencies/pom.xml index ff148c78d6..cb3f9a9793 100644 --- a/spring-cloud-gcp-dependencies/pom.xml +++ b/spring-cloud-gcp-dependencies/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.google.cloud spring-cloud-gcp-dependencies - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT Spring Framework on Google Cloud Dependencies Spring Framework on Google Cloud Dependencies https://spring.io/projects/spring-cloud-gcp diff --git a/spring-cloud-gcp-kms/pom.xml b/spring-cloud-gcp-kms/pom.xml index 589634d127..d09bdbc1c4 100644 --- a/spring-cloud-gcp-kms/pom.xml +++ b/spring-cloud-gcp-kms/pom.xml @@ -4,7 +4,7 @@ com.google.cloud spring-cloud-gcp - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-logging/pom.xml b/spring-cloud-gcp-logging/pom.xml index fd8d15c02f..9361f4b464 100644 --- a/spring-cloud-gcp-logging/pom.xml +++ b/spring-cloud-gcp-logging/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT diff --git a/spring-cloud-gcp-pubsub-stream-binder/pom.xml b/spring-cloud-gcp-pubsub-stream-binder/pom.xml index 02b5570651..7d3f160858 100644 --- a/spring-cloud-gcp-pubsub-stream-binder/pom.xml +++ b/spring-cloud-gcp-pubsub-stream-binder/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-pubsub/pom.xml b/spring-cloud-gcp-pubsub/pom.xml index cc0026e914..c3b1caa4cb 100644 --- a/spring-cloud-gcp-pubsub/pom.xml +++ b/spring-cloud-gcp-pubsub/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-pubsub diff --git a/spring-cloud-gcp-samples/pom.xml b/spring-cloud-gcp-samples/pom.xml index 263edb3631..9882944e1c 100644 --- a/spring-cloud-gcp-samples/pom.xml +++ b/spring-cloud-gcp-samples/pom.xml @@ -13,7 +13,7 @@ Spring Framework on Google Cloud Code Samples spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT pom 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/pom.xml index e4bec44958..a54e42ebb0 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-alloydb-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-bigquery-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-bigquery-sample/pom.xml index 8dcec161ea..a9c078b3d9 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-bigquery-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-bigquery-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-basic-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-basic-sample/pom.xml index 6650a5f0fd..d8fa5ebb88 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-basic-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-basic-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-sample/pom.xml index 9bd10532ec..07b06eb23c 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-datastore-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml index f1ec7583cb..eb96433028 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-firestore-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-jpa-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-jpa-sample/pom.xml index 6a1a291762..9e1a2c8e1b 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-jpa-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-jpa-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-multi-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-multi-sample/pom.xml index 9f8c706b08..b5771d6fe5 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-multi-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-multi-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-repository-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-repository-sample/pom.xml index 6a81411373..8e59ad0e19 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-repository-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-repository-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 spring-cloud-gcp-data-spanner-repository-sample diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-template-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-template-sample/pom.xml index 46e4e42dc9..7306e7838e 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-template-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-data-spanner-template-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 spring-cloud-gcp-data-spanner-template-sample diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-json-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-json-sample/pom.xml index 526af613f9..dc537caa13 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-json-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-json-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/pom.xml index 532763e541..c53b8c2cad 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-integration-pubsub-sample diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-polling-receiver/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-polling-receiver/pom.xml index 9e3f6ffdee..6980faa453 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-polling-receiver/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-polling-receiver/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-integration-pubsub-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-receiver/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-receiver/pom.xml index 25a9bbf5c0..313f66a9bf 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-receiver/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-receiver/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-integration-pubsub-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml index 438fc30a5b..3be6d71086 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-sender/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-integration-pubsub-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-test/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-test/pom.xml index 4943aba5a8..989ee8434f 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-test/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-pubsub-sample/spring-cloud-gcp-integration-pubsub-sample-test/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-integration-pubsub-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/pom.xml index 91214b0d90..db4ae5979d 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-integration-storage-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml index 1186206848..edfee35097 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-kms-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/pom.xml index fa2e7682b5..a25bb3c6a5 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/pom.xml @@ -7,11 +7,11 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-kotlin-samples - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT Spring Framework on Google Cloud Code Samples - Kotlin 4.0.0 pom diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/pom.xml index c55c4b88b1..6bf1f6ee9e 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-kotlin-samples/spring-cloud-gcp-kotlin-app-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-kotlin-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-logging-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-logging-sample/pom.xml index 2588ea86c0..bfdb063d22 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-logging-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-logging-sample/pom.xml @@ -10,7 +10,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-metrics-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-metrics-sample/pom.xml index 0813fd1c52..2005e9a5af 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-metrics-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-metrics-sample/pom.xml @@ -10,7 +10,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml index d1e8880bc2..e220bfc457 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml index 825e18f5c9..2fcbb1bba8 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-client/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-bus-config-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-github/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-github/pom.xml index 67579185d7..8c0829a08e 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-github/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-github/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-bus-config-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-local/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-local/pom.xml index 83c4cfc915..a69ed67378 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-local/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-server-local/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-bus-config-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml index 7fdf9c1a70..2baab8db49 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-bus-config-sample/spring-cloud-gcp-pubsub-bus-config-sample-test/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-bus-config-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-reactive-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-reactive-sample/pom.xml index 4e7b99a8b8..60aa441097 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-reactive-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-reactive-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml index 31280c45e9..ea749b1b6d 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml index b408dc7336..bae2472c3e 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-dead-letter-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml index 459829d9bd..a43278c3a5 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-sink/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-sink/pom.xml index f0a3e698c7..f436e9a8e6 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-sink/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-sink/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-pubsub-stream-functional-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-source/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-source/pom.xml index 5b69d29f43..ad77d34eb3 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-source/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-source/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-pubsub-stream-functional-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-test/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-test/pom.xml index 5cfa657a25..105226f9ee 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-test/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-stream-functional-sample/spring-cloud-gcp-pubsub-stream-functional-sample-test/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-pubsub-stream-functional-sample com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml index 7d1697a4e4..0ba156d52f 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-security-firebase-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-security-firebase-sample/pom.xml index 105dd28a9f..057db8a5b3 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-security-firebase-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-security-firebase-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-security-iap-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-security-iap-sample/pom.xml index 6a6767044a..c4d09dcb5d 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-security-iap-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-security-iap-sample/pom.xml @@ -11,7 +11,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-mysql-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-mysql-sample/pom.xml index 8bf5a32b57..d7ce2ffa5c 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-mysql-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-mysql-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml index 1c7f94758d..bd474e7665 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-r2dbc-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml index e090403453..a812211293 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-sql-postgres-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-starter-firestore-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-starter-firestore-sample/pom.xml index 3991282b6e..343728068b 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-starter-firestore-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-starter-firestore-sample/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample/pom.xml index 9a10693822..abdc7437ec 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-trace-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-trace-sample/pom.xml index ee079b7864..c06d9234f5 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-trace-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-trace-sample/pom.xml @@ -10,7 +10,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-vision-api-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-vision-api-sample/pom.xml index 9cbfe8f77a..7cf7d9ed78 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-vision-api-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-vision-api-sample/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-vision-ocr-demo/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-vision-ocr-demo/pom.xml index ecf9e8d068..2acb931ad8 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-vision-ocr-demo/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-vision-ocr-demo/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-samples/spring-cloud-spanner-r2dbc-samples/pom.xml b/spring-cloud-gcp-samples/spring-cloud-spanner-r2dbc-samples/pom.xml index c422cce19b..37b63c1b4c 100644 --- a/spring-cloud-gcp-samples/spring-cloud-spanner-r2dbc-samples/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-spanner-r2dbc-samples/pom.xml @@ -7,7 +7,7 @@ spring-cloud-gcp-samples com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-secretmanager/pom.xml b/spring-cloud-gcp-secretmanager/pom.xml index 63c31334c9..0b7e0c2e85 100644 --- a/spring-cloud-gcp-secretmanager/pom.xml +++ b/spring-cloud-gcp-secretmanager/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-security-firebase/pom.xml b/spring-cloud-gcp-security-firebase/pom.xml index 971985b85c..2494f9875f 100644 --- a/spring-cloud-gcp-security-firebase/pom.xml +++ b/spring-cloud-gcp-security-firebase/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-security-firebase diff --git a/spring-cloud-gcp-security-iap/pom.xml b/spring-cloud-gcp-security-iap/pom.xml index f27f650334..ce06c5adb7 100644 --- a/spring-cloud-gcp-security-iap/pom.xml +++ b/spring-cloud-gcp-security-iap/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-security-iap diff --git a/spring-cloud-gcp-starters/pom.xml b/spring-cloud-gcp-starters/pom.xml index 07e9596de5..c393ba9d01 100644 --- a/spring-cloud-gcp-starters/pom.xml +++ b/spring-cloud-gcp-starters/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT pom Spring Framework on Google Cloud Starters diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-alloydb/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-alloydb/pom.xml index 41ebc70493..8697f91a8a 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-alloydb/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-alloydb/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bigquery/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bigquery/pom.xml index 54fe06fa24..f5d58c89c6 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bigquery/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bigquery/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bus-pubsub/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bus-pubsub/pom.xml index c490aa8521..60f6ee11e4 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bus-pubsub/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-bus-pubsub/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-starter-bus-pubsub diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-cloudfoundry/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-cloudfoundry/pom.xml index a7ef5a9461..b3e8b15517 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-cloudfoundry/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-cloudfoundry/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-datastore/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-datastore/pom.xml index 5b53b1d2b7..93abe3006a 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-datastore/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-datastore/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-starter-data-datastore Spring Framework on Google Cloud Starter - Datastore diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-firestore/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-firestore/pom.xml index c4049844b5..f07e821672 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-firestore/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-firestore/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-starter-data-firestore Spring Framework on Google Cloud Starter - Firestore diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-spanner/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-spanner/pom.xml index 70f045dfe7..e65dd0bcb2 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-spanner/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-data-spanner/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-starter-data-spanner Spring Framework on Google Cloud Starter - Spanner diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-firestore/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-firestore/pom.xml index 2f2847fabc..12f39f93b7 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-firestore/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-firestore/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-starter-firestore Spring Framework on Google Cloud Starter - Firestore diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-kms/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-kms/pom.xml index 396c4a9d73..84be96cd02 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-kms/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-kms/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-logging/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-logging/pom.xml index ba3c5d76aa..beedff4508 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-logging/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-logging/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-metrics/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-metrics/pom.xml index 25988c85d9..97a24c5104 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-metrics/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-metrics/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-pubsub/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-pubsub/pom.xml index 6c3054d6d8..def603034d 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-pubsub/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-pubsub/pom.xml @@ -4,7 +4,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-starter-pubsub Spring Framework on Google Cloud Starter - Pub/Sub diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-secretmanager/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-secretmanager/pom.xml index 18e3f609b9..5e999b0c34 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-secretmanager/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-secretmanager/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-firebase/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-firebase/pom.xml index e7390e6c29..9f8880ff8c 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-firebase/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-firebase/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-iap/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-iap/pom.xml index 8417e2d878..ad910671b9 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-iap/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-security-iap/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml index a1bea84fb3..8b5fbb3507 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql-r2dbc/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql/pom.xml index 85471a2e0e..650e261f29 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-mysql/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml index f4b3f9ae8b..c71b1a5354 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgres-r2dbc/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgresql/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgresql/pom.xml index 909ea2dbdb..f13973bec1 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgresql/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-sql-postgresql/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-storage/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-storage/pom.xml index 02d41be4e1..17cd17e982 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-storage/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-storage/pom.xml @@ -5,7 +5,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-starter-storage Spring Framework on Google Cloud Starter - Storage diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-trace/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-trace/pom.xml index a1a8c7b17b..2ced44fc6b 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-trace/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-trace/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-vision/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-vision/pom.xml index acd4a670b7..6c7953f512 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter-vision/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter-vision/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp-starters com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml b/spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml index 2574e7046e..48f392a784 100644 --- a/spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml +++ b/spring-cloud-gcp-starters/spring-cloud-gcp-starter/pom.xml @@ -4,7 +4,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-starter Spring Framework on Google Cloud Starter - Support diff --git a/spring-cloud-gcp-storage/pom.xml b/spring-cloud-gcp-storage/pom.xml index 0c249f0000..e9412644f4 100644 --- a/spring-cloud-gcp-storage/pom.xml +++ b/spring-cloud-gcp-storage/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT spring-cloud-gcp-storage Spring Framework on Google Cloud Module - Storage diff --git a/spring-cloud-gcp-vision/pom.xml b/spring-cloud-gcp-vision/pom.xml index cd45b4d441..72098d4bc0 100644 --- a/spring-cloud-gcp-vision/pom.xml +++ b/spring-cloud-gcp-vision/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-generator/pom.xml b/spring-cloud-generator/pom.xml index e1b6c2d2b7..1fe8565200 100644 --- a/spring-cloud-generator/pom.xml +++ b/spring-cloud-generator/pom.xml @@ -6,7 +6,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT com.google.cloud diff --git a/spring-cloud-generator/showcase/showcase-spring-starter/pom.xml b/spring-cloud-generator/showcase/showcase-spring-starter/pom.xml index d83f9aae04..32d195cdf2 100644 --- a/spring-cloud-generator/showcase/showcase-spring-starter/pom.xml +++ b/spring-cloud-generator/showcase/showcase-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../../spring-cloud-gcp-starters/pom.xml gapic-showcase-spring-starter diff --git a/spring-cloud-generator/spring-cloud-previews-template/pom.xml b/spring-cloud-generator/spring-cloud-previews-template/pom.xml index c0bb588e0a..729d0b29c4 100644 --- a/spring-cloud-generator/spring-cloud-previews-template/pom.xml +++ b/spring-cloud-generator/spring-cloud-previews-template/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-previews/google-cloud-accessapproval-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-accessapproval-spring-starter/pom.xml index dac2bf8f51..db82908fc1 100644 --- a/spring-cloud-previews/google-cloud-accessapproval-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-accessapproval-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-accessapproval-spring-starter diff --git a/spring-cloud-previews/google-cloud-advisorynotifications-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-advisorynotifications-spring-starter/pom.xml index 52d58a6977..61786e2742 100644 --- a/spring-cloud-previews/google-cloud-advisorynotifications-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-advisorynotifications-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-advisorynotifications-spring-starter diff --git a/spring-cloud-previews/google-cloud-aiplatform-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-aiplatform-spring-starter/pom.xml index fa8f9a90d6..0233f552e5 100644 --- a/spring-cloud-previews/google-cloud-aiplatform-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-aiplatform-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-aiplatform-spring-starter diff --git a/spring-cloud-previews/google-cloud-analyticshub-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-analyticshub-spring-starter/pom.xml index fda1620a7a..3d543d080c 100644 --- a/spring-cloud-previews/google-cloud-analyticshub-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-analyticshub-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-analyticshub-spring-starter diff --git a/spring-cloud-previews/google-cloud-api-gateway-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-api-gateway-spring-starter/pom.xml index d6b17006dd..3023a55e6e 100644 --- a/spring-cloud-previews/google-cloud-api-gateway-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-api-gateway-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-api-gateway-spring-starter diff --git a/spring-cloud-previews/google-cloud-apigee-connect-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-apigee-connect-spring-starter/pom.xml index 3a3a0816fa..83e8d523fc 100644 --- a/spring-cloud-previews/google-cloud-apigee-connect-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-apigee-connect-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-apigee-connect-spring-starter diff --git a/spring-cloud-previews/google-cloud-apikeys-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-apikeys-spring-starter/pom.xml index ad4848cbdb..267ddb0616 100644 --- a/spring-cloud-previews/google-cloud-apikeys-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-apikeys-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-apikeys-spring-starter diff --git a/spring-cloud-previews/google-cloud-appengine-admin-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-appengine-admin-spring-starter/pom.xml index 5a9c716c1f..078abd624c 100644 --- a/spring-cloud-previews/google-cloud-appengine-admin-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-appengine-admin-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-appengine-admin-spring-starter diff --git a/spring-cloud-previews/google-cloud-artifact-registry-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-artifact-registry-spring-starter/pom.xml index 9998cb994b..8abe4c668d 100644 --- a/spring-cloud-previews/google-cloud-artifact-registry-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-artifact-registry-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-artifact-registry-spring-starter diff --git a/spring-cloud-previews/google-cloud-asset-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-asset-spring-starter/pom.xml index 023cc7c0a3..6dba947292 100644 --- a/spring-cloud-previews/google-cloud-asset-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-asset-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-asset-spring-starter diff --git a/spring-cloud-previews/google-cloud-assured-workloads-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-assured-workloads-spring-starter/pom.xml index ff81be465c..de6d748274 100644 --- a/spring-cloud-previews/google-cloud-assured-workloads-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-assured-workloads-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-assured-workloads-spring-starter diff --git a/spring-cloud-previews/google-cloud-automl-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-automl-spring-starter/pom.xml index c5c58e5348..232b7a208f 100644 --- a/spring-cloud-previews/google-cloud-automl-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-automl-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-automl-spring-starter diff --git a/spring-cloud-previews/google-cloud-backupdr-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-backupdr-spring-starter/pom.xml index 9dab66d383..fc10e5f7ee 100644 --- a/spring-cloud-previews/google-cloud-backupdr-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-backupdr-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-backupdr-spring-starter diff --git a/spring-cloud-previews/google-cloud-bigqueryconnection-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-bigqueryconnection-spring-starter/pom.xml index 97cc4a102b..b459f807c0 100644 --- a/spring-cloud-previews/google-cloud-bigqueryconnection-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-bigqueryconnection-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-bigqueryconnection-spring-starter diff --git a/spring-cloud-previews/google-cloud-bigquerydatatransfer-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-bigquerydatatransfer-spring-starter/pom.xml index a6ea0f8078..29bb98c322 100644 --- a/spring-cloud-previews/google-cloud-bigquerydatatransfer-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-bigquerydatatransfer-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-bigquerydatatransfer-spring-starter diff --git a/spring-cloud-previews/google-cloud-bigqueryreservation-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-bigqueryreservation-spring-starter/pom.xml index b0046f312a..00e237ad78 100644 --- a/spring-cloud-previews/google-cloud-bigqueryreservation-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-bigqueryreservation-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-bigqueryreservation-spring-starter diff --git a/spring-cloud-previews/google-cloud-billing-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-billing-spring-starter/pom.xml index 0f2199c0b8..ff8a3d49f5 100644 --- a/spring-cloud-previews/google-cloud-billing-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-billing-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-billing-spring-starter diff --git a/spring-cloud-previews/google-cloud-billingbudgets-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-billingbudgets-spring-starter/pom.xml index 61963cb818..03514027ee 100644 --- a/spring-cloud-previews/google-cloud-billingbudgets-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-billingbudgets-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-billingbudgets-spring-starter diff --git a/spring-cloud-previews/google-cloud-binary-authorization-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-binary-authorization-spring-starter/pom.xml index eed1a29edd..714c7c5f03 100644 --- a/spring-cloud-previews/google-cloud-binary-authorization-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-binary-authorization-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-binary-authorization-spring-starter diff --git a/spring-cloud-previews/google-cloud-build-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-build-spring-starter/pom.xml index 927c523436..44d728e837 100644 --- a/spring-cloud-previews/google-cloud-build-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-build-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-build-spring-starter diff --git a/spring-cloud-previews/google-cloud-channel-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-channel-spring-starter/pom.xml index 37c2d5381f..323fd1c209 100644 --- a/spring-cloud-previews/google-cloud-channel-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-channel-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-channel-spring-starter diff --git a/spring-cloud-previews/google-cloud-cloudcontrolspartner-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-cloudcontrolspartner-spring-starter/pom.xml index dc05d5affe..01d6950255 100644 --- a/spring-cloud-previews/google-cloud-cloudcontrolspartner-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-cloudcontrolspartner-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-cloudcontrolspartner-spring-starter diff --git a/spring-cloud-previews/google-cloud-cloudquotas-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-cloudquotas-spring-starter/pom.xml index e4d1983762..b2386efa88 100644 --- a/spring-cloud-previews/google-cloud-cloudquotas-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-cloudquotas-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-cloudquotas-spring-starter diff --git a/spring-cloud-previews/google-cloud-compute-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-compute-spring-starter/pom.xml index 69f6ef0062..6810c0151b 100644 --- a/spring-cloud-previews/google-cloud-compute-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-compute-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-compute-spring-starter diff --git a/spring-cloud-previews/google-cloud-contact-center-insights-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-contact-center-insights-spring-starter/pom.xml index e2425b568d..6a257479e3 100644 --- a/spring-cloud-previews/google-cloud-contact-center-insights-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-contact-center-insights-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-contact-center-insights-spring-starter diff --git a/spring-cloud-previews/google-cloud-container-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-container-spring-starter/pom.xml index 4936b87ecb..98efd8472a 100644 --- a/spring-cloud-previews/google-cloud-container-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-container-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-container-spring-starter diff --git a/spring-cloud-previews/google-cloud-containeranalysis-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-containeranalysis-spring-starter/pom.xml index 856111cc36..3b89e84025 100644 --- a/spring-cloud-previews/google-cloud-containeranalysis-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-containeranalysis-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-containeranalysis-spring-starter diff --git a/spring-cloud-previews/google-cloud-data-fusion-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-data-fusion-spring-starter/pom.xml index e8a53789ed..10d1cddaf1 100644 --- a/spring-cloud-previews/google-cloud-data-fusion-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-data-fusion-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-data-fusion-spring-starter diff --git a/spring-cloud-previews/google-cloud-datacatalog-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-datacatalog-spring-starter/pom.xml index 830be60806..3aec1c059c 100644 --- a/spring-cloud-previews/google-cloud-datacatalog-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-datacatalog-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-datacatalog-spring-starter diff --git a/spring-cloud-previews/google-cloud-datalineage-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-datalineage-spring-starter/pom.xml index 7575362120..3ab7695882 100644 --- a/spring-cloud-previews/google-cloud-datalineage-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-datalineage-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-datalineage-spring-starter diff --git a/spring-cloud-previews/google-cloud-dataplex-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dataplex-spring-starter/pom.xml index e0fae93b69..5afd8b160f 100644 --- a/spring-cloud-previews/google-cloud-dataplex-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dataplex-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dataplex-spring-starter diff --git a/spring-cloud-previews/google-cloud-dataproc-metastore-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dataproc-metastore-spring-starter/pom.xml index 06aab5cdfa..41e50c7c29 100644 --- a/spring-cloud-previews/google-cloud-dataproc-metastore-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dataproc-metastore-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dataproc-metastore-spring-starter diff --git a/spring-cloud-previews/google-cloud-dataproc-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dataproc-spring-starter/pom.xml index 8b5e7f6ac5..39a6ec2947 100644 --- a/spring-cloud-previews/google-cloud-dataproc-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dataproc-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dataproc-spring-starter diff --git a/spring-cloud-previews/google-cloud-datastream-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-datastream-spring-starter/pom.xml index 30e5d9df05..a9587f1725 100644 --- a/spring-cloud-previews/google-cloud-datastream-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-datastream-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-datastream-spring-starter diff --git a/spring-cloud-previews/google-cloud-debugger-client-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-debugger-client-spring-starter/pom.xml index a0825c5d58..f38eb2abcc 100644 --- a/spring-cloud-previews/google-cloud-debugger-client-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-debugger-client-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-debugger-client-spring-starter diff --git a/spring-cloud-previews/google-cloud-deploy-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-deploy-spring-starter/pom.xml index 43691e0762..f2e1a0d99f 100644 --- a/spring-cloud-previews/google-cloud-deploy-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-deploy-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-deploy-spring-starter diff --git a/spring-cloud-previews/google-cloud-dialogflow-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dialogflow-spring-starter/pom.xml index 32d78652b4..b543087081 100644 --- a/spring-cloud-previews/google-cloud-dialogflow-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dialogflow-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dialogflow-spring-starter diff --git a/spring-cloud-previews/google-cloud-discoveryengine-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-discoveryengine-spring-starter/pom.xml index 7d0749b621..22c62b3255 100644 --- a/spring-cloud-previews/google-cloud-discoveryengine-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-discoveryengine-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-discoveryengine-spring-starter diff --git a/spring-cloud-previews/google-cloud-distributedcloudedge-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-distributedcloudedge-spring-starter/pom.xml index 796bea6110..ed34c5c2c9 100644 --- a/spring-cloud-previews/google-cloud-distributedcloudedge-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-distributedcloudedge-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-distributedcloudedge-spring-starter diff --git a/spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml index 9955cc98e9..68a9268032 100644 --- a/spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dlp-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dlp-spring-starter diff --git a/spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml index d1692889df..1e8f1e68c2 100644 --- a/spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-dms-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-dms-spring-starter diff --git a/spring-cloud-previews/google-cloud-document-ai-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-document-ai-spring-starter/pom.xml index 7a14338cdc..ad23f2a056 100644 --- a/spring-cloud-previews/google-cloud-document-ai-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-document-ai-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-document-ai-spring-starter diff --git a/spring-cloud-previews/google-cloud-domains-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-domains-spring-starter/pom.xml index 2b9b3d8889..2498ed0000 100644 --- a/spring-cloud-previews/google-cloud-domains-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-domains-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-domains-spring-starter diff --git a/spring-cloud-previews/google-cloud-edgenetwork-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-edgenetwork-spring-starter/pom.xml index a147d2bb74..8256ee6454 100644 --- a/spring-cloud-previews/google-cloud-edgenetwork-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-edgenetwork-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-edgenetwork-spring-starter diff --git a/spring-cloud-previews/google-cloud-essential-contacts-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-essential-contacts-spring-starter/pom.xml index 14be7d3aaf..70ae5a8e4c 100644 --- a/spring-cloud-previews/google-cloud-essential-contacts-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-essential-contacts-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-essential-contacts-spring-starter diff --git a/spring-cloud-previews/google-cloud-eventarc-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-eventarc-spring-starter/pom.xml index ad1cfa0c06..02715ddc3b 100644 --- a/spring-cloud-previews/google-cloud-eventarc-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-eventarc-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-eventarc-spring-starter diff --git a/spring-cloud-previews/google-cloud-filestore-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-filestore-spring-starter/pom.xml index cb8add0b94..3724cc4955 100644 --- a/spring-cloud-previews/google-cloud-filestore-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-filestore-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-filestore-spring-starter diff --git a/spring-cloud-previews/google-cloud-functions-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-functions-spring-starter/pom.xml index 60864b708c..5888d36e78 100644 --- a/spring-cloud-previews/google-cloud-functions-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-functions-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-functions-spring-starter diff --git a/spring-cloud-previews/google-cloud-gkehub-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-gkehub-spring-starter/pom.xml index 0ed163ef81..84ea7c890f 100644 --- a/spring-cloud-previews/google-cloud-gkehub-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-gkehub-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-gkehub-spring-starter diff --git a/spring-cloud-previews/google-cloud-gsuite-addons-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-gsuite-addons-spring-starter/pom.xml index 5f4b5b6ec8..2483e93b47 100644 --- a/spring-cloud-previews/google-cloud-gsuite-addons-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-gsuite-addons-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-gsuite-addons-spring-starter diff --git a/spring-cloud-previews/google-cloud-iamcredentials-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-iamcredentials-spring-starter/pom.xml index 07471fb56f..3b025e2a26 100644 --- a/spring-cloud-previews/google-cloud-iamcredentials-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-iamcredentials-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-iamcredentials-spring-starter diff --git a/spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml index bac2dd85ee..bb7fb7a521 100644 --- a/spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-iap-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-iap-spring-starter diff --git a/spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml index 0d4fa574fb..94c0c647c4 100644 --- a/spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-ids-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-ids-spring-starter diff --git a/spring-cloud-previews/google-cloud-infra-manager-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-infra-manager-spring-starter/pom.xml index eb5b8afc68..3f466e7b4d 100644 --- a/spring-cloud-previews/google-cloud-infra-manager-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-infra-manager-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-infra-manager-spring-starter diff --git a/spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml index e337fb9718..f954fb68e6 100644 --- a/spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-iot-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-iot-spring-starter diff --git a/spring-cloud-previews/google-cloud-language-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-language-spring-starter/pom.xml index dc2b719724..dd4825a44d 100644 --- a/spring-cloud-previews/google-cloud-language-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-language-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-language-spring-starter diff --git a/spring-cloud-previews/google-cloud-managed-identities-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-managed-identities-spring-starter/pom.xml index f7d5887672..4d1b009100 100644 --- a/spring-cloud-previews/google-cloud-managed-identities-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-managed-identities-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-managed-identities-spring-starter diff --git a/spring-cloud-previews/google-cloud-memcache-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-memcache-spring-starter/pom.xml index 15265c34db..9071727ec1 100644 --- a/spring-cloud-previews/google-cloud-memcache-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-memcache-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-memcache-spring-starter diff --git a/spring-cloud-previews/google-cloud-monitoring-dashboard-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-monitoring-dashboard-spring-starter/pom.xml index 532123a226..876ff0b446 100644 --- a/spring-cloud-previews/google-cloud-monitoring-dashboard-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-monitoring-dashboard-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-monitoring-dashboard-spring-starter diff --git a/spring-cloud-previews/google-cloud-network-management-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-network-management-spring-starter/pom.xml index 845e366e6b..7d677df71c 100644 --- a/spring-cloud-previews/google-cloud-network-management-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-network-management-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-network-management-spring-starter diff --git a/spring-cloud-previews/google-cloud-network-security-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-network-security-spring-starter/pom.xml index 54b45315ab..c6bcc89678 100644 --- a/spring-cloud-previews/google-cloud-network-security-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-network-security-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-network-security-spring-starter diff --git a/spring-cloud-previews/google-cloud-networkconnectivity-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-networkconnectivity-spring-starter/pom.xml index 141f7bb39c..51478481a2 100644 --- a/spring-cloud-previews/google-cloud-networkconnectivity-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-networkconnectivity-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-networkconnectivity-spring-starter diff --git a/spring-cloud-previews/google-cloud-notebooks-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-notebooks-spring-starter/pom.xml index ba82e7bb5a..ec50372548 100644 --- a/spring-cloud-previews/google-cloud-notebooks-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-notebooks-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-notebooks-spring-starter diff --git a/spring-cloud-previews/google-cloud-optimization-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-optimization-spring-starter/pom.xml index 6ea163658d..66c47fd3bb 100644 --- a/spring-cloud-previews/google-cloud-optimization-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-optimization-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-optimization-spring-starter diff --git a/spring-cloud-previews/google-cloud-orchestration-airflow-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-orchestration-airflow-spring-starter/pom.xml index e0983f4f60..75eb447b41 100644 --- a/spring-cloud-previews/google-cloud-orchestration-airflow-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-orchestration-airflow-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-orchestration-airflow-spring-starter diff --git a/spring-cloud-previews/google-cloud-orgpolicy-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-orgpolicy-spring-starter/pom.xml index a02ad352d5..17c7429514 100644 --- a/spring-cloud-previews/google-cloud-orgpolicy-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-orgpolicy-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-orgpolicy-spring-starter diff --git a/spring-cloud-previews/google-cloud-os-config-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-os-config-spring-starter/pom.xml index 52c497205e..3971b63710 100644 --- a/spring-cloud-previews/google-cloud-os-config-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-os-config-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-os-config-spring-starter diff --git a/spring-cloud-previews/google-cloud-os-login-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-os-login-spring-starter/pom.xml index 0af507229f..1226da6b27 100644 --- a/spring-cloud-previews/google-cloud-os-login-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-os-login-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-os-login-spring-starter diff --git a/spring-cloud-previews/google-cloud-policy-troubleshooter-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-policy-troubleshooter-spring-starter/pom.xml index 5307652f74..72252128d7 100644 --- a/spring-cloud-previews/google-cloud-policy-troubleshooter-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-policy-troubleshooter-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-policy-troubleshooter-spring-starter diff --git a/spring-cloud-previews/google-cloud-profiler-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-profiler-spring-starter/pom.xml index 0b9a2ef8a4..1065c13656 100644 --- a/spring-cloud-previews/google-cloud-profiler-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-profiler-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-profiler-spring-starter diff --git a/spring-cloud-previews/google-cloud-publicca-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-publicca-spring-starter/pom.xml index 277cf0de20..5ceaf0e612 100644 --- a/spring-cloud-previews/google-cloud-publicca-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-publicca-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-publicca-spring-starter diff --git a/spring-cloud-previews/google-cloud-recaptchaenterprise-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-recaptchaenterprise-spring-starter/pom.xml index 1d9b57c8e7..4b18af9569 100644 --- a/spring-cloud-previews/google-cloud-recaptchaenterprise-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-recaptchaenterprise-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-recaptchaenterprise-spring-starter diff --git a/spring-cloud-previews/google-cloud-recommender-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-recommender-spring-starter/pom.xml index 7bd300461a..d4d55cec1f 100644 --- a/spring-cloud-previews/google-cloud-recommender-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-recommender-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-recommender-spring-starter diff --git a/spring-cloud-previews/google-cloud-redis-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-redis-spring-starter/pom.xml index 92433293a0..9443c84add 100644 --- a/spring-cloud-previews/google-cloud-redis-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-redis-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-redis-spring-starter diff --git a/spring-cloud-previews/google-cloud-resource-settings-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-resource-settings-spring-starter/pom.xml index b282784b78..9716a4d704 100644 --- a/spring-cloud-previews/google-cloud-resource-settings-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-resource-settings-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-resource-settings-spring-starter diff --git a/spring-cloud-previews/google-cloud-retail-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-retail-spring-starter/pom.xml index ccc14dc9df..25cbe160d6 100644 --- a/spring-cloud-previews/google-cloud-retail-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-retail-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-retail-spring-starter diff --git a/spring-cloud-previews/google-cloud-scheduler-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-scheduler-spring-starter/pom.xml index 5eecd1e3c1..ce4952a264 100644 --- a/spring-cloud-previews/google-cloud-scheduler-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-scheduler-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-scheduler-spring-starter diff --git a/spring-cloud-previews/google-cloud-securesourcemanager-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-securesourcemanager-spring-starter/pom.xml index e02194c064..810011e353 100644 --- a/spring-cloud-previews/google-cloud-securesourcemanager-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-securesourcemanager-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-securesourcemanager-spring-starter diff --git a/spring-cloud-previews/google-cloud-security-private-ca-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-security-private-ca-spring-starter/pom.xml index 315cdd98fd..b13a77eafe 100644 --- a/spring-cloud-previews/google-cloud-security-private-ca-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-security-private-ca-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-security-private-ca-spring-starter diff --git a/spring-cloud-previews/google-cloud-securitycenter-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-securitycenter-spring-starter/pom.xml index d564b4884e..a768dedf90 100644 --- a/spring-cloud-previews/google-cloud-securitycenter-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-securitycenter-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-securitycenter-spring-starter diff --git a/spring-cloud-previews/google-cloud-securitycentermanagement-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-securitycentermanagement-spring-starter/pom.xml index dc8efcbc19..4eacc0d5ba 100644 --- a/spring-cloud-previews/google-cloud-securitycentermanagement-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-securitycentermanagement-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-securitycentermanagement-spring-starter diff --git a/spring-cloud-previews/google-cloud-securityposture-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-securityposture-spring-starter/pom.xml index 565b0253d6..748b549f51 100644 --- a/spring-cloud-previews/google-cloud-securityposture-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-securityposture-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-securityposture-spring-starter diff --git a/spring-cloud-previews/google-cloud-service-control-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-service-control-spring-starter/pom.xml index 9eca3d25d4..319409e38c 100644 --- a/spring-cloud-previews/google-cloud-service-control-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-service-control-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-service-control-spring-starter diff --git a/spring-cloud-previews/google-cloud-service-management-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-service-management-spring-starter/pom.xml index 8dae372be9..9922e964e9 100644 --- a/spring-cloud-previews/google-cloud-service-management-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-service-management-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-service-management-spring-starter diff --git a/spring-cloud-previews/google-cloud-service-usage-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-service-usage-spring-starter/pom.xml index 9ac345509b..78b6492fcd 100644 --- a/spring-cloud-previews/google-cloud-service-usage-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-service-usage-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-service-usage-spring-starter diff --git a/spring-cloud-previews/google-cloud-servicedirectory-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-servicedirectory-spring-starter/pom.xml index c77bf41579..e445ab5fcd 100644 --- a/spring-cloud-previews/google-cloud-servicedirectory-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-servicedirectory-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-servicedirectory-spring-starter diff --git a/spring-cloud-previews/google-cloud-shell-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-shell-spring-starter/pom.xml index d8ce6e944e..fd47c89d89 100644 --- a/spring-cloud-previews/google-cloud-shell-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-shell-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-shell-spring-starter diff --git a/spring-cloud-previews/google-cloud-speech-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-speech-spring-starter/pom.xml index d1d676333b..79beb05ff5 100644 --- a/spring-cloud-previews/google-cloud-speech-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-speech-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-speech-spring-starter diff --git a/spring-cloud-previews/google-cloud-storage-transfer-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-storage-transfer-spring-starter/pom.xml index 1af96c1db2..e6bae884c5 100644 --- a/spring-cloud-previews/google-cloud-storage-transfer-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-storage-transfer-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-storage-transfer-spring-starter diff --git a/spring-cloud-previews/google-cloud-talent-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-talent-spring-starter/pom.xml index 2557bb46d8..afbe35bd72 100644 --- a/spring-cloud-previews/google-cloud-talent-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-talent-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-talent-spring-starter diff --git a/spring-cloud-previews/google-cloud-tasks-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-tasks-spring-starter/pom.xml index 7681e0e0f9..0fbae31904 100644 --- a/spring-cloud-previews/google-cloud-tasks-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-tasks-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-tasks-spring-starter diff --git a/spring-cloud-previews/google-cloud-telcoautomation-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-telcoautomation-spring-starter/pom.xml index 8b250ca42d..c0d8c1beeb 100644 --- a/spring-cloud-previews/google-cloud-telcoautomation-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-telcoautomation-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-telcoautomation-spring-starter diff --git a/spring-cloud-previews/google-cloud-texttospeech-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-texttospeech-spring-starter/pom.xml index 3b2ae4dd38..e84557ba26 100644 --- a/spring-cloud-previews/google-cloud-texttospeech-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-texttospeech-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-texttospeech-spring-starter diff --git a/spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml index 02b2b954dc..0591a6a94c 100644 --- a/spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-tpu-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-tpu-spring-starter diff --git a/spring-cloud-previews/google-cloud-trace-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-trace-spring-starter/pom.xml index 74ab95b215..003f6521b8 100644 --- a/spring-cloud-previews/google-cloud-trace-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-trace-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-trace-spring-starter diff --git a/spring-cloud-previews/google-cloud-translate-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-translate-spring-starter/pom.xml index c56d164c41..d8a567a34b 100644 --- a/spring-cloud-previews/google-cloud-translate-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-translate-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-translate-spring-starter diff --git a/spring-cloud-previews/google-cloud-video-intelligence-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-video-intelligence-spring-starter/pom.xml index 96a99d8b7d..1c4060b0ba 100644 --- a/spring-cloud-previews/google-cloud-video-intelligence-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-video-intelligence-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-video-intelligence-spring-starter diff --git a/spring-cloud-previews/google-cloud-video-stitcher-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-video-stitcher-spring-starter/pom.xml index 331653d974..afecd8aef9 100644 --- a/spring-cloud-previews/google-cloud-video-stitcher-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-video-stitcher-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-video-stitcher-spring-starter diff --git a/spring-cloud-previews/google-cloud-video-transcoder-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-video-transcoder-spring-starter/pom.xml index f8835e4c87..a589d70a46 100644 --- a/spring-cloud-previews/google-cloud-video-transcoder-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-video-transcoder-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-video-transcoder-spring-starter diff --git a/spring-cloud-previews/google-cloud-vmmigration-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-vmmigration-spring-starter/pom.xml index 2b6878463b..0c38746dd8 100644 --- a/spring-cloud-previews/google-cloud-vmmigration-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-vmmigration-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-vmmigration-spring-starter diff --git a/spring-cloud-previews/google-cloud-vpcaccess-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-vpcaccess-spring-starter/pom.xml index e1a54f3850..883b23742d 100644 --- a/spring-cloud-previews/google-cloud-vpcaccess-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-vpcaccess-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-vpcaccess-spring-starter diff --git a/spring-cloud-previews/google-cloud-webrisk-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-webrisk-spring-starter/pom.xml index 6708cb2cb7..538da8ecd9 100644 --- a/spring-cloud-previews/google-cloud-webrisk-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-webrisk-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-webrisk-spring-starter diff --git a/spring-cloud-previews/google-cloud-websecurityscanner-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-websecurityscanner-spring-starter/pom.xml index a5ba5f63be..c1d43b168a 100644 --- a/spring-cloud-previews/google-cloud-websecurityscanner-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-websecurityscanner-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-websecurityscanner-spring-starter diff --git a/spring-cloud-previews/google-cloud-workflow-executions-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-workflow-executions-spring-starter/pom.xml index 57907e74f4..57004cf4a9 100644 --- a/spring-cloud-previews/google-cloud-workflow-executions-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-workflow-executions-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-workflow-executions-spring-starter diff --git a/spring-cloud-previews/google-cloud-workflows-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-workflows-spring-starter/pom.xml index 886f9b3929..fa2ea6037d 100644 --- a/spring-cloud-previews/google-cloud-workflows-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-workflows-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-workflows-spring-starter diff --git a/spring-cloud-previews/google-cloud-workstations-spring-starter/pom.xml b/spring-cloud-previews/google-cloud-workstations-spring-starter/pom.xml index 51194996af..af9766939f 100644 --- a/spring-cloud-previews/google-cloud-workstations-spring-starter/pom.xml +++ b/spring-cloud-previews/google-cloud-workstations-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-cloud-workstations-spring-starter diff --git a/spring-cloud-previews/google-iam-admin-spring-starter/pom.xml b/spring-cloud-previews/google-iam-admin-spring-starter/pom.xml index 7cef6fa17f..17b2231038 100644 --- a/spring-cloud-previews/google-iam-admin-spring-starter/pom.xml +++ b/spring-cloud-previews/google-iam-admin-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-iam-admin-spring-starter diff --git a/spring-cloud-previews/google-iam-policy-spring-starter/pom.xml b/spring-cloud-previews/google-iam-policy-spring-starter/pom.xml index 3297534520..ec693dcf33 100644 --- a/spring-cloud-previews/google-iam-policy-spring-starter/pom.xml +++ b/spring-cloud-previews/google-iam-policy-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-iam-policy-spring-starter diff --git a/spring-cloud-previews/google-identity-accesscontextmanager-spring-starter/pom.xml b/spring-cloud-previews/google-identity-accesscontextmanager-spring-starter/pom.xml index ad1178dc62..c457a70422 100644 --- a/spring-cloud-previews/google-identity-accesscontextmanager-spring-starter/pom.xml +++ b/spring-cloud-previews/google-identity-accesscontextmanager-spring-starter/pom.xml @@ -6,7 +6,7 @@ com.google.cloud spring-cloud-gcp-starters - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT ../../spring-cloud-gcp-starters/pom.xml google-identity-accesscontextmanager-spring-starter diff --git a/spring-cloud-previews/pom.xml b/spring-cloud-previews/pom.xml index eaf3175534..b6e0194746 100644 --- a/spring-cloud-previews/pom.xml +++ b/spring-cloud-previews/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 diff --git a/spring-cloud-spanner-spring-data-r2dbc/pom.xml b/spring-cloud-spanner-spring-data-r2dbc/pom.xml index 6204da7eac..15a45dbe61 100644 --- a/spring-cloud-spanner-spring-data-r2dbc/pom.xml +++ b/spring-cloud-spanner-spring-data-r2dbc/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gcp com.google.cloud - 6.0.0-SNAPSHOT + 5.9.1-SNAPSHOT 4.0.0 From 23610fd5946a3fe6060851dee76de5a59bd49d14 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 6 Jan 2025 15:05:02 -0500 Subject: [PATCH 85/96] update secretmanager sample --- .../spring-cloud-gcp-secretmanager-sample/pom.xml | 7 +++++++ .../java/com/example/SecretManagerWebController.java | 12 ++++++++++-- .../src/main/resources/application.properties | 6 +++++- .../src/main/resources/templates/index.html | 1 + ...cretManagerSampleLoadSecretsIntegrationTests.java | 1 + 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml index 0ba156d52f..2089fc9c12 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml @@ -56,6 +56,13 @@ + + org.springframework + spring-framework-bom + 6.2.2-SNAPSHOT + pom + import + com.google.cloud spring-cloud-gcp-dependencies diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java index ed2e1a05d5..ae1834c880 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java @@ -39,12 +39,19 @@ public class SecretManagerWebController { // secret can be refreshed when decorated with @RefreshScope on the class. private final SecretConfiguration configuration; + // This syntax is not recommended. Please switch your code to the `sm@my_secret` syntax. + @Value("${${sm://application-fake}:DEFAULT}") + private String defaultSecretDeprecatedSyntax; + // For the default value takes place, there should be no property called `application-fake` // in property files. - @Value("${${sm://application-fake}:DEFAULT}") + // It is not necessary to escape the color character by nesting + // placeholders as done with the legacy syntax (${${sm://secret}:DEFAULT}). + @Value("${sm@application-fake:DEFAULT}") private String defaultSecret; + // Application secrets can be accessed using @Value syntax. - @Value("${sm://application-secret}") + @Value("${sm@application-secret}") private String appSecretFromValue; public SecretManagerWebController(SecretManagerTemplate secretManagerTemplate, @@ -56,6 +63,7 @@ public SecretManagerWebController(SecretManagerTemplate secretManagerTemplate, @GetMapping("/") public ModelAndView renderIndex(ModelMap map) { + System.out.println(defaultSecretDeprecatedSyntax); map.put("applicationDefaultSecret", defaultSecret); map.put(APPLICATION_SECRET_FROM_VALUE, appSecretFromValue); map.put("applicationSecretFromConfigurationProperties", configuration.getSecret()); diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties index a785080cd1..20e9d66626 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties @@ -11,7 +11,11 @@ management.endpoints.web.exposure.include=refresh # enable external resource from GCP Secret Manager. +# Here we enable the config loader for GCP Secret Manager +# The sm:// syntax has been Deprecated and may be removed in a future version of +# Spring Cloud GCP. Please use the sm@ syntax instead. spring.config.import=sm:// -application.secret=${sm://application-secret} +#spring.config.import=sm@ +application.secret=${sm@application-secret} # enable default secret value when accessing non-exited secret. spring.cloud.gcp.secretmanager.allow-default-secret=true diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/templates/index.html b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/templates/index.html index 5f80c005d4..c340cca39e 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/templates/index.html +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/templates/index.html @@ -46,6 +46,7 @@

Secret Manager Property Source


Default Application secret if not found: [[${applicationDefaultSecret}]]
Application secret from @Value: [[${applicationSecretFromValue}]]
+ Application secret from @ConfigurationProperties: [[${applicationSecretFromConfigurationProperties}]] diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java index 2a56ca8998..e21fd8c86a 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java @@ -56,5 +56,6 @@ void testApplicationStartupSecretLoadsCorrectly() { "Application secret from @ConfigurationProperties: " + SECRET_CONTENT + ""); + System.out.println(response.getBody()); } } From 6ce3224d5d7a63b9e0554b5b821065cf254d5a5e Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 6 Jan 2025 15:05:35 -0500 Subject: [PATCH 86/96] update secret manager to support sm@ and sm:// syntax --- ...cretManagerConfigDataLocationResolver.java | 17 ++++++--- .../SecretManagerPropertyUtils.java | 27 +++++++++----- .../SecretManagerSyntaxUtil.java | 35 +++++++++++++++++++ 3 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtil.java diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolver.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolver.java index f75c9a1d1f..7737730816 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolver.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolver.java @@ -16,6 +16,9 @@ package com.google.cloud.spring.autoconfigure.secretmanager; +import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtil.getMatchedPrefixes; +import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtil.warnIfUsingDeprecatedSyntax; + import com.google.cloud.secretmanager.v1.SecretManagerServiceClient; import com.google.cloud.secretmanager.v1.SecretManagerServiceSettings; import com.google.cloud.spring.core.DefaultCredentialsProvider; @@ -23,10 +26,14 @@ import com.google.cloud.spring.core.GcpProjectIdProvider; import com.google.cloud.spring.core.UserAgentHeaderProvider; import com.google.cloud.spring.secretmanager.SecretManagerTemplate; +import com.google.common.collect.ImmutableList; import java.io.IOException; import java.util.Collections; import java.util.List; +import java.util.Optional; import org.apache.arrow.util.VisibleForTesting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.boot.BootstrapRegistry; import org.springframework.boot.context.config.ConfigDataLocation; @@ -38,10 +45,8 @@ public class SecretManagerConfigDataLocationResolver implements ConfigDataLocationResolver { - /** - * ConfigData Prefix for Google Cloud Secret Manager. - */ - public static final String PREFIX = "sm://"; + private static final Logger logger = LoggerFactory.getLogger(SecretManagerConfigDataLocationResolver.class); + /** * A static client to avoid creating another client after refreshing. */ @@ -50,7 +55,9 @@ public class SecretManagerConfigDataLocationResolver implements @Override public boolean isResolvable(ConfigDataLocationResolverContext context, ConfigDataLocation location) { - return location.hasPrefix(PREFIX); + Optional matchedPrefix = getMatchedPrefixes(location::hasPrefix); + warnIfUsingDeprecatedSyntax(logger, matchedPrefix.orElse("")); + return matchedPrefix.isPresent(); } @Override diff --git a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java index 5d3c2103fa..ed1aa03692 100644 --- a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java +++ b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java @@ -16,24 +16,33 @@ package com.google.cloud.spring.secretmanager; +import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtil.getMatchedPrefixes; +import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtil.warnIfUsingDeprecatedSyntax; + import com.google.cloud.secretmanager.v1.SecretVersionName; import com.google.cloud.spring.core.GcpProjectIdProvider; +import java.util.Optional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.util.Assert; /** Utilities for parsing Secret Manager properties. */ final class SecretManagerPropertyUtils { - private static final String GCP_SECRET_PREFIX = "sm://"; + private static final Logger logger = LoggerFactory.getLogger(SecretManagerPropertyUtils.class); private SecretManagerPropertyUtils() {} + static SecretVersionName getSecretVersionName( - String input, GcpProjectIdProvider projectIdProvider) { - if (!input.startsWith(GCP_SECRET_PREFIX)) { + final String input, GcpProjectIdProvider projectIdProvider) { + Optional usedPrefix = getMatchedPrefixes(input::startsWith); + if (usedPrefix.isEmpty()) { return null; } + warnIfUsingDeprecatedSyntax(logger, usedPrefix.orElse("")); - String resourcePath = input.substring(GCP_SECRET_PREFIX.length()); + String resourcePath = input.substring(usedPrefix.get().length()); String[] tokens = resourcePath.split("/"); String projectId = projectIdProvider.getProjectId(); @@ -41,26 +50,26 @@ static SecretVersionName getSecretVersionName( String version = "latest"; if (tokens.length == 1) { - // property is form "sm://" + // property is form "sm@" secretId = tokens[0]; } else if (tokens.length == 2) { - // property is form "sm:///" + // property is form "sm@/" secretId = tokens[0]; version = tokens[1]; } else if (tokens.length == 3) { - // property is form "sm:////" + // property is form "sm@//" projectId = tokens[0]; secretId = tokens[1]; version = tokens[2]; } else if (tokens.length == 4 && tokens[0].equals("projects") && tokens[2].equals("secrets")) { - // property is form "sm://projects//secrets/" + // property is form "sm@projects//secrets/" projectId = tokens[1]; secretId = tokens[3]; } else if (tokens.length == 6 && tokens[0].equals("projects") && tokens[2].equals("secrets") && tokens[4].equals("versions")) { - // property is form "sm://projects//secrets//versions/" + // property is form "sm@projects//secrets//versions/" projectId = tokens[1]; secretId = tokens[3]; version = tokens[5]; diff --git a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtil.java b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtil.java new file mode 100644 index 0000000000..166c4b47c5 --- /dev/null +++ b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtil.java @@ -0,0 +1,35 @@ +package com.google.cloud.spring.secretmanager; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import java.util.Optional; +import org.slf4j.Logger; + +public class SecretManagerSyntaxUtil { + private static final String DEPRECATED_PREFIX = "sm://"; + + private static final String PREFERRED_PREFIX = "sm@"; + + /** + * Prefixes for Google Cloud Secret Manager resources. + */ + public static final List PREFIXES = ImmutableList.of(PREFERRED_PREFIX, DEPRECATED_PREFIX); + + public static Optional getMatchedPrefixes(PrefixMatcher matcher) { + return PREFIXES.stream().filter(matcher::matches).findFirst(); + } + + public static void warnIfUsingDeprecatedSyntax(Logger logger, String value) { + if (!logger.isWarnEnabled() || !value.startsWith(DEPRECATED_PREFIX)) { + return; + } + logger.warn(String.format("Detected usage of deprecated prefix %s. This may be removed in a " + + "future version of Spring Cloud GCP. Please use the new prefix %s instead.", + DEPRECATED_PREFIX, PREFERRED_PREFIX)); + } + + public interface PrefixMatcher { + boolean matches(String input); + } + +} From 66a2dcad739ca6fa77dd9fece7aa0cd962aa3ee5 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 6 Jan 2025 15:21:47 -0500 Subject: [PATCH 87/96] add parameterized tests for sm:// and sm@ in secretmanager --- .../SecretManagerPropertyUtils.java | 4 +- ...til.java => SecretManagerSyntaxUtils.java} | 18 +- .../SecretManagerPropertyUtilsTests.java | 55 ++- .../SecretManagerSyntaxUtilsTest.java | 333 ++++++++++++++++++ 4 files changed, 389 insertions(+), 21 deletions(-) rename spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/{SecretManagerSyntaxUtil.java => SecretManagerSyntaxUtils.java} (62%) create mode 100644 spring-cloud-gcp-secretmanager/src/test/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtilsTest.java diff --git a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java index ed1aa03692..840a26a8d9 100644 --- a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java +++ b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java @@ -16,8 +16,8 @@ package com.google.cloud.spring.secretmanager; -import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtil.getMatchedPrefixes; -import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtil.warnIfUsingDeprecatedSyntax; +import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtils.getMatchedPrefixes; +import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtils.warnIfUsingDeprecatedSyntax; import com.google.cloud.secretmanager.v1.SecretVersionName; import com.google.cloud.spring.core.GcpProjectIdProvider; diff --git a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtil.java b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtils.java similarity index 62% rename from spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtil.java rename to spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtils.java index 166c4b47c5..9ed68aff27 100644 --- a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtil.java +++ b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtils.java @@ -1,3 +1,19 @@ +/* + * Copyright 2025 the original author or authors. + * + * 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 + * + * https://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.google.cloud.spring.secretmanager; import com.google.common.collect.ImmutableList; @@ -5,7 +21,7 @@ import java.util.Optional; import org.slf4j.Logger; -public class SecretManagerSyntaxUtil { +public class SecretManagerSyntaxUtils { private static final String DEPRECATED_PREFIX = "sm://"; private static final String PREFERRED_PREFIX = "sm@"; diff --git a/spring-cloud-gcp-secretmanager/src/test/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtilsTests.java b/spring-cloud-gcp-secretmanager/src/test/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtilsTests.java index 436a20542b..77e235a401 100644 --- a/spring-cloud-gcp-secretmanager/src/test/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtilsTests.java +++ b/spring-cloud-gcp-secretmanager/src/test/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtilsTests.java @@ -19,14 +19,27 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy; import com.google.cloud.secretmanager.v1.SecretVersionName; import com.google.cloud.spring.core.GcpProjectIdProvider; +import java.util.stream.Stream; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; class SecretManagerPropertyUtilsTests { private static final GcpProjectIdProvider DEFAULT_PROJECT_ID_PROVIDER = () -> "defaultProject"; + static Stream prefixes() { + return Stream.of( + Arguments.of("sm://"), + Arguments.of("sm@") + ); + } + @Test void testNonSecret() { String property = "spring.cloud.datasource"; @@ -36,9 +49,10 @@ void testNonSecret() { assertThat(secretIdentifier).isNull(); } - @Test - void testInvalidSecretFormat_missingSecretId() { - String property = "sm://"; + @ParameterizedTest + @MethodSource("prefixes") + void testInvalidSecretFormat_missingSecretId(String prefix) { + String property = prefix + ""; assertThatThrownBy( () -> @@ -48,9 +62,10 @@ void testInvalidSecretFormat_missingSecretId() { .hasMessageContaining("The GCP Secret Manager secret id must not be empty"); } - @Test - void testShortProperty_secretId() { - String property = "sm://the-secret"; + @ParameterizedTest + @MethodSource("prefixes") + void testShortProperty_secretId(String prefix) { + String property = prefix + "the-secret"; SecretVersionName secretIdentifier = SecretManagerPropertyUtils.getSecretVersionName(property, DEFAULT_PROJECT_ID_PROVIDER); @@ -59,9 +74,10 @@ void testShortProperty_secretId() { assertThat(secretIdentifier.getSecretVersion()).isEqualTo("latest"); } - @Test - void testShortProperty_projectSecretId() { - String property = "sm://the-secret/the-version"; + @ParameterizedTest + @MethodSource("prefixes") + void testShortProperty_projectSecretId(String prefix) { + String property = prefix + "the-secret/the-version"; SecretVersionName secretIdentifier = SecretManagerPropertyUtils.getSecretVersionName(property, DEFAULT_PROJECT_ID_PROVIDER); @@ -70,9 +86,10 @@ void testShortProperty_projectSecretId() { assertThat(secretIdentifier.getSecretVersion()).isEqualTo("the-version"); } - @Test - void testShortProperty_projectSecretIdVersion() { - String property = "sm://my-project/the-secret/2"; + @ParameterizedTest + @MethodSource("prefixes") + void testShortProperty_projectSecretIdVersion(String prefix) { + String property = prefix + "my-project/the-secret/2"; SecretVersionName secretIdentifier = SecretManagerPropertyUtils.getSecretVersionName(property, DEFAULT_PROJECT_ID_PROVIDER); @@ -81,9 +98,10 @@ void testShortProperty_projectSecretIdVersion() { assertThat(secretIdentifier.getSecretVersion()).isEqualTo("2"); } - @Test - void testLongProperty_projectSecret() { - String property = "sm://projects/my-project/secrets/the-secret"; + @ParameterizedTest + @MethodSource("prefixes") + void testLongProperty_projectSecret(String prefix) { + String property = prefix + "projects/my-project/secrets/the-secret"; SecretVersionName secretIdentifier = SecretManagerPropertyUtils.getSecretVersionName(property, DEFAULT_PROJECT_ID_PROVIDER); @@ -92,9 +110,10 @@ void testLongProperty_projectSecret() { assertThat(secretIdentifier.getSecretVersion()).isEqualTo("latest"); } - @Test - void testLongProperty_projectSecretVersion() { - String property = "sm://projects/my-project/secrets/the-secret/versions/3"; + @ParameterizedTest + @MethodSource("prefixes") + void testLongProperty_projectSecretVersion(String prefix) { + String property = prefix + "projects/my-project/secrets/the-secret/versions/3"; SecretVersionName secretIdentifier = SecretManagerPropertyUtils.getSecretVersionName(property, DEFAULT_PROJECT_ID_PROVIDER); diff --git a/spring-cloud-gcp-secretmanager/src/test/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtilsTest.java b/spring-cloud-gcp-secretmanager/src/test/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtilsTest.java new file mode 100644 index 0000000000..7edcace04c --- /dev/null +++ b/spring-cloud-gcp-secretmanager/src/test/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtilsTest.java @@ -0,0 +1,333 @@ +package com.google.cloud.spring.secretmanager; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.Marker; + +public class SecretManagerSyntaxUtilsTest { + + @Test + public void testDeprecatedSyntaxWarns() { + FakeLogger logger = new FakeLogger(); + SecretManagerSyntaxUtils.warnIfUsingDeprecatedSyntax(logger, "sm@my-secret"); + assertThat(logger.getWarnCounter()).isEqualTo(0); + SecretManagerSyntaxUtils.warnIfUsingDeprecatedSyntax(logger, "sm://my-secret"); + assertThat(logger.getWarnCounter()).isEqualTo(1); + } + + public class FakeLogger implements Logger { + + private int warnCounter; + + public int getWarnCounter() { + return warnCounter; + } + + @Override + public void warn(String s) { + warnCounter++; + } + + @Override + public void warn(String s, Object o) { + warnCounter++; + } + + @Override + public void warn(String s, Object... objects) { + warnCounter++; + } + + @Override + public void warn(String s, Object o, Object o1) { + warnCounter++; + } + + @Override + public void warn(String s, Throwable throwable) { + warnCounter++; + } + + @Override + public boolean isWarnEnabled(Marker marker) { + return true; + } + + @Override + public void warn(Marker marker, String s) { + warnCounter++; + } + + @Override + public void warn(Marker marker, String s, Object o) { + warnCounter++; + } + + @Override + public void warn(Marker marker, String s, Object o, Object o1) { + warnCounter++; + } + + @Override + public void warn(Marker marker, String s, Object... objects) { + warnCounter++; + } + + @Override + public void warn(Marker marker, String s, Throwable throwable) { + warnCounter++; + } + + @Override + public String getName() { + return ""; + } + + @Override + public boolean isTraceEnabled() { + return false; + } + + @Override + public void trace(String s) { + + } + + @Override + public void trace(String s, Object o) { + + } + + @Override + public void trace(String s, Object o, Object o1) { + + } + + @Override + public void trace(String s, Object... objects) { + + } + + @Override + public void trace(String s, Throwable throwable) { + + } + + @Override + public boolean isTraceEnabled(Marker marker) { + return false; + } + + @Override + public void trace(Marker marker, String s) { + + } + + @Override + public void trace(Marker marker, String s, Object o) { + + } + + @Override + public void trace(Marker marker, String s, Object o, Object o1) { + + } + + @Override + public void trace(Marker marker, String s, Object... objects) { + + } + + @Override + public void trace(Marker marker, String s, Throwable throwable) { + + } + + @Override + public boolean isDebugEnabled() { + return false; + } + + @Override + public void debug(String s) { + + } + + @Override + public void debug(String s, Object o) { + + } + + @Override + public void debug(String s, Object o, Object o1) { + + } + + @Override + public void debug(String s, Object... objects) { + + } + + @Override + public void debug(String s, Throwable throwable) { + + } + + @Override + public boolean isDebugEnabled(Marker marker) { + return false; + } + + @Override + public void debug(Marker marker, String s) { + + } + + @Override + public void debug(Marker marker, String s, Object o) { + + } + + @Override + public void debug(Marker marker, String s, Object o, Object o1) { + + } + + @Override + public void debug(Marker marker, String s, Object... objects) { + + } + + @Override + public void debug(Marker marker, String s, Throwable throwable) { + + } + + @Override + public boolean isInfoEnabled() { + return false; + } + + @Override + public void info(String s) { + + } + + @Override + public void info(String s, Object o) { + + } + + @Override + public void info(String s, Object o, Object o1) { + + } + + @Override + public void info(String s, Object... objects) { + + } + + @Override + public void info(String s, Throwable throwable) { + + } + + @Override + public boolean isInfoEnabled(Marker marker) { + return false; + } + + @Override + public void info(Marker marker, String s) { + + } + + @Override + public void info(Marker marker, String s, Object o) { + + } + + @Override + public void info(Marker marker, String s, Object o, Object o1) { + + } + + @Override + public void info(Marker marker, String s, Object... objects) { + + } + + @Override + public void info(Marker marker, String s, Throwable throwable) { + + } + + @Override + public boolean isWarnEnabled() { + return true; + } + + @Override + public boolean isErrorEnabled() { + return false; + } + + @Override + public void error(String s) { + + } + + @Override + public void error(String s, Object o) { + + } + + @Override + public void error(String s, Object o, Object o1) { + + } + + @Override + public void error(String s, Object... objects) { + + } + + @Override + public void error(String s, Throwable throwable) { + + } + + @Override + public boolean isErrorEnabled(Marker marker) { + return false; + } + + @Override + public void error(Marker marker, String s) { + + } + + @Override + public void error(Marker marker, String s, Object o) { + + } + + @Override + public void error(Marker marker, String s, Object o, Object o1) { + + } + + @Override + public void error(Marker marker, String s, Object... objects) { + + } + + @Override + public void error(Marker marker, String s, Throwable throwable) { + + } + } +} From 2d9bfbefa0a49865299002f729889ad4cfba9e48 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 6 Jan 2025 15:30:44 -0500 Subject: [PATCH 88/96] adapt secret manager autoconfig tests to new prefix --- ...cretManagerConfigDataLocationResolver.java | 5 ++- .../SecretManagerCompatibilityTests.java | 33 +++++++++++++------ ...erConfigDataLocationResolverUnitTests.java | 27 +++++++++++---- 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolver.java b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolver.java index 7737730816..3b58a9d55d 100644 --- a/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolver.java +++ b/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolver.java @@ -16,8 +16,8 @@ package com.google.cloud.spring.autoconfigure.secretmanager; -import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtil.getMatchedPrefixes; -import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtil.warnIfUsingDeprecatedSyntax; +import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtils.getMatchedPrefixes; +import static com.google.cloud.spring.secretmanager.SecretManagerSyntaxUtils.warnIfUsingDeprecatedSyntax; import com.google.cloud.secretmanager.v1.SecretManagerServiceClient; import com.google.cloud.secretmanager.v1.SecretManagerServiceSettings; @@ -26,7 +26,6 @@ import com.google.cloud.spring.core.GcpProjectIdProvider; import com.google.cloud.spring.core.UserAgentHeaderProvider; import com.google.cloud.spring.secretmanager.SecretManagerTemplate; -import com.google.common.collect.ImmutableList; import java.io.IOException; import java.util.Collections; import java.util.List; diff --git a/spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerCompatibilityTests.java b/spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerCompatibilityTests.java index bd807f5600..a2fbcf898f 100644 --- a/spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerCompatibilityTests.java +++ b/spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerCompatibilityTests.java @@ -11,8 +11,12 @@ import com.google.cloud.secretmanager.v1.SecretPayload; import com.google.cloud.secretmanager.v1.SecretVersionName; import com.google.protobuf.ByteString; +import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.springframework.boot.BootstrapRegistry.InstanceSupplier; import org.springframework.boot.WebApplicationType; import org.springframework.boot.builder.SpringApplicationBuilder; @@ -28,6 +32,13 @@ class SecretManagerCompatibilityTests { private SpringApplicationBuilder application; private SecretManagerServiceClient client; + static Stream prefixes() { + return Stream.of( + Arguments.of("sm://"), + Arguments.of("sm@") + ); + } + @BeforeEach void init() { application = new SpringApplicationBuilder(SecretManagerCompatibilityTests.class) @@ -64,10 +75,11 @@ void init() { * com.google.cloud.spring.secretmanager.SecretManagerTemplate} autoconfiguration and properties * resolved. */ - @Test - void testConfigurationWhenDefaultSecretIsNotAllowed() { + @ParameterizedTest + @MethodSource("prefixes") + void testConfigurationWhenDefaultSecretIsNotAllowed(String prefix) { application.properties( - "spring.config.import=sm://") + "spring.config.import=" + prefix) .addBootstrapRegistryInitializer( (registry) -> registry.registerIfAbsent( SecretManagerServiceClient.class, @@ -76,17 +88,18 @@ void testConfigurationWhenDefaultSecretIsNotAllowed() { ); try (ConfigurableApplicationContext applicationContext = application.run()) { ConfigurableEnvironment environment = applicationContext.getEnvironment(); - assertThat(environment.getProperty("sm://my-secret")).isEqualTo("newSecret"); - assertThatThrownBy(() -> environment.getProperty("sm://fake-secret")) + assertThat(environment.getProperty(prefix + "my-secret")).isEqualTo("newSecret"); + assertThatThrownBy(() -> environment.getProperty(prefix + "fake-secret")) .isExactlyInstanceOf(NotFoundException.class); } } - @Test - void testConfigurationWhenDefaultSecretIsAllowed() { + @ParameterizedTest + @MethodSource("prefixes") + void testConfigurationWhenDefaultSecretIsAllowed(String prefix) { application.properties( "spring.cloud.gcp.secretmanager.allow-default-secret=true", - "spring.config.import=sm://") + "spring.config.import=" + prefix) .addBootstrapRegistryInitializer( (registry) -> registry.registerIfAbsent( SecretManagerServiceClient.class, @@ -95,8 +108,8 @@ void testConfigurationWhenDefaultSecretIsAllowed() { ); try (ConfigurableApplicationContext applicationContext = application.run()) { ConfigurableEnvironment environment = applicationContext.getEnvironment(); - assertThat(environment.getProperty("sm://my-secret")).isEqualTo("newSecret"); - assertThat(environment.getProperty("sm://fake-secret")).isNull(); + assertThat(environment.getProperty(prefix + "my-secret")).isEqualTo("newSecret"); + assertThat(environment.getProperty(prefix + "fake-secret")).isNull(); } } } diff --git a/spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolverUnitTests.java b/spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolverUnitTests.java index 7bb032548f..d66da3cdab 100644 --- a/spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolverUnitTests.java +++ b/spring-cloud-gcp-autoconfigure/src/test/java/com/google/cloud/spring/autoconfigure/secretmanager/SecretManagerConfigDataLocationResolverUnitTests.java @@ -8,8 +8,12 @@ import com.google.api.gax.core.CredentialsProvider; import com.google.cloud.secretmanager.v1.SecretManagerServiceClient; import java.util.List; +import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.BootstrapRegistry; import org.springframework.boot.DefaultBootstrapContext; @@ -28,15 +32,23 @@ class SecretManagerConfigDataLocationResolverUnitTests { ConfigDataLocationResolverContext.class); private final DefaultBootstrapContext defaultBootstrapContext = new DefaultBootstrapContext(); + static Stream prefixes() { + return Stream.of( + Arguments.of("sm://"), + Arguments.of("sm@") + ); + } + @Test void isResolvableReturnsFalseWithIncorrectPrefix() { assertThat(resolver.isResolvable(context, ConfigDataLocation.of("test://"))).isFalse(); assertThat(resolver.isResolvable(context, ConfigDataLocation.of("sm:"))).isFalse(); } - @Test - void isResolvableReturnsFalseWithCorrectPrefix() { - assertThat(resolver.isResolvable(context, ConfigDataLocation.of("sm://"))).isTrue(); + @ParameterizedTest + @MethodSource("prefixes") + void isResolvableReturnsFalseWithCorrectPrefix(String prefix) { + assertThat(resolver.isResolvable(context, ConfigDataLocation.of(prefix))).isTrue(); } @Test @@ -48,13 +60,14 @@ void createSecretManagerClientWithPresetClientTest() { .isEqualTo(client); } - @Test - void resolveReturnsConfigDataLocation() { + @ParameterizedTest + @MethodSource("prefixes") + void resolveReturnsConfigDataLocation(String prefix) { List locations = resolver.resolve(context, - ConfigDataLocation.of("sm://my-secret")); + ConfigDataLocation.of(prefix + "my-secret")); assertThat(locations).hasSize(1); assertThat(locations).first().extracting("location") - .isEqualTo(ConfigDataLocation.of("sm://my-secret")); + .isEqualTo(ConfigDataLocation.of(prefix + "my-secret")); ConfigurableApplicationContext applicationContext = mock(ConfigurableApplicationContext.class); when(applicationContext.getBeanFactory()).thenReturn(new DefaultListableBeanFactory()); assertThatCode( From b0dc351cd155d8062a532603292c8cc911e4a33d Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 6 Jan 2025 16:23:21 -0500 Subject: [PATCH 89/96] abort full string attempt in secret manager this prevents attempts of the form sm@my_secret:default as a whole string --- .../example/SecretManagerWebController.java | 18 +++++++++--------- .../SecretManagerPropertyUtils.java | 10 +++++++++- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java index ae1834c880..5db8d57919 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java @@ -39,19 +39,20 @@ public class SecretManagerWebController { // secret can be refreshed when decorated with @RefreshScope on the class. private final SecretConfiguration configuration; - // This syntax is not recommended. Please switch your code to the `sm@my_secret` syntax. - @Value("${${sm://application-fake}:DEFAULT}") - private String defaultSecretDeprecatedSyntax; + // This syntax is not recommended. Please switch your code to the `sm@my_secret` syntax. Users + // will be warned if using this syntax. + //@Value("${${sm://application-fake}:DEFAULT}") + //private String defaultSecretDeprecatedSyntax; - // For the default value takes place, there should be no property called `application-fake` + // For the default value to take place, there should be no property called `application-fake` // in property files. - // It is not necessary to escape the color character by nesting + // When using the new syntax, it is not necessary to escape the colon character by nesting // placeholders as done with the legacy syntax (${${sm://secret}:DEFAULT}). @Value("${sm@application-fake:DEFAULT}") private String defaultSecret; // Application secrets can be accessed using @Value syntax. - @Value("${sm@application-secret}") + @Value("${sm@application-secret:DEFAULT}") private String appSecretFromValue; public SecretManagerWebController(SecretManagerTemplate secretManagerTemplate, @@ -63,7 +64,6 @@ public SecretManagerWebController(SecretManagerTemplate secretManagerTemplate, @GetMapping("/") public ModelAndView renderIndex(ModelMap map) { - System.out.println(defaultSecretDeprecatedSyntax); map.put("applicationDefaultSecret", defaultSecret); map.put(APPLICATION_SECRET_FROM_VALUE, appSecretFromValue); map.put("applicationSecretFromConfigurationProperties", configuration.getSecret()); @@ -85,11 +85,11 @@ public String getSecret( String secretPayload; if (StringUtils.isEmpty(projectId)) { secretPayload = - this.secretManagerTemplate.getSecretString("sm://" + secretId + "/" + version); + this.secretManagerTemplate.getSecretString("sm@" + secretId + "/" + version); } else { secretPayload = this.secretManagerTemplate.getSecretString( - "sm://" + projectId + "/" + secretId + "/" + version); + "sm@" + projectId + "/" + secretId + "/" + version); } return "Secret ID: " diff --git a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java index 840a26a8d9..859f6e8955 100644 --- a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java +++ b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java @@ -37,7 +37,15 @@ private SecretManagerPropertyUtils() {} static SecretVersionName getSecretVersionName( final String input, GcpProjectIdProvider projectIdProvider) { Optional usedPrefix = getMatchedPrefixes(input::startsWith); - if (usedPrefix.isEmpty()) { + + // Since spring-core 6.2.2, the property resolution mechanism will try a full match that + // may include a default string if provided. For example, a @Value("${sm@secret:default}") will + // cause two attempts: one with sm@secret:default as a whole string (we don't want this), + // and one with sm@secret (that's the one we want to process). The colon is also an invalid + // character in secret IDs. + // See https://github.com/spring-projects/spring-framework/issues/34124. + final boolean isAttemptingFullStringMatch = input.contains(":"); + if (usedPrefix.isEmpty() || isAttemptingFullStringMatch) { return null; } warnIfUsingDeprecatedSyntax(logger, usedPrefix.orElse("")); From 36efacacd20763e055e7b0f9ba7bec3676d46c9a Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 6 Jan 2025 16:51:09 -0500 Subject: [PATCH 90/96] consider sm:// when exiting on full string match attempts --- .../cloud/spring/secretmanager/SecretManagerPropertyUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java index 859f6e8955..00fb3b4803 100644 --- a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java +++ b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java @@ -44,7 +44,7 @@ static SecretVersionName getSecretVersionName( // and one with sm@secret (that's the one we want to process). The colon is also an invalid // character in secret IDs. // See https://github.com/spring-projects/spring-framework/issues/34124. - final boolean isAttemptingFullStringMatch = input.contains(":"); + final boolean isAttemptingFullStringMatch = input.replace("sm://", "").contains(":"); if (usedPrefix.isEmpty() || isAttemptingFullStringMatch) { return null; } From 0ff3b9f30608d3824a5305a2def7146e541aa169 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 6 Jan 2025 18:10:36 -0500 Subject: [PATCH 91/96] finish sample code --- .../spring-cloud-gcp-secretmanager-sample/pom.xml | 15 ++++++++------- .../com/example/SecretManagerWebController.java | 9 ++++++++- .../src/main/resources/templates/index.html | 1 - 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml index 2089fc9c12..0282c2de41 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml @@ -56,13 +56,14 @@ - - org.springframework - spring-framework-bom - 6.2.2-SNAPSHOT - pom - import - + + + + + + + + com.google.cloud spring-cloud-gcp-dependencies diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java index 5db8d57919..6491b67214 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretManagerWebController.java @@ -41,9 +41,16 @@ public class SecretManagerWebController { // This syntax is not recommended. Please switch your code to the `sm@my_secret` syntax. Users // will be warned if using this syntax. - //@Value("${${sm://application-fake}:DEFAULT}") + // Note that the colon of the protocol specification section must be escaped; + // See https://github.com/GoogleCloudPlatform/spring-cloud-gcp/issues/3440 + //@Value("${sm\\://application-fake:DEFAULT}") //private String defaultSecretDeprecatedSyntax; + // This syntax is not recommended. Please switch your code to the `sm@my_secret` syntax. Users + // will be warned if using this syntax. + //@Value("${sm://application-secret}") + //private String appSecretFromValueDeprecatedSyntax; + // For the default value to take place, there should be no property called `application-fake` // in property files. // When using the new syntax, it is not necessary to escape the colon character by nesting diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/templates/index.html b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/templates/index.html index c340cca39e..5f80c005d4 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/templates/index.html +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/templates/index.html @@ -46,7 +46,6 @@

Secret Manager Property Source


Default Application secret if not found: [[${applicationDefaultSecret}]]
Application secret from @Value: [[${applicationSecretFromValue}]]
- Application secret from @ConfigurationProperties: [[${applicationSecretFromConfigurationProperties}]] From c29d7267dbc454c3227437cca26984be48267226 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Mon, 6 Jan 2025 21:47:42 -0500 Subject: [PATCH 92/96] add functional interface annotation to PrefixMatcher --- .../cloud/spring/secretmanager/SecretManagerSyntaxUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtils.java b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtils.java index 9ed68aff27..68d61956b6 100644 --- a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtils.java +++ b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerSyntaxUtils.java @@ -44,8 +44,8 @@ public static void warnIfUsingDeprecatedSyntax(Logger logger, String value) { DEPRECATED_PREFIX, PREFERRED_PREFIX)); } + @FunctionalInterface public interface PrefixMatcher { boolean matches(String input); } - } From 0e2b5d6038cc12d92e1c3988f282e84166f9d795 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 7 Jan 2025 13:24:51 -0500 Subject: [PATCH 93/96] make secret manager dependency non-optional in autoconfigure module --- spring-cloud-gcp-autoconfigure/pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gcp-autoconfigure/pom.xml b/spring-cloud-gcp-autoconfigure/pom.xml index a5707a18b5..5a8a20c2cd 100644 --- a/spring-cloud-gcp-autoconfigure/pom.xml +++ b/spring-cloud-gcp-autoconfigure/pom.xml @@ -275,7 +275,10 @@ com.google.cloud spring-cloud-gcp-secretmanager - true + + + + false From 83d6d0278a6a0b0beeb2e31dc0ee5b1e5472aaf4 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 7 Jan 2025 15:09:17 -0500 Subject: [PATCH 94/96] cleanup --- .../src/main/resources/application.properties | 4 ++-- ...SecretManagerSampleLoadSecretsIntegrationTests.java | 1 - .../secretmanager/SecretManagerPropertyUtils.java | 10 +++++----- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties index 20e9d66626..0574e1be38 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties @@ -14,8 +14,8 @@ management.endpoints.web.exposure.include=refresh # Here we enable the config loader for GCP Secret Manager # The sm:// syntax has been Deprecated and may be removed in a future version of # Spring Cloud GCP. Please use the sm@ syntax instead. -spring.config.import=sm:// -#spring.config.import=sm@ +#spring.config.import=sm:// +spring.config.import=sm@ application.secret=${sm@application-secret} # enable default secret value when accessing non-exited secret. spring.cloud.gcp.secretmanager.allow-default-secret=true diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java index e21fd8c86a..2a56ca8998 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/test/java/com/example/SecretManagerSampleLoadSecretsIntegrationTests.java @@ -56,6 +56,5 @@ void testApplicationStartupSecretLoadsCorrectly() { "Application secret from @ConfigurationProperties: " + SECRET_CONTENT + ""); - System.out.println(response.getBody()); } } diff --git a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java index 00fb3b4803..f7fc560614 100644 --- a/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java +++ b/spring-cloud-gcp-secretmanager/src/main/java/com/google/cloud/spring/secretmanager/SecretManagerPropertyUtils.java @@ -58,26 +58,26 @@ static SecretVersionName getSecretVersionName( String version = "latest"; if (tokens.length == 1) { - // property is form "sm@" + // property is of the form "sm@" secretId = tokens[0]; } else if (tokens.length == 2) { - // property is form "sm@/" + // property is of the form "sm@/" secretId = tokens[0]; version = tokens[1]; } else if (tokens.length == 3) { - // property is form "sm@//" + // property is of the form "sm@//" projectId = tokens[0]; secretId = tokens[1]; version = tokens[2]; } else if (tokens.length == 4 && tokens[0].equals("projects") && tokens[2].equals("secrets")) { - // property is form "sm@projects//secrets/" + // property is of the form "sm@projects//secrets/" projectId = tokens[1]; secretId = tokens[3]; } else if (tokens.length == 6 && tokens[0].equals("projects") && tokens[2].equals("secrets") && tokens[4].equals("versions")) { - // property is form "sm@projects//secrets//versions/" + // property is of the form "sm@projects//secrets//versions/" projectId = tokens[1]; secretId = tokens[3]; version = tokens[5]; From 6588dfc569de282e44487e5f9e3e296432a3001f Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Tue, 7 Jan 2025 16:52:59 -0500 Subject: [PATCH 95/96] fix refresh scope for secretmanager sample This moves the @RefreshScope annotation to method-level in order to avoid build failures in the native image tests. A good candidate to prove it as good practice is https://github.com/spring-cloud/spring-cloud-commons/blob/c0f3a6190c5e636ac5391371b503f7f1e6e24a8e/docs/modules/ROOT/pages/spring-cloud-commons/application-context-services.adoc?plain=1#L211-L215 The native tests script will also override the refresh scope as it's explained in the docs (see implementation for link). --- .github/workflows/scripts/native-image-tests.sh | 6 +++++- .../src/main/java/com/example/SecretConfiguration.java | 3 ++- .../src/main/resources/application.properties | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/scripts/native-image-tests.sh b/.github/workflows/scripts/native-image-tests.sh index 9de8860052..1439c54b2e 100755 --- a/.github/workflows/scripts/native-image-tests.sh +++ b/.github/workflows/scripts/native-image-tests.sh @@ -75,13 +75,17 @@ run_sample_tests () { else project_names="$(echo "${module_samples[@]}" | sed 's/ /,/g')" + # Note that spring.cloud.refresh is disabled in native image mode. This affects samples + # that use @RefreshScope. + # See https://docs.spring.io/spring-cloud-config/reference/client.html#aot-and-native-image-support mvn clean test \ --activate-profiles native-sample-config,nativeTest \ --define notAllModules=true \ --define maven.javadoc.skip=true \ -pl="${project_names}" \ --define org.slf4j.simpleLogger.showDateTime=true \ - --define org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS + --define org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS \ + --define spring-boot.run.arguments="--spring.cloud.refresh.enabled=false" fi popd } diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java index 01a4058738..bc1f831322 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/java/com/example/SecretConfiguration.java @@ -20,15 +20,16 @@ import org.springframework.cloud.context.config.annotation.RefreshScope; @ConfigurationProperties("application") -@RefreshScope public class SecretConfiguration { private String secret; + @RefreshScope public void setSecret(String secret) { this.secret = secret; } + @RefreshScope public String getSecret() { return secret; } diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties index 0574e1be38..b33fcd96ec 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/src/main/resources/application.properties @@ -19,3 +19,6 @@ spring.config.import=sm@ application.secret=${sm@application-secret} # enable default secret value when accessing non-exited secret. spring.cloud.gcp.secretmanager.allow-default-secret=true +# ensure this property is set to false when building a native image. +# see https://docs.spring.io/spring-cloud-config/reference/client.html#aot-and-native-image-support +spring.cloud.refresh.enabled=true From acf06f1067590e7f7178773841a01a0f547546d3 Mon Sep 17 00:00:00 2001 From: Diego Alonso Marquez Palacios Date: Thu, 23 Jan 2025 19:25:20 -0500 Subject: [PATCH 96/96] update spring-boot to 3.4.2 --- pom.xml | 2 +- spring-cloud-gcp-samples/pom.xml | 2 +- .../spring-cloud-gcp-secretmanager-sample/pom.xml | 8 -------- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index a91fa720f1..675b648e6b 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ ${project.version} 2024.0.0 - 3.4.1 + 3.4.2 ${project.parent.version} 2.2.5 2.5.0 diff --git a/spring-cloud-gcp-samples/pom.xml b/spring-cloud-gcp-samples/pom.xml index 9882944e1c..ff1c2a5209 100644 --- a/spring-cloud-gcp-samples/pom.xml +++ b/spring-cloud-gcp-samples/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 diff --git a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml index 0282c2de41..0ba156d52f 100644 --- a/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml +++ b/spring-cloud-gcp-samples/spring-cloud-gcp-secretmanager-sample/pom.xml @@ -56,14 +56,6 @@ - - - - - - - - com.google.cloud spring-cloud-gcp-dependencies