[
https://issues.apache.org/jira/browse/HADOOP-17191?focusedWorklogId=524197&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-524197
]
ASF GitHub Bot logged work on HADOOP-17191:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 15/Dec/20 01:13
Start Date: 15/Dec/20 01:13
Worklog Time Spent: 10m
Work Description: DadanielZ commented on a change in pull request #2417:
URL: https://github.com/apache/hadoop/pull/2417#discussion_r542968091
##########
File path: hadoop-tools/hadoop-azure/dev-support/testrun-scripts/testsupport.sh
##########
@@ -0,0 +1,230 @@
+#!/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.
+
+testresourcesdir=src/test/resources
+combconfsdir=$testresourcesdir/combinationConfigFiles
+combtestfile=$testresourcesdir/abfs-combination-test-configs.xml
+
+logdir=dev-support/testlogs
+testresultsregex="Results:(\n|.)*?Tests run:"
+testresultsfilename=
+starttime=
+threadcount=
+defaultthreadcount=8
+
+properties=
+values=
+
+validate() {
+ if [ -z "$threadcount" ] ; then
+ threadcount=$defaultthreadcount
+ fi
+ numberegex='^[0-9]+$'
+ if ! [[ $threadcount =~ $numberegex ]] ; then
+ echo "Exiting. The script param (threadcount) should be a number"
+ exit -1
+ fi
+ if [ -z "$combination" ]; then
+ echo "Exiting. combination cannot be empty"
+ exit -1
+ fi
+ propertiessize=${#properties[@]}
+ valuessize=${#values[@]}
+ if [ "$propertiessize" -lt 1 ] || [ "$valuessize" -lt 1 ] || [
"$propertiessize" -ne "$valuessize" ]; then
+ echo "Exiting. Both properties and values arrays has to be populated and
of same size. Please check for combination $combination"
+ exit -1
+ fi
+
+ for filename in "${combinations[@]}"; do
+ if [[ ! -f "$combconfsdir/$filename.xml" ]]; then
+ echo "Exiting. Combination config file ($combconfsdir/$combination.xml)
does not exist."
+ exit -1
+ fi
+ done
+}
+
+checkdependencies() {
+ if ! [ "$(command -v pcregrep)" ]; then
+ echo "Exiting. pcregrep is required to run the script."
+ exit -1
+ fi
+ if ! [ "$(command -v xmlstarlet)" ]; then
+ echo "Exiting. xmlstarlet is required to run the script."
+ exit -1
+ fi
+}
+
+cleancombinationconfigs() {
+ rm -rf $combconfsdir
+ mkdir -p $combconfsdir
+}
+
+generateconfigs() {
+ combconffile="$combconfsdir/$combination.xml"
+ rm -rf "$combconffile"
+ cat > "$combconffile" << ENDOFFILE
+<configuration>
+
+</configuration>
+ENDOFFILE
+
+ propertiessize=${#properties[@]}
+ valuessize=${#values[@]}
+ if [ "$propertiessize" -ne "$valuessize" ]; then
+ echo "Exiting. Number of properties and values differ for $combination"
+ exit -1
+ fi
+ for ((i = 0; i < propertiessize; i++)); do
+ key=${properties[$i]}
+ val=${values[$i]}
+ changeconf "$key" "$val"
+ done
+ formatxml "$combconffile"
+}
+
+formatxml() {
+ xmlstarlet fo -s 2 "$1" > "$1.tmp"
+ mv "$1.tmp" "$1"
+}
+
+setactiveconf() {
+ if [[ ! -f "$combconfsdir/$combination.xml" ]]; then
+ echo "Exiting. Combination config file ($combconfsdir/$combination.xml)
does not exist."
+ exit -1
+ fi
+ rm -rf $combtestfile
+ cat > $combtestfile << ENDOFFILE
+<configuration>
+
+</configuration>
+ENDOFFILE
+ xmlstarlet ed -P -L -s /configuration -t elem -n include -v "" $combtestfile
+ xmlstarlet ed -P -L -i /configuration/include -t attr -n href -v
"combinationConfigFiles/$combination.xml" $combtestfile
+ xmlstarlet ed -P -L -i /configuration/include -t attr -n xmlns -v
"http://www.w3.org/2001/XInclude" $combtestfile
+ formatxml $combtestfile
+}
+
+changeconf() {
+ xmlstarlet ed -P -L -d "/configuration/property[name='$1']" "$combconffile"
+ xmlstarlet ed -P -L -s /configuration -t elem -n propertyTMP -v "" -s
/configuration/propertyTMP -t elem -n name -v "$1" -r
/configuration/propertyTMP -v property "$combconffile"
+ if ! xmlstarlet ed -P -L -s "/configuration/property[name='$1']" -t elem -n
value -v "$2" "$combconffile"
+ then
+ echo "Exiting. Changing config property failed."
+ exit -1
+ fi
+}
+
+summary() {
+ {
+ echo ""
+ echo "$combination"
+ echo "========================"
+ pcregrep -M "$testresultsregex" "$testlogfilename"
+ } >> "$testresultsfilename"
+ printf "\n----- Test results -----\n"
+ pcregrep -M "$testresultsregex" "$testlogfilename"
+
+ secondstaken=$((ENDTIME - STARTTIME))
+ mins=$((secondstaken / 60))
+ secs=$((secondstaken % 60))
+ printf "\nTime taken: %s mins %s secs.\n" "$mins" "$secs"
+ echo "Find test logs for the combination ($combination) in: $testlogfilename"
+ echo "Find consolidated test results in: $testresultsfilename"
+ echo "----------"
+}
+
+init() {
+ checkdependencies
+ if ! mvn clean install -DskipTests
+ then
+ echo ""
+ echo "Exiting. Build failed."
+ exit -1
+ fi
+ starttime=$(date +"%Y-%m-%d_%H-%M-%S")
+ mkdir -p "$logdir"
+ testresultsfilename="$logdir/$starttime/Test-Results.txt"
+ if [[ -z "$combinations" ]]; then
+ combinations=( $( ls $combconfsdir/*.xml ))
+ fi
+}
+
+runtests() {
+ parseoptions "$@"
+ validate
+ if [ -z "$starttime" ]; then
+ init
+ fi
+ shopt -s nullglob
+ for combconffile in "${combinations[@]}"; do
+ STARTTIME=$(date +%s)
+ combination=$(basename "$combconffile" .xml)
+ mkdir -p "$logdir/$starttime"
+ testlogfilename="$logdir/$starttime/Test-Logs-$combination.txt"
+ printf "\nRunning the combination: %s..." "$combination"
+ setactiveconf
+ mvn -T 1C -Dparallel-tests=abfs -Dscale -DtestsThreadCount=$threadcount
verify >> "$testlogfilename" || true
+ ENDTIME=$(date +%s)
+ summary
+ done
+}
+
+begin() {
+ cleancombinationconfigs
+}
+
+parseoptions() {
+runactivate=0
+runtests=0
+ while getopts ":c:a:t:" option; do
+ case "${option}" in
+ a)
+ if [[ "$runactivate" -eq "1" ]]; then
+ echo "-a Option is not multivalued"
+ exit 1
+ fi
+ runactivate=1
+ combination=$(basename "$OPTARG" .xml)
+ ;;
+ c)
+ runtests=1
+ combination=$(basename "$OPTARG" .xml)
+ combinations+=("$combination")
+ ;;
+ t)
+ threadcount=$OPTARG
+ ;;
+ *|?|h)
+ echo "Usage: $0 [-n] [-a COMBINATION_NAME] [-c COMBINATION_NAME] [-t
THREAD_COUNT]"
+ echo ""
+ echo "Where:"
+ echo " -a COMBINATION_NAME Specify the combination name which needs
to be activated."
Review comment:
minor: can we also echo the supported combination names here too?
##########
File path: hadoop-tools/hadoop-azure/src/site/markdown/testing_azure.md
##########
@@ -592,6 +592,61 @@ with the Hadoop Distributed File System permissions model
when hierarchical
namespace is enabled for the storage account. Furthermore, the metadata and
data
produced by ADLS Gen 2 REST API can be consumed by Blob REST API, and vice
versa.
+## Generating test run configurations and test triggers over various config
combinations
+
+To simplify the testing across various authentication and features combinations
+that are mandatory for a PR, script `dev-support/testrun-scripts/runtests.sh`
+should be used. Once the script is updated with relevant config settings for
+various test combinations, it will:
+1. Auto-generate configs specific to each test combinations
+2. Run tests for all combinations
+3. Summarize results across all the test combination runs.
+
+As a pre-requiste step, fill config values for test accounts and credentials
+needed for authentication in `src/test/resources/azure-auth-keys.xml.template`
+and rename as `src/test/resources/azure-auth-keys.xml`.
+
+**To add a new test combination:** Templates for mandatory test combinations
+for PR validation are present in `dev-support/testrun-scripts/runtests.sh`.
+If a new one needs to be added, add a combination set within
+`dev-support/testrun-scripts/runtests.sh` similar to the ones already defined
+and
+1. Provide a new combination name
+2. Update properties and values array which need to be effective for the test
+combination
+3. Call generateconfigs
+
+**To run PR validation:** Running command
+* `dev-support/testrun-scripts/runtests.sh` will generate configurations for
+each of the combinations defined and run tests for all the combinations.
+* `dev-support/testrun-scripts/runtests.sh -c {combinationname}` Specific
+combinations can be provided with -c option. If combinations are provided
+with -c option, tests for only those combinations will be run.
+
+**Test logs:** Test runs will create a folder within dev-support/testlogs to
+save the test logs. Folder name will be the test start timestamp. The mvn
verify
+command line logs for each combination will be saved into a file as
+Test-Logs-$combination.txt into this folder. In case of any failures, this file
+will have the failure exception stack. At the end of the test run, the
+consolidated results of all the combination runs will be saved into a file as
+Test-Results.log in the same folder. When run for PR validation, the
+consolidated test results needs to be pasted into the PR comment section.
+
+**To generate config for use in IDE:** Running command with -a (activate)
option
+`dev-support/testrun-scripts/runtests.sh -a {combination name}` will update
+the effective config relevant for the specific test combination. Hence the same
+config files used by the mvn test runs can be used for IDE without any manual
+updates needed within config file.
+
+**Other command line options:**
+* -a <COMBINATION_NAME> Specify the combination name which needs to be
Review comment:
same here.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 524197)
Time Spent: 9.5h (was: 9h 20m)
> ABFS: Run the integration tests with various combinations of configurations
> and publish a consolidated results
> --------------------------------------------------------------------------------------------------------------
>
> Key: HADOOP-17191
> URL: https://issues.apache.org/jira/browse/HADOOP-17191
> Project: Hadoop Common
> Issue Type: Sub-task
> Components: fs/azure, test
> Affects Versions: 3.3.0
> Reporter: Bilahari T H
> Assignee: Bilahari T H
> Priority: Minor
> Labels: pull-request-available
> Time Spent: 9.5h
> Remaining Estimate: 0h
>
> ADLS Gen 2 supports accounts with and without hierarchical namespace support.
> ABFS driver supports various authorization mechanisms like OAuth, haredKey,
> Shared Access Signature. The integration tests need to be executed against
> accounts with and without hierarchical namespace support using various
> authorization mechanisms.
> Currently the developer has to manually run the tests with different
> combinations of configurations ex: HNS account with SharedKey and OAuth,
> NonHNS account with SharedKey etc..
> The expectation is to automate these runs with different combinations. This
> will help the developer to run the integration tests with different variants
> of configurations automatically.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]