From d3d2929169695d5b9aa884e2df82205bc15d1ea5 Mon Sep 17 00:00:00 2001 From: JhonDoe15 Date: Thu, 13 Oct 2022 21:34:46 +0300 Subject: [PATCH 1/7] fixed non final variable code smell --- .../src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java index aaec57c753..52a97fc54b 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java @@ -132,7 +132,7 @@ public static String sanitizeFileName(String name) { // ======================================================================================== - private static int PROGRESS_LENGTH = 50; + private final static int PROGRESS_LENGTH = 50; private static String getProgressBar(long bytesRead, long length) { StringBuilder ret = new StringBuilder("["); From 09680b67571421fe075b8e1a0cb9f7967207be70 Mon Sep 17 00:00:00 2001 From: JhonDoe15 Date: Thu, 13 Oct 2022 22:15:32 +0300 Subject: [PATCH 2/7] fixed modifiers order to meet java standard --- .../src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java index 52a97fc54b..539766b26a 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java @@ -132,7 +132,7 @@ public static String sanitizeFileName(String name) { // ======================================================================================== - private final static int PROGRESS_LENGTH = 50; + private static final int PROGRESS_LENGTH = 50; private static String getProgressBar(long bytesRead, long length) { StringBuilder ret = new StringBuilder("["); From 97951a4461488400cb2d728df4cb2d3dd13628dd Mon Sep 17 00:00:00 2001 From: JhonDoe15 Date: Fri, 14 Oct 2022 22:21:18 +0300 Subject: [PATCH 3/7] clarified code segment --- .../main/java/org/eclipse/jkube/kit/common/util/IoUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java index 539766b26a..6815191f7c 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java @@ -105,8 +105,8 @@ public static int getFreeRandomPort() { public static int getFreeRandomPort(int min, int max, int attempts) { for (int i=0; i < attempts; i++) { int port = min + RANDOM.nextInt(max - min + 1); - try (Socket socket = new Socket("localhost", port)) { // NOSONAR - // Port is open, so it's used up, try again + try (Socket ignored = new Socket("localhost", port)) { // NOSONAR + // Port is open for communication, meaning it's used up, try again } catch (ConnectException e) { return port; } catch (IOException e) { From 3e6a7f29e850c1f0a4a86199860544eba9bbfc98 Mon Sep 17 00:00:00 2001 From: JhonDoe15 Date: Fri, 14 Oct 2022 22:34:34 +0300 Subject: [PATCH 4/7] deleted project wide unused method (IntelliJ verified) getProgressBar was used by the first method, after deletion it too was referred as unused --- .../eclipse/jkube/kit/common/util/IoUtil.java | 79 ------------------- 1 file changed, 79 deletions(-) diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java index 6815191f7c..3f7440a960 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java @@ -13,26 +13,10 @@ */ package org.eclipse.jkube.kit.common.util; -import java.io.File; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.net.ConnectException; import java.net.Socket; -import java.net.URL; -import java.nio.file.Files; import java.util.Random; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - -import io.fabric8.kubernetes.client.Config; -import io.fabric8.kubernetes.client.http.HttpClient; -import io.fabric8.kubernetes.client.http.HttpResponse; -import io.fabric8.kubernetes.client.http.StandardHttpHeaders; -import io.fabric8.kubernetes.client.utils.HttpClientUtils; -import org.eclipse.jkube.kit.common.KitLogger; - -import static org.apache.commons.io.IOUtils.EOF; /** * @@ -46,43 +30,6 @@ public class IoUtil { private IoUtil() { } - /** - * Download with showing the progress a given URL and store it in a file - * @param log logger used to track progress - * @param downloadUrl url to download - * @param target target file where to store the downloaded data - * @throws IOException IO Exception - */ - public static void download(KitLogger log, URL downloadUrl, File target) throws IOException { - log.progressStart(); - try (HttpClient client = HttpClientUtils.createHttpClient(Config.empty()) - .newBuilder().readTimeout(30, TimeUnit.MINUTES).build() - ) { - final HttpResponse response = client.sendAsync( - client.newHttpRequestBuilder().url(downloadUrl).build(), InputStream.class) - .get(); - final int length = Integer.parseInt(response.headers(StandardHttpHeaders.CONTENT_LENGTH) - .stream().findAny().orElse("-1")); - try (OutputStream out = Files.newOutputStream(target.toPath()); InputStream is = response.body()) { - final byte[] buffer = new byte[8192]; - long readBytes = 0; - int len; - while (EOF != (len = is.read(buffer))) { - readBytes += len; - log.progressUpdate(target.getName(), "Downloading", getProgressBar(readBytes, length)); - out.write(buffer, 0, len); - } - } - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - throw new IOException("Download interrupted", ex); - } catch (IOException | ExecutionException e) { - throw new IOException("Failed to download URL " + downloadUrl + " to " + target + ": " + e, e); - } finally { - log.progressFinished(); - } - } - /** * Find a free (on localhost) random port in the range [49152, 65535] after 100 attempts. * @@ -130,30 +77,4 @@ public static String sanitizeFileName(String name) { return null; } - // ======================================================================================== - - private static final int PROGRESS_LENGTH = 50; - - private static String getProgressBar(long bytesRead, long length) { - StringBuilder ret = new StringBuilder("["); - if (length > - 1) { - int bucketSize = (int) ((double)length / PROGRESS_LENGTH + 0.5D); - int index = (int) ((double)bytesRead / bucketSize + 0.5D); - for (int i = 0; i < PROGRESS_LENGTH; i++) { - ret.append(i < index ? "=" : (i == index ? ">" : " ")); - } - ret.append(String.format("] %.2f MB/%.2f MB", - ((float) bytesRead / (1024 * 1024)), - ((float) length / (1024 * 1024)))); - } else { - int bucketSize = 200 * 1024; // 200k - int index = (int) ((double)bytesRead / bucketSize + 0.5D) % PROGRESS_LENGTH; - for (int i = 0; i < PROGRESS_LENGTH; i++) { - ret.append(i == index ? "*" : " "); - } - ret.append("]"); - } - - return ret.toString(); - } } From 40259e961970f3900686dc135774d83ac3695662 Mon Sep 17 00:00:00 2001 From: JhonDoe15 Date: Fri, 14 Oct 2022 22:53:15 +0300 Subject: [PATCH 5/7] revert method deletion --- .../eclipse/jkube/kit/common/util/IoUtil.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java index 3f7440a960..6815191f7c 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/IoUtil.java @@ -13,10 +13,26 @@ */ package org.eclipse.jkube.kit.common.util; +import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.net.ConnectException; import java.net.Socket; +import java.net.URL; +import java.nio.file.Files; import java.util.Random; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +import io.fabric8.kubernetes.client.Config; +import io.fabric8.kubernetes.client.http.HttpClient; +import io.fabric8.kubernetes.client.http.HttpResponse; +import io.fabric8.kubernetes.client.http.StandardHttpHeaders; +import io.fabric8.kubernetes.client.utils.HttpClientUtils; +import org.eclipse.jkube.kit.common.KitLogger; + +import static org.apache.commons.io.IOUtils.EOF; /** * @@ -30,6 +46,43 @@ public class IoUtil { private IoUtil() { } + /** + * Download with showing the progress a given URL and store it in a file + * @param log logger used to track progress + * @param downloadUrl url to download + * @param target target file where to store the downloaded data + * @throws IOException IO Exception + */ + public static void download(KitLogger log, URL downloadUrl, File target) throws IOException { + log.progressStart(); + try (HttpClient client = HttpClientUtils.createHttpClient(Config.empty()) + .newBuilder().readTimeout(30, TimeUnit.MINUTES).build() + ) { + final HttpResponse response = client.sendAsync( + client.newHttpRequestBuilder().url(downloadUrl).build(), InputStream.class) + .get(); + final int length = Integer.parseInt(response.headers(StandardHttpHeaders.CONTENT_LENGTH) + .stream().findAny().orElse("-1")); + try (OutputStream out = Files.newOutputStream(target.toPath()); InputStream is = response.body()) { + final byte[] buffer = new byte[8192]; + long readBytes = 0; + int len; + while (EOF != (len = is.read(buffer))) { + readBytes += len; + log.progressUpdate(target.getName(), "Downloading", getProgressBar(readBytes, length)); + out.write(buffer, 0, len); + } + } + } catch(InterruptedException ex) { + Thread.currentThread().interrupt(); + throw new IOException("Download interrupted", ex); + } catch (IOException | ExecutionException e) { + throw new IOException("Failed to download URL " + downloadUrl + " to " + target + ": " + e, e); + } finally { + log.progressFinished(); + } + } + /** * Find a free (on localhost) random port in the range [49152, 65535] after 100 attempts. * @@ -77,4 +130,30 @@ public static String sanitizeFileName(String name) { return null; } + // ======================================================================================== + + private static final int PROGRESS_LENGTH = 50; + + private static String getProgressBar(long bytesRead, long length) { + StringBuilder ret = new StringBuilder("["); + if (length > - 1) { + int bucketSize = (int) ((double)length / PROGRESS_LENGTH + 0.5D); + int index = (int) ((double)bytesRead / bucketSize + 0.5D); + for (int i = 0; i < PROGRESS_LENGTH; i++) { + ret.append(i < index ? "=" : (i == index ? ">" : " ")); + } + ret.append(String.format("] %.2f MB/%.2f MB", + ((float) bytesRead / (1024 * 1024)), + ((float) length / (1024 * 1024)))); + } else { + int bucketSize = 200 * 1024; // 200k + int index = (int) ((double)bytesRead / bucketSize + 0.5D) % PROGRESS_LENGTH; + for (int i = 0; i < PROGRESS_LENGTH; i++) { + ret.append(i == index ? "*" : " "); + } + ret.append("]"); + } + + return ret.toString(); + } } From cb9d1a8bfb8e8556c9da9c1e0c7efc02715dc041 Mon Sep 17 00:00:00 2001 From: JhonDoe15 Date: Sun, 16 Oct 2022 17:04:46 +0300 Subject: [PATCH 6/7] added tests to IoUtil --- .../jkube/kit/common/util/IoUtilTest.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/IoUtilTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/IoUtilTest.java index 935ca8134b..833d3ab974 100644 --- a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/IoUtilTest.java +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/IoUtilTest.java @@ -19,9 +19,12 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; class IoUtilTest { + @Test void findOpenPort() throws IOException { int port = IoUtil.getFreeRandomPort(); @@ -44,6 +47,43 @@ void findOpenPortWhenPortsAreBusy() throws IOException { assertThat(port2).isGreaterThan(port); } + @Test + void findOpenPortWithSmallAttemptsCount() throws IOException { + int port = IoUtil.getFreeRandomPort(30000, 60000, 30); + try (ServerSocket ss = new ServerSocket(port)) { + assertThat(ss).isNotNull(); + } + } + + @Test + void findOpenPortWithLargeAttemptsCount() throws IOException { + int port = IoUtil.getFreeRandomPort(30000, 60000, 1000); + try (ServerSocket ss = new ServerSocket(port)) { + assertThat(ss).isNotNull(); + } + } + + @Test + void invokeExceptionWhenCouldntFindPort() throws IOException { + + // find open port to occupy + int foundPort = IoUtil.getFreeRandomPort(30000, 65000, 1000); + + // use port + ServerSocket ignored = new ServerSocket(foundPort); + + // try to use the used port + Exception exception = assertThrows(IllegalStateException.class, () -> { + IoUtil.getFreeRandomPort(foundPort, foundPort, 3); + }); + + + String expectedMessage = "Cannot find a free random port in the range [" + foundPort + ", " + foundPort + "] after 3 attempts"; + String actualMessage = exception.getMessage(); + + assertTrue(actualMessage.contains(expectedMessage)); + } + @Test void testSanitizeFileName() { assertThat(IoUtil.sanitizeFileName(null)).isNull(); From 60ed861c606dd3f8b05431aea39ad88bf78d1a60 Mon Sep 17 00:00:00 2001 From: JhonDoe15 Date: Sun, 16 Oct 2022 17:09:25 +0300 Subject: [PATCH 7/7] replaced call with lambda and suppressed smells --- .../java/org/eclipse/jkube/kit/common/util/IoUtilTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/IoUtilTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/IoUtilTest.java index 833d3ab974..1a5ef866e2 100644 --- a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/IoUtilTest.java +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/IoUtilTest.java @@ -70,12 +70,12 @@ void invokeExceptionWhenCouldntFindPort() throws IOException { int foundPort = IoUtil.getFreeRandomPort(30000, 65000, 1000); // use port + //noinspection resource ServerSocket ignored = new ServerSocket(foundPort); // try to use the used port - Exception exception = assertThrows(IllegalStateException.class, () -> { - IoUtil.getFreeRandomPort(foundPort, foundPort, 3); - }); + Exception exception = assertThrows(IllegalStateException.class, + () -> IoUtil.getFreeRandomPort(foundPort, foundPort, 3)); String expectedMessage = "Cannot find a free random port in the range [" + foundPort + ", " + foundPort + "] after 3 attempts"; @@ -86,6 +86,7 @@ void invokeExceptionWhenCouldntFindPort() throws IOException { @Test void testSanitizeFileName() { + //noinspection ConstantConditions assertThat(IoUtil.sanitizeFileName(null)).isNull(); assertThat(IoUtil.sanitizeFileName("Hello/&%World")).isEqualTo("Hello-World"); assertThat(IoUtil.sanitizeFileName(" _H-.-e-.-l-l--.//o()")).isEqualTo("-H-e-l-l-o-");