From 61f48a9e9a59b91735cdaec974dfe55c3871f946 Mon Sep 17 00:00:00 2001 From: Jeromy Cannon Date: Wed, 4 Oct 2023 16:32:50 +0100 Subject: [PATCH] Squashed commit of the following: commit 5eb36bfb8091f090e93a38528943c5dd0a6f2495 Author: Jeromy Cannon Date: Mon Oct 2 21:30:37 2023 +0100 remove public modifier Signed-off-by: Jeromy Cannon commit a18cfa8bd34ce6596aad2fc0bab3df8ede1466eb Author: Jeromy Cannon Date: Mon Oct 2 20:45:40 2023 +0100 more test coverage Signed-off-by: Jeromy Cannon commit 05592cb58433a02ee7a855e76dd346f71ee24afa Author: Jeromy Cannon Date: Mon Oct 2 20:38:43 2023 +0100 removed system out println Signed-off-by: Jeromy Cannon commit e1cac52817d97ab78bf5ae286dd4208184e88229 Author: Jeromy Cannon Date: Mon Oct 2 20:37:02 2023 +0100 increase test coverage Signed-off-by: Jeromy Cannon commit 57770eeaf14e4512fa15277d398a4014ba86c7b0 Author: Jeromy Cannon Date: Mon Oct 2 20:36:51 2023 +0100 added workingDirectory override abilities into helm client for using within test cases Signed-off-by: Jeromy Cannon commit 7fe0aae21945e213c358c7a64915887c9974b092 Author: Jeromy Cannon Date: Mon Oct 2 19:02:55 2023 +0100 added helm client dependency update Signed-off-by: Jeromy Cannon commit 5f4d57ccccf34f58741e9e3c2caec71ba910b0cc Author: Jeromy Cannon Date: Mon Oct 2 19:05:28 2023 +0100 fix failing test case Signed-off-by: Jeromy Cannon commit d61a6527a8a5ede96ba2adef3ffd239520cc1707 Author: Jeromy Cannon Date: Mon Oct 2 16:53:14 2023 +0100 test coverage Signed-off-by: Jeromy Cannon commit d81323105f469e39a59af6d905d704857a1dc51a Author: Jeromy Cannon Date: Fri Sep 29 16:58:16 2023 +0100 testChart(String releaseName, TestChartOptions options) Signed-off-by: Jeromy Cannon commit c7aaf6cc1d34785609b0843049b609646797d47e Author: Jeromy Cannon Date: Thu Sep 28 19:54:15 2023 +0100 HelmUninstallChartTask code/examples/test coverage Signed-off-by: Jeromy Cannon commit 6240d285fc01f83244cdf400e897a393f573ff40 Author: Jeromy Cannon Date: Wed Sep 27 17:18:35 2023 +0100 fix test case failure Signed-off-by: Jeromy Cannon commit 4a51c382a5df2faf0e22ca4637e86206a0eb2eb8 Author: Jeromy Cannon Date: Wed Sep 27 14:47:16 2023 +0100 removed todo for gradle plugin logging if error and added coverage for the same Signed-off-by: Jeromy Cannon commit 834586d7669c32f544bbda954a30a1ccc0de3c35 Author: Jeromy Cannon Date: Tue Sep 26 21:15:39 2023 +0100 gradle-executable path provided Signed-off-by: Jeromy Cannon commit c2cbdbf0dc9ef6ce27c3b10484d36511903f8374 Author: Jeromy Cannon Date: Tue Sep 26 20:52:32 2023 +0100 gradle-executable path provided Signed-off-by: Jeromy Cannon commit a7540dc264e6b0422b21505d89c8bf06bee8ead5 Author: Jeromy Cannon Date: Tue Sep 26 18:35:14 2023 +0100 gradle-executable shouldn't be needed... Signed-off-by: Jeromy Cannon commit 480c2880a75041d129f74668bbde19a3f6d76744 Author: Jeromy Cannon Date: Tue Sep 26 18:12:35 2023 +0100 supply gradle executable directory for new jobs Signed-off-by: Jeromy Cannon commit 719b24b5749e9c9ee519538374b5e6bdcacae688 Author: Jeromy Cannon Date: Tue Sep 26 18:03:21 2023 +0100 supply gradle executable directory for new jobs Signed-off-by: Jeromy Cannon commit 67e9c1c7ba5f76df1f85e89ef69c0c3e4da9f923 Author: Jeromy Cannon Date: Tue Sep 26 17:39:47 2023 +0100 Examples Spotless Check Signed-off-by: Jeromy Cannon commit 9c40db5fd5724a9f68f00652d9481aa2fa901379 Author: Jeromy Cannon Date: Tue Sep 26 17:35:06 2023 +0100 update job ids for new jobs Signed-off-by: Jeromy Cannon commit c80aa8b1dbf89260d3725104b7107b0e4d3eb1c4 Author: Jeromy Cannon Date: Tue Sep 26 17:31:18 2023 +0100 add compile and unit test jobs for examples project since they are now separate Signed-off-by: Jeromy Cannon commit 4475c6abf2a20e74a451f14ad6869b47d8fc2db3 Author: Jeromy Cannon Date: Tue Sep 26 17:21:14 2023 +0100 updates based on feedback from Jendrick on hedera-services changes. Signed-off-by: Jeromy Cannon commit dd90490c255e3e40e32bcf7ca3cff07795b7caaf Author: Jeromy Cannon Date: Tue Sep 26 09:41:51 2023 +0100 updates based on changes in helm install subcommand Signed-off-by: Jeromy Cannon commit 6f436e6063bd3681219d8f30826df335bad1ae50 Author: Jeromy Cannon Date: Mon Sep 25 14:42:22 2023 +0100 temporarily disable fullstack-examples until we can resolve intellij and sonar issues Signed-off-by: Jeromy Cannon commit 962080e2f571adf7632c4b265812e7b4d3efeec7 Author: Jeromy Cannon Date: Fri Sep 22 20:12:30 2023 +0100 Squashed commit of the following: commit d177c82d71e52012df8c0e7d766913eb5b518625 Author: Jeromy Cannon Date: Thu Sep 21 19:02:43 2023 +0100 updated HelmExecutionBuilder workingDirectory to use PWD instead of new File('.') from FileUtils Signed-off-by: Jeromy Cannon commit 7ef57c193e5c527a58c6d46b0d12b86157c82fd8 Author: Jeromy Cannon Date: Thu Sep 21 14:09:23 2023 +0100 removed commented out code that was previously used for shadowjars Signed-off-by: Jeromy Cannon commit 4891dd59d5bb2eb52c8d31ddd41ce3b4952c46e0 Author: Jeromy Cannon Date: Wed Sep 20 20:02:40 2023 +0100 remove shadowjars Signed-off-by: Jeromy Cannon commit 9d67a54e10ca0fa148a1565cb9067b6a6098df0e Author: Jeromy Cannon Date: Wed Sep 20 19:48:24 2023 +0100 remove shadowjars Signed-off-by: Jeromy Cannon commit 3dc75a046075de48892766db4e4891bf394344b5 Author: Jeromy Cannon Date: Wed Sep 20 19:43:55 2023 +0100 todo Signed-off-by: Jeromy Cannon commit 7660afbf52fb7e012c5e46c6bb72fc7fc2cb892e Author: Jeromy Cannon Date: Wed Sep 20 19:42:46 2023 +0100 more todo's Signed-off-by: Jeromy Cannon commit 51df39336acf2ad22e10e5b1136fe31af2257251 Author: Jeromy Cannon Date: Wed Sep 20 18:04:31 2023 +0100 switch to a different repo to avoid test collisions Signed-off-by: Jeromy Cannon commit 44754c15eb4c77f08cc1026d4e593020db28eddd Author: Jeromy Cannon Date: Wed Sep 20 17:35:19 2023 +0100 remove code smells Signed-off-by: Jeromy Cannon commit d068f262f80206a7a01fe2d4954be779f55585af Author: Jeromy Cannon Date: Wed Sep 20 16:25:05 2023 +0100 updated HelmInstallChartTaskTest to different chart/repo to avoid collisions with other tests Signed-off-by: Jeromy Cannon commit 7821d6f0f29d7956331e1d21952b95e071e951db Author: Jeromy Cannon Date: Wed Sep 20 13:10:07 2023 +0100 add licenses at top of kotlin files Signed-off-by: Jeromy Cannon commit ae3d3c7cd3e356ac074d9c9fec54ef29c40e6274 Author: Jeromy Cannon Date: Wed Sep 20 13:02:06 2023 +0100 added TODO Signed-off-by: Jeromy Cannon commit 4a8226169b896fc140360c42699615fac812037e Author: Jeromy Cannon Date: Wed Sep 20 12:53:04 2023 +0100 Revert "removed unneeded test implementation reference" This reverts commit 8eedff9fe3c6c9443df756e08f11bd3e7170a80e. Signed-off-by: Jeromy Cannon commit 674c155a9775ad12bf6125e096c7617b70502a8b Author: Jeromy Cannon Date: Wed Sep 20 12:49:28 2023 +0100 removed unneeded test implementation reference Signed-off-by: Jeromy Cannon commit 23c310463face8cf62765014e96d41aaa51874b9 Author: Jeromy Cannon Date: Wed Sep 20 12:45:25 2023 +0100 upcoming todo for next PR Signed-off-by: Jeromy Cannon commit 72bf7b34e2d14d173971657a4c8f4a9be9628f64 Author: Jeromy Cannon Date: Tue Sep 19 22:26:19 2023 +0100 removed commented out code Signed-off-by: Jeromy Cannon commit aec75d3c09477e487fc234a6a187c79f150aa70a Author: Jeromy Cannon Date: Tue Sep 19 22:24:54 2023 +0100 FileUtils.getWorkingPath() Signed-off-by: Jeromy Cannon commit 50e2a0e951baf43ba57c36279c61481f0e452948 Author: Jeromy Cannon Date: Tue Sep 19 22:21:05 2023 +0100 remove commented out code Signed-off-by: Jeromy Cannon commit 659283b829c1ec5970af3bb4f55bab6b4ca8425f Author: Jeromy Cannon Date: Tue Sep 19 22:20:56 2023 +0100 remove commented out code Signed-off-by: Jeromy Cannon commit 5fb6e869622137660f6b814da0d269f305491714 Author: Jeromy Cannon Date: Tue Sep 19 22:20:30 2023 +0100 added namespace and create namespace and example chart for installing during build check Signed-off-by: Jeromy Cannon commit 610244141686d233f0b5d36a925cd7af326f8597 Author: Jeromy Cannon Date: Mon Sep 18 19:44:36 2023 +0100 working version Signed-off-by: Jeromy Cannon commit 7e06feb82c183528dbf1afe73a720b3c5ada835e Author: Jeromy Cannon Date: Mon Sep 18 19:29:05 2023 +0100 task working Signed-off-by: Jeromy Cannon commit 19c176bb0a4327934e05150201c9c435c8ae63ba Author: Jeromy Cannon Date: Mon Sep 18 19:06:37 2023 +0100 non-working version Signed-off-by: Jeromy Cannon commit 9e2e66fad05d41c0ecf105f79de128c11879fb98 Author: Jeromy Cannon Date: Mon Sep 18 17:01:59 2023 +0100 compiling version although not executing of moving integration tests into examples Signed-off-by: Jeromy Cannon commit c5a9b8a7af426f6c58b1f39bfbd3b8370098d101 Author: Jeromy Cannon Date: Fri Sep 15 18:30:00 2023 +0100 added logic to set the namespace in the helm install task Signed-off-by: Jeromy Cannon commit dc851979517f8de81bf08973b979a41edf081cd4 Author: Jeromy Cannon Date: Fri Sep 15 17:47:30 2023 +0100 removed duplicate export Signed-off-by: Jeromy Cannon commit 671005905dc539f0a3b7d855d111895183f4f394 Author: Jeromy Cannon Date: Fri Sep 15 17:28:10 2023 +0100 added support for set and values parameters of install subcommand to handle sets Signed-off-by: Jeromy Cannon commit 0d49686b125a15b46a699571a61d4569643de729 Author: Jeromy Cannon Date: Fri Sep 15 17:27:21 2023 +0100 enhanced helm client to handle sets of strings for values and set parameters for the install subcommand Signed-off-by: Jeromy Cannon commit 3f634e0dcd6661a8999acb6ad724a18ce3a9b855 Author: Jeromy Cannon Date: Thu Sep 14 19:39:03 2023 +0100 test nmt install Signed-off-by: Jeromy Cannon commit a760d5252dd4cc1d879f8458a575a9c1c3d4e0ad Author: Jeromy Cannon Date: Thu Sep 14 19:06:12 2023 +0100 update version from 0.7.0 to 0.8.0 Signed-off-by: Jeromy Cannon commit 3c2a99baa72e8da93a36164ceea6fee6e6f46ee5 Author: Jeromy Cannon Date: Thu Sep 14 19:04:34 2023 +0100 todo Signed-off-by: Jeromy Cannon commit 77c59efd807e7cc39c07b9eb32227b690de648b3 Author: Jeromy Cannon Date: Thu Sep 14 18:57:51 2023 +0100 removed comment from FullstackPlugin.java Signed-off-by: Jeromy Cannon commit 840f64bdf6a812f4e941e2158d5747f81cefc6a4 Author: Jeromy Cannon Date: Thu Sep 14 18:56:19 2023 +0100 reordered alphabetically Signed-off-by: Jeromy Cannon commit 28005adc8bf3eed6c9b272b208d720aa1d35dbc4 Author: Jeromy Cannon Date: Thu Sep 14 18:53:54 2023 +0100 added set parameter Signed-off-by: Jeromy Cannon commit 1d03540c971c8023395eff067ce691ec0034bed2 Author: Jeromy Cannon Date: Thu Sep 14 18:32:07 2023 +0100 update after merge from main made a mess (part2) Signed-off-by: Jeromy Cannon commit bb254c67ad698c11120d21c409a9e781173eadd4 Author: Jeromy Cannon Date: Thu Sep 14 18:26:36 2023 +0100 update after merge from main made a mess Signed-off-by: Jeromy Cannon Signed-off-by: Jeromy Cannon commit 7c5b663bdff184d547e8ee7ac0dba1f35376f625 Author: Jeromy Cannon Date: Mon Oct 2 17:07:26 2023 +0100 better rename for options with multiple values Signed-off-by: Jeromy Cannon commit db5283d25087e37a1edd95e42702025fdd7450e6 Author: Jeromy Cannon Date: Mon Sep 25 21:45:18 2023 +0100 updates based on code review Signed-off-by: Jeromy Cannon commit 72757acaacddddd81066af9be9839308f2c4e014 Author: Jeromy Cannon Date: Mon Sep 25 13:40:35 2023 +0100 sonar changes Signed-off-by: Jeromy Cannon commit d1b70f81fc11c8f883d37049c2579d4b15ef7c2c Author: Jeromy Cannon Date: Fri Sep 22 19:55:41 2023 +0100 coverage for ChartInstallRequest.apply() Signed-off-by: Jeromy Cannon commit 622fd315b573a98e15e7fcd93e8cc08e86b55d26 Author: Jeromy Cannon Date: Fri Sep 22 19:55:13 2023 +0100 spotlessApply Signed-off-by: Jeromy Cannon commit 25ca4885142b9cb68ebb842a5dcccc38b710d5f1 Author: Jeromy Cannon Date: Fri Sep 22 18:55:38 2023 +0100 only %n for string.format Signed-off-by: Jeromy Cannon commit c9c45f91d3a64340663751fac4d30424ba96aaad Author: Jeromy Cannon Date: Thu Sep 21 20:26:55 2023 +0100 GMD: Enhance Helm Install to support multiple set and values parameters #366 Signed-off-by: Jeromy Cannon Signed-off-by: Jeromy Cannon --- .../fullstack/helm/client/HelmClient.java | 8 +++ .../helm/client/HelmClientBuilder.java | 9 ++++ .../helm/client/impl/DefaultHelmClient.java | 41 ++++++++++++++- .../client/impl/DefaultHelmClientBuilder.java | 13 ++++- .../chart/ChartDependencyUpdateRequest.java | 41 +++++++++++++++ .../helm/client/test/HelmClientTest.java | 26 +++++++++- .../ChartDependencyUpdateRequestTest.java | 50 +++++++++++++++++++ 7 files changed, 183 insertions(+), 5 deletions(-) create mode 100644 fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/proxy/request/chart/ChartDependencyUpdateRequest.java create mode 100644 fullstack-helm-client/src/test/java/com/hedera/fullstack/helm/client/test/proxy/request/chart/ChartDependencyUpdateRequestTest.java diff --git a/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/HelmClient.java b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/HelmClient.java index 8c38a2574..c04943227 100644 --- a/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/HelmClient.java +++ b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/HelmClient.java @@ -101,6 +101,14 @@ default Release installChart(String releaseName, Chart chart) { */ void testChart(String releaseName, TestChartOptions options); + /** + * Executes the Helm CLI {@code dependency update} sub-command and updates the dependencies of the specified Helm + * chart. + * + * @param chartName the name of the chart to update. + */ + void dependencyUpdate(String chartName); + /** * Creates a new {@link HelmClientBuilder} instance with the default configuration. * diff --git a/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/HelmClientBuilder.java b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/HelmClientBuilder.java index 17824ffb3..76a118908 100644 --- a/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/HelmClientBuilder.java +++ b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/HelmClientBuilder.java @@ -40,6 +40,15 @@ public interface HelmClientBuilder { */ HelmClientBuilder defaultNamespace(String namespace); + /** + * Sets the working directory for the {@link HelmClient} instance. + * @param workingDirectory the working directory. + * @return the {@link HelmClientBuilder} instance. + * @implNote The working directory is set to the pwd if not explicitly provided, if that fails it will use the + * parent folder of the helm executable. + */ + HelmClientBuilder workingDirectory(Path workingDirectory); + /** * Sets the Kubernetes API server address and port number for the {@link HelmClient} instance. * diff --git a/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/impl/DefaultHelmClient.java b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/impl/DefaultHelmClient.java index bad753a0c..d8922c042 100644 --- a/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/impl/DefaultHelmClient.java +++ b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/impl/DefaultHelmClient.java @@ -28,6 +28,7 @@ import com.hedera.fullstack.helm.client.model.test.TestChartOptions; import com.hedera.fullstack.helm.client.proxy.request.HelmRequest; import com.hedera.fullstack.helm.client.proxy.request.authentication.KubeAuthentication; +import com.hedera.fullstack.helm.client.proxy.request.chart.ChartDependencyUpdateRequest; import com.hedera.fullstack.helm.client.proxy.request.chart.ChartInstallRequest; import com.hedera.fullstack.helm.client.proxy.request.chart.ChartTestRequest; import com.hedera.fullstack.helm.client.proxy.request.chart.ChartUninstallRequest; @@ -69,6 +70,11 @@ public final class DefaultHelmClient implements HelmClient { */ private final String defaultNamespace; + /** + * The working directory to use when executing Helm commands. + */ + private final Path workingDirectory; + /** * Creates a new instance of the {@link DefaultHelmClient} class. * @@ -78,9 +84,26 @@ public final class DefaultHelmClient implements HelmClient { */ public DefaultHelmClient( final Path helmExecutable, final KubeAuthentication authentication, final String defaultNamespace) { + this(helmExecutable, authentication, defaultNamespace, null); + } + + /** + * Creates a new instance of the {@link DefaultHelmClient} class. + * + * @param helmExecutable the path to the Helm executable. + * @param authentication the authentication configuration to use when executing Helm commands. + * @param defaultNamespace the default namespace to use when executing Helm commands. + * @param workingDirectory the working directory to use when executing Helm commands. + */ + public DefaultHelmClient( + final Path helmExecutable, + final KubeAuthentication authentication, + final String defaultNamespace, + final Path workingDirectory) { this.helmExecutable = Objects.requireNonNull(helmExecutable, "helmExecutable must not be null"); this.authentication = Objects.requireNonNull(authentication, "authentication must not be null"); this.defaultNamespace = defaultNamespace; + this.workingDirectory = workingDirectory; } @Override @@ -130,6 +153,14 @@ public void testChart(final String releaseName, final TestChartOptions options) }); } + @Override + public void dependencyUpdate(final String chartName) { + executeInternal(new ChartDependencyUpdateRequest(chartName), Void.class, (b, c) -> { + b.call(); + return null; + }); + } + /** * Applies the default namespace and authentication configuration to the given builder. * @@ -140,11 +171,16 @@ private void applyBuilderDefaults(final HelmExecutionBuilder builder) { builder.argument(NAMESPACE_ARG_NAME, defaultNamespace); } + if (workingDirectory != null) { + builder.workingDirectory(workingDirectory); + } + authentication.apply(builder); } /** - * Executes the given request and returns the response as the given class. The request is executed using the default namespace. + * Executes the given request and returns the response as the given class. The request is executed using the default + * namespace. * * @param request the request to execute. * @param responseClass the class of the response. @@ -172,7 +208,8 @@ private R execute( } /** - * Executes the given request and returns the response as a list of the given class. The request is executed using the default namespace. + * Executes the given request and returns the response as a list of the given class. The request is executed using + * the default namespace. * * @param request the request to execute. * @param responseClass the class of the response. diff --git a/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/impl/DefaultHelmClientBuilder.java b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/impl/DefaultHelmClientBuilder.java index fb13f852b..9695456bc 100644 --- a/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/impl/DefaultHelmClientBuilder.java +++ b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/impl/DefaultHelmClientBuilder.java @@ -33,6 +33,11 @@ public final class DefaultHelmClientBuilder implements HelmClientBuilder { */ private String defaultNamespace; + /** + * The working directory to be used by the {@link HelmClient}. + */ + private Path workingDirectory; + /** * The kubernetes API server address and port number to which the client should connect. Defaults to a {@code null} * value which indicates that the Helm {@code --kube-apiserver } argument should not be specified. @@ -86,6 +91,12 @@ public HelmClientBuilder defaultNamespace(final String namespace) { return this; } + @Override + public HelmClientBuilder workingDirectory(final Path workingDirectory) { + this.workingDirectory = workingDirectory; + return this; + } + @Override public HelmClientBuilder kubeApiServer(String kubeApiServer) { this.kubeApiServer = kubeApiServer; @@ -139,6 +150,6 @@ public HelmClient build() { kubeTlsServerName, kubeToken, kubeConfig); - return new DefaultHelmClient(helmExecutable, kubeAuthentication, defaultNamespace); + return new DefaultHelmClient(helmExecutable, kubeAuthentication, defaultNamespace, workingDirectory); } } diff --git a/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/proxy/request/chart/ChartDependencyUpdateRequest.java b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/proxy/request/chart/ChartDependencyUpdateRequest.java new file mode 100644 index 000000000..d40fa829e --- /dev/null +++ b/fullstack-helm-client/src/main/java/com/hedera/fullstack/helm/client/proxy/request/chart/ChartDependencyUpdateRequest.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2023 Hedera Hashgraph, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hedera.fullstack.helm.client.proxy.request.chart; + +import com.hedera.fullstack.helm.client.execution.HelmExecutionBuilder; +import com.hedera.fullstack.helm.client.proxy.request.HelmRequest; +import java.util.Objects; + +/** + * A request to do a dependency update on a chart. + * + * @param chartName the name of the chart to update. + */ +public record ChartDependencyUpdateRequest(String chartName) implements HelmRequest { + public ChartDependencyUpdateRequest { + Objects.requireNonNull(chartName, "chartName must not be null"); + if (chartName.isBlank()) { + throw new IllegalArgumentException("chartName must not be blank"); + } + } + + @Override + public void apply(HelmExecutionBuilder builder) { + builder.subcommands("dependency", "update"); + builder.positional(chartName); + } +} diff --git a/fullstack-helm-client/src/test/java/com/hedera/fullstack/helm/client/test/HelmClientTest.java b/fullstack-helm-client/src/test/java/com/hedera/fullstack/helm/client/test/HelmClientTest.java index b0023216e..d106b57bb 100644 --- a/fullstack-helm-client/src/test/java/com/hedera/fullstack/helm/client/test/HelmClientTest.java +++ b/fullstack-helm-client/src/test/java/com/hedera/fullstack/helm/client/test/HelmClientTest.java @@ -18,10 +18,12 @@ import static com.hedera.fullstack.base.api.util.ExceptionUtils.suppressExceptions; import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Named.named; import com.hedera.fullstack.base.api.version.SemanticVersion; import com.hedera.fullstack.helm.client.HelmClient; +import com.hedera.fullstack.helm.client.HelmExecutionException; import com.hedera.fullstack.helm.client.model.Chart; import com.hedera.fullstack.helm.client.model.Repository; import com.hedera.fullstack.helm.client.model.chart.Release; @@ -32,6 +34,7 @@ import com.jcovalent.junit.logging.LogEntryBuilder; import com.jcovalent.junit.logging.LoggingOutput; import com.jcovalent.junit.logging.assertj.LoggingOutputAssert; +import java.io.File; import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.*; @@ -88,8 +91,10 @@ private record ChartInstallOptionsTestParameters(InstallChartOptions options, Li @BeforeAll static void beforeAll() { - helmClient = - HelmClient.builder().defaultNamespace("helm-client-test-ns").build(); + helmClient = HelmClient.builder() + .defaultNamespace("helm-client-test-ns") + .workingDirectory(new File(".").toPath()) + .build(); assertThat(helmClient).isNotNull(); } @@ -359,4 +364,21 @@ void testTestChartWithOptions() { suppressExceptions(() -> helmClient.uninstallChart(HAPROXY_RELEASE_NAME)); } } + + @Test + @DisplayName("Test Helm dependency update subcommand") + void testHelmDependencyUpdate() { + helmClient.dependencyUpdate("../charts/hedera-network"); + } + + @Test + @DisplayName("Test Helm dependency build subcommand failure") + void testHelmDependencyBuildFailure() { + HelmExecutionException exception = + assertThrows(HelmExecutionException.class, () -> helmClient.dependencyUpdate("../charts/not-a-chart")); + assertThat(exception.getMessage()).contains("Execution of the Helm command failed with exit code: 1"); + assertThat(exception.getStdOut()) + .contains( + "Error: could not find ../charts/not-a-chart: stat ../charts/not-a-chart: no such file or directory"); + } } diff --git a/fullstack-helm-client/src/test/java/com/hedera/fullstack/helm/client/test/proxy/request/chart/ChartDependencyUpdateRequestTest.java b/fullstack-helm-client/src/test/java/com/hedera/fullstack/helm/client/test/proxy/request/chart/ChartDependencyUpdateRequestTest.java new file mode 100644 index 000000000..92dd2818f --- /dev/null +++ b/fullstack-helm-client/src/test/java/com/hedera/fullstack/helm/client/test/proxy/request/chart/ChartDependencyUpdateRequestTest.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2023 Hedera Hashgraph, LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hedera.fullstack.helm.client.test.proxy.request.chart; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.hedera.fullstack.helm.client.execution.HelmExecutionBuilder; +import com.hedera.fullstack.helm.client.proxy.request.chart.ChartDependencyUpdateRequest; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class ChartDependencyUpdateRequestTest { + @Mock + HelmExecutionBuilder helmExecutionBuilderMock; + + @Test + @DisplayName("Verify ChartDependencyUpdateRequest apply") + void testChartDependencyUpdateRequestApply() { + final ChartDependencyUpdateRequest request = new ChartDependencyUpdateRequest("mocked"); + assertThat(request).isNotNull(); + assertThat(request.chartName()).isEqualTo("mocked"); + + when(helmExecutionBuilderMock.subcommands("dependency", "update")).thenReturn(helmExecutionBuilderMock); + when(helmExecutionBuilderMock.positional("mocked")).thenReturn(helmExecutionBuilderMock); + request.apply(helmExecutionBuilderMock); + verify(helmExecutionBuilderMock, times(1)).subcommands("dependency", "update"); + verify(helmExecutionBuilderMock, times(1)).positional("mocked"); + } +}