diff --git a/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryKeyMissITests.java b/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryDynamicITests.java similarity index 83% rename from spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryKeyMissITests.java rename to spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryDynamicITests.java index 774c3d24..9226467d 100644 --- a/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryKeyMissITests.java +++ b/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryDynamicITests.java @@ -20,11 +20,13 @@ import java.time.Instant; import java.util.Map; import java.util.function.BiFunction; +import io.lettuce.core.RedisCommandExecutionException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.RedisSystemException; import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.RedisOperations; import org.springframework.session.MapSession; @@ -41,6 +43,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.willAnswer; +import static org.mockito.BDDMockito.willThrow; import static org.mockito.Mockito.spy; /** @@ -51,7 +54,7 @@ import static org.mockito.Mockito.spy; * GitHub Issue */ @ExtendWith(SpringExtension.class) -class RedisIndexedSessionRepositoryKeyMissITests extends AbstractRedisITests { +class RedisIndexedSessionRepositoryDynamicITests extends AbstractRedisITests { private RedisIndexedSessionRepository sessionRepository; @@ -96,6 +99,30 @@ class RedisIndexedSessionRepositoryKeyMissITests extends AbstractRedisITests { assertThat(this.sessionRepository.findById(session.getId())).isNull(); } + // gh-1743 + @Test + @SuppressWarnings("unchecked") + void saveChangeSessionIdWhenFailedRenameOperationExceptionContainsMoreDetailsThenIgnoreError() { + this.context.register(Config.class); + refreshAndPrepareFields(); + + RedisSession toSave = this.sessionRepository.createSession(); + String sessionId = toSave.getId(); + + this.sessionRepository.save(toSave); + RedisSession session = this.sessionRepository.findById(sessionId); + this.sessionRepository.deleteById(sessionId); + String newSessionId = session.changeSessionId(); + + RedisSystemException redisSystemException = new RedisSystemException(null, + new RedisCommandExecutionException("ERR no such key. channel: [id: 0xec125091,...")); + willThrow(redisSystemException).given(this.spyOperations).rename(any(), any()); + + this.sessionRepository.save(session); + assertThat(this.sessionRepository.findById(sessionId)).isNull(); + assertThat(this.sessionRepository.findById(newSessionId)).isNull(); + } + @SuppressWarnings("unchecked") private void refreshAndPrepareFields() { this.context.refresh(); diff --git a/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryITests.java b/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryITests.java index d7851add..5eca6598 100644 --- a/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryITests.java +++ b/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryITests.java @@ -20,7 +20,6 @@ import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.UUID; -import io.lettuce.core.RedisCommandExecutionException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -28,7 +27,6 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.RedisSystemException; import org.springframework.data.redis.connection.DefaultMessage; import org.springframework.data.redis.core.RedisOperations; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -47,13 +45,8 @@ import org.springframework.session.events.SessionDestroyedEvent; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.test.util.ReflectionTestUtils; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.willThrow; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.spy; /** * Integration tests for {@link RedisIndexedSessionRepository}. @@ -689,33 +682,6 @@ class RedisIndexedSessionRepositoryITests extends AbstractRedisITests { assertThat(this.repository.findById(copy2.getId())).isNull(); } - // gh-1743 - @Test - @SuppressWarnings("unchecked") - void saveChangeSessionIdWhenFailedRenameOperationExceptionContainsMoreDetailsThenIgnoreError() { - RedisOperations sessionRedisOperations = this.repository.getSessionRedisOperations(); - RedisOperations spyOperations = spy(sessionRedisOperations); - ReflectionTestUtils.setField(this.repository, "sessionRedisOperations", spyOperations); - - RedisSession toSave = this.repository.createSession(); - String sessionId = toSave.getId(); - - this.repository.save(toSave); - RedisIndexedSessionRepository.RedisSession session = this.repository.findById(sessionId); - this.repository.deleteById(sessionId); - String newSessionId = session.changeSessionId(); - - RedisSystemException redisSystemException = new RedisSystemException(null, - new RedisCommandExecutionException("ERR no such key. channel: [id: 0xec125091,...")); - willThrow(redisSystemException).given(spyOperations).rename(any(), any()); - - this.repository.save(session); - assertThat(this.repository.findById(sessionId)).isNull(); - assertThat(this.repository.findById(newSessionId)).isNull(); - reset(spyOperations); - ReflectionTestUtils.setField(this.repository, "sessionRedisOperations", sessionRedisOperations); - } - private String getSecurityName() { return this.context.getAuthentication().getName(); }