From b7fc5627121d749333a9c25d2e06c39b0f98bb58 Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Wed, 31 Jan 2024 18:32:47 +0530 Subject: [PATCH] test : Add TestHttpBuildPackArtifactsServer in jkube-kit/common Add TestHttpBuildPackArtifactsServer to host build pack download artifacts so that this test utility class can be reused in dependent modules Signed-off-by: Rohan Kumar --- .../AbstractBuildPackCliDownloaderTest.java | 29 +++--- .../TestHttpBuildPacksArtifactsServer.java | 86 ++++++++++++++++++ .../pack-v0.32.1-linux-arm64.tgz | Bin .../pack-v0.32.1-linux.tgz | Bin .../pack-v0.32.1-macos-arm64.tgz | Bin .../pack-v0.32.1-macos.tgz | Bin .../pack-v0.32.1-windows.zip | Bin 7 files changed, 99 insertions(+), 16 deletions(-) create mode 100644 jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/TestHttpBuildPacksArtifactsServer.java rename jkube-kit/{build/service/buildpacks/src/test/resources/artifacts => common/src/test/resources/buildpack-download-artifacts}/pack-v0.32.1-linux-arm64.tgz (100%) rename jkube-kit/{build/service/buildpacks/src/test/resources/artifacts => common/src/test/resources/buildpack-download-artifacts}/pack-v0.32.1-linux.tgz (100%) rename jkube-kit/{build/service/buildpacks/src/test/resources/artifacts => common/src/test/resources/buildpack-download-artifacts}/pack-v0.32.1-macos-arm64.tgz (100%) rename jkube-kit/{build/service/buildpacks/src/test/resources/artifacts => common/src/test/resources/buildpack-download-artifacts}/pack-v0.32.1-macos.tgz (100%) rename jkube-kit/{build/service/buildpacks/src/test/resources/artifacts => common/src/test/resources/buildpack-download-artifacts}/pack-v0.32.1-windows.zip (100%) diff --git a/jkube-kit/build/service/buildpacks/src/test/java/org/eclipse/jkube/kit/service/buildpacks/AbstractBuildPackCliDownloaderTest.java b/jkube-kit/build/service/buildpacks/src/test/java/org/eclipse/jkube/kit/service/buildpacks/AbstractBuildPackCliDownloaderTest.java index 0f52c2ba6c..3d29742861 100644 --- a/jkube-kit/build/service/buildpacks/src/test/java/org/eclipse/jkube/kit/service/buildpacks/AbstractBuildPackCliDownloaderTest.java +++ b/jkube-kit/build/service/buildpacks/src/test/java/org/eclipse/jkube/kit/service/buildpacks/AbstractBuildPackCliDownloaderTest.java @@ -23,7 +23,7 @@ import org.eclipse.jkube.kit.common.KitLogger; -import org.eclipse.jkube.kit.common.TestHttpStaticServer; +import org.eclipse.jkube.kit.common.TestHttpBuildPacksArtifactsServer; import org.eclipse.jkube.kit.common.util.EnvUtil; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -45,9 +45,8 @@ abstract class AbstractBuildPackCliDownloaderTest { @TempDir private File temporaryFolder; private File oldPackCliInJKubeDir; - private TestHttpStaticServer server; + private TestHttpBuildPacksArtifactsServer server; private BuildPackCliDownloader buildPackCliDownloader; - private String serverBaseUrl; private Properties packProperties; abstract String getApplicablePackBinary(); @@ -67,16 +66,14 @@ void setUp() { overriddenEnvironmentVariables.put("PATH", temporaryFolder.toPath().resolve("bin").toFile().getAbsolutePath()); EnvUtil.overridePropertyGetter(overriddenSystemProperties::get); EnvUtil.overrideEnvGetter(overriddenEnvironmentVariables::get); - File remoteDirectory = new File(Objects.requireNonNull(getClass().getResource("/")).getFile()); - server = new TestHttpStaticServer(remoteDirectory); - serverBaseUrl = String.format("http://localhost:%d/", server.getPort()); + server = new TestHttpBuildPacksArtifactsServer(); packProperties = new Properties(); packProperties.put("version", TEST_PACK_VERSION); - packProperties.put("linux.artifact", serverBaseUrl + "artifacts/pack-v" + TEST_PACK_VERSION + "-linux.tgz"); - packProperties.put("linux-arm64.artifact", serverBaseUrl + "artifacts/pack-v" + TEST_PACK_VERSION + "-linux-arm64.tgz"); - packProperties.put("macos.artifact", serverBaseUrl + "artifacts/pack-v" + TEST_PACK_VERSION + "-macos.tgz"); - packProperties.put("macos-arm64.artifact", serverBaseUrl + "artifacts/pack-v" + TEST_PACK_VERSION + "-macos-arm64.tgz"); - packProperties.put("windows.artifact", serverBaseUrl + "artifacts/pack-v" + TEST_PACK_VERSION + "-windows.zip"); + packProperties.put("linux.artifact", server.getLinuxArtifactUrl()); + packProperties.put("linux-arm64.artifact", server.getLinuxArm64ArtifactUrl()); + packProperties.put("macos.artifact", server.getMacosArtifactUrl()); + packProperties.put("macos-arm64.artifact", server.getMacosArm64ArtifactUrl()); + packProperties.put("windows.artifact", server.getWindowsArtifactUrl()); packProperties.put("windows.binary-extension", "bat"); buildPackCliDownloader = new BuildPackCliDownloader(kitLogger, packProperties); } @@ -159,11 +156,11 @@ void fileExistsAndHasTheRightSize() { class DownloadFails { @BeforeEach void setUp() { - packProperties.put("linux.artifact", serverBaseUrl + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-linux.tgz"); - packProperties.put("linux-arm64.artifact", serverBaseUrl + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-linux-arm64.tgz"); - packProperties.put("macos.artifact", serverBaseUrl + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-macos.tgz"); - packProperties.put("macos-arm64.artifact", serverBaseUrl + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-macos-arm64.tgz"); - packProperties.put("windows.artifact", serverBaseUrl + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-windows.zip"); + packProperties.put("linux.artifact", server.getBaseUrl() + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-linux.tgz"); + packProperties.put("linux-arm64.artifact", server.getBaseUrl() + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-linux-arm64.tgz"); + packProperties.put("macos.artifact", server.getBaseUrl() + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-macos.tgz"); + packProperties.put("macos-arm64.artifact", server.getBaseUrl() + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-macos-arm64.tgz"); + packProperties.put("windows.artifact", server.getBaseUrl() + "invalid-artifacts/pack-v" + TEST_PACK_VERSION + "-windows.zip"); } @Test diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/TestHttpBuildPacksArtifactsServer.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/TestHttpBuildPacksArtifactsServer.java new file mode 100644 index 0000000000..40f9da047b --- /dev/null +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/TestHttpBuildPacksArtifactsServer.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2019 Red Hat, Inc. + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at: + * + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.jkube.kit.common; + +import org.apache.commons.io.FileUtils; +import org.eclipse.jkube.kit.common.util.FileUtil; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.util.Objects; + +public class TestHttpBuildPacksArtifactsServer implements Closeable { + private final TestHttpStaticServer testHttpStaticServer; + private static final String LINUX_ARTIFACT = "pack-v0.32.1-linux.tgz"; + private static final String LINUX_ARM64_ARTIFACT = "pack-v0.32.1-linux-arm64.tgz"; + private static final String MACOS_ARTIFACT = "pack-v0.32.1-macos.tgz"; + private static final String MACOS_ARM64_ARTIFACT = "pack-v0.32.1-macos-arm64.tgz"; + private static final String WINDOWS_ARTIFACT = "pack-v0.32.1-windows.zip"; + private final File remoteBuildPackArtifactsDir; + + public TestHttpBuildPacksArtifactsServer() { + remoteBuildPackArtifactsDir = createTemporaryArtifactsDir(); + testHttpStaticServer = new TestHttpStaticServer(remoteBuildPackArtifactsDir); + } + + public String getLinuxArtifactUrl() { + return createUrlForArtifact(LINUX_ARTIFACT); + } + + public String getLinuxArm64ArtifactUrl() { + return createUrlForArtifact(LINUX_ARM64_ARTIFACT); + } + + public String getMacosArtifactUrl() { + return createUrlForArtifact(MACOS_ARTIFACT); + } + + public String getMacosArm64ArtifactUrl() { + return createUrlForArtifact(MACOS_ARM64_ARTIFACT); + } + + public String getWindowsArtifactUrl() { + return createUrlForArtifact(WINDOWS_ARTIFACT); + } + + public String getBaseUrl() { + return String.format("http://localhost:%d", testHttpStaticServer.getPort()); + } + + private String createUrlForArtifact(String artifactName) { + return String.format("%s/%s", getBaseUrl(), artifactName); + } + + private File createTemporaryArtifactsDir() { + try { + File artifactDir = FileUtil.createTempDirectory(); + + FileUtils.copyInputStreamToFile(Objects.requireNonNull(TestHttpBuildPacksArtifactsServer.class.getResourceAsStream(String.format("/buildpack-download-artifacts/%s", LINUX_ARTIFACT))), new File(artifactDir, LINUX_ARTIFACT)); + FileUtils.copyInputStreamToFile(Objects.requireNonNull(TestHttpBuildPacksArtifactsServer.class.getResourceAsStream(String.format("/buildpack-download-artifacts/%s", LINUX_ARM64_ARTIFACT))), new File(artifactDir, LINUX_ARM64_ARTIFACT)); + FileUtils.copyInputStreamToFile(Objects.requireNonNull(TestHttpBuildPacksArtifactsServer.class.getResourceAsStream(String.format("/buildpack-download-artifacts/%s", MACOS_ARTIFACT))), new File(artifactDir, MACOS_ARTIFACT)); + FileUtils.copyInputStreamToFile(Objects.requireNonNull(TestHttpBuildPacksArtifactsServer.class.getResourceAsStream(String.format("/buildpack-download-artifacts/%s", MACOS_ARM64_ARTIFACT))), new File(artifactDir, MACOS_ARM64_ARTIFACT)); + FileUtils.copyInputStreamToFile(Objects.requireNonNull(TestHttpBuildPacksArtifactsServer.class.getResourceAsStream(String.format("/buildpack-download-artifacts/%s", WINDOWS_ARTIFACT))), new File(artifactDir, WINDOWS_ARTIFACT)); + return artifactDir; + } catch (IOException ioException) { + throw new IllegalStateException("Failure in creating build pack artifacts server : ", ioException); + } + } + + @Override + public void close() throws IOException { + testHttpStaticServer.close(); + FileUtil.cleanDirectory(remoteBuildPackArtifactsDir); + } +} diff --git a/jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-linux-arm64.tgz b/jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-linux-arm64.tgz similarity index 100% rename from jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-linux-arm64.tgz rename to jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-linux-arm64.tgz diff --git a/jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-linux.tgz b/jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-linux.tgz similarity index 100% rename from jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-linux.tgz rename to jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-linux.tgz diff --git a/jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-macos-arm64.tgz b/jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-macos-arm64.tgz similarity index 100% rename from jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-macos-arm64.tgz rename to jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-macos-arm64.tgz diff --git a/jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-macos.tgz b/jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-macos.tgz similarity index 100% rename from jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-macos.tgz rename to jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-macos.tgz diff --git a/jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-windows.zip b/jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-windows.zip similarity index 100% rename from jkube-kit/build/service/buildpacks/src/test/resources/artifacts/pack-v0.32.1-windows.zip rename to jkube-kit/common/src/test/resources/buildpack-download-artifacts/pack-v0.32.1-windows.zip