This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new a523fd9d23 HDDS-8450. Dedicated acceptance test suite for s3a (#6458)
a523fd9d23 is described below
commit a523fd9d234752e3b758222ca19a89b085550003
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Fri Apr 12 12:40:35 2024 +0200
HDDS-8450. Dedicated acceptance test suite for s3a (#6458)
---
hadoop-ozone/dev-support/checks/_lib.sh | 15 +++
.../dev-support/checks/_mvn_unit_report.sh | 4 +-
hadoop-ozone/dev-support/checks/acceptance.sh | 52 ++++++++--
.../dist/src/main/compose/common/s3a-test.sh | 112 +++++++++++++++++++++
.../dist/src/main/compose/ozone/test-s3a.sh | 25 +++++
.../src/main/compose/ozonesecure-ha/test-s3a.sh | 27 +++++
hadoop-ozone/dist/src/main/compose/test-all.sh | 7 +-
hadoop-ozone/dist/src/main/compose/testlib.sh | 4 +-
8 files changed, 230 insertions(+), 16 deletions(-)
diff --git a/hadoop-ozone/dev-support/checks/_lib.sh
b/hadoop-ozone/dev-support/checks/_lib.sh
index b81acf9899..134c8f53c6 100644
--- a/hadoop-ozone/dev-support/checks/_lib.sh
+++ b/hadoop-ozone/dev-support/checks/_lib.sh
@@ -149,3 +149,18 @@ install_spotbugs() {
_install_spotbugs() {
curl -LSs
https://repo.maven.apache.org/maven2/com/github/spotbugs/spotbugs/3.1.12/spotbugs-3.1.12.tgz
| tar -xz -f -
}
+
+download_hadoop_aws() {
+ local dir="$1"
+
+ if [[ -z ${dir} ]]; then
+ echo "Required argument: target directory for Hadoop AWS sources" >&2
+ return 1
+ fi
+
+ if [[ ! -e "${dir}" ]] || [[ ! -d "${dir}"/src/test/resources ]]; then
+ mkdir -p "${dir}"
+ [[ -f "${dir}.tar.gz" ]] || curl -LSs -o "${dir}.tar.gz"
https://archive.apache.org/dist/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}-src.tar.gz
+ tar -x -z -C "${dir}" --strip-components=3 -f "${dir}.tar.gz" --wildcards
'hadoop-*-src/hadoop-tools/hadoop-aws' || return 1
+ fi
+}
diff --git a/hadoop-ozone/dev-support/checks/_mvn_unit_report.sh
b/hadoop-ozone/dev-support/checks/_mvn_unit_report.sh
index 4fca7bb6aa..36205c69bb 100755
--- a/hadoop-ozone/dev-support/checks/_mvn_unit_report.sh
+++ b/hadoop-ozone/dev-support/checks/_mvn_unit_report.sh
@@ -81,8 +81,8 @@ for failed_test in $(< ${REPORT_DIR}/summary.txt); do
\( -name "${failed_test}.txt" -or -name "${failed_test}-output.txt" -or
-name "TEST-${failed_test}.xml" \)); do
dir=$(dirname "${file}")
dest_dir=$(_realpath --relative-to="${PWD}" "${dir}/../..") || continue
- mkdir -p "${REPORT_DIR}/${dest_dir}"
- mv "${file}" "${REPORT_DIR}/${dest_dir}"/
+ mkdir -pv "${REPORT_DIR}/${dest_dir}"
+ mv -v "${file}" "${REPORT_DIR}/${dest_dir}"/
done
done
diff --git a/hadoop-ozone/dev-support/checks/acceptance.sh
b/hadoop-ozone/dev-support/checks/acceptance.sh
index 0489fa2438..5be3f7b587 100755
--- a/hadoop-ozone/dev-support/checks/acceptance.sh
+++ b/hadoop-ozone/dev-support/checks/acceptance.sh
@@ -19,15 +19,20 @@ set -u -o pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd "$DIR/../../.." || exit 1
-source "${DIR}/_lib.sh"
+OZONE_ROOT=$(pwd -P)
+
+: ${HADOOP_AWS_DIR:=""}
+: ${OZONE_ACCEPTANCE_SUITE:=""}
+: ${OZONE_TEST_SELECTOR:=""}
+: ${OZONE_ACCEPTANCE_TEST_TYPE:="robot"}
+: ${OZONE_WITH_COVERAGE:="false"}
-install_virtualenv
-install_robot
+source "${DIR}/_lib.sh"
-REPORT_DIR=${OUTPUT_DIR:-"$DIR/../../../target/acceptance"}
+REPORT_DIR=${OUTPUT_DIR:-"${OZONE_ROOT}/target/acceptance"}
OZONE_VERSION=$(mvn help:evaluate -Dexpression=ozone.version -q -DforceStdout)
-DIST_DIR="$DIR/../../dist/target/ozone-$OZONE_VERSION"
+DIST_DIR="${OZONE_ROOT}/hadoop-ozone/dist/target/ozone-$OZONE_VERSION"
if [ ! -d "$DIST_DIR" ]; then
echo "Distribution dir is missing. Doing a full build"
@@ -36,15 +41,42 @@ fi
mkdir -p "$REPORT_DIR"
-export OZONE_ACCEPTANCE_SUITE
+if [[ "${OZONE_ACCEPTANCE_SUITE}" == "s3a" ]]; then
+ OZONE_ACCEPTANCE_TEST_TYPE="maven"
+
+ if [[ -z "${HADOOP_AWS_DIR}" ]]; then
+ HADOOP_VERSION=$(mvn help:evaluate -Dexpression=hadoop.version -q
-DforceStdout)
+ export HADOOP_AWS_DIR=${OZONE_ROOT}/target/hadoop-src
+ fi
+
+ download_hadoop_aws "${HADOOP_AWS_DIR}"
+fi
+
+if [[ "${OZONE_ACCEPTANCE_TEST_TYPE}" == "robot" ]]; then
+ install_virtualenv
+ install_robot
+fi
+
+export OZONE_ACCEPTANCE_SUITE OZONE_ACCEPTANCE_TEST_TYPE
cd "$DIST_DIR/compose" || exit 1
./test-all.sh 2>&1 | tee "${REPORT_DIR}/output.log"
RES=$?
-cp -rv result/* "$REPORT_DIR/"
-cp "$REPORT_DIR/log.html" "$REPORT_DIR/summary.html"
-find "$REPORT_DIR" -type f -empty -print0 | xargs -0 rm -v
-grep -A1 FAIL "${REPORT_DIR}/output.log" | grep -v '^Output' >
"${REPORT_DIR}/summary.txt"
+if [[ "${OZONE_ACCEPTANCE_TEST_TYPE}" == "maven" ]]; then
+ pushd result
+ source "${DIR}/_mvn_unit_report.sh"
+ find . -name junit -print0 | xargs -r -0 rm -frv
+ cp -rv * "${REPORT_DIR}"/
+ popd
+else
+ cp -rv result/* "$REPORT_DIR/"
+ if [[ -f "${REPORT_DIR}/log.html" ]]; then
+ cp "$REPORT_DIR/log.html" "$REPORT_DIR/summary.html"
+ fi
+ grep -A1 FAIL "${REPORT_DIR}/output.log" | grep -v '^Output' >
"${REPORT_DIR}/summary.txt"
+fi
+
+find "$REPORT_DIR" -type f -empty -not -name summary.txt -print0 | xargs -0 rm
-v
exit $RES
diff --git a/hadoop-ozone/dist/src/main/compose/common/s3a-test.sh
b/hadoop-ozone/dist/src/main/compose/common/s3a-test.sh
new file mode 100644
index 0000000000..85dbc5fece
--- /dev/null
+++ b/hadoop-ozone/dist/src/main/compose/common/s3a-test.sh
@@ -0,0 +1,112 @@
+#!/usr/bin/env bash
+# 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.
+
+# This script runs S3A contract tests against various bucket types on
+# a Docker Compose-based Ozone cluster.
+# Requires HADOOP_AWS_DIR to point the directory containing hadoop-aws sources.
+
+if [[ -z ${HADOOP_AWS_DIR} ]] || [[ ! -e ${HADOOP_AWS_DIR} ]]; then
+ echo "Skipping S3A tests due to missing HADOOP_AWS_DIR (directory with
hadoop-aws sources)" >&2
+ exit
+fi
+
+# shellcheck source=/dev/null
+source "$COMPOSE_DIR/../testlib.sh"
+
+## @description Run S3A contract tests against Ozone.
+## @param Ozone S3 bucket
+execute_s3a_tests() {
+ local bucket="$1"
+
+ pushd "${HADOOP_AWS_DIR}"
+
+ # S3A contract tests are enabled by presence of `auth-keys.xml`.
+ #
https://hadoop.apache.org/docs/r3.3.6/hadoop-aws/tools/hadoop-aws/testing.html#Setting_up_the_tests
+ cat > src/test/resources/auth-keys.xml <<-EOF
+ <configuration>
+
+ <property>
+ <name>fs.s3a.endpoint</name>
+ <value>http://localhost:9878</value>
+ </property>
+
+ <property>
+ <name>test.fs.s3a.endpoint</name>
+ <value>http://localhost:9878</value>
+ </property>
+
+ <property>
+ <name>fs.contract.test.fs.s3a</name>
+ <value>s3a://${bucket}/</value>
+ </property>
+
+ <property>
+ <name>test.fs.s3a.name</name>
+ <value>s3a://${bucket}/</value>
+ </property>
+
+ <property>
+ <name>test.fs.s3a.sts.enabled</name>
+ <value>false</value>
+ </property>
+
+ <property>
+ <name>fs.s3a.path.style.access</name>
+ <value>true</value>
+ </property>
+
+ <property>
+ <name>fs.s3a.directory.marker.retention</name>
+ <value>keep</value>
+ </property>
+
+ </configuration>
+EOF
+
+ # Some tests are skipped due to known issues.
+ # - ITestS3AContractDistCp: HDDS-10616
+ # - ITestS3AContractEtag, ITestS3AContractRename: HDDS-10615
+ # - ITestS3AContractGetFileStatusV1List: HDDS-10617
+ # - ITestS3AContractMkdir: HDDS-10572
+ mvn -B -V --fail-never --no-transfer-progress \
+ -Dtest='ITestS3AContract*, !ITestS3AContractDistCp, !ITestS3AContractEtag,
!ITestS3AContractGetFileStatusV1List, !ITestS3AContractMkdir,
!ITestS3AContractRename' \
+ clean test
+
+ local target="${RESULT_DIR}/junit/${bucket}/target"
+ mkdir -p "${target}"
+ mv -iv target/surefire-reports "${target}"/
+ popd
+}
+
+start_docker_env
+
+if [[ ${SECURITY_ENABLED} == "true" ]]; then
+ execute_command_in_container s3g kinit -kt
/etc/security/keytabs/testuser.keytab "testuser/[email protected]"
+ access=$(execute_command_in_container s3g ozone s3 getsecret -e)
+ eval "$access"
+else
+ export AWS_ACCESS_KEY_ID="s3a-contract"
+ export AWS_SECRET_ACCESS_KEY="unsecure"
+fi
+
+execute_command_in_container s3g ozone sh bucket create --layout OBJECT_STORE
/s3v/obs-bucket
+execute_command_in_container s3g ozone sh bucket create --layout LEGACY
/s3v/leg-bucket
+execute_command_in_container s3g ozone sh bucket create --layout
FILE_SYSTEM_OPTIMIZED /s3v/fso-bucket
+
+for bucket in obs-bucket leg-bucket fso-bucket; do
+ execute_s3a_tests "$bucket"
+done
diff --git a/hadoop-ozone/dist/src/main/compose/ozone/test-s3a.sh
b/hadoop-ozone/dist/src/main/compose/ozone/test-s3a.sh
new file mode 100644
index 0000000000..c277e71a4b
--- /dev/null
+++ b/hadoop-ozone/dist/src/main/compose/ozone/test-s3a.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+# 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.
+
+#suite:s3a
+
+COMPOSE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+export COMPOSE_DIR
+
+export SECURITY_ENABLED=false
+
+source "$COMPOSE_DIR/../common/s3a-test.sh"
diff --git a/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test-s3a.sh
b/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test-s3a.sh
new file mode 100644
index 0000000000..78b8b51d9d
--- /dev/null
+++ b/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test-s3a.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+# 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.
+
+#suite:s3a
+
+COMPOSE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+export COMPOSE_DIR
+
+export SECURITY_ENABLED=true
+export OM_SERVICE_ID="omservice"
+export SCM=scm1.org
+
+source "$COMPOSE_DIR/../common/s3a-test.sh"
diff --git a/hadoop-ozone/dist/src/main/compose/test-all.sh
b/hadoop-ozone/dist/src/main/compose/test-all.sh
index a998690032..85294b6b79 100755
--- a/hadoop-ozone/dist/src/main/compose/test-all.sh
+++ b/hadoop-ozone/dist/src/main/compose/test-all.sh
@@ -27,6 +27,7 @@ rm "$ALL_RESULT_DIR"/* || true
source "$SCRIPT_DIR"/testlib.sh
+: ${OZONE_ACCEPTANCE_TEST_TYPE:="robot"}
: ${OZONE_WITH_COVERAGE:="false"}
if [[ "${OZONE_WITH_COVERAGE}" == "true" ]]; then
@@ -46,7 +47,9 @@ if [[ "${OZONE_WITH_COVERAGE}" == "true" ]]; then
cp /tmp/jacoco-combined.exec "$SCRIPT_DIR"/result
fi
-generate_report "acceptance" "${ALL_RESULT_DIR}" "${XUNIT_RESULT_DIR}"
-
+if [[ "${OZONE_ACCEPTANCE_TEST_TYPE}" == "robot" ]]; then
+ # does not apply to JUnit tests run via Maven
+ generate_report "acceptance" "${ALL_RESULT_DIR}" "${XUNIT_RESULT_DIR}"
+fi
exit $RESULT
diff --git a/hadoop-ozone/dist/src/main/compose/testlib.sh
b/hadoop-ozone/dist/src/main/compose/testlib.sh
index 860c4f5164..5ac3d09d59 100755
--- a/hadoop-ozone/dist/src/main/compose/testlib.sh
+++ b/hadoop-ozone/dist/src/main/compose/testlib.sh
@@ -405,12 +405,12 @@ copy_results() {
target_dir="${target_dir}/${test_script_name}"
fi
- if [[ -n "$(find "${result_dir}" -name "*.xml")" ]]; then
+ if command -v rebot > /dev/null 2>&1 && [[ -n "$(find "${result_dir}" -name
"*.xml")" ]]; then
rebot --nostatusrc -N "${test_name}" -l NONE -r NONE -o
"${all_result_dir}/${test_name}.xml" "${result_dir}"/*.xml \
&& rm -fv "${result_dir}"/*.xml "${result_dir}"/log.html
"${result_dir}"/report.html
fi
- mkdir -p "${target_dir}"
+ mkdir -pv "${target_dir}"
mv -v "${result_dir}"/* "${target_dir}"/
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]