package com.github.alexvictoor.rule;
import org.junit.After;
import org.junit.Rule;
import org.junit.Test;
import java.net.ServerSocket;
import static org.assertj.core.api.Assertions.assertThat;
public class SocketRuleTest {
@Rule
public SocketRule socketRule = new SocketRule();
private ServerSocket serverSocket;
@After
public void tearDown() throws Exception {
if (serverSocket != null && !serverSocket.isClosed()) {
serverSocket.close();
}
}
@Test
public void should_provide_a_free_port() {
// given
// when
int port = socketRule.findFreePort();
// then
assertThat(Sockets.isPortAvailable(port)).isTrue();
}
@Test
public void should_not_provide_twice_the_same_port() throws Exception {
// given
int port = socketRule.findFreePort();
// when
int port2 = socketRule.findFreePort();
// then
assertThat(port).isNotEqualTo(port2);
}
@Test
public void should_detect_port_currently_used() throws Exception {
// given
socketRule.findFreePort();
int port = socketRule.findFreePort();
serverSocket = new ServerSocket(port);
// when
boolean available = socketRule.checkProvidedPorts();
// then
assertThat(available).isFalse();
}
@Test
public void should_detect_ports_not_used_anymore() throws Exception {
// given
int port = socketRule.findFreePort();
int port2 = socketRule.findFreePort();
serverSocket = new ServerSocket(port);
serverSocket.close();
// when
boolean available = socketRule.checkProvidedPorts();
// then
assertThat(available).isTrue();
}
}