parent
7df49187fa
commit
ae152b176b
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import java.lang.annotation.Documented;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Inherited;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ImportAutoConfiguration Auto-configuration imports} for typical Data Cassandra
|
||||||
|
* tests. Most tests should consider using {@link DataCassandraTest} rather than using
|
||||||
|
* this annotation directly.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
* @since 2.1.0
|
||||||
|
* @see DataCassandraTest
|
||||||
|
*/
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Documented
|
||||||
|
@Inherited
|
||||||
|
@ImportAutoConfiguration
|
||||||
|
public @interface AutoConfigureDataCassandra {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import java.lang.annotation.Documented;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Inherited;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.boot.test.autoconfigure.OverrideAutoConfiguration;
|
||||||
|
import org.springframework.boot.test.autoconfigure.core.AutoConfigureCache;
|
||||||
|
import org.springframework.boot.test.autoconfigure.filter.TypeExcludeFilters;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.core.annotation.AliasFor;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.test.context.BootstrapWith;
|
||||||
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Annotation that can be used in combination with {@code @RunWith(SpringRunner.class)}
|
||||||
|
* for a typical Cassandra test. Can be used when a test focuses <strong>only</strong> on
|
||||||
|
* Cassandra components.
|
||||||
|
* <p>
|
||||||
|
* Using this annotation will disable full auto-configuration and instead apply only
|
||||||
|
* configuration relevant to Cassandra tests.
|
||||||
|
* <p>
|
||||||
|
* By default, tests annotated with {@code @DataCassandraTest} will use an embedded
|
||||||
|
* in-memory Cassandra process (if available).
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
* @since 2.1.0
|
||||||
|
*/
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Documented
|
||||||
|
@Inherited
|
||||||
|
@BootstrapWith(DataCassandraTestContextBootstrapper.class)
|
||||||
|
@ExtendWith(SpringExtension.class)
|
||||||
|
@OverrideAutoConfiguration(enabled = false)
|
||||||
|
@TypeExcludeFilters(DataCassandraTypeExcludeFilter.class)
|
||||||
|
@AutoConfigureCache
|
||||||
|
@AutoConfigureDataCassandra
|
||||||
|
@ImportAutoConfiguration
|
||||||
|
public @interface DataCassandraTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Properties in form {@literal key=value} that should be added to the Spring
|
||||||
|
* {@link Environment} before the test runs.
|
||||||
|
* @return the properties to add
|
||||||
|
* @since 2.1.0
|
||||||
|
*/
|
||||||
|
String[] properties() default {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if default filtering should be used with
|
||||||
|
* {@link SpringBootApplication @SpringBootApplication}. By default no beans are
|
||||||
|
* included.
|
||||||
|
* @see #includeFilters()
|
||||||
|
* @see #excludeFilters()
|
||||||
|
* @return if default filters should be used
|
||||||
|
*/
|
||||||
|
boolean useDefaultFilters() default true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A set of include filters which can be used to add otherwise filtered beans to the
|
||||||
|
* application context.
|
||||||
|
* @return include filters to apply
|
||||||
|
*/
|
||||||
|
ComponentScan.Filter[] includeFilters() default {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A set of exclude filters which can be used to filter beans that would otherwise be
|
||||||
|
* added to the application context.
|
||||||
|
* @return exclude filters to apply
|
||||||
|
*/
|
||||||
|
ComponentScan.Filter[] excludeFilters() default {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-configuration exclusions that should be applied for this test.
|
||||||
|
* @return auto-configuration exclusions to apply
|
||||||
|
*/
|
||||||
|
@AliasFor(annotation = ImportAutoConfiguration.class, attribute = "exclude")
|
||||||
|
Class<?>[] excludeAutoConfiguration() default {};
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;
|
||||||
|
import org.springframework.core.annotation.MergedAnnotations;
|
||||||
|
import org.springframework.test.context.TestContextBootstrapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link TestContextBootstrapper} for {@link DataCassandraTest @DataCassandraTest}
|
||||||
|
* support.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
* @since 2.1.0
|
||||||
|
*/
|
||||||
|
public class DataCassandraTestContextBootstrapper extends SpringBootTestContextBootstrapper {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String[] getProperties(Class<?> testClass) {
|
||||||
|
return MergedAnnotations.from(testClass, MergedAnnotations.SearchStrategy.INHERITED_ANNOTATIONS)
|
||||||
|
.get(DataCassandraTest.class).getValue("properties", String[].class).orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.TypeExcludeFilter;
|
||||||
|
import org.springframework.boot.test.autoconfigure.filter.StandardAnnotationCustomizableTypeExcludeFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link TypeExcludeFilter} for {@link DataCassandraTest @DataCassandraTest}.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
* @since 2.1.0
|
||||||
|
*/
|
||||||
|
public class DataCassandraTypeExcludeFilter extends StandardAnnotationCustomizableTypeExcludeFilter<DataCassandraTest> {
|
||||||
|
|
||||||
|
protected DataCassandraTypeExcludeFilter(Class<?> testClass) {
|
||||||
|
super(testClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.Cluster;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.testcontainers.junit.jupiter.Container;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.autoconfigure.data.redis.ExampleService;
|
||||||
|
import org.springframework.boot.test.util.TestPropertyValues;
|
||||||
|
import org.springframework.boot.testsupport.testcontainers.CassandraContainer;
|
||||||
|
import org.springframework.boot.testsupport.testcontainers.DisabledWithoutDockerTestcontainers;
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.ApplicationContextInitializer;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import org.springframework.data.cassandra.core.CassandraTemplate;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration test for {@link DataCassandraTest @DataCassandraTest}.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
*/
|
||||||
|
@DisabledWithoutDockerTestcontainers
|
||||||
|
@ContextConfiguration(initializers = DataCassandraTestIntegrationTests.Initializer.class)
|
||||||
|
@DataCassandraTest
|
||||||
|
class DataCassandraTestIntegrationTests {
|
||||||
|
|
||||||
|
@Container
|
||||||
|
public static CassandraContainer cassandra = new CassandraContainer();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CassandraTemplate cassandraTemplate;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ExampleRepository exampleRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ApplicationContext applicationContext;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void didNotInjectExampleService() {
|
||||||
|
assertThatExceptionOfType(NoSuchBeanDefinitionException.class)
|
||||||
|
.isThrownBy(() -> this.applicationContext.getBean(ExampleService.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testRepository() {
|
||||||
|
|
||||||
|
Person person = new Person();
|
||||||
|
person.setDescription("Look, new @DataCassandraTest!");
|
||||||
|
String id = UUID.randomUUID().toString();
|
||||||
|
person.setId(id);
|
||||||
|
|
||||||
|
Person savedEntity = this.exampleRepository.save(person);
|
||||||
|
Person getEntity = this.cassandraTemplate.selectOneById(id, Person.class);
|
||||||
|
|
||||||
|
assertThat(getEntity).isNotNull();
|
||||||
|
assertThat(getEntity.getId()).isNotNull();
|
||||||
|
assertThat(getEntity.getId()).isEqualTo(savedEntity.getId());
|
||||||
|
|
||||||
|
this.exampleRepository.deleteAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
|
||||||
|
TestPropertyValues.of("spring.data.cassandra.port=" + cassandra.getFirstMappedPort())
|
||||||
|
.and("spring.data.cassandra.keyspaceName=test")
|
||||||
|
.and("spring.data.cassandra.schema-action=CREATE_IF_NOT_EXISTS")
|
||||||
|
.applyTo(configurableApplicationContext.getEnvironment());
|
||||||
|
|
||||||
|
Cluster cluster = Cluster.builder().withoutJMXReporting()
|
||||||
|
.addContactPoints(cassandra.getContainerIpAddress()).withPort(cassandra.getFirstMappedPort())
|
||||||
|
.build();
|
||||||
|
cluster.connect().execute("CREATE KEYSPACE test "
|
||||||
|
+ "WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 1};");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.testcontainers.junit.jupiter.Container;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.util.TestPropertyValues;
|
||||||
|
import org.springframework.boot.testsupport.testcontainers.CassandraContainer;
|
||||||
|
import org.springframework.boot.testsupport.testcontainers.DisabledWithoutDockerTestcontainers;
|
||||||
|
import org.springframework.context.ApplicationContextInitializer;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for the {@link DataCassandraTest#properties properties} attribute of
|
||||||
|
* {@link DataCassandraTest @DataCassandraTest}.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
*/
|
||||||
|
@DisabledWithoutDockerTestcontainers
|
||||||
|
@ContextConfiguration(initializers = DataCassandraTestPropertiesIntegrationTests.Initializer.class)
|
||||||
|
@DataCassandraTest(properties = "spring.profiles.active=test")
|
||||||
|
class DataCassandraTestPropertiesIntegrationTests {
|
||||||
|
|
||||||
|
@Container
|
||||||
|
public static final CassandraContainer cassandra = new CassandraContainer();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private Environment environment;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void environmentWithNewProfile() {
|
||||||
|
assertThat(this.environment.getActiveProfiles()).containsExactly("test");
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
|
||||||
|
TestPropertyValues.of("spring.data.cassandra.port=" + cassandra.getFirstMappedPort())
|
||||||
|
.applyTo(configurableApplicationContext.getEnvironment());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.Cluster;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.testcontainers.junit.jupiter.Container;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.util.TestPropertyValues;
|
||||||
|
import org.springframework.boot.testsupport.testcontainers.CassandraContainer;
|
||||||
|
import org.springframework.boot.testsupport.testcontainers.DisabledWithoutDockerTestcontainers;
|
||||||
|
import org.springframework.context.ApplicationContextInitializer;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import org.springframework.context.annotation.ComponentScan.Filter;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration test with custom include filter for
|
||||||
|
* {@link DataCassandraTest @DataCassandraTest}.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
*/
|
||||||
|
@DisabledWithoutDockerTestcontainers
|
||||||
|
@ContextConfiguration(initializers = DataCassandraTestWithIncludeFilterIntegrationTests.Initializer.class)
|
||||||
|
@DataCassandraTest(includeFilters = @Filter(Service.class))
|
||||||
|
class DataCassandraTestWithIncludeFilterIntegrationTests {
|
||||||
|
|
||||||
|
@Container
|
||||||
|
public static final CassandraContainer cassandra = new CassandraContainer();
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ExampleRepository exampleRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ExampleService service;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testService() {
|
||||||
|
Person person = new Person();
|
||||||
|
person.setDescription("Look, new @DataCassandraTest!");
|
||||||
|
String id = UUID.randomUUID().toString();
|
||||||
|
person.setId(id);
|
||||||
|
|
||||||
|
this.exampleRepository.save(person);
|
||||||
|
assertThat(this.service.hasRecord(person)).isTrue();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
|
||||||
|
TestPropertyValues.of("spring.data.cassandra.port=" + cassandra.getFirstMappedPort())
|
||||||
|
.and("spring.data.cassandra.keyspaceName=test")
|
||||||
|
.and("spring.data.cassandra.schema-action=CREATE_IF_NOT_EXISTS")
|
||||||
|
.applyTo(configurableApplicationContext.getEnvironment());
|
||||||
|
|
||||||
|
Cluster cluster = Cluster.builder().withoutJMXReporting()
|
||||||
|
.addContactPoints(cassandra.getContainerIpAddress()).withPort(cassandra.getFirstMappedPort())
|
||||||
|
.build();
|
||||||
|
cluster.connect().execute("CREATE KEYSPACE test "
|
||||||
|
+ "WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 1};");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example {@link SpringBootApplication @SpringBootApplication} used with
|
||||||
|
* {@link DataCassandraTest @DataCassandraTest} tests.
|
||||||
|
*
|
||||||
|
* @author Jayaram Pradhan
|
||||||
|
*/
|
||||||
|
@SpringBootApplication
|
||||||
|
public class ExampleCassandraApplication {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example repository used with {@link DataCassandraTest @DataCassandraTest} tests.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
*/
|
||||||
|
public interface ExampleRepository extends CrudRepository<Person, String> {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import org.springframework.data.cassandra.core.CassandraTemplate;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example service used with {@link DataCassandraTest @DataCassandraTest} tests.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class ExampleService {
|
||||||
|
|
||||||
|
private final CassandraTemplate cassandraTemplate;
|
||||||
|
|
||||||
|
public ExampleService(CassandraTemplate cassandraTemplate) {
|
||||||
|
this.cassandraTemplate = cassandraTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasRecord(Person person) {
|
||||||
|
return this.cassandraTemplate.exists(person.getId(), Person.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2019 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 org.springframework.boot.test.autoconfigure.data.cassandra;
|
||||||
|
|
||||||
|
import org.springframework.data.cassandra.core.mapping.PrimaryKey;
|
||||||
|
import org.springframework.data.cassandra.core.mapping.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example graph used with {@link DataCassandraTest @DataCassandraTest} tests.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
*/
|
||||||
|
@Table
|
||||||
|
public class Person {
|
||||||
|
|
||||||
|
@PrimaryKey
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return this.description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-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 org.springframework.boot.testsupport.testcontainers;
|
||||||
|
|
||||||
|
import org.testcontainers.containers.GenericContainer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link GenericContainer} for Redis.
|
||||||
|
*
|
||||||
|
* @author Artsiom Yudovin
|
||||||
|
* @since 2.1.0
|
||||||
|
*/
|
||||||
|
public class CassandraContainer extends GenericContainer<CassandraContainer> {
|
||||||
|
|
||||||
|
public CassandraContainer() {
|
||||||
|
super("cassandra:3");
|
||||||
|
addExposedPorts(9042);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue