mirror of
https://github.com/ghndrx/prowler.git
synced 2026-02-13 00:05:04 +00:00
Add the ability to generate JUnit XML reports with a -J flag
If the -J flag is passed, generate JUnit XML reports for each check, in-line with how Java tools generate JUnit reports. Check section numbers equate to 'root packages', checks are second-level packages, each check equates to a testsuite (mirroring Java where each test class is a testsuite) and each pass/fail of a check equates to a testcase Time the execution of each check and include this in the report Include properties (Prowler version, check level etc.) in-line with standard JUnit files XML escape all strings for safety Detect if a user has GNU coreutils installed on Mac OS X, but not as their default, switching to using gdate for date commands if so, as it has more features, including getting dates in milliseconds Add prowler-output, junit-reports and VSCode files to .gitignore Update README to include JUnit info, address markdownlint warnings Remove unused arguments to jq in generateJsonAsffOutput Fixes #537
This commit is contained in:
@@ -11,17 +11,19 @@
|
||||
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations under the License.
|
||||
|
||||
DATE_CMD="date"
|
||||
|
||||
gnu_how_older_from_today() {
|
||||
DATE_TO_COMPARE=$1
|
||||
TODAY_IN_DAYS=$(date -d "$(date +%Y-%m-%d)" +%s)
|
||||
DATE_FROM_IN_DAYS=$(date -d $DATE_TO_COMPARE +%s)
|
||||
TODAY_IN_DAYS=$("$DATE_CMD" -d "$("$DATE_CMD" +%Y-%m-%d)" +%s)
|
||||
DATE_FROM_IN_DAYS=$("$DATE_CMD" -d $DATE_TO_COMPARE +%s)
|
||||
DAYS_SINCE=$((($TODAY_IN_DAYS - $DATE_FROM_IN_DAYS )/60/60/24))
|
||||
echo $DAYS_SINCE
|
||||
}
|
||||
bsd_how_older_from_today() {
|
||||
DATE_TO_COMPARE=$1
|
||||
TODAY_IN_DAYS=$(date +%s)
|
||||
DATE_FROM_IN_DAYS=$(date -jf %Y-%m-%d $DATE_TO_COMPARE +%s)
|
||||
TODAY_IN_DAYS=$("$DATE_CMD" +%s)
|
||||
DATE_FROM_IN_DAYS=$("$DATE_CMD" -jf %Y-%m-%d $DATE_TO_COMPARE +%s)
|
||||
DAYS_SINCE=$((($TODAY_IN_DAYS - $DATE_FROM_IN_DAYS )/60/60/24))
|
||||
echo $DAYS_SINCE
|
||||
}
|
||||
@@ -31,13 +33,13 @@ bsd_how_older_from_today() {
|
||||
gnu_timestamp_to_date() {
|
||||
# remove fractions of a second
|
||||
TIMESTAMP_TO_CONVERT=$(echo $1 | cut -f1 -d".")
|
||||
OUTPUT_DATE=$(date -d @$TIMESTAMP_TO_CONVERT +'%Y-%m-%d')
|
||||
OUTPUT_DATE=$("$DATE_CMD" -d @$TIMESTAMP_TO_CONVERT +'%Y-%m-%d')
|
||||
echo $OUTPUT_DATE
|
||||
}
|
||||
bsd_timestamp_to_date() {
|
||||
# remove fractions of a second
|
||||
TIMESTAMP_TO_CONVERT=$(echo $1 | cut -f1 -d".")
|
||||
OUTPUT_DATE=$(date -r $TIMESTAMP_TO_CONVERT +'%Y-%m-%d')
|
||||
OUTPUT_DATE=$("$DATE_CMD" -r $TIMESTAMP_TO_CONVERT +'%Y-%m-%d')
|
||||
echo $OUTPUT_DATE
|
||||
}
|
||||
|
||||
@@ -50,15 +52,15 @@ bsd_decode_report() {
|
||||
|
||||
gnu_how_many_days_from_today() {
|
||||
DATE_TO_COMPARE=$1
|
||||
TODAY_IN_DAYS=$(date -d "$(date +%Y-%m-%d)" +%s)
|
||||
DATE_IN_DAYS=$(date -d $DATE_TO_COMPARE +%s)
|
||||
TODAY_IN_DAYS=$("$DATE_CMD" -d "$("$DATE_CMD" +%Y-%m-%d)" +%s)
|
||||
DATE_IN_DAYS=$("$DATE_CMD" -d $DATE_TO_COMPARE +%s)
|
||||
DAYS_TO=$((( $DATE_IN_DAYS - $TODAY_IN_DAYS )/60/60/24))
|
||||
echo $DAYS_TO
|
||||
}
|
||||
bsd_how_many_days_from_today() {
|
||||
DATE_TO_COMPARE=$1
|
||||
TODAY_IN_DAYS=$(date +%s)
|
||||
DATE_IN_DAYS=$(date -jf %Y-%m-%d $DATE_TO_COMPARE +%s)
|
||||
TODAY_IN_DAYS=$("$DATE_CMD" +%s)
|
||||
DATE_IN_DAYS=$("$DATE_CMD" -jf %Y-%m-%d $DATE_TO_COMPARE +%s)
|
||||
DAYS_TO=$((( $DATE_IN_DAYS - $TODAY_IN_DAYS )/60/60/24))
|
||||
echo $DAYS_TO
|
||||
}
|
||||
@@ -66,17 +68,32 @@ bsd_how_many_days_from_today() {
|
||||
gnu_get_date_previous_than_months() {
|
||||
MONTHS_TO_COMPARE=$1
|
||||
MONTHS_TO_COMPARE_IN_SECONDS=$(( 60 * 60 * 24 * 31 * $MONTHS_TO_COMPARE ))
|
||||
CURRENTSECS=$(date +%s)
|
||||
CURRENTSECS=$("$DATE_CMD" +%s)
|
||||
STARTDATEINSECS=$(( $CURRENTSECS - $MONTHS_TO_COMPARE_IN_SECONDS ))
|
||||
DATE_BEFORE_MONTHS_TO_COMPARE=$(date -d @$STARTDATEINSECS '+%Y-%m-%d')
|
||||
DATE_BEFORE_MONTHS_TO_COMPARE=$("$DATE_CMD" -d @$STARTDATEINSECS '+%Y-%m-%d')
|
||||
echo $DATE_BEFORE_MONTHS_TO_COMPARE
|
||||
}
|
||||
bsd_get_date_previous_than_months() {
|
||||
MONTHS_TO_COMPARE=$1
|
||||
DATE_BEFORE_MONTHS_TO_COMPARE=$(date -v -$(echo $MONTHS_TO_COMPARE)m '+%Y-%m-%d')
|
||||
DATE_BEFORE_MONTHS_TO_COMPARE=$("$DATE_CMD" -v -$(echo $MONTHS_TO_COMPARE)m '+%Y-%m-%d')
|
||||
echo $DATE_BEFORE_MONTHS_TO_COMPARE
|
||||
}
|
||||
|
||||
gnu_get_time_in_milliseconds() {
|
||||
"$DATE_CMD" +%s%3N
|
||||
}
|
||||
bsd_get_time_in_milliseconds() {
|
||||
# BSD date does not support outputting milliseconds, so pad with zeros
|
||||
"$DATE_CMD" +%s000
|
||||
}
|
||||
|
||||
gnu_get_iso8601_timestamp() {
|
||||
"$DATE_CMD" -u +"%Y-%m-%dT%H:%M:%SZ"
|
||||
}
|
||||
bsd_get_iso8601_timestamp() {
|
||||
"$DATE_CMD" -u +"%Y-%m-%dT%H:%M:%SZ"
|
||||
}
|
||||
|
||||
gnu_test_tcp_connectivity() {
|
||||
HOST=$1
|
||||
PORT=$2
|
||||
@@ -114,16 +131,28 @@ if [ "$OSTYPE" == "linux-gnu" ] || [ "$OSTYPE" == "linux-musl" ]; then
|
||||
get_date_previous_than_months() {
|
||||
gnu_get_date_previous_than_months "$1"
|
||||
}
|
||||
get_time_in_milliseconds() {
|
||||
gnu_get_time_in_milliseconds
|
||||
}
|
||||
get_iso8601_timestamp() {
|
||||
gnu_get_iso8601_timestamp
|
||||
}
|
||||
test_tcp_connectivity() {
|
||||
gnu_test_tcp_connectivity "$1" "$2" "$3"
|
||||
}
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# BSD/OSX commands compatibility
|
||||
TEMP_REPORT_FILE=$(mktemp -t prowler.cred_report-XXXXXX)
|
||||
# It is possible that the user has installed GNU coreutils, replacing the default Mac OS X BSD tools with
|
||||
# GNU coreutils equivalents. Only GNU date allows --version as a valid argument, so use the validity of this argument
|
||||
# It is possible that the user has installed GNU coreutils on OS X. By default, this will make GNU commands
|
||||
# available with a 'g' prefix, e.g. 'gdate'. Test if this is present, and use it if so, as it supports more features.
|
||||
# The user also may have replaced the default Mac OS X BSD tools with the GNU coreutils equivalents.
|
||||
# Only GNU date allows --version as a valid argument, so use the validity of this argument
|
||||
# as a means to detect that coreutils is installed and is overriding the default tools
|
||||
if date --version >/dev/null 2>&1 ; then
|
||||
GDATE=$(which gdate)
|
||||
if [ -n "${GDATE}" ]; then
|
||||
DATE_CMD="gdate"
|
||||
fi
|
||||
if "$DATE_CMD" --version >/dev/null 2>&1 ; then
|
||||
how_older_from_today() {
|
||||
gnu_how_older_from_today "$1"
|
||||
}
|
||||
@@ -139,6 +168,12 @@ elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
get_date_previous_than_months() {
|
||||
gnu_get_date_previous_than_months "$1"
|
||||
}
|
||||
get_time_in_milliseconds() {
|
||||
gnu_get_time_in_milliseconds
|
||||
}
|
||||
get_iso8601_timestamp() {
|
||||
gnu_get_iso8601_timestamp
|
||||
}
|
||||
else
|
||||
how_older_from_today() {
|
||||
bsd_how_older_from_today "$1"
|
||||
@@ -155,6 +190,12 @@ elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
get_date_previous_than_months() {
|
||||
bsd_get_date_previous_than_months "$1"
|
||||
}
|
||||
get_time_in_milliseconds() {
|
||||
bsd_get_time_in_milliseconds
|
||||
}
|
||||
get_iso8601_timestamp() {
|
||||
bsd_get_iso8601_timestamp
|
||||
}
|
||||
fi
|
||||
test_tcp_connectivity() {
|
||||
bsd_test_tcp_connectivity "$1" "$2" "$3"
|
||||
@@ -177,6 +218,12 @@ elif [[ "$OSTYPE" == "cygwin" ]]; then
|
||||
get_date_previous_than_months() {
|
||||
gnu_get_date_previous_than_months "$1"
|
||||
}
|
||||
get_time_in_milliseconds() {
|
||||
gnu_get_time_in_milliseconds
|
||||
}
|
||||
get_iso8601_timestamp() {
|
||||
gnu_get_iso8601_timestamp
|
||||
}
|
||||
test_tcp_connectivity() {
|
||||
gnu_test_tcp_connectivity "$1" "$2" "$3"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user