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

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

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

import com.redis.lettucemod.RedisModulesClient;
import com.redis.lettucemod.api.StatefulRedisModulesConnection;
import com.redis.lettucemod.api.async.RedisModulesAsyncCommands;
import com.redis.lettucemod.api.reactive.RedisModulesReactiveCommands;
import com.redis.lettucemod.api.sync.RedisModulesCommands;
import com.redis.lettucemod.cluster.RedisModulesClusterClient;
import com.redis.testcontainers.RedisServer;

import io.lettuce.core.AbstractRedisClient;
import io.lettuce.core.pubsub.StatefulRedisPubSubConnection;

public class RedisTestContext implements AutoCloseable {

	private final RedisServer server;
	private AbstractRedisClient client;
	private StatefulRedisModulesConnection connection;
	private StatefulRedisPubSubConnection pubSubConnection;

	public RedisTestContext(RedisServer server) {
		this.server = server;
	}

	@Override
	public String toString() {
		return server.toString();
	}

	public RedisServer getServer() {
		return server;
	}

	public AbstractRedisClient getClient() {
		if (client == null) {
			String uri = server.getRedisURI();
			client = server.isCluster() ? RedisModulesClusterClient.create(uri) : RedisModulesClient.create(uri);
		}
		return client;
	}

	public StatefulRedisModulesConnection getConnection() {
		if (connection == null) {
			connection = connection();
		}
		return connection;
	}

	public StatefulRedisPubSubConnection getPubSubConnection() {
		if (pubSubConnection == null) {
			pubSubConnection = pubSubConnection();
		}
		return pubSubConnection;
	}

	private StatefulRedisModulesConnection connection() {
		if (server.isCluster()) {
			return ((RedisModulesClusterClient) getClient()).connect();
		}
		return ((RedisModulesClient) getClient()).connect();
	}

	private StatefulRedisPubSubConnection pubSubConnection() {
		if (server.isCluster()) {
			return ((RedisModulesClusterClient) getClient()).connectPubSub();
		}
		return ((RedisModulesClient) getClient()).connectPubSub();
	}

	public RedisModulesCommands sync() {
		return getConnection().sync();
	}

	public RedisModulesAsyncCommands async() {
		return getConnection().async();
	}

	public RedisModulesReactiveCommands reactive() {
		return getConnection().reactive();
	}

	@Override
	public void close() {
		if (pubSubConnection != null) {
			pubSubConnection.close();
			pubSubConnection = null;
		}
		if (connection != null) {
			connection.close();
			connection = null;
		}
		if (client != null) {
			client.shutdown();
			client.getResources().shutdown();
			client = null;
		}
	}

	public RedisModulesClient getRedisClient() {
		return (RedisModulesClient) getClient();
	}

	public RedisModulesClusterClient getRedisClusterClient() {
		return (RedisModulesClusterClient) getClient();
	}

	public boolean isCluster() {
		return server.isCluster();
	}

	public String getRedisURI() {
		return server.getRedisURI();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy