Skip to content

Commit bcfd8a4

Browse files
committed
fix(#1280): Improve Camel JBang Kubernetes plugin support
- Polish Camel JBang Kubernetes run command - Add unit tests for Camel JBang plugin operations (add) - Add unit tests for Camel JBang Kubernetes commands (run, delete, verify)
1 parent 760c970 commit bcfd8a4

31 files changed

+1532
-321
lines changed

endpoints/citrus-camel/src/main/java/org/citrusframework/camel/actions/AbstractCamelJBangAction.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.citrusframework.actions.AbstractTestAction;
2121
import org.citrusframework.camel.jbang.CamelJBang;
2222
import org.citrusframework.camel.jbang.CamelJBangTestActor;
23+
import org.citrusframework.spi.ReferenceResolver;
24+
import org.citrusframework.spi.ReferenceResolverAware;
2325

2426
/**
2527
* Abstract action to access Camel JBang tooling. Action provides common Camel JBang settings such as explicit Camel version.
@@ -29,13 +31,14 @@ public abstract class AbstractCamelJBangAction extends AbstractTestAction {
2931
private final String camelVersion;
3032
private final String kameletsVersion;
3133

32-
private final CamelJBang camelJBang = CamelJBang.camel();
34+
private final CamelJBang camelJBang;
3335

3436
protected AbstractCamelJBangAction(String name, Builder<?, ?> builder) {
3537
super(name, builder);
3638

3739
this.camelVersion = builder.camelVersion;
3840
this.kameletsVersion = builder.kameletsVersion;
41+
this.camelJBang = builder.camelJBang;
3942

4043
if (camelVersion != null) {
4144
camelJBang.camelApp().withSystemProperty("camel.jbang.version", camelVersion);
@@ -65,11 +68,14 @@ public String getKameletsVersion() {
6568
/**
6669
* Action builder.
6770
*/
68-
public static abstract class Builder<T extends AbstractCamelJBangAction, B extends Builder<T, B>> extends AbstractTestActionBuilder<T, B> {
71+
public static abstract class Builder<T extends AbstractCamelJBangAction, B extends Builder<T, B>> extends AbstractTestActionBuilder<T, B> implements ReferenceResolverAware {
6972

73+
protected CamelJBang camelJBang;
7074
protected String camelVersion;
7175
protected String kameletsVersion;
7276

77+
protected ReferenceResolver referenceResolver;
78+
7379
public Builder() {
7480
actor(new CamelJBangTestActor());
7581
}
@@ -94,5 +100,31 @@ public B kameletsVersion(String kameletsVersion) {
94100
return self;
95101
}
96102

103+
public B withReferenceResolver(ReferenceResolver referenceResolver) {
104+
this.referenceResolver = referenceResolver;
105+
return self;
106+
}
107+
108+
@Override
109+
public void setReferenceResolver(ReferenceResolver referenceResolver) {
110+
this.referenceResolver = referenceResolver;
111+
}
112+
113+
@Override
114+
public final T build() {
115+
if (referenceResolver != null && referenceResolver.isResolvable(CamelJBang.class)) {
116+
this.camelJBang = referenceResolver.resolve(CamelJBang.class);
117+
} else {
118+
camelJBang = CamelJBang.camel();
119+
}
120+
121+
return doBuild();
122+
}
123+
124+
/**
125+
* Subclasses need to implement to create the
126+
* @return
127+
*/
128+
protected abstract T doBuild();
97129
}
98130
}

endpoints/citrus-camel/src/main/java/org/citrusframework/camel/actions/AddCamelPluginAction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class AddCamelPluginAction extends AbstractCamelJBangAction {
4141
* Default constructor.
4242
*/
4343
public AddCamelPluginAction(AddCamelPluginAction.Builder builder) {
44-
super("plugin", builder);
44+
super("plugin-add", builder);
4545
this.name = builder.name;
4646
this.args = builder.args;
4747
}
@@ -113,7 +113,7 @@ public Builder withArgs(String... args) {
113113
}
114114

115115
@Override
116-
public AddCamelPluginAction build() {
116+
public AddCamelPluginAction doBuild() {
117117
return new AddCamelPluginAction(this);
118118
}
119119
}

endpoints/citrus-camel/src/main/java/org/citrusframework/camel/actions/CamelKubernetesDeleteAction.java

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@
1616

1717
package org.citrusframework.camel.actions;
1818

19+
import java.util.ArrayList;
20+
import java.util.List;
21+
1922
import org.citrusframework.context.TestContext;
23+
import org.citrusframework.exceptions.CitrusRuntimeException;
24+
import org.citrusframework.jbang.ProcessAndOutput;
2025
import org.citrusframework.spi.Resource;
2126
import org.slf4j.Logger;
2227
import org.slf4j.LoggerFactory;
2328

24-
import java.util.ArrayList;
25-
import java.util.List;
29+
import static org.citrusframework.jbang.JBangSupport.OK_EXIT_CODE;
2630

2731
/**
2832
* Delete kubernetes resources deployed from a Camel project or Camel integration with Camel JBang tooling.
@@ -63,42 +67,44 @@ public class CamelKubernetesDeleteAction extends AbstractCamelJBangAction {
6367
* Default constructor.
6468
*/
6569
public CamelKubernetesDeleteAction(Builder builder) {
66-
super("delete-kubernetes", builder);
70+
super("kubernetes-delete-integration", builder);
6771

6872
this.integrationResource = builder.integrationResource;
6973
this.integrationName = builder.integrationName;
7074
this.clusterType = builder.clusterType;
7175
this.workingDir = builder.workingDir;
7276
this.namespace = builder.namespace;
73-
7477
}
7578

7679
@Override
7780
public void doExecute(TestContext context) {
7881
logger.info("Deleting integration deployed from a Camel Kubernetes project ...");
79-
List<String> fullArgs = new ArrayList<>();
80-
fullArgs.add("delete");
81-
if (integrationResource != null) {
82-
fullArgs.add(integrationResource.getFile().toPath().toAbsolutePath().toString());
83-
}
82+
List<String> commandArgs = new ArrayList<>();
8483
if (integrationName != null) {
85-
fullArgs.add("--name");
86-
fullArgs.add(integrationName);
84+
commandArgs.add("--name");
85+
commandArgs.add(integrationName);
8786
}
8887
if (clusterType != null) {
89-
fullArgs.add("--cluster-type");
90-
fullArgs.add(clusterType);
88+
commandArgs.add("--cluster-type");
89+
commandArgs.add(clusterType);
9190
}
9291
if (workingDir != null) {
93-
fullArgs.add("--working-dir");
94-
fullArgs.add(workingDir);
92+
commandArgs.add("--working-dir");
93+
commandArgs.add(workingDir);
9594
}
9695
if (namespace != null) {
97-
fullArgs.add("--namespace");
98-
fullArgs.add(namespace);
96+
commandArgs.add("--namespace");
97+
commandArgs.add(namespace);
9998
}
100-
camelJBang().camelApp().run("kubernetes", fullArgs.toArray(String[]::new));
10199

100+
camelJBang().camelApp().workingDir(integrationResource.getFile().toPath().toAbsolutePath().getParent());
101+
102+
ProcessAndOutput pao = camelJBang().kubernetes().delete(integrationResource.getFile().getName(), commandArgs.toArray(String[]::new));
103+
logger.info(pao.getOutput());
104+
int exitValue = pao.getProcess().exitValue();
105+
if (exitValue != OK_EXIT_CODE) {
106+
throw new CitrusRuntimeException(String.format("Failed to delete Camel integration from Kubernetes - exit code %s", exitValue));
107+
}
102108
}
103109

104110
public Resource getIntegrationResource() {
@@ -189,7 +195,7 @@ public Builder namespace(String namespace) {
189195
}
190196

191197
@Override
192-
public CamelKubernetesDeleteAction build() {
198+
public CamelKubernetesDeleteAction doBuild() {
193199
return new CamelKubernetesDeleteAction(this);
194200
}
195201
}

0 commit comments

Comments
 (0)