From cdafa29d841d5e785f3d291d7d287f78d90d9a09 Mon Sep 17 00:00:00 2001 From: Martin Vogel <martin.vogel@sinc.de> Date: Tue, 28 May 2024 15:26:56 +0200 Subject: [PATCH] feat: add socket provider (planning#1779) --- .../fitconnect/client/util/NetworkUtils.java | 22 +++++++++++++---- .../client/util/SocketProvider.java | 10 ++++++++ .../client/util/NetworkUtilsTest.java | 24 ++++++++++++++++++- 3 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 client/src/main/java/dev/fitko/fitconnect/client/util/SocketProvider.java diff --git a/client/src/main/java/dev/fitko/fitconnect/client/util/NetworkUtils.java b/client/src/main/java/dev/fitko/fitconnect/client/util/NetworkUtils.java index 7f98d7658..b893af265 100644 --- a/client/src/main/java/dev/fitko/fitconnect/client/util/NetworkUtils.java +++ b/client/src/main/java/dev/fitko/fitconnect/client/util/NetworkUtils.java @@ -11,29 +11,41 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.stream.Stream; +import static dev.fitko.fitconnect.api.domain.validation.ValidationResult.*; + /** * A testing util that checks all FIT-Connect endpoints for reachability. */ public class NetworkUtils { + private final SocketProvider socketProvider; + + NetworkUtils(SocketProvider socketProvider) { + this.socketProvider = socketProvider; + } + + NetworkUtils() { + this.socketProvider = new SocketProvider(); + } + public ValidationResult checkNetworkConnections() { Environment e = Environments.TEST.getEnvironment(); return Stream.of( - testConnection(e.getAuthBaseUrl()), + testConnection(e.getAuthBaseUrl()), testConnection(e.getSelfServicePortalBaseUrl()), testConnection(e.getRoutingBaseUrl()), testConnection(e.getSubmissionBaseUrls().get(0))) .filter(ValidationResult::hasError) .findFirst() - .orElse(ValidationResult.ok()); + .orElse(ok()); } private ValidationResult testConnection(String url) { - try (Socket socket = new Socket()) { + try (Socket socket = socketProvider.getSocket()) { socket.connect(new InetSocketAddress(getHost(url), 80), 5000); - return ValidationResult.ok(); + return socket.isConnected() ? ok() : error("Socket to " + url + " could nt be connected"); } catch (IOException | URISyntaxException e) { - return ValidationResult.error(e); + return error(e); } } diff --git a/client/src/main/java/dev/fitko/fitconnect/client/util/SocketProvider.java b/client/src/main/java/dev/fitko/fitconnect/client/util/SocketProvider.java new file mode 100644 index 000000000..ebcf9f59f --- /dev/null +++ b/client/src/main/java/dev/fitko/fitconnect/client/util/SocketProvider.java @@ -0,0 +1,10 @@ +package dev.fitko.fitconnect.client.util; + +import java.net.Socket; + +public class SocketProvider { + + public Socket getSocket(){ + return new Socket(); + } +} diff --git a/client/src/test/java/dev/fitko/fitconnect/client/util/NetworkUtilsTest.java b/client/src/test/java/dev/fitko/fitconnect/client/util/NetworkUtilsTest.java index b7aefc50f..ec07133af 100644 --- a/client/src/test/java/dev/fitko/fitconnect/client/util/NetworkUtilsTest.java +++ b/client/src/test/java/dev/fitko/fitconnect/client/util/NetworkUtilsTest.java @@ -3,6 +3,10 @@ package dev.fitko.fitconnect.client.util; import dev.fitko.fitconnect.api.domain.validation.ValidationResult; import org.junit.jupiter.api.Test; +import java.io.IOException; +import java.net.Socket; +import java.net.SocketAddress; + import static org.junit.jupiter.api.Assertions.*; class NetworkUtilsTest { @@ -10,10 +14,28 @@ class NetworkUtilsTest { @Test void checkNetworkConnections() { - NetworkUtils networkUtils = new NetworkUtils(); + NetworkUtils networkUtils = new NetworkUtils(new DummySocketProvider()); final ValidationResult validationResult = networkUtils.checkNetworkConnections(); assertTrue(validationResult.isValid()); } + + class DummySocketProvider extends SocketProvider{ + @Override + public Socket getSocket() { + return new DummySocket(); + } + + class DummySocket extends Socket{ + @Override + public void connect(SocketAddress endpoint, int timeout) { + // NO-OP + } + @Override + public boolean isConnected() { + return true; + } + } + } } \ No newline at end of file -- GitLab