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

redis.embedded.core.PortProvider Maven / Gradle / Ivy

package redis.embedded.core;

import java.io.IOException;
import java.net.ServerSocket;
import java.util.Collection;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicInteger;

public interface PortProvider {
    int get();

    static PortProvider newEphemeralPortProvider() {
        return () -> {
            try (final ServerSocket socket = new ServerSocket(0)) {
                socket.setReuseAddress(false);
                return socket.getLocalPort();
            } catch (IOException e) {
                throw new IllegalArgumentException("Could not provide ephemeral port", e);
            }
        };
    }

    static PortProvider newPredefinedPortProvider(final Collection ports) {
        final Iterator iterator = ports.iterator();
        return () -> {
            if (!iterator.hasNext())
                throw new IllegalArgumentException("Ran out of Redis ports");
            return iterator.next();
        };
    }

    static PortProvider newSequencePortProvider() {
        return newSequencePortProvider(26379);
    }
    static PortProvider newSequencePortProvider(final int start) {
        final AtomicInteger currentPort = new AtomicInteger(start);
        return currentPort::getAndIncrement;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy