在 Junits 执行期间运行 gradle clean build 时出现以下错误。
任何帮助将不胜感激,因为这对我们的项目非常重要。 值得注意的是,此问题是在 RedisConfiguration 中查看堆栈跟踪时自动装配引起的。这仅在特定于 spring boot 2.7.10 的 Junits 期间失败。
通过堆栈跟踪后,可以在下面的链接中给出一些固定的例子吗?
2023-04-06T09:18:15.168+0530 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jedisConnectionFactory' defined in class path resource [com/redis/connection/RedisConfiguration.class]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
2023-04-06T09:18:15.168+0530 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:628)
2023-04-06T09:18:15.168+0530 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
2023-04-06T09:18:15.168+0530 at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
2023-04-06T09:18:15.168+0530 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
2023-04-06T09:18:15.168+0530 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
2023-04-06T09:18:15.168+0530 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
2023-04-06T09:18:15.168+0530 at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:362)
2023-04-06T09:18:15.168+0530 at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:334)
Caused by:
2023-04-06T09:18:15.168+0530 java.lang.reflect.MalformedParameterizedTypeException
2023-04-06T09:18:15.168+0530 at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:59)
2023-04-06T09:18:15.168+0530 at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:52)
2023-04-06T09:18:15.169+0530 at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:93)
2023-04-06T09:18:15.169+0530 at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105)
2023-04-06T09:18:15.169+0530 at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
2023-04-06T09:18:15.169+0530 at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
2023-04-06T09:18:15.169+0530 at java.base/sun.reflect.generics.repository.MethodRepository.computeReturnType(MethodRepository.java:75)
2023-04-06T09:18:15.169+0530 at java.base/sun.reflect.generics.repository.MethodRepository.getReturnType(MethodRepository.java:66)
2023-04-06T09:18:15.169+0530 at java.base/java.lang.reflect.Method.getGenericReturnType(Method.java:292)
2023-04-06T09:18:15.169+0530 at java.desktop/com.sun.beans.introspect.PropertyInfo.get(PropertyInfo.java:285)
2023-04-06T09:18:15.169+0530 at java.desktop/com.sun.beans.introspect.ClassInfo.getProperties(ClassInfo.java:82)
2023-04-06T09:18:15.169+0530 at java.desktop/java.beans.Introspector.getTargetPropertyInfo(Introspector.java:515)
2023-04-06T09:18:15.169+0530 at java.desktop/java.beans.Introspector.getBeanInfo(Introspector.java:463)
2023-04-06T09:18:15.169+0530 at java.desktop/java.beans.Introspector.getBeanInfo(Introspector.java:294)
2023-04-06T09:18:15.169+0530 at java.desktop/java.beans.Introspector.getBeanInfo(Introspector.java:236)
2023-04-06T09:18:15.169+0530 at org.springframework.beans.CachedIntrospectionResults.getBeanInfo(CachedIntrospectionResults.java:252)
2023-04-06T09:18:15.169+0530 at org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:277)
2023-04-06T09:18:15.169+0530 at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:181)
2023-04-06T09:18:15.169+0530 at org.springframework.beans.BeanWrapperImpl.getCachedIntrospectionResults(BeanWrapperImpl.java:174)
2023-04-06T09:18:15.169+0530 at org.springframework.beans.BeanWrapperImpl.getPropertyDescriptors(BeanWrapperImpl.java:248)
2023-04-06T09:18:15.169+0530 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1594)
2023-04-06T09:18:15.169+0530 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1574)
2023-04-06T09:18:15.169+0530 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1434)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:362) ~[spring-context-5.3.26.jar:5.3.26]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:334) ~[spring-context-5.3.26.jar:5.3.26]
at com.myproject.redis.connection.RedisConfiguration$$EnhancerBySpringCGLIB$$2544120a.jedisConnectionFactory(<generated>) ~[main/:?]
at com.myproject.redis.connection.RedisConfiguration.redisTemplate(RedisConfiguration.java:63) ~[main/:?]
at com.myproject.redis.connection.RedisConfiguration$$EnhancerBySpringCGLIB$$2544120a.CGLIB$redisTemplate$0(<generated>) ~[main/:?]
at com.myproject.redis.connection.RedisConfiguration$$EnhancerBySpringCGLIB$$2544120a$$FastClassBySpringCGLIB$$e85ae083.invoke(<generated>) ~[main/:?]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.3.26.jar:5.3.26]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.3.26.jar:5.3.26]
at com.myproject.redis.connection.RedisConfiguration$$EnhancerBySpringCGLIB$$2544120a.redisTemplate(<generated>) ~[main/:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:486) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550) ~[spring-context-5.3.26.jar:5.3.26]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) ~[spring-context-5.3.26.jar:5.3.26]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) ~[spring-context-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) ~[spring-context-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.26.jar:5.3.26]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.26.jar:5.3.26]
Redis配置:
package com.aconex.babylonevents.redis.connection;
import javax.annotation.Resource;
import com.aconex.secretsmanagement.api.CredentialProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.RedisConnectionFailureException;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.GenericToStringSerializer;
Redis配置
@Configuration
@EnableRedisRepositories
public class RedisConfiguration {
private final String redisHost;
private final int redisPort;
private final String connectionPoolMaxTotal;
private final String connectionPoolIdleTotal;
@Resource(name = "eventStreamRedisCredentialProvider")
private CredentialProvider credentialProvider;
private static final Logger LOGGER = LoggerFactory.getLogger(RedisConfiguration.class);
public RedisConfiguration(RedisProperties redisProperties){
redisHost = redisProperties.getRedisHost();
redisPort = redisProperties.getRedisPort();
connectionPoolMaxTotal = redisProperties.getConnectionPoolMaxTotal();
connectionPoolIdleTotal = redisProperties.getConnectionPoolIdleTotal();
}
@Bean
JedisConnectionFactory jedisConnectionFactory() throws RedisConnectionFailureException{
JedisConnectionFactory jedisConnectionFactory = null;
try {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setPassword(credentialProvider.getCredential().getPassword());
redisStandaloneConfiguration.setDatabase(0);
redisStandaloneConfiguration.setHostName(redisHost);
redisStandaloneConfiguration.setPort(redisPort);
jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration);
jedisConnectionFactory.getPoolConfig().setMaxTotal(Integer.parseInt(connectionPoolMaxTotal));
jedisConnectionFactory.getPoolConfig().setMaxIdle(Integer.parseInt(connectionPoolIdleTotal));
} catch (RedisConnectionFailureException e) {
LOGGER.error("Unable to establish connection with redis");
throw new RedisConnectionFailureException("Unable to establish connection with redis");
}
return jedisConnectionFactory;
}
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate() {
final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(jedisConnectionFactory());
template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));
template.setEnableTransactionSupport(true);
return template;
}
}
**RedisProperties.java:**
mport lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
@Getter
@Setter
public class RedisProperties {
private int redisPort;
private String redisHost;
private String connectionPoolMaxTotal;
private String connectionPoolIdleTotal;
public RedisProperties(
@Value("${spring.redis.port}") int redisPort,
@Value("${spring.redis.host}") String redisHost,
@Value("${redis.connection.pool.max.total}") String connectionPoolMaxTotal,
@Value("${redis.connection.pool.idle.total}") String connectionPoolIdleTotal) {
this.redisPort = redisPort;
this.redisHost = redisHost;
this.connectionPoolMaxTotal = connectionPoolMaxTotal;
this.connectionPoolIdleTotal = connectionPoolIdleTotal;
}
}
build.gradle:
plugins {
id 'org.springframework.boot' version '2.7.10'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
apply from: "${rootDir}/build-support/packaging.gradle"
group = 'com.aconex'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.apache.httpcomponents:httpclient'
implementation 'commons-io:commons-io:2.4'
implementation 'org.bouncycastle:bcpkix-jdk15to18:1.69'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation ('redis.clients:jedis'){
exclude group: 'org.apache.commons', module: 'commons-pool2'
}
testImplementation ('org.springframework.boot:spring-boot-starter-test'){
exclude group: 'org.junit.jupiter', module: 'junit-jupiter'
}
testImplementation 'org.junit.jupiter:junit-jupiter-api'
testImplementation 'it.ozimov:embedded-redis:0.7.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
implementation ('org.junit.vintage:junit-vintage-engine'){
exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
implementation 'org.apache.commons:commons-pool2:2.4.2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'com.aconex:secrets-management-vault-spring:1.5.93'
implementation 'com.aconex:secrets-management-simple:1.5.93'
implementation 'com.aconex:secrets-management-tls-common:1.5.93'
implementation group: 'joda-time', name: 'joda-time', version: '2.3'
implementation 'net.wedjaa.ansible.vault:vault-utilities:1.2.0'
}
test {
useJUnitPlatform()
}
应用程序.properties:
app.version=1.0
server.port=8080
spring.redis.host=localhost
spring.redis.port=6379
redis.connection.pool.max.total=50
redis.connection.pool.idle.total=50
#Actuator endpoints configuration
management.endpoints.web.base-path=/
management.endpoint.info.enabled=true
management.endpoint.health.enabled=true
management.endpoints.web.path-mapping.health=status
management.endpoints.web.exposure.include=health,info
management.endpoint.health.show-details=always
logging.level.root=DEBUG
logging.pattern.console=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %X{X-CorrelationId} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}
logging.pattern.file=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %X{X-CorrelationId} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}
server.tomcat.basedir=/var/tmp/tomcat
spring.main.allow-circular-references=true
spring.main.allow-bean-definition-overriding=true
spring.main.lazy-initialization=true
我做了一些更改,在此活动期间添加了以下配置以避免一些错误,但它们似乎与当前问题无关:
应用程序.properties:
spring.main.allow-circular-references=true
spring.main.allow-bean-definition-overriding=true
spring.main.lazy-initialization=true
build.gradle:
dependency ('redis.clients:jedis') (removed version 3.1.0 which was mentioned earlier)
org.junit.vintage:junit-vintage-engine (added for backward compatibility)
Spring 2.3.2.RELEASE 工作正常,Java 11 没有任何问题,但不适用于 2.7.10.
使用以下网址作为参考: https://blog.codecentric.de/migrating-spring-boot-java-17
以下是我项目中的junit类:
EventsApplicationTests.java:
@SpringBootTest
@ExtendWith(SpringExtension.class)
@ActiveProfiles("test")
class EventsApplicationTests {
@Test
public void contextLoads() {
}
}
EventsDataSourceProvider.java :
@Resource
public class EventsDataSourceProvider {
public List<String> getAuthenticationTypeEvents(){
return this.getEventsFromFile("events_auth.txt");
}
public List<String> getAuthenticationTypeInvalidEvents(){ return this.getEventsFromFile("events_auth_invalid.txt"); }
public List<String> getAllTypesEvents(){
return this.getEventsFromFile("events.txt");
}
public List<String> getDocumentsTypesEvents(){
return this.getEventsFromFile("events_documents.txt");
}
public List<String> getCorrespondenceTypesEvents(){
return this.getEventsFromFile("events_correspondence.txt");
}
public List<String> getProjectsTypesEvents(){
return this.getEventsFromFile("events_projects.txt");
}
private List<String> getEventsFromFile(String inputFile){
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource(inputFile).getFile());
List<String> events = new ArrayList<>();
try (BufferedReader eventBufferedReader = Files.newBufferedReader(Paths.get(file.toURI()))) {
events = eventBufferedReader.lines().collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
return events;
}
}
RedisConfigTest.java :
@ActiveProfiles("test")
@SpringBootTest(classes = TestRedisConfiguration.class)
public class RedisConfigTest {
@Autowired
private EventStreamRepository eventStreamRepository;
@Test
private void testRedisConfiguration(){
// TODO
}
}
EventStreamRepositoryTest.java :
@SpringBootTest(classes = TestRedisConfiguration.class)
@ActiveProfiles("test")
public class EventStreamRepositoryTest {
@Autowired
private EventStreamRepository eventStreamRepository;
@Resource
private RedisConfiguration redisConfiguration;
@Resource
private EventsDataSourceProvider eventsDataSourceProvider;
@Resource
private EventsConversionUtil eventsConversionUtil;
private String organizationId = "1879048492";
@BeforeEach
private void cleanUp() {
redisConfiguration.redisTemplate().getConnectionFactory().getConnection().flushDb();
}
@Test
public void saveEvents() {
List<String> events = eventsDataSourceProvider.getAllTypesEvents();
List<String> savedEvents = new ArrayList<>();
events.stream().forEach(event -> {
EventDto eventDto = eventsConversionUtil.convertJsonStringToObject(event);
savedEvents.add(eventStreamRepository.saveEvent(eventsConversionUtil.getEventIdIndexFromJson(event), organizationId,
eventsConversionUtil.convertDateToSeconds(eventDto.getTimestamp()), event, eventDto.getTimestamp()));
});
Assertions.assertEquals(savedEvents.size(), events.size());
}
@Test
public void getAllEventsForOrg() {
cleanUp();
List<String> events = eventsDataSourceProvider.getAllTypesEvents();
List<String> savedEvents = new ArrayList<>();
events.stream().forEach(event -> {
EventDto eventDto = eventsConversionUtil.convertJsonStringToObject(event);
savedEvents.add(eventStreamRepository.saveEvent(eventsConversionUtil.getEventIdIndexFromJson(event), organizationId,
eventsConversionUtil.convertDateToSeconds(eventDto.getTimestamp()), event, eventDto.getTimestamp()));
});
List<String> eventsJson = eventStreamRepository.getAllEvents(organizationId);
Assertions.assertEquals(eventsJson.size(), savedEvents.size());
}
}
TestRedisConfiguration.java :
@TestConfiguration
public class TestRedisConfiguration {
private final RedisServer redisServer;
public TestRedisConfiguration(RedisProperties redisProperties) {
this.redisServer = new RedisServer(redisProperties.getRedisPort());
}
@Bean
EventsDataSourceProvider getEventsDataSourceProvider(){
return new EventsDataSourceProvider();
}
@PostConstruct
public void postConstruct() {
redisServer.start();
}
@PreDestroy
public void preDestroy() {
redisServer.stop();
}
}