Skip to content

Commit 0030d6e

Browse files
committed
See: RedisPingIntegrationTest.java (no real tests yet, but this file works). The key fix is @DataRedisTest which specifies this Test will only load Redis-related imports while @ContextConfiguration lets me configure so that my RedisTestConfig.java file is used as my loading source of truth. For now, it's an isolated Testcontainers file that defines the containers inside the class, but I should similarly modularize it like I did with BaseContainerFile (or whatever it's called).
1 parent f555b06 commit 0030d6e

5 files changed

Lines changed: 31 additions & 37 deletions

File tree

springqpro-backend/src/main/java/com/springqprobackend/springqpro/config/RedisConfig.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*package com.springqprobackend.springqpro.config;
1+
package com.springqprobackend.springqpro.config;
22

33
import com.fasterxml.jackson.annotation.JsonAutoDetect;
44
import com.fasterxml.jackson.annotation.PropertyAccessor;
@@ -42,4 +42,3 @@ public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory conn
4242
return template;
4343
}
4444
}
45-
*/

springqpro-backend/src/main/java/com/springqprobackend/springqpro/redis/RedisDistributedLock.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
- How to use: String token = lock.tryLock("task:lock:"+id, 10000); if(token!=null){ try { ... } finally { lock.unlock(...); } }
1414
SO BASICALLY, safe lock happens using SET NX PX, and we use a Lua script to unlock it. That's how this is going to work.
1515
*/
16-
/*@Component
16+
@Component
1717
public class RedisDistributedLock {
1818
// Field(s):
1919
private final RedisTemplate<String, Object> redis;
@@ -42,4 +42,3 @@ public boolean unlock(String key, String token) {
4242
return res != null && res > 0;
4343
}
4444
}
45-
*/

springqpro-backend/src/main/java/com/springqprobackend/springqpro/redis/TaskRedisRepository.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
- This file is a thin cache abstraction.
1515
- We'll be caching TaskEntity (DB representation, not domain Task). This is good DDD (Domain-Driven Design): Cache the authoritative persisted shape.
1616
*/
17-
/*@Component
17+
@Component
1818
public class TaskRedisRepository {
1919
// Field(s):
2020
private static final String TASK_KEY_PREFIX = "task:";
@@ -43,4 +43,3 @@ public void delete(String id) {
4343
}
4444
// DEBUG:+NOTE:+TO-DO: I can add other methods like exists(), setIfAbsent() and so on...
4545
}
46-
*/
Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,46 @@
1-
/*package com.springqprobackend.springqpro.integration;
1+
package com.springqprobackend.springqpro.integration;
22

33
import org.junit.jupiter.api.BeforeAll;
44
import org.junit.jupiter.api.Test;
55
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.boot.test.autoconfigure.data.redis.DataRedisTest;
67
import org.springframework.boot.test.context.SpringBootTest;
8+
import org.springframework.boot.test.context.TestConfiguration;
79
import org.springframework.context.annotation.Import;
810
import org.springframework.data.redis.core.RedisTemplate;
11+
import org.springframework.data.redis.core.StringRedisTemplate;
912
import org.springframework.test.context.ActiveProfiles;
13+
import org.springframework.test.context.ContextConfiguration;
1014
import org.testcontainers.containers.GenericContainer;
1115
import org.testcontainers.junit.jupiter.Container;
1216
import org.testcontainers.junit.jupiter.Testcontainers;
1317

1418
import com.springqprobackend.springqpro.config.RedisConfig;
19+
import org.testcontainers.utility.DockerImageName;
1520

16-
@SpringBootTest(classes = { RedisConfig.class })
17-
@ActiveProfiles("test")
21+
@DataRedisTest
1822
@Testcontainers
19-
public class RedisPingIntegrationTest {
20-
21-
@Container
22-
static GenericContainer<?> redis =
23-
new GenericContainer<>("redis:7.2")
24-
.withExposedPorts(6379);
23+
@ContextConfiguration(classes = { RedisPingIntegrationTest.Config.class })
24+
class RedisPingIntegrationTest {
25+
26+
@TestConfiguration
27+
@Import(com.springqprobackend.springqpro.config.RedisConfig.class)
28+
static class Config {
29+
static GenericContainer<?> REDIS =
30+
new GenericContainer<>(DockerImageName.parse("redis:7.2"))
31+
.withExposedPorts(6379);
32+
static {
33+
REDIS.start();
34+
System.setProperty("spring.data.redis.host", REDIS.getHost());
35+
System.setProperty("spring.data.redis.port", REDIS.getMappedPort(6379).toString());
36+
}
37+
}
2538

2639
@Autowired
27-
RedisTemplate<String, Object> redisTemplate;
28-
29-
@BeforeAll
30-
static void setup() {
31-
System.setProperty("spring.redis.host", redis.getHost());
32-
System.setProperty("spring.redis.port",
33-
redis.getMappedPort(6379).toString());
34-
}
40+
private StringRedisTemplate stringRedisTemplate;
3541

3642
@Test
37-
void redisPingPong() {
38-
String key = "ping";
39-
String value = "pong";
40-
41-
redisTemplate.opsForValue().set(key, value);
42-
43-
String fetched = (String) redisTemplate.opsForValue().get(key);
44-
45-
assert fetched != null;
46-
assert fetched.equals(value);
43+
void testPing() {
44+
System.out.println("What's poppin!");
4745
}
48-
}
49-
*/
46+
}

springqpro-backend/src/test/java/com/springqprobackend/springqpro/testcontainers/RedisIntegrationTestBase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*package com.springqprobackend.springqpro.testcontainers;
1+
package com.springqprobackend.springqpro.testcontainers;
22

33
import com.springqprobackend.springqpro.config.RedisTestConfig;
44
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -23,4 +23,4 @@ static void overrideRedisProps(DynamicPropertyRegistry registry) {
2323
registry.add("spring.redis.host", REDIS::getHost);
2424
registry.add("spring.redis.port", () -> REDIS.getMappedPort(6379));
2525
}
26-
}*/
26+
}

0 commit comments

Comments
 (0)