Skip to content

Instantly share code, notes, and snippets.

@eddumelendez
Created May 14, 2020 19:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eddumelendez/2a305ea223b4fd34aa69a27d667f4678 to your computer and use it in GitHub Desktop.
Save eddumelendez/2a305ea223b4fd34aa69a27d667f4678 to your computer and use it in GitHub Desktop.
@RunWith(SpringRunner.class)
public class UserRepositoryTest2 {
Logger logger = LoggerFactory.getLogger(UserRepositoryTest2.class);
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(GcpContextAutoConfiguration.class, GcpSpannerAutoConfiguration.class,
SpannerTransactionManagerAutoConfiguration.class, SpannerRepositoriesAutoConfiguration.class, GcpSpannerEmulatorAutoConfiguration.class))
.withConfiguration(UserConfigurations.of(EmptyConfig.class, Config.class))
.withPropertyValues("spring.cloud.gcp.spanner.project-id=test-project", "spring.cloud.gcp.spanner.instance-id=test-instance",
"spring.cloud.gcp.spanner.database=test-database", "spring.cloud.gcp.spanner.emulator.enabled=true");
@Rule
public GenericContainer spanner = new GenericContainer<>("gcr.io/cloud-spanner-emulator/emulator:0.7.28")
.waitingFor(new LogMessageWaitStrategy()
.withRegEx(".*Cloud Spanner emulator running\\..*"));
@Test
public void testSpanner() {
this.contextRunner
.withPropertyValues("spring.cloud.gcp.spanner.emulator-host=" + this.spanner.getContainerIpAddress() + ":" + this.spanner.getMappedPort(9010))
.run(context -> {
SpannerOptions spannerOptions = context.getBean(SpannerOptions.class);
Spanner spanner = spannerOptions.getService();
InstanceConfigId instanceConfig = InstanceConfigId.of("test-project", "emulator-config");
InstanceAdminClient insAdminClient = spanner.getInstanceAdminClient();
InstanceId instanceId = InstanceId.of("test-project", "test-instance");
Instance instance = insAdminClient.createInstance(InstanceInfo.newBuilder(instanceId).setInstanceConfigId(instanceConfig).build()).get();
System.out.println(">>>" + instance.getState());
DatabaseAdminClient dbAdminClient = spanner.getDatabaseAdminClient();
Database database = dbAdminClient.createDatabase("test-instance", "test-database", Arrays.asList("CREATE TABLE User (id STRING(36) NOT NULL, username STRING(255) NOT NULL) PRIMARY KEY (id)")).get();
System.out.println(">>>" + database.getState());
UserRepository userRepository = context.getBean(UserRepository.class);
User user = new User();
user.setUsername("eddu");
userRepository.save(user);
assertThat(userRepository.findByUsername("eddu")).isNotNull();
});
}
// @Configuration(proxyBeanMethods = false)
// @AutoConfigurationPackage(basePackages = { "com.example.hademo" })
// static class ConfigWithAutoConfigurationBasePackages {
//
// }
@Configuration
@EntityScan(basePackageClasses = User.class)
@AutoConfigurationPackage
static class EmptyConfig {
}
@Configuration
static class Config {
@Bean
public GcpProjectIdProvider gcpProjectIdProvider() {
return new DefaultGcpProjectIdProvider();
}
@Bean
public CredentialsProvider credentialsProvider() {
return NoCredentialsProvider.create();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment