package org.arquillian.cube.spi.metadata; import java.net.InetAddress; import java.util.Set; /** * Port bindings for the container. This includes basic container details (IP, * exposed ports) as well as mappings for specific container ports. * * @author Rob Cernich */ public interface HasPortBindings extends CubeMetadata { /** * Returns true if the container has been bound. Prior to being bound, the * container's IP address may not be valid and port information will be * specific to what is configured for the container (e.g. EXPOSEd ports). * After the container is bound, the ports list may change (e.g. if the * container was started with -p <port>:<not-exposed-port>). * * @return true if the container has been bound. */ boolean isBound(); /** * @return the container's IP address, may be null if the container has not * been bound to an IP. */ String getContainerIP(); /** * @return the container's internal IP address, may be null if the container has not * been bound to an IP. The internal ip is as seen by the Host or other containers. */ String getInternalIP(); /** * @return list of configured container ports. */ Set<Integer> getContainerPorts(); /** * @return list of all container ports (configured and dynamically bound * (e.g. -p <port>:<not-exposed-port>) */ Set<Integer> getBoundPorts(); /** * @param targetPort * the target port * * @return the mapped address for the target port, may be null if the port * is bound, but not mapped (e.g. no -p :port) */ PortAddress getMappedAddress(int targetPort); /** * @return the mapped address in the arquillian.xml,defined by the * portForwardBindAddress property. * If null, returns the default - 127.0.0.1. */ InetAddress getPortForwardBindAddress(); /** * Port mapping for a bound port. The socket address that should be used to * configure network connections to the specified contianer port. */ public interface PortAddress { /** * @return the host IP */ String getIP(); /** * @return the host port */ int getPort(); } /** * Simple implementation of PortAddress */ public static final class PortAddressImpl implements PortAddress { private final String ip; private final int port; public PortAddressImpl(String ip, int port) { this.ip = ip; this.port = port; } @Override public String getIP() { return ip; } @Override public int getPort() { return port; } } }