Skip to content

Commit

Permalink
Apply SpannerOptionCustomizer for GcpSpannerEmulatorAutoConfiguration (
Browse files Browse the repository at this point in the history
…#646)

Also switches the emulator test from integration to unit test.
  • Loading branch information
ikeyat committed Oct 11, 2021
1 parent 887236e commit 34a4582
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.google.cloud.spring.autoconfigure.spanner;

import java.io.IOException;
import java.util.Optional;

import com.google.api.gax.core.CredentialsProvider;
import com.google.cloud.NoCredentials;
Expand Down Expand Up @@ -71,11 +72,16 @@ public CredentialsProvider credentialsProvider() {

@Bean
@ConditionalOnMissingBean
public SpannerOptions spannerOptions() throws IOException {
Assert.notNull(this.properties.getEmulatorHost(), "`spring.cloud.gcp.spanner.emulator-host` must be set.");
return SpannerOptions.newBuilder()
public SpannerOptions spannerOptions(Optional<SpannerOptionsCustomizer> customizer)
throws IOException {
Assert.notNull(this.properties.getEmulatorHost(),
"`spring.cloud.gcp.spanner.emulator-host` must be set.");
SpannerOptions.Builder builder = SpannerOptions.newBuilder();
builder
.setProjectId(this.projectId)
.setCredentials(this.credentialsProvider.getCredentials())
.setEmulatorHost(this.properties.getEmulatorHost()).build();
.setEmulatorHost(this.properties.getEmulatorHost());
customizer.ifPresent(c -> c.apply(builder));
return builder.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,37 +17,28 @@
package com.google.cloud.spring.autoconfigure.spanner;

import com.google.api.gax.core.CredentialsProvider;
import com.google.api.gax.retrying.RetrySettings;
import com.google.cloud.NoCredentials;
import com.google.cloud.spanner.SpannerOptions;
import com.google.cloud.spring.autoconfigure.core.GcpContextAutoConfiguration;
import org.junit.BeforeClass;
import org.junit.Test;
import org.threeten.bp.Duration;

import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;

import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.Assume.assumeThat;

/**
* @author Eddú Meléndez
*/
public class GcpSpannerEmulatorAutoConfigurationIntegrationTests {
public class GcpSpannerEmulatorAutoConfigurationTests {

private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(GcpSpannerEmulatorAutoConfiguration.class,
GcpSpannerAutoConfiguration.class, GcpContextAutoConfiguration.class))
.withPropertyValues("spring.cloud.gcp.spanner.project-id=test-project");

@BeforeClass
public static void checkToRun() {
assumeThat(
"Spanner integration tests are disabled. "
+ "Please use '-Dit.spanner=true' to enable them. ",
System.getProperty("it.spanner"), is("true"));
}

@Test
public void testEmulatorAutoConfigurationEnabled() {
this.contextRunner.withPropertyValues("spring.cloud.gcp.spanner.emulator.enabled=true")
Expand All @@ -73,9 +64,35 @@ public void testEmulatorAutoConfigurationEnabledCustomHostPort() {
@Test
public void testEmulatorAutoConfigurationDisabled() {
this.contextRunner
.withUserConfiguration(GcpSpannerAutoConfigurationTests.TestConfiguration.class)
.run(context -> {
SpannerOptions spannerOptions = context.getBean(SpannerOptions.class);
assertThat(spannerOptions.getEndpoint()).isEqualTo("spanner.googleapis.com:443");
});
}

@Test
public void testEmulatorSpannerCustomizerProvided() {
Duration duration = Duration.ofSeconds(42);
this.contextRunner.withPropertyValues("spring.cloud.gcp.spanner.emulator.enabled=true")
.withBean(SpannerOptionsCustomizer.class, () -> {
return builder -> {
builder.getSpannerStubSettingsBuilder()
.executeSqlSettings()
.setRetrySettings(RetrySettings.newBuilder().setMaxRetryDelay(duration).build());
};
}).run(context -> {
SpannerOptions spannerOptions = context.getBean(SpannerOptions.class);
assertThat(spannerOptions).isNotNull();
assertThat(
spannerOptions.getSpannerStubSettings().executeSqlSettings().getRetrySettings().getMaxRetryDelay()
).isEqualTo(duration);
// unchanged options stay at their default values
SpannerOptions defaultSpannerOptions = SpannerOptions.newBuilder()
.setProjectId("unused")
.setCredentials(NoCredentials.getInstance())
.build();
assertThat(spannerOptions.getNumChannels()).isEqualTo(defaultSpannerOptions.getNumChannels());
});
}
}

0 comments on commit 34a4582

Please sign in to comment.