package com.github.vbauer.jconditions.checker; import com.github.vbauer.jconditions.annotation.SocketIsOpened; import com.github.vbauer.jconditions.core.CheckerContext; import com.github.vbauer.jconditions.core.ConditionChecker; import com.github.vbauer.jconditions.util.InOutUtils; import com.github.vbauer.jconditions.util.PropUtils; import java.net.InetSocketAddress; import java.net.Socket; /** * @author Vladislav Bauer */ public class SocketIsOpenedChecker implements ConditionChecker<SocketIsOpened> { /** * {@inheritDoc} */ @Override public boolean isSatisfied(final CheckerContext<SocketIsOpened> context) throws Exception { final SocketIsOpened annotation = context.getAnnotation(); final String host = PropUtils.injectProperties(annotation.host()); final int port = annotation.port(); final int timeout = annotation.timeout(); return isSocketOpened(host, port, timeout); } private boolean isSocketOpened( final String host, final int port, final int timeout ) throws Exception { Socket socket = null; try { socket = new Socket(); socket.bind(null); socket.connect(new InetSocketAddress(host, port), timeout); return true; } finally { InOutUtils.closeQuietly(socket); } } }