added some tests

This commit is contained in:
Mei Chang van der Werff 2026-01-16 16:30:37 +01:00
commit 61562d58dc
3 changed files with 104 additions and 11 deletions

View file

@ -30,10 +30,9 @@ public class PortChecker {
public boolean isPortAvailable(int port){
try(ServerSocket socket = new ServerSocket(port)){
return true;
}catch(IOException i) {
}
catch(IOException i) {
return false;
}
}
}
}

View file

@ -1,4 +1,3 @@
package server;
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
@ -6,7 +5,8 @@ import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;
@Component
public class ServerPortCustomizer implements WebServerFactoryCustomizer<ConfigurableWebServerFactory>{
public class ServerPortCustomizer
implements WebServerFactoryCustomizer<ConfigurableWebServerFactory>{
/**
* Changes the port that will be used to launch the program.
* made with the help of: https://www.baeldung.com/spring-boot-change-port
@ -19,11 +19,9 @@ public class ServerPortCustomizer implements WebServerFactoryCustomizer<Configur
int port = portChecker.findFreePort();
factory.setPort(port);
System.out.println("Server starts on port: " + port);
} catch (Exception e) {
}
catch (Exception e) {
throw new RuntimeException("Failed to find a free port", e);
}
}
}
}

View file

@ -0,0 +1,96 @@
package server;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class PortCheckerTest {
@Test
void portAvailable() {
PortChecker checker = new PortChecker();
int port = 0; //will find a random available port
boolean available = checker.isPortAvailable(port);
assertTrue(available);
}
@Test
void portNotAvailable(){
try {
ServerSocket socket = new ServerSocket(0);
int usedPort = socket.getLocalPort();
PortChecker checker = new PortChecker();
boolean notFree = checker.isPortAvailable(usedPort);
assertFalse(notFree);
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
@Test
void invalidPort(){
PortChecker checker = new PortChecker();
assertThrows(IllegalArgumentException.class, ()-> {
checker.isPortAvailable(-1);
}
);
assertThrows(IllegalArgumentException.class, ()-> {
checker.isPortAvailable(65536);
}
);
}
@Test
void findFreePort() throws IOException {
PortChecker checker = new PortChecker();
int port = checker.findFreePort();
int defaultPort = 8080;
int lastPort = 8090;
boolean greaterOrEqual = port >= defaultPort;
boolean lessOrEqual = port <= lastPort;
boolean inRange = greaterOrEqual && lessOrEqual;
boolean isItFree = checker.isPortAvailable(port);
assertTrue(inRange);
}
@Test
void noFreePort() {
List<ServerSocket> notFreePorts = new ArrayList<>();
int defaultPort = 8080;
int lastPort = 8090;
try {
for (int i = defaultPort; i <= lastPort; i++) {
try {
notFreePorts.add(new ServerSocket(i));
}
catch (IOException e) {
}
}
PortChecker checker = new PortChecker();
assertThrows(IOException.class, () -> {
checker.findFreePort();
}
);
}
catch (Exception e) {
throw new RuntimeException(e);
}
for (ServerSocket s : notFreePorts) {
try {
s.close();
}
catch (IOException e) {
}
}
}
}