Как принудительно остановить / убить встроенный сервер Spring Redis программно - PullRequest
0 голосов
/ 22 апреля 2020

Я использую встроенный сервер Redis для своих тестов интеграции, и я заметил, что использование метода RedisServer.stop() на самом деле не останавливает фиктивный сервер. Любая идея, как принудительно убить его в моих тестовых случаях?

Зависимость:

        <!-- Redis test mock server  -->
        <dependency>
            <groupId>it.ozimov</groupId>
            <artifactId>embedded-redis</artifactId>
            <version>0.7.2</version>
            <scope>test</scope>
        </dependency>

Тест интеграции кэша:

@SpringBootTest
@ActiveProfiles("test")
@ExtendWith({SpringExtension.class, RestDocumentationExtension.class})
class CacheServiceImplTest {

    private RedisServer redisServer;

    @MockBean
    private StoreRepository repo;

    @Autowired
    public ObjectMapper objectMapper;

    @Autowired
    private CacheService cacheService;

    @PostConstruct
    public void postConstruct() {
//        if (redisServer.isActive()) {
////            redisServer.stop();
//            Runtime.getRuntime().addShutdownHook(new Thread() {
//                public void run() { redisServer.stop(); }
//            });
//        }
        redisServer.start();
    }

    @PreDestroy
    public void preDestroy() {
//        redisServer.stop();
        Runtime.getRuntime().addShutdownHook(new Thread(() -> redisServer.stop()));
        redisServer.stop();
    }


    @Test
    void saveStoreToRedis() {
        List<Store> stores = new ArrayList<>();
        initializeStores(stores);
        when(repo.findAll()).thenReturn(stores);
        List<StoreResponse> actualStoresResponse = storeDao.findAll();
        Assert.assertNotNull(actualStoresResponse);
//        cacheService.invalidateCache();
    }

}

Я получаю ошибку

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxx.CacheServiceImplTest.ORIGINAL': Invocation of init method failed; nested exception is java.lang.RuntimeException: Can't start redis server. Check logs for details.

Но когда я убиваю его вручную, все работает просто отлично.

lsof -i:6370
COMMAND     PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
redis-ser 80714 XXX    4u  IPv4 0x5c18b66bd501f58d      0t0  TCP localhost:6370 (LISTEN)
  kill -9 80714
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...