package org.arquillian.cube.impl.util;
import java.net.InetAddress;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import org.arquillian.cube.spi.Binding;
import org.arquillian.cube.spi.Binding.PortBinding;
import org.arquillian.cube.spi.metadata.HasPortBindings;
public class TestPortBindings implements HasPortBindings {
private final Map<Integer, PortAddress> mappedPorts;
private final Set<Integer> containerPorts;
private final Set<Integer> boundPorts;
private String containerIP;
public TestPortBindings(Binding configuredBindings) {
this.mappedPorts = new HashMap<Integer, PortAddress>();
this.containerPorts = new LinkedHashSet<Integer>();
containerIP = configuredBindings.getIP();
for (PortBinding portBinding : configuredBindings.getPortBindings()) {
final int exposedPort = portBinding.getExposedPort();
final Integer boundPort = portBinding.getBindingPort();
containerPorts.add(exposedPort);
if (boundPort != null && containerIP != null) {
mappedPorts.put(exposedPort, new PortAddressImpl(configuredBindings.getIP(), boundPort));
}
}
this.boundPorts = new LinkedHashSet<Integer>(containerPorts.size());
}
@Override
public boolean isBound() {
return true;
}
@Override
public synchronized String getContainerIP() {
return containerIP;
}
@Override
public String getInternalIP() {
return null;
}
@Override
public Set<Integer> getContainerPorts() {
return Collections.unmodifiableSet(containerPorts);
}
@Override
public synchronized Set<Integer> getBoundPorts() {
return isBound() ? Collections.unmodifiableSet(boundPorts) : getContainerPorts();
}
@Override
public synchronized PortAddress getMappedAddress(int targetPort) {
if (mappedPorts.containsKey(targetPort)) {
return mappedPorts.get(targetPort);
}
return null;
}
@Override
public InetAddress getPortForwardBindAddress() {
return null;
}
}