This is an automated email from the ASF dual-hosted git repository.
hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/main by this push:
new 44bfa90198 Improve ExecProcess Lombok accessors and unit tests (#7565)
44bfa90198 is described below
commit 44bfa901988859395736d20c98e03ae39b35c1b9
Author: Lance <[email protected]>
AuthorDate: Mon Jul 20 16:07:12 2026 +0800
Improve ExecProcess Lombok accessors and unit tests (#7565)
Signed-off-by: lance <[email protected]>
---
.../transforms/execprocess/ExecProcess.java | 19 +-
.../transforms/execprocess/ExecProcessMeta.java | 130 ++------------
.../transforms/execprocess/ProcessResult.java | 30 +---
.../execprocess/ExecProcessDataTest.java | 76 ++++++++
.../execprocess/ExecProcessMetaTest.java | 198 +++++++++++++++++++--
.../transforms/execprocess/ExecProcessTest.java | 27 ++-
.../transforms/execprocess/ProcessResultTest.java} | 48 +++--
7 files changed, 325 insertions(+), 203 deletions(-)
diff --git
a/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcess.java
b/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcess.java
index ef5574608e..d275946a6a 100644
---
a/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcess.java
+++
b/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcess.java
@@ -59,8 +59,10 @@ public class ExecProcess extends
BaseTransform<ExecProcessMeta, ExecProcessData>
@Override
public boolean processRow() throws HopException {
- Object[] r = getRow(); // Get row from input rowset & set row busy!
- if (r == null) { // no more input to be expected...
+ // Get row from input rowset & set row busy!
+ Object[] r = getRow();
+ // no more input to be expected...
+ if (r == null) {
setOutputDone();
return false;
}
@@ -98,7 +100,7 @@ public class ExecProcess extends
BaseTransform<ExecProcessMeta, ExecProcessData>
execProcess(processString, processResult);
}
- if (meta.isFailWhenNotSuccess() && processResult.getExistStatus() != 0) {
+ if (meta.isFailWhenNotSuccess() && processResult.getExitValue() != 0) {
String errorString = processResult.getErrorStream();
if (StringUtils.isEmpty(errorString)) {
errorString = processResult.getOutputStream();
@@ -114,10 +116,10 @@ public class ExecProcess extends
BaseTransform<ExecProcessMeta, ExecProcessData>
outputRow[rowIndex++] = processResult.getErrorStream();
// Add result field to input stream
- outputRow[rowIndex] = processResult.getExistStatus();
+ outputRow[rowIndex] = processResult.getExitValue();
- // add new values to the row.
- putRow(data.outputRowMeta, outputRow); // copy row to output rowset(s)
+ // add new values to the row. copy row to output rowset(s)
+ putRow(data.outputRowMeta, outputRow);
if (isRowLevel()) {
logRowlevel(
@@ -198,6 +200,7 @@ public class ExecProcess extends
BaseTransform<ExecProcessMeta, ExecProcessData>
try {
waitForLatch.await();
} catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
throw new HopException("Interrupted exception while kill the process",
e);
}
}
@@ -215,7 +218,7 @@ public class ExecProcess extends
BaseTransform<ExecProcessMeta, ExecProcessData>
// execute process
try {
if (!meta.isArgumentsInFields()) {
- p = data.runtime.exec(process[0]);
+ p = data.runtime.exec(new String[] {process[0]});
} else {
p = data.runtime.exec(process);
}
@@ -302,7 +305,7 @@ public class ExecProcess extends
BaseTransform<ExecProcessMeta, ExecProcessData>
ie);
}
- processresult.setExistStatus(child.exitValue());
+ processresult.setExitValue(child.exitValue());
}
} catch (IOException ioe) {
throw new HopException(
diff --git
a/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessMeta.java
b/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessMeta.java
index cd62c1a01c..fee366876f 100644
---
a/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessMeta.java
+++
b/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessMeta.java
@@ -19,6 +19,8 @@ package org.apache.hop.pipeline.transforms.execprocess;
import java.util.ArrayList;
import java.util.List;
+import lombok.Getter;
+import lombok.Setter;
import org.apache.hop.core.CheckResult;
import org.apache.hop.core.ICheckResult;
import org.apache.hop.core.annotations.Transform;
@@ -35,6 +37,8 @@ import org.apache.hop.pipeline.PipelineMeta;
import org.apache.hop.pipeline.transform.BaseTransformMeta;
import org.apache.hop.pipeline.transform.TransformMeta;
+@Getter
+@Setter
@Transform(
id = "ExecProcess",
image = "execprocess.svg",
@@ -68,7 +72,7 @@ public class ExecProcessMeta extends
BaseTransformMeta<ExecProcess, ExecProcessD
/** Output Line Delimiter - defaults to empty string for backward
compatibility */
@HopMetadataProperty(key = "outputlinedelimiter")
- public String outputLineDelimiter = "";
+ private String outputLineDelimiter = "";
/** Whether arguments for the command are provided in input fields */
@HopMetadataProperty(key = "argumentsInFields")
@@ -196,6 +200,13 @@ public class ExecProcessMeta extends
BaseTransformMeta<ExecProcess, ExecProcessD
}
}
+ @Override
+ public boolean supportsErrorHandling() {
+ return failWhenNotSuccess;
+ }
+
+ @Getter
+ @Setter
public static final class EPField {
@HopMetadataProperty(key = "argumentFieldName")
private String name;
@@ -205,122 +216,5 @@ public class ExecProcessMeta extends
BaseTransformMeta<ExecProcess, ExecProcessD
public EPField(EPField f) {
this.name = f.name;
}
-
- /**
- * Gets name
- *
- * @return value of name
- */
- public String getName() {
- return name;
- }
-
- /**
- * Sets name
- *
- * @param name value of name
- */
- public void setName(String name) {
- this.name = name;
- }
- }
-
- @Override
- public boolean supportsErrorHandling() {
- return failWhenNotSuccess;
- }
-
- public void setOutputLineDelimiter(String value) {
- this.outputLineDelimiter = value;
- }
-
- public String getOutputLineDelimiter() {
- return outputLineDelimiter;
- }
-
- public boolean isArgumentsInFields() {
- return argumentsInFields;
- }
-
- public void setArgumentsInFields(boolean argumentsInFields) {
- this.argumentsInFields = argumentsInFields;
- }
-
- public List<EPField> getArgumentFields() {
- return argumentFields;
- }
-
- public void setArgumentFields(List<EPField> argumentFields) {
- this.argumentFields = argumentFields;
- }
-
- /**
- * @return Returns the processField.
- */
- public String getProcessField() {
- return processField;
- }
-
- /**
- * @param processField The processField to set.
- */
- public void setProcessField(String processField) {
- this.processField = processField;
- }
-
- /**
- * @return Returns the resultName.
- */
- public String getResultFieldName() {
- return resultFieldName;
- }
-
- /**
- * @param errorFieldName The errorFieldName to set.
- */
- public void setResultFieldName(String errorFieldName) {
- this.resultFieldName = errorFieldName;
- }
-
- /**
- * @return Returns the errorFieldName.
- */
- public String getErrorFieldName() {
- return errorFieldName;
- }
-
- /**
- * @param errorFieldName The errorFieldName to set.
- */
- public void setErrorFieldName(String errorFieldName) {
- this.errorFieldName = errorFieldName;
- }
-
- /**
- * @return Returns the exitvaluefieldname.
- */
- public String getExitValueFieldName() {
- return exitValueFieldName;
- }
-
- /**
- * @param exitValueFieldName The exitValueFieldName to set.
- */
- public void setExitValueFieldName(String exitValueFieldName) {
- this.exitValueFieldName = exitValueFieldName;
- }
-
- /**
- * @return Returns the failWhenNotSuccess.
- */
- public boolean isFailWhenNotSuccess() {
- return failWhenNotSuccess;
- }
-
- /**
- * @param failWhenNotSuccess The failWhenNotSuccess to set.
- */
- public void setFailWhenNotSuccess(boolean failWhenNotSuccess) {
- this.failWhenNotSuccess = failWhenNotSuccess;
}
}
diff --git
a/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResult.java
b/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResult.java
index 253b67470a..6b1559d507 100644
---
a/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResult.java
+++
b/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResult.java
@@ -17,39 +17,19 @@
package org.apache.hop.pipeline.transforms.execprocess;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
public class ProcessResult {
private String outputStream;
private String errorStream;
private long exitValue;
public ProcessResult() {
- super();
this.outputStream = null;
this.errorStream = null;
this.exitValue = 1;
}
-
- public String getOutputStream() {
- return this.outputStream;
- }
-
- public void setOutputStream(String string) {
- this.outputStream = string;
- }
-
- public String getErrorStream() {
- return this.errorStream;
- }
-
- public void setErrorStream(String string) {
- this.errorStream = string;
- }
-
- public long getExistStatus() {
- return this.exitValue;
- }
-
- public void setExistStatus(long value) {
- this.exitValue = value;
- }
}
diff --git
a/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessDataTest.java
b/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessDataTest.java
new file mode 100644
index 0000000000..915bef0b5c
--- /dev/null
+++
b/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessDataTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.hop.pipeline.transforms.execprocess;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.row.RowMeta;
+import org.apache.hop.pipeline.transform.ITransformData;
+import org.junit.jupiter.api.Test;
+
+/** Unit test for {@link ExecProcessData} */
+class ExecProcessDataTest {
+
+ @Test
+ void constructorInitializesDefaults() {
+ ExecProcessData data = new ExecProcessData();
+
+ assertEquals(-1, data.indexOfProcess);
+ assertNull(data.argumentIndexes);
+ assertNull(data.outputRowMeta);
+ assertNull(data.runtime);
+ }
+
+ @Test
+ void implementsITransformData() {
+ ExecProcessData data = new ExecProcessData();
+ assertTrue(data instanceof ITransformData);
+ }
+
+ @Test
+ void fieldAssignmentsRoundTrip() {
+ ExecProcessData data = new ExecProcessData();
+
+ List<Integer> argumentIndexes = new ArrayList<>();
+ argumentIndexes.add(1);
+ argumentIndexes.add(3);
+ IRowMeta outputRowMeta = new RowMeta();
+ Runtime runtime = Runtime.getRuntime();
+
+ data.indexOfProcess = 2;
+ data.argumentIndexes = argumentIndexes;
+ data.outputRowMeta = outputRowMeta;
+ data.runtime = runtime;
+
+ assertEquals(2, data.indexOfProcess);
+ assertSame(argumentIndexes, data.argumentIndexes);
+ assertEquals(2, data.argumentIndexes.size());
+ assertEquals(1, data.argumentIndexes.get(0));
+ assertEquals(3, data.argumentIndexes.get(1));
+ assertSame(outputRowMeta, data.outputRowMeta);
+ assertNotNull(data.runtime);
+ assertSame(runtime, data.runtime);
+ }
+}
diff --git
a/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessMetaTest.java
b/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessMetaTest.java
index 13aa2e5eef..1496833daf 100644
---
a/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessMetaTest.java
+++
b/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessMetaTest.java
@@ -19,10 +19,14 @@ package org.apache.hop.pipeline.transforms.execprocess;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
-import org.apache.hop.core.HopEnvironment;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.hop.core.ICheckResult;
import org.apache.hop.core.row.IRowMeta;
import org.apache.hop.core.row.RowMeta;
import org.apache.hop.core.row.value.ValueMetaInteger;
@@ -30,16 +34,16 @@ import org.apache.hop.core.row.value.ValueMetaString;
import org.apache.hop.core.variables.Variables;
import org.apache.hop.junit.rules.RestoreHopEngineEnvironmentExtension;
import org.apache.hop.metadata.api.IHopMetadataProvider;
+import org.apache.hop.pipeline.PipelineMeta;
import org.apache.hop.pipeline.transform.TransformMeta;
import org.apache.hop.pipeline.transform.TransformSerializationTestUtil;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.api.extension.ExtendWith;
+/** Unit test for {@link ExecProcessMeta} */
+@ExtendWith(RestoreHopEngineEnvironmentExtension.class)
class ExecProcessMetaTest {
- @RegisterExtension
- static RestoreHopEngineEnvironmentExtension env = new
RestoreHopEngineEnvironmentExtension();
-
@Test
void testSerialization() throws Exception {
ExecProcessMeta meta =
@@ -51,15 +55,73 @@ class ExecProcessMetaTest {
assertEquals("error", meta.getErrorFieldName());
assertEquals("exit", meta.getExitValueFieldName());
assertTrue(meta.isFailWhenNotSuccess());
+ assertTrue(meta.isArgumentsInFields());
assertEquals(2, meta.getArgumentFields().size());
assertEquals("value1", meta.getArgumentFields().get(0).getName());
assertEquals("value2", meta.getArgumentFields().get(1).getName());
}
@Test
- void testCloneCopiesArgumentFieldsAndFlags() throws Exception {
- HopEnvironment.init();
+ void testSetDefault() {
+ ExecProcessMeta meta = new ExecProcessMeta();
+ meta.setDefault();
+
+ assertEquals("Result output", meta.getResultFieldName());
+ assertEquals("Error output", meta.getErrorFieldName());
+ assertEquals("Exit value", meta.getExitValueFieldName());
+ assertFalse(meta.isFailWhenNotSuccess());
+ assertEquals("", meta.getOutputLineDelimiter());
+ assertNotNull(meta.getArgumentFields());
+ assertTrue(meta.getArgumentFields().isEmpty());
+ }
+
+ @Test
+ void testGettersAndSetters() {
+ ExecProcessMeta meta = new ExecProcessMeta();
+
+ meta.setProcessField("cmd");
+ assertEquals("cmd", meta.getProcessField());
+
+ meta.setResultFieldName("out");
+ assertEquals("out", meta.getResultFieldName());
+
+ meta.setErrorFieldName("err");
+ assertEquals("err", meta.getErrorFieldName());
+
+ meta.setExitValueFieldName("exit");
+ assertEquals("exit", meta.getExitValueFieldName());
+
+ meta.setFailWhenNotSuccess(true);
+ assertTrue(meta.isFailWhenNotSuccess());
+
+ meta.setOutputLineDelimiter("|");
+ assertEquals("|", meta.getOutputLineDelimiter());
+
+ meta.setArgumentsInFields(true);
+ assertTrue(meta.isArgumentsInFields());
+
+ List<ExecProcessMeta.EPField> fields = new ArrayList<>();
+ ExecProcessMeta.EPField field = new ExecProcessMeta.EPField();
+ field.setName("arg0");
+ fields.add(field);
+ meta.setArgumentFields(fields);
+ assertEquals(1, meta.getArgumentFields().size());
+ assertEquals("arg0", meta.getArgumentFields().get(0).getName());
+ }
+
+ @Test
+ void testEpFieldGettersAndSetters() {
+ ExecProcessMeta.EPField field = new ExecProcessMeta.EPField();
+ field.setName("argument");
+ assertEquals("argument", field.getName());
+
+ ExecProcessMeta.EPField copy = new ExecProcessMeta.EPField(field);
+ assertNotSame(field, copy);
+ assertEquals(field.getName(), copy.getName());
+ }
+ @Test
+ void testCloneCopiesArgumentFieldsAndFlags() {
ExecProcessMeta a = new ExecProcessMeta();
a.setDefault();
a.setProcessField("p");
@@ -71,6 +133,8 @@ class ExecProcessMetaTest {
ExecProcessMeta b = a.clone();
assertNotSame(a, b);
+ assertNotSame(a.getArgumentFields(), b.getArgumentFields());
+ assertNotSame(a.getArgumentFields().get(0), b.getArgumentFields().get(0));
assertEquals(a.getProcessField(), b.getProcessField());
assertTrue(b.isArgumentsInFields());
assertEquals(1, b.getArgumentFields().size());
@@ -79,9 +143,35 @@ class ExecProcessMetaTest {
}
@Test
- void testGetFieldsAppendsResultColumns() throws Exception {
- HopEnvironment.init();
+ void testCopyConstructor() {
+ ExecProcessMeta meta = new ExecProcessMeta();
+ meta.setProcessField("p");
+ meta.setResultFieldName("out");
+ meta.setErrorFieldName("err");
+ meta.setExitValueFieldName("exit");
+ meta.setFailWhenNotSuccess(true);
+ meta.setOutputLineDelimiter(";");
+ meta.setArgumentsInFields(true);
+ ExecProcessMeta.EPField f = new ExecProcessMeta.EPField();
+ f.setName("arg1");
+ meta.getArgumentFields().add(f);
+ ExecProcessMeta copy = new ExecProcessMeta(meta);
+
+ assertEquals(meta.getProcessField(), copy.getProcessField());
+ assertEquals(meta.getResultFieldName(), copy.getResultFieldName());
+ assertEquals(meta.getErrorFieldName(), copy.getErrorFieldName());
+ assertEquals(meta.getExitValueFieldName(), copy.getExitValueFieldName());
+ assertEquals(meta.isFailWhenNotSuccess(), copy.isFailWhenNotSuccess());
+ assertEquals(meta.getOutputLineDelimiter(), copy.getOutputLineDelimiter());
+ assertEquals(meta.isArgumentsInFields(), copy.isArgumentsInFields());
+ assertEquals(1, copy.getArgumentFields().size());
+ assertEquals("arg1", copy.getArgumentFields().get(0).getName());
+ assertNotSame(meta.getArgumentFields().get(0),
copy.getArgumentFields().get(0));
+ }
+
+ @Test
+ void testGetFieldsAppendsResultColumns() {
ExecProcessMeta meta = new ExecProcessMeta();
meta.setDefault();
meta.setResultFieldName("out");
@@ -109,13 +199,99 @@ class ExecProcessMetaTest {
}
@Test
- void testSupportsErrorHandlingMatchesFailWhenNotSuccess() throws Exception {
- HopEnvironment.init();
+ void testGetFieldsSkipsEmptyFieldNames() {
+ ExecProcessMeta meta = new ExecProcessMeta();
+ meta.setResultFieldName("");
+ meta.setErrorFieldName("");
+ meta.setExitValueFieldName("");
+ IRowMeta row = new RowMeta();
+ row.addValueMeta(new ValueMetaString("in1"));
+
+ meta.getFields(
+ row,
+ "ExecProcess",
+ null,
+ new TransformMeta(),
+ new Variables(),
+ (IHopMetadataProvider) null);
+
+ assertEquals(1, row.size());
+ }
+
+ @Test
+ void testSupportsErrorHandlingMatchesFailWhenNotSuccess() {
ExecProcessMeta meta = new ExecProcessMeta();
meta.setFailWhenNotSuccess(false);
assertFalse(meta.supportsErrorHandling());
meta.setFailWhenNotSuccess(true);
assertTrue(meta.supportsErrorHandling());
}
+
+ @Test
+ void checkWithoutResultAndProcessFieldsReportsErrors() {
+ ExecProcessMeta meta = new ExecProcessMeta();
+ List<ICheckResult> remarks = new ArrayList<>();
+
+ meta.check(
+ remarks,
+ mock(PipelineMeta.class),
+ mock(TransformMeta.class),
+ new RowMeta(),
+ new String[0],
+ new String[0],
+ mock(IRowMeta.class),
+ null,
+ mock(IHopMetadataProvider.class));
+
+ assertTrue(
+ remarks.stream().anyMatch(r -> r.getType() ==
ICheckResult.TYPE_RESULT_ERROR),
+ "Expected error when result/process fields are missing and no input is
connected");
+ }
+
+ @Test
+ void checkWithValidFieldsAndInputReportsOk() {
+ ExecProcessMeta meta = new ExecProcessMeta();
+ meta.setDefault();
+ meta.setProcessField("cmd");
+
+ List<ICheckResult> remarks = new ArrayList<>();
+ meta.check(
+ remarks,
+ mock(PipelineMeta.class),
+ mock(TransformMeta.class),
+ new RowMeta(),
+ new String[] {"in"},
+ new String[0],
+ mock(IRowMeta.class),
+ null,
+ mock(IHopMetadataProvider.class));
+
+ assertTrue(
+ remarks.stream().allMatch(r -> r.getType() ==
ICheckResult.TYPE_RESULT_OK),
+ "Expected only OK remarks when required fields are set and input is
connected");
+ }
+
+ @Test
+ void checkWithoutInputReportsError() {
+ ExecProcessMeta meta = new ExecProcessMeta();
+ meta.setDefault();
+ meta.setProcessField("cmd");
+
+ List<ICheckResult> remarks = new ArrayList<>();
+ meta.check(
+ remarks,
+ mock(PipelineMeta.class),
+ mock(TransformMeta.class),
+ new RowMeta(),
+ new String[0],
+ new String[0],
+ mock(IRowMeta.class),
+ null,
+ mock(IHopMetadataProvider.class));
+
+ assertTrue(
+ remarks.stream().anyMatch(r -> r.getType() ==
ICheckResult.TYPE_RESULT_ERROR),
+ "Expected error when no input transforms are connected");
+ }
}
diff --git
a/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessTest.java
b/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessTest.java
index a6a7938c40..7cfd1e7c7a 100644
---
a/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessTest.java
+++
b/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ExecProcessTest.java
@@ -92,19 +92,19 @@ class ExecProcessTest {
return "/bin/echo hop-single";
}
- private RowMeta inputRowMetaForArguments(String processField, String...
argFieldNames) {
+ private RowMeta inputRowMetaForArguments(String... argFieldNames) {
RowMeta rowMeta = new RowMeta();
- rowMeta.addValueMeta(new ValueMetaString(processField));
+ rowMeta.addValueMeta(new ValueMetaString("cmd"));
for (String name : argFieldNames) {
rowMeta.addValueMeta(new ValueMetaString(name));
}
return rowMeta;
}
- private ExecProcessMeta metaForArgumentsMode(String processField, String...
argFieldNames) {
+ private ExecProcessMeta metaForArgumentsMode(String... argFieldNames) {
ExecProcessMeta meta = new ExecProcessMeta();
meta.setDefault();
- meta.setProcessField(processField);
+ meta.setProcessField("cmd");
meta.setResultFieldName("result_out");
meta.setErrorFieldName("result_err");
meta.setExitValueFieldName("result_exit");
@@ -130,9 +130,9 @@ class ExecProcessTest {
HopEnvironment.init();
String[] cmd = echoStdoutAndStderrCommand();
- ExecProcessMeta meta = metaForArgumentsMode("cmd", "a1", "a2");
+ ExecProcessMeta meta = metaForArgumentsMode("a1", "a2");
Object[] row = new Object[] {cmd[0], cmd[1], cmd[2]};
- RowMeta rowMeta = inputRowMetaForArguments("cmd", "a1", "a2");
+ RowMeta rowMeta = inputRowMetaForArguments("a1", "a2");
ExecProcess transform = newTransform(meta, rowMeta, row);
@@ -152,9 +152,9 @@ class ExecProcessTest {
HopEnvironment.init();
String[] cmd = largeStdoutCommand();
- ExecProcessMeta meta = metaForArgumentsMode("cmd", "a1", "a2");
+ ExecProcessMeta meta = metaForArgumentsMode("a1", "a2");
Object[] row = new Object[] {cmd[0], cmd[1], cmd[2]};
- RowMeta rowMeta = inputRowMetaForArguments("cmd", "a1", "a2");
+ RowMeta rowMeta = inputRowMetaForArguments("a1", "a2");
ExecProcess transform = newTransform(meta, rowMeta, row);
@@ -202,9 +202,9 @@ class ExecProcessTest {
HopEnvironment.init();
String[] cmd = failingCommand();
- ExecProcessMeta meta = metaForArgumentsMode("cmd", "a1", "a2");
+ ExecProcessMeta meta = metaForArgumentsMode("a1", "a2");
Object[] row = new Object[] {cmd[0], cmd[1], cmd[2]};
- RowMeta rowMeta = inputRowMetaForArguments("cmd", "a1", "a2");
+ RowMeta rowMeta = inputRowMetaForArguments("a1", "a2");
meta.setFailWhenNotSuccess(true);
when(smh.transformMeta.isDoingErrorHandling()).thenReturn(false);
@@ -249,8 +249,7 @@ class ExecProcessTest {
assertFalse(transform.init());
}
- private ExecProcess newTransform(ExecProcessMeta meta, IRowMeta rowMeta,
Object[] row)
- throws HopException {
+ private ExecProcess newTransform(ExecProcessMeta meta, IRowMeta rowMeta,
Object[] row) {
TransformMeta tm = smh.transformMeta;
when(tm.isDoingErrorHandling()).thenReturn(false);
@@ -263,8 +262,8 @@ class ExecProcessTest {
return transform;
}
- private static Object[] readSingleOutputRow(ExecProcess transform) throws
HopException {
- IRowSet outputRowSet = transform.getOutputRowSets().get(0);
+ private static Object[] readSingleOutputRow(ExecProcess transform) {
+ IRowSet outputRowSet = transform.getOutputRowSets().getFirst();
Object[] out = outputRowSet.getRow();
assertNotNull(out);
return out;
diff --git
a/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResult.java
b/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResultTest.java
similarity index 52%
copy from
plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResult.java
copy to
plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResultTest.java
index 253b67470a..ba40f9985e 100644
---
a/plugins/transforms/execprocess/src/main/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResult.java
+++
b/plugins/transforms/execprocess/src/test/java/org/apache/hop/pipeline/transforms/execprocess/ProcessResultTest.java
@@ -17,39 +17,33 @@
package org.apache.hop.pipeline.transforms.execprocess;
-public class ProcessResult {
- private String outputStream;
- private String errorStream;
- private long exitValue;
-
- public ProcessResult() {
- super();
- this.outputStream = null;
- this.errorStream = null;
- this.exitValue = 1;
- }
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
- public String getOutputStream() {
- return this.outputStream;
- }
+import org.junit.jupiter.api.Test;
- public void setOutputStream(String string) {
- this.outputStream = string;
- }
+/** Unit test for {@link ProcessResult} */
+class ProcessResultTest {
- public String getErrorStream() {
- return this.errorStream;
- }
+ @Test
+ void defaultsMatchHistoricalConstructor() {
+ ProcessResult result = new ProcessResult();
- public void setErrorStream(String string) {
- this.errorStream = string;
+ assertNull(result.getOutputStream());
+ assertNull(result.getErrorStream());
+ assertEquals(1L, result.getExitValue());
}
- public long getExistStatus() {
- return this.exitValue;
- }
+ @Test
+ void gettersAndSettersRoundTrip() {
+ ProcessResult result = new ProcessResult();
+
+ result.setOutputStream("stdout");
+ result.setErrorStream("stderr");
+ result.setExitValue(0L);
- public void setExistStatus(long value) {
- this.exitValue = value;
+ assertEquals("stdout", result.getOutputStream());
+ assertEquals("stderr", result.getErrorStream());
+ assertEquals(0L, result.getExitValue());
}
}