This is an automated email from the ASF dual-hosted git repository.

mattcasters 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 ef9d6484e2 issue #7582 : fix IT write permissions and ExecProcess 
single-command exec (#7584)
ef9d6484e2 is described below

commit ef9d6484e2e3e7afb1184b25132e29f85019b58d
Author: Matt Casters <[email protected]>
AuthorDate: Mon Jul 20 17:26:57 2026 +0200

    issue #7582 : fix IT write permissions and ExecProcess single-command exec 
(#7584)
    
    * issue #7582 : fix IT write permissions and ExecProcess single-command exec
    
    Harden integration-test Docker prep so project output/, files/, and roots
    are writable under the container UID, and move generated spreadsheet/MDI/
    parquet/http artifacts into world-writable output/ paths (with golden data
    and gitignore updates). Also restore Runtime.exec(String) for ExecProcess
    single-command mode so command lines are tokenized again (#7565 regression).
    
    * issue #7582 : adopt StringTokenizer-based ExecProcess fix from #7581
    
    Use explicit whitespace tokenization before Runtime.exec(String[]) for
    single-command mode (avoids the deprecated String overload), and add a
    unit test for tokenizeCommandLine. Credit: @leehaut in #7581.
---
 .gitignore                                         |  14 ++-
 integration-tests/http/files/http-action-output    |  29 ------
 .../http/main-0006-https-trustore.hwf              |   2 +-
 integration-tests/mdi/0016-excelwriter-parent.hpl  |   2 +-
 integration-tests/mdi/0016-excelwriter-verify.hpl  |   2 +-
 integration-tests/mdi/0017-json-output-parent.hpl  |   2 +-
 integration-tests/mdi/0017-json-output-verify.hpl  |   2 +-
 .../mdi/files/excelwriter-mdi-test.xlsx            | Bin 3310 -> 0 bytes
 .../mdi/files/jsonoutput-mdi-test_0.json           |   1 -
 integration-tests/mdi/main-0016-excelwriter.hwf    |   2 +-
 integration-tests/mdi/main-0017-json-output.hwf    |   2 +-
 integration-tests/scripts/run-tests-docker.sh      |  99 ++++++++++++++++++---
 integration-tests/scripts/run-tests.sh             |  11 ++-
 integration-tests/spreadsheet/0003-write-xlsx.hpl  |   2 +-
 .../spreadsheet/0004-test-header-check.hpl         |   2 +-
 integration-tests/spreadsheet/0004-test-header.hpl |   2 +-
 .../spreadsheet/0005-check-multiple-files.hpl      |   2 +-
 .../spreadsheet/0005-write-multiple-files.hpl      |  14 +--
 .../0006-multi-part-fixed-name-check.hpl           |   2 +-
 .../spreadsheet/0006-multi-part-fixed-name.hpl     |   2 +-
 .../spreadsheet/0007-append-to-xlsx-validate.hpl   |   2 +-
 .../spreadsheet/0007-append-to-xlsx.hpl            |   2 +-
 .../datasets/golden-multi-file-excel.csv           |  14 +--
 .../spreadsheet/main-0007-append-file.hwf          |   6 +-
 .../transforms/0072-prepare-parquet-file.hpl       |   2 +-
 .../transforms/0072-read-parquet-file.hpl          |   2 +-
 .../main-0072-parquet-input-test-delete.hwf        |   2 +-
 27 files changed, 143 insertions(+), 81 deletions(-)

diff --git a/.gitignore b/.gitignore
index ef3a8dc1f6..64433a06aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,6 +46,7 @@ docs/.pnp.js
 tmp/images
 
 integration-tests/mail/output/
+# Generated spreadsheet writer outputs (under files/ historically; now also 
under output/)
 integration-tests/spreadsheet/files/exel-part-001.xlsx
 integration-tests/spreadsheet/files/exel-part-002.xlsx
 integration-tests/spreadsheet/files/exel-header-test.xlsx
@@ -55,10 +56,20 @@ integration-tests/spreadsheet/files/exel-multi-part_1.xlsx
 integration-tests/spreadsheet/files/exel-multi-part_2.xlsx
 integration-tests/spreadsheet/files/exel-multi-part_3.xlsx
 integration-tests/spreadsheet/files/exel-multi-part_4.xlsx
+/integration-tests/spreadsheet/files/exelwriter-testfile
+integration-tests/spreadsheet/output/
 integration-tests/json/output
 integration-tests/mdi/files/excelwriter-mdi-test.xlsx
+integration-tests/mdi/files/jsonoutput-mdi-test_0.json
+integration-tests/mdi/output/
+integration-tests/http/files/http-action-output
+integration-tests/http/output/
 integration-tests/spreadsheet/files/sample-file-append.xlsx
+integration-tests/spreadsheet/files/sample-file-append-test.xlsx
 integration-tests/spark-native/output
+integration-tests/transforms/files/parquet-test*.parquet
+# MDI may still leave injected pipelines in the project root on older paths
+integration-tests/mdi/*-injected.hpl
 
 assemblies/debug/audit
 
@@ -71,5 +82,4 @@ screenshots/
 
 # Docker script leaving audit data
 docker/local-data/
-
-/integration-tests/spreadsheet/files/exelwriter-testfile
+/docker/marketplace-nexus/.env
diff --git a/integration-tests/http/files/http-action-output 
b/integration-tests/http/files/http-action-output
deleted file mode 100644
index ec80ada209..0000000000
--- a/integration-tests/http/files/http-action-output
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-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.
-
--->
-
-<!DOCTYPE html>
-<html>
-    <head>
-        <title>Example</title>
-    </head>
-    <body>
-        <p>This is an example of a simple HTML page.</p>
-    </body>
-</html>
diff --git a/integration-tests/http/main-0006-https-trustore.hwf 
b/integration-tests/http/main-0006-https-trustore.hwf
index 83c8bad79f..3c48b4dd21 100644
--- a/integration-tests/http/main-0006-https-trustore.hwf
+++ b/integration-tests/http/main-0006-https-trustore.hwf
@@ -82,7 +82,7 @@ limitations under the License.
       <type>HTTP</type>
       <attributes/>
       <url>${HTTPS_TEST_URL}</url>
-      <targetfilename>${PROJECT_HOME}/files/http-action-output</targetfilename>
+      
<targetfilename>${PROJECT_HOME}/output/http-action-output</targetfilename>
       <file_appended>N</file_appended>
       <date_time_added>N</date_time_added>
       <targetfilename_extension/>
diff --git a/integration-tests/mdi/0016-excelwriter-parent.hpl 
b/integration-tests/mdi/0016-excelwriter-parent.hpl
index 0724edcfc8..ed6a26651a 100644
--- a/integration-tests/mdi/0016-excelwriter-parent.hpl
+++ b/integration-tests/mdi/0016-excelwriter-parent.hpl
@@ -173,7 +173,7 @@ limitations under the License.
     </fields>
     <data>
       <line>
-        <item>${PROJECT_HOME}/files/excelwriter-mdi-test</item>
+        <item>${PROJECT_HOME}/output/excelwriter-mdi-test</item>
         <item>xlsx</item>
       </line>
     </data>
diff --git a/integration-tests/mdi/0016-excelwriter-verify.hpl 
b/integration-tests/mdi/0016-excelwriter-verify.hpl
index 3a47e4dffd..0cd0259a27 100644
--- a/integration-tests/mdi/0016-excelwriter-verify.hpl
+++ b/integration-tests/mdi/0016-excelwriter-verify.hpl
@@ -139,7 +139,7 @@ limitations under the License.
     <accept_field/>
     <accept_transform_name/>
     <file>
-      <name>${PROJECT_HOME}/files/excelwriter-mdi-test.xlsx</name>
+      <name>${PROJECT_HOME}/output/excelwriter-mdi-test.xlsx</name>
       <filemask/>
       <exclude_filemask/>
       <file_required>N</file_required>
diff --git a/integration-tests/mdi/0017-json-output-parent.hpl 
b/integration-tests/mdi/0017-json-output-parent.hpl
index 1de26514b7..cee5362027 100644
--- a/integration-tests/mdi/0017-json-output-parent.hpl
+++ b/integration-tests/mdi/0017-json-output-parent.hpl
@@ -197,7 +197,7 @@ limitations under the License.
     </fields>
     <data>
       <line>
-        <item>${PROJECT_HOME}/files/jsonoutput-mdi-test</item>
+        <item>${PROJECT_HOME}/output/jsonoutput-mdi-test</item>
         <item>json</item>
       </line>
     </data>
diff --git a/integration-tests/mdi/0017-json-output-verify.hpl 
b/integration-tests/mdi/0017-json-output-verify.hpl
index 0e58e6ce70..a7a9b1cd7c 100644
--- a/integration-tests/mdi/0017-json-output-verify.hpl
+++ b/integration-tests/mdi/0017-json-output-verify.hpl
@@ -79,7 +79,7 @@ limitations under the License.
     <defaultPathLeafToNull>Y</defaultPathLeafToNull>
     <rownum_field/>
     <file>
-      <name>${PROJECT_HOME}/files/jsonoutput-mdi-test_0.json</name>
+      <name>${PROJECT_HOME}/output/jsonoutput-mdi-test_0.json</name>
       <filemask/>
       <exclude_filemask/>
       <file_required>N</file_required>
diff --git a/integration-tests/mdi/files/excelwriter-mdi-test.xlsx 
b/integration-tests/mdi/files/excelwriter-mdi-test.xlsx
deleted file mode 100644
index 89dc9f1333..0000000000
Binary files a/integration-tests/mdi/files/excelwriter-mdi-test.xlsx and 
/dev/null differ
diff --git a/integration-tests/mdi/files/jsonoutput-mdi-test_0.json 
b/integration-tests/mdi/files/jsonoutput-mdi-test_0.json
deleted file mode 100644
index 4e6a7c4636..0000000000
--- a/integration-tests/mdi/files/jsonoutput-mdi-test_0.json
+++ /dev/null
@@ -1 +0,0 @@
-{"data":[{"foo":"bar"}]}
\ No newline at end of file
diff --git a/integration-tests/mdi/main-0016-excelwriter.hwf 
b/integration-tests/mdi/main-0016-excelwriter.hwf
index 8479522e44..20c7b64140 100644
--- a/integration-tests/mdi/main-0016-excelwriter.hwf
+++ b/integration-tests/mdi/main-0016-excelwriter.hwf
@@ -53,7 +53,7 @@ limitations under the License.
       <description/>
       <type>DELETE_FILE</type>
       <attributes/>
-      <filename>${PROJECT_HOME}/files/excelwriter-mdi-test.xlsx</filename>
+      <filename>${PROJECT_HOME}/output/excelwriter-mdi-test.xlsx</filename>
       <fail_if_file_not_exists>N</fail_if_file_not_exists>
       <parallel>N</parallel>
       <xloc>272</xloc>
diff --git a/integration-tests/mdi/main-0017-json-output.hwf 
b/integration-tests/mdi/main-0017-json-output.hwf
index 30d5dfa8ae..65a2a0b3d5 100644
--- a/integration-tests/mdi/main-0017-json-output.hwf
+++ b/integration-tests/mdi/main-0017-json-output.hwf
@@ -53,7 +53,7 @@ limitations under the License.
       <description/>
       <type>DELETE_FILE</type>
       <attributes/>
-      <filename>${PROJECT_HOME}/files/jsonoutput-mdi-test.json</filename>
+      <filename>${PROJECT_HOME}/output/jsonoutput-mdi-test.json</filename>
       <fail_if_file_not_exists>N</fail_if_file_not_exists>
       <parallel>N</parallel>
       <xloc>208</xloc>
diff --git a/integration-tests/scripts/run-tests-docker.sh 
b/integration-tests/scripts/run-tests-docker.sh
index 1d56361d10..f6ebeac88b 100755
--- a/integration-tests/scripts/run-tests-docker.sh
+++ b/integration-tests/scripts/run-tests-docker.sh
@@ -112,14 +112,29 @@ fi
 
 # Detect a real Google Cloud service-account key. The dummy file is a license 
comment, not
 # JSON; spreadsheet Google Sheets ITs need a real key (Jenkins: credentials 
gcp-access-hop).
+# Require non-empty file + type=service_account + JSON-looking content so a 
corrupt/empty
+# secret still skips cleanly. When python3 is available, also require 
parseable JSON.
 SKIP_GOOGLE_SHEETS="false"
+GCP_KEY_OK="true"
 if [ ! -f "${GCP_KEY_FILE}" ] \
   || [[ "${GCP_KEY_FILE}" == *dummyfile* ]] \
-  || ! grep -qE '"type"[[:space:]]*:[[:space:]]*"service_account"' 
"${GCP_KEY_FILE}" 2>/dev/null; then
+  || [ ! -s "${GCP_KEY_FILE}" ] \
+  || ! grep -qE '"type"[[:space:]]*:[[:space:]]*"service_account"' 
"${GCP_KEY_FILE}" 2>/dev/null \
+  || ! grep -qE '\{' "${GCP_KEY_FILE}" 2>/dev/null; then
+  GCP_KEY_OK="false"
+elif command -v python3 >/dev/null 2>&1; then
+  if ! python3 -c "import json,sys; json.load(open(sys.argv[1]))" 
"${GCP_KEY_FILE}" 2>/dev/null; then
+    GCP_KEY_OK="false"
+  fi
+fi
+if [ "${GCP_KEY_OK}" = "true" ]; then
+  echo "GCP service-account JSON present at GCP_KEY_FILE=${GCP_KEY_FILE}; 
Google Sheets ITs will run"
+else
   SKIP_GOOGLE_SHEETS="true"
   echo "No valid GCP service-account JSON at GCP_KEY_FILE=${GCP_KEY_FILE}; 
spreadsheet Google Sheets tests will be skipped"
 fi
 export SKIP_GOOGLE_SHEETS
+echo "SKIP_GOOGLE_SHEETS=${SKIP_GOOGLE_SHEETS}"
 
 if [ -z "${HOP_OPTIONS}" ] ; then 
   HOP_OPTIONS="${HOP_OPTIONS} 
-Djavax.net.ssl.keyStore=./docker/integration-tests/resource/keystore.jks 
-Djavax.net.ssl.keyStorePassword=password 
-Djavax.net.ssl.trustStore=./docker/integration-tests/resource/mail/conf/keystore
 "
@@ -142,31 +157,52 @@ fi
 mkdir -p "${CURRENT_DIR}"/../surefire-reports/
 chmod 777 "${CURRENT_DIR}"/../surefire-reports/
 
-# Pre-create project output/ dirs on the host and make them world-writable.
+# Pre-create project write dirs on the host and make them world-writable.
 # ASF Jenkins passes a container UID that matches the agent workspace owner, 
so ownership
-# alone is enough there. World-writable output/ is a belt-and-suspenders for:
+# alone is often enough. World-writable dirs are belt-and-suspenders for:
 #   - local runs where someone overrides JENKINS_UID to a fixed value
 #   - compose files that hardcode build-arg UIDs when not using this script's 
--build-arg
-# Pipelines that write temp artifacts (Excel/ODS writer, Spark CSV, etc.) use
-# ${PROJECT_HOME}/output.
+#   - residual files from a previous container UID that the host cannot 
delete/overwrite
+#
+# Many ITs write under ${PROJECT_HOME}/output (Excel/ODS, Spark CSV, mail), 
under
+# ${PROJECT_HOME}/files (HTTP download, spreadsheet Excel writer, MDI JSON, 
parquet),
+# and some MDI tests write *-injected.hpl into the project root itself.
 #
 # Spark/Spark-native leave untracked part-*.csv / .crc trees under 
output/<case>/ owned by
-# the previous container UID (often 755). Later runs with a different 
JENKINS_UID cannot
-# delete them. Only remove *untracked* residual files — never wipe git-tracked 
content
+# the previous container UID. Later runs with a different JENKINS_UID cannot 
delete them.
+# Only remove *untracked* residual files under output/ — never wipe 
git-tracked content
 # (ldap stores setup pipelines under output/*.hpl).
 REPO_ROOT="$(cd "${CURRENT_DIR}/../.." && pwd)"
+IT_ROOT="$(cd "${CURRENT_DIR}/.." && pwd)"
+
+# Best-effort: re-own the whole integration-tests tree as the container user 
so bind-mount
+# writes succeed even when a previous run left root/other-UID residuals (needs 
Docker).
+# Ownership only — do not chmod -R the tree (that dirties git file modes on 
644 fixtures).
+if docker info >/dev/null 2>&1; then
+  echo "Ensuring integration-tests/ is owned by ${JENKINS_UID}:${JENKINS_GID} 
(container identity)"
+  docker run --rm -v "${IT_ROOT}:/files" alpine:3.19 \
+    sh -c "chown -R ${JENKINS_UID}:${JENKINS_GID} /files 2>/dev/null; true" \
+    2>/dev/null || true
+fi
+
 for d in "${CURRENT_DIR}"/../${PROJECT_NAME}/; do
   if [[ "$d" != *"scripts/" ]] && [[ "$d" != *"surefire-reports/" ]] && [[ 
"$d" != *"hopweb/" ]]; then
     if [ -d "$d" ] && [ ! -f "$d/disabled.txt" ]; then
-      mkdir -p "$d/output"
-      chmod 777 "$d/output" 2>/dev/null || true
+      # Project root: MDI target_file=…-injected.hpl writes here.
+      chmod a+rwx "$d" 2>/dev/null || true
+
+      mkdir -p "$d/output" "$d/files"
+      chmod 777 "$d/output" "$d/files" 2>/dev/null || true
+
       abs_out="$(cd "$d/output" && pwd)"
       rel_out="${abs_out#"${REPO_ROOT}"/}"
+      abs_files="$(cd "$d/files" && pwd)"
+      rel_files="${abs_files#"${REPO_ROOT}"/}"
 
-      # 1) Untracked leftovers only when the host can delete them (safe for 
ldap/*.hpl).
+      # 1) Untracked leftovers under output/ only when the host can delete 
them (safe for ldap/*.hpl).
       git -C "${REPO_ROOT}" clean -fd -- "${rel_out}" 2>/dev/null || true
 
-      # 2) Other-UID Spark residuals: chmod as root, then host git clean again.
+      # 2) Other-UID residuals under output/: chmod as root, then host git 
clean again.
       #    Never blanket-delete under output/ (that wiped ldap/output/*.hpl).
       if find "$d/output" \( -name 'part-*' -o -name '_SUCCESS' -o -name 
'*.crc' \) 2>/dev/null | grep -q .; then
         echo "Fixing permissions on Spark residual files under ${rel_out}"
@@ -178,6 +214,47 @@ for d in "${CURRENT_DIR}"/../${PROJECT_NAME}/; do
           sh -c 'find /out \( -name "part-*" -o -name "_SUCCESS" -o -name 
"*.crc" \) -exec rm -rf {} + 2>/dev/null; find /out -type d -empty -delete 
2>/dev/null; true' \
           2>/dev/null || true
       fi
+
+      # 3) files/ must stay writable for overwrite (HopVfs deletes then 
recreates).
+      #    Re-assert modes; do not wipe fixtures. Only remove *untracked* 
generated leftovers
+      #    (never rm a path that is still in git — e.g. 
http/files/exel-part-001.xlsx is a fixture).
+      if [ -d "$d/files" ]; then
+        chmod 777 "$d/files" 2>/dev/null || true
+        for residual in \
+          http-action-output \
+          jsonoutput-mdi-test_0.json \
+          excelwriter-mdi-test.xlsx \
+          exelwriter-testfile \
+          exelwriter-testfile.xls \
+          exel-header-test.xlsx \
+          exel-part-001.xlsx \
+          exel-part-002.xlsx \
+          exel-multi-part_0.xlsx \
+          exel-multi-part_1.xlsx \
+          exel-multi-part_2.xlsx \
+          exel-multi-part_3.xlsx \
+          exel-multi-part_4.xlsx \
+          sample-file-append-test.xlsx \
+          parquet-test-00-0001.parquet; do
+          residual_path="$d/files/${residual}"
+          residual_rel="${residual_path#"${REPO_ROOT}"/}"
+          # Skip if tracked by git (fixture), only drop untracked leftovers
+          if [ -e "${residual_path}" ] \
+            && ! git -C "${REPO_ROOT}" ls-files --error-unmatch 
"${residual_rel}" >/dev/null 2>&1; then
+            rm -f "${residual_path}" 2>/dev/null || true
+          fi
+        done
+        # If host still cannot write into files/, force a+rwx via root.
+        if ! touch "$d/files/.hop-it-write-check" 2>/dev/null; then
+          echo "Fixing permissions on ${rel_files} (container/host UID 
mismatch)"
+          docker run --rm -v "${abs_files}:/filesdir" alpine:3.19 \
+            sh -c 'chmod -R a+rwx /filesdir 2>/dev/null; true' 2>/dev/null || 
true
+        else
+          rm -f "$d/files/.hop-it-write-check" 2>/dev/null || true
+        fi
+        chmod 777 "$d/files" 2>/dev/null || true
+      fi
+
       chmod 777 "$d/output" 2>/dev/null || true
     fi
   fi
diff --git a/integration-tests/scripts/run-tests.sh 
b/integration-tests/scripts/run-tests.sh
index a63d2e8933..de7da572ba 100755
--- a/integration-tests/scripts/run-tests.sh
+++ b/integration-tests/scripts/run-tests.sh
@@ -255,15 +255,20 @@ for d in "${CURRENT_DIR}"/../${PROJECT_NAME}/; do
       # Create New Project
       export HOP_CONFIG_FOLDER="$d"
 
-      # Project output/ is often written by pipelines (CSV, Excel/ODS temp 
files, etc.).
+      # Project output/ and files/ are written by pipelines (CSV, Excel/ODS, 
HTTP downloads,
+      # MDI JSON, parquet, etc.). MDI also writes *-injected.hpl into the 
project root.
       # On ASF Jenkins the container UID matches the agent workspace owner 
(Jenkinsfile.daily
-      # passes id -u / id -g), so writes succeed by ownership. When UIDs 
differ, output/ is
+      # passes id -u / id -g), so writes succeed by ownership. When UIDs 
differ, dirs are
       # pre-created and chmod'd world-writable by run-tests-docker.sh on the 
host; here we
       # only best-effort reinforce that (mkdir/chmod may no-op if not owner).
-      mkdir -p "$d/output" 2>/dev/null || true
+      chmod a+rwx "$d" 2>/dev/null || true
+      mkdir -p "$d/output" "$d/files" 2>/dev/null || true
       if [ -d "$d/output" ]; then
         chmod 777 "$d/output" 2>/dev/null || true
       fi
+      if [ -d "$d/files" ]; then
+        chmod 777 "$d/files" 2>/dev/null || true
+      fi
 
       # Default pipeline run configuration name used by hop-run and the suite 
runner.
       # Beam projects name their Beam engine "local" and keep a native Local 
engine as "hop-local".
diff --git a/integration-tests/spreadsheet/0003-write-xlsx.hpl 
b/integration-tests/spreadsheet/0003-write-xlsx.hpl
index 06de996bae..e5956600d0 100644
--- a/integration-tests/spreadsheet/0003-write-xlsx.hpl
+++ b/integration-tests/spreadsheet/0003-write-xlsx.hpl
@@ -130,7 +130,7 @@ limitations under the License.
     <appendLines>N</appendLines>
     <add_to_result_filenames>Y</add_to_result_filenames>
     <file>
-      <name>${PROJECT_HOME}/files/exelwriter-testfile</name>
+      <name>${PROJECT_HOME}/output/exelwriter-testfile</name>
       <extention>xlsx</extention>
       <do_not_open_newfile_init>N</do_not_open_newfile_init>
       <split>N</split>
diff --git a/integration-tests/spreadsheet/0004-test-header-check.hpl 
b/integration-tests/spreadsheet/0004-test-header-check.hpl
index 6b0730d59c..13d6819016 100644
--- a/integration-tests/spreadsheet/0004-test-header-check.hpl
+++ b/integration-tests/spreadsheet/0004-test-header-check.hpl
@@ -222,7 +222,7 @@ limitations under the License.
     <accept_field/>
     <accept_transform_name/>
     <file>
-      <name>${PROJECT_HOME}/files/exel-header-test.xlsx</name>
+      <name>${PROJECT_HOME}/output/exel-header-test.xlsx</name>
       <filemask/>
       <exclude_filemask/>
       <file_required>N</file_required>
diff --git a/integration-tests/spreadsheet/0004-test-header.hpl 
b/integration-tests/spreadsheet/0004-test-header.hpl
index 78a8f92780..d76b419f36 100644
--- a/integration-tests/spreadsheet/0004-test-header.hpl
+++ b/integration-tests/spreadsheet/0004-test-header.hpl
@@ -113,7 +113,7 @@ limitations under the License.
       <date_time_format/>
       <do_not_open_newfile_init>N</do_not_open_newfile_init>
       <extension>xlsx</extension>
-      <name>${PROJECT_HOME}/files/exel-header-test</name>
+      <name>${PROJECT_HOME}/output/exel-header-test</name>
       <filename_field/>
       <filename_in_field>N</filename_in_field>
       <if_file_exists>reuse</if_file_exists>
diff --git a/integration-tests/spreadsheet/0005-check-multiple-files.hpl 
b/integration-tests/spreadsheet/0005-check-multiple-files.hpl
index 90ce641e83..191f9b557e 100644
--- a/integration-tests/spreadsheet/0005-check-multiple-files.hpl
+++ b/integration-tests/spreadsheet/0005-check-multiple-files.hpl
@@ -90,7 +90,7 @@ limitations under the License.
     <accept_field/>
     <accept_transform_name/>
     <file>
-      <name>${PROJECT_HOME}/files/</name>
+      <name>${PROJECT_HOME}/output/</name>
       <filemask>^exel-part-.*</filemask>
       <exclude_filemask/>
       <file_required>N</file_required>
diff --git a/integration-tests/spreadsheet/0005-write-multiple-files.hpl 
b/integration-tests/spreadsheet/0005-write-multiple-files.hpl
index 56332beb8f..76f5fbb05c 100644
--- a/integration-tests/spreadsheet/0005-write-multiple-files.hpl
+++ b/integration-tests/spreadsheet/0005-write-multiple-files.hpl
@@ -76,31 +76,31 @@ limitations under the License.
     <data>
       <line>
         <item>a</item>
-        <item>${PROJECT_HOME}/files/exel-part-001</item>
+        <item>${PROJECT_HOME}/output/exel-part-001</item>
       </line>
       <line>
         <item>b</item>
-        <item>${PROJECT_HOME}/files/exel-part-001</item>
+        <item>${PROJECT_HOME}/output/exel-part-001</item>
       </line>
       <line>
         <item>d</item>
-        <item>${PROJECT_HOME}/files/exel-part-002</item>
+        <item>${PROJECT_HOME}/output/exel-part-002</item>
       </line>
       <line>
         <item>e</item>
-        <item>${PROJECT_HOME}/files/exel-part-002</item>
+        <item>${PROJECT_HOME}/output/exel-part-002</item>
       </line>
       <line>
         <item>f</item>
-        <item>${PROJECT_HOME}/files/exel-part-002</item>
+        <item>${PROJECT_HOME}/output/exel-part-002</item>
       </line>
       <line>
         <item>c</item>
-        <item>${PROJECT_HOME}/files/exel-part-001</item>
+        <item>${PROJECT_HOME}/output/exel-part-001</item>
       </line>
       <line>
         <item>g</item>
-        <item>${PROJECT_HOME}/files/exel-part-002</item>
+        <item>${PROJECT_HOME}/output/exel-part-002</item>
       </line>
     </data>
     <attributes/>
diff --git a/integration-tests/spreadsheet/0006-multi-part-fixed-name-check.hpl 
b/integration-tests/spreadsheet/0006-multi-part-fixed-name-check.hpl
index c897ee2996..b250b73171 100644
--- a/integration-tests/spreadsheet/0006-multi-part-fixed-name-check.hpl
+++ b/integration-tests/spreadsheet/0006-multi-part-fixed-name-check.hpl
@@ -126,7 +126,7 @@ limitations under the License.
     <accept_field/>
     <accept_transform_name/>
     <file>
-      <name>${PROJECT_HOME}/files/</name>
+      <name>${PROJECT_HOME}/output/</name>
       <filemask>^exel-multi-part.*</filemask>
       <exclude_filemask/>
       <file_required>N</file_required>
diff --git a/integration-tests/spreadsheet/0006-multi-part-fixed-name.hpl 
b/integration-tests/spreadsheet/0006-multi-part-fixed-name.hpl
index f3828676f1..2169151415 100644
--- a/integration-tests/spreadsheet/0006-multi-part-fixed-name.hpl
+++ b/integration-tests/spreadsheet/0006-multi-part-fixed-name.hpl
@@ -130,7 +130,7 @@ limitations under the License.
       <date_time_format/>
       <do_not_open_newfile_init>Y</do_not_open_newfile_init>
       <extension>xlsx</extension>
-      <name>${PROJECT_HOME}/files/exel-multi-part</name>
+      <name>${PROJECT_HOME}/output/exel-multi-part</name>
       <filename_field/>
       <filename_in_field>N</filename_in_field>
       <if_file_exists>new</if_file_exists>
diff --git a/integration-tests/spreadsheet/0007-append-to-xlsx-validate.hpl 
b/integration-tests/spreadsheet/0007-append-to-xlsx-validate.hpl
index 3829b3ce4d..6f0959d80d 100644
--- a/integration-tests/spreadsheet/0007-append-to-xlsx-validate.hpl
+++ b/integration-tests/spreadsheet/0007-append-to-xlsx-validate.hpl
@@ -207,7 +207,7 @@ limitations under the License.
       <file_required>N</file_required>
       <filemask/>
       <include_subfolders>N</include_subfolders>
-      <name>${PROJECT_HOME}/files/sample-file-append-test.xlsx</name>
+      <name>${PROJECT_HOME}/output/sample-file-append-test.xlsx</name>
     </file>
     <filefield/>
     <header>Y</header>
diff --git a/integration-tests/spreadsheet/0007-append-to-xlsx.hpl 
b/integration-tests/spreadsheet/0007-append-to-xlsx.hpl
index e06dd39c69..e1fe963066 100644
--- a/integration-tests/spreadsheet/0007-append-to-xlsx.hpl
+++ b/integration-tests/spreadsheet/0007-append-to-xlsx.hpl
@@ -203,7 +203,7 @@ limitations under the License.
       <filename_in_field>N</filename_in_field>
       <if_file_exists>reuse</if_file_exists>
       <if_sheet_exists>reuse</if_sheet_exists>
-      <name>${PROJECT_HOME}/files/sample-file-append-test</name>
+      <name>${PROJECT_HOME}/output/sample-file-append-test</name>
       <password/>
       <protect_sheet>N</protect_sheet>
       <protected_by/>
diff --git a/integration-tests/spreadsheet/datasets/golden-multi-file-excel.csv 
b/integration-tests/spreadsheet/datasets/golden-multi-file-excel.csv
index 1ca551cfc1..f748c27df9 100644
--- a/integration-tests/spreadsheet/datasets/golden-multi-file-excel.csv
+++ b/integration-tests/spreadsheet/datasets/golden-multi-file-excel.csv
@@ -1,8 +1,8 @@
 value,filename
-a,${PROJECT_HOME}/files/exel-part-001
-b,${PROJECT_HOME}/files/exel-part-001
-c,${PROJECT_HOME}/files/exel-part-001
-d,${PROJECT_HOME}/files/exel-part-002
-e,${PROJECT_HOME}/files/exel-part-002
-f,${PROJECT_HOME}/files/exel-part-002
-g,${PROJECT_HOME}/files/exel-part-002
+a,${PROJECT_HOME}/output/exel-part-001
+b,${PROJECT_HOME}/output/exel-part-001
+c,${PROJECT_HOME}/output/exel-part-001
+d,${PROJECT_HOME}/output/exel-part-002
+e,${PROJECT_HOME}/output/exel-part-002
+f,${PROJECT_HOME}/output/exel-part-002
+g,${PROJECT_HOME}/output/exel-part-002
diff --git a/integration-tests/spreadsheet/main-0007-append-file.hwf 
b/integration-tests/spreadsheet/main-0007-append-file.hwf
index a572f54f47..94b8b82c7a 100644
--- a/integration-tests/spreadsheet/main-0007-append-file.hwf
+++ b/integration-tests/spreadsheet/main-0007-append-file.hwf
@@ -106,7 +106,7 @@ limitations under the License.
       <type>DELETE_FILE</type>
       <attributes/>
       <fail_if_file_not_exists>N</fail_if_file_not_exists>
-      <filename>${PROJECT_HOME}/files/sample-file-append-test.xlsx</filename>
+      <filename>${PROJECT_HOME}/output/sample-file-append-test.xlsx</filename>
       <parallel>N</parallel>
       <xloc>880</xloc>
       <yloc>48</yloc>
@@ -124,12 +124,12 @@ limitations under the License.
       <remove_source_files>N</remove_source_files>
       <add_result_filesname>N</add_result_filesname>
       <destination_is_a_file>Y</destination_is_a_file>
-      <create_destination_folder>N</create_destination_folder>
+      <create_destination_folder>Y</create_destination_folder>
       <fields>
         <field>
           
<source_filefolder>EMPTY_SOURCE_URL-0-${PROJECT_HOME}/files/sample-file-append.xlsx</source_filefolder>
           
<source_configuration_name>STATIC-SOURCE-FILE-0</source_configuration_name>
-          
<destination_filefolder>EMPTY_DEST_URL-0-${PROJECT_HOME}/files/sample-file-append-test.xlsx</destination_filefolder>
+          
<destination_filefolder>EMPTY_DEST_URL-0-${PROJECT_HOME}/output/sample-file-append-test.xlsx</destination_filefolder>
           
<destination_configuration_name>STATIC-DEST-FILE-0</destination_configuration_name>
           <wildcard/>
         </field>
diff --git a/integration-tests/transforms/0072-prepare-parquet-file.hpl 
b/integration-tests/transforms/0072-prepare-parquet-file.hpl
index 30e45d33b3..4756294b29 100644
--- a/integration-tests/transforms/0072-prepare-parquet-file.hpl
+++ b/integration-tests/transforms/0072-prepare-parquet-file.hpl
@@ -259,7 +259,7 @@ limitations under the License.
         <target_field>Int_Number</target_field>
       </field>
     </fields>
-    <filename_base>${PROJECT_HOME}/files/parquet-test</filename_base>
+    <filename_base>${PROJECT_HOME}/output/parquet-test</filename_base>
     <filename_create_parent_folders>Y</filename_create_parent_folders>
     <filename_datetime_format>yyyyMMdd-HHmmss</filename_datetime_format>
     <filename_ext>parquet</filename_ext>
diff --git a/integration-tests/transforms/0072-read-parquet-file.hpl 
b/integration-tests/transforms/0072-read-parquet-file.hpl
index 49d0c63168..ec58354513 100644
--- a/integration-tests/transforms/0072-read-parquet-file.hpl
+++ b/integration-tests/transforms/0072-read-parquet-file.hpl
@@ -133,7 +133,7 @@ limitations under the License.
         <group/>
         <length>-1</length>
         <name>file</name>
-        <nullif>files/parquet-test-00-0001.parquet</nullif>
+        <nullif>output/parquet-test-00-0001.parquet</nullif>
         <precision>-1</precision>
         <set_empty_string>N</set_empty_string>
         <type>String</type>
diff --git 
a/integration-tests/transforms/main-0072-parquet-input-test-delete.hwf 
b/integration-tests/transforms/main-0072-parquet-input-test-delete.hwf
index 8ad4d17b97..81f5f5f60b 100644
--- a/integration-tests/transforms/main-0072-parquet-input-test-delete.hwf
+++ b/integration-tests/transforms/main-0072-parquet-input-test-delete.hwf
@@ -106,7 +106,7 @@ limitations under the License.
       <type>DELETE_FILE</type>
       <attributes/>
       <fail_if_file_not_exists>N</fail_if_file_not_exists>
-      <filename>${PROJECT_HOME}/files/parquet-test-00-0001.parquet</filename>
+      <filename>${PROJECT_HOME}/output/parquet-test-00-0001.parquet</filename>
       <parallel>N</parallel>
       <xloc>864</xloc>
       <yloc>192</yloc>

Reply via email to