All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.redis.testcontainers.junit.AbstractTestcontainersRedisTestBase Maven / Gradle / Ivy

There is a newer version: 1.6.4
Show newest version
package com.redis.testcontainers.junit;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.awaitility.Awaitility;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.junit.jupiter.Testcontainers;

import com.redis.testcontainers.RedisServer;

/**
 * 
 * 
 * @ParameterizedTest
 * @RedisTestContextsSource
 * void myTest(RedisTestContext redis) {
 *    ...
 * }
 * 
 * 
 * @author jruaux
 *
 */
@Testcontainers
@TestInstance(Lifecycle.PER_CLASS)
public abstract class AbstractTestcontainersRedisTestBase {

	private static final Logger log = LoggerFactory.getLogger(AbstractTestcontainersRedisTestBase.class);

	private Map contexts = new LinkedHashMap<>();

	protected abstract Collection redisServers();

	protected Collection testRedisServers() {
		return contexts.keySet();
	}

	@BeforeAll
	protected void setup() {
		Collection allRedisServers = redisServers();
		Assumptions.assumeTrue(allRedisServers.stream().anyMatch(RedisServer::isEnabled));
		for (RedisServer server : allRedisServers) {
			if (server.isEnabled()) {
				log.info("Starting container {}", server);
				server.start();
				contexts.put(server, new RedisTestContext(server));
			} else {
				log.info("Container {} disabled", server);
			}
		}
	}

	protected RedisTestContext removeRedisTestContext(RedisServer server) {
		return contexts.remove(server);
	}

	private List contexts(Collection servers) {
		List testContexts = new ArrayList<>();
		for (RedisServer server : servers) {
			if (contexts.containsKey(server)) {
				testContexts.add(contexts.get(server));
			}
		}
		return testContexts;
	}

	@BeforeEach
	protected void flushAll() {
		contexts.forEach((k, v) -> {
			if (k.isEnabled()) {
				v.sync().flushall();
				Awaitility.await().until(() -> v.sync().dbsize() == 0);
			}
		});
	}

	@AfterAll
	protected void teardown() {
		contexts.forEach((k, v) -> {
			v.close();
			k.close();
		});
		contexts.clear();
	}

	public RedisTestContext getContext(RedisServer server) {
		return contexts.get(server);
	}

	public List getAllContexts() {
		return new ArrayList<>(contexts.values());
	}

	public List getTestContexts() {
		return contexts(testRedisServers());
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy