mirror of https://github.com/k3s-io/k3s
Merge pull request #27825 from freehan/jenkinjunit
Automatic merge from submit-queue introduce shell2junit fork shell2junit from https://github.com/manolo/shell2junitpull/6/head
commit
0742bc058c
|
@ -0,0 +1,172 @@
|
|||
Shell2Junit License Information
|
||||
|
||||
Feb, 2010
|
||||
|
||||
shell2junit library and sample code is licensed under Apache License, v.2.0.
|
||||
|
||||
(c) 2009 Manolo Carrasco (Manuel Carrasco Moñino)
|
||||
|
||||
=====
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction, and
|
||||
distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by the
|
||||
copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all other
|
||||
entities that control, are controlled by, or are under common control with
|
||||
that entity. For the purposes of this definition, "control" means (i) the
|
||||
power, direct or indirect, to cause the direction or management of such
|
||||
entity, whether by contract or otherwise, or (ii) ownership of fifty percent
|
||||
(50%) or more of the outstanding shares, or (iii) beneficial ownership of
|
||||
such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity exercising
|
||||
permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation source, and
|
||||
configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical transformation
|
||||
or translation of a Source form, including but not limited to compiled
|
||||
object code, generated documentation, and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or Object form,
|
||||
made available under the License, as indicated by a copyright notice that is
|
||||
included in or attached to the work (an example is provided in the Appendix
|
||||
below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object form,
|
||||
that is based on (or derived from) the Work and for which the editorial
|
||||
revisions, annotations, elaborations, or other modifications represent, as a
|
||||
whole, an original work of authorship. For the purposes of this License,
|
||||
Derivative Works shall not include works that remain separable from, or
|
||||
merely link (or bind by name) to the interfaces of, the Work and Derivative
|
||||
Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including the original
|
||||
version of the Work and any modifications or additions to that Work or
|
||||
Derivative Works thereof, that is intentionally submitted to Licensor for
|
||||
inclusion in the Work by the copyright owner or by an individual or Legal
|
||||
Entity authorized to submit on behalf of the copyright owner. For the
|
||||
purposes of this definition, "submitted" means any form of electronic,
|
||||
verbal, or written communication sent to the Licensor or its
|
||||
representatives, including but not limited to communication on electronic
|
||||
mailing lists, source code control systems, and issue tracking systems that
|
||||
are managed by, or on behalf of, the Licensor for the purpose of discussing
|
||||
and improving the Work, but excluding communication that is conspicuously
|
||||
marked or otherwise designated in writing by the copyright owner as "Not a
|
||||
Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity on
|
||||
behalf of whom a Contribution has been received by Licensor and subsequently
|
||||
incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of this
|
||||
License, each Contributor hereby grants to You a perpetual, worldwide,
|
||||
non-exclusive, no-charge, royalty-free, irrevocable copyright license to
|
||||
reproduce, prepare Derivative Works of, publicly display, publicly perform,
|
||||
sublicense, and distribute the Work and such Derivative Works in Source or
|
||||
Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of this
|
||||
License, each Contributor hereby grants to You a perpetual, worldwide,
|
||||
non-exclusive, no-charge, royalty-free, irrevocable (except as stated in
|
||||
this section) patent license to make, have made, use, offer to sell, sell,
|
||||
import, and otherwise transfer the Work, where such license applies only to
|
||||
those patent claims licensable by such Contributor that are necessarily
|
||||
infringed by their Contribution(s) alone or by combination of their
|
||||
Contribution(s) with the Work to which such Contribution(s) was submitted.
|
||||
If You institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
|
||||
Contribution incorporated within the Work constitutes direct or contributory
|
||||
patent infringement, then any patent licenses granted to You under this
|
||||
License for that Work shall terminate as of the date such litigation is
|
||||
filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the Work or
|
||||
Derivative Works thereof in any medium, with or without modifications, and
|
||||
in Source or Object form, provided that You meet the following conditions:
|
||||
|
||||
a. You must give any other recipients of the Work or Derivative Works a copy
|
||||
of this License; and
|
||||
|
||||
b. You must cause any modified files to carry prominent notices stating that
|
||||
You changed the files; and
|
||||
|
||||
c. You must retain, in the Source form of any Derivative Works that You
|
||||
distribute, all copyright, patent, trademark, and attribution notices from
|
||||
the Source form of the Work, excluding those notices that do not pertain to
|
||||
any part of the Derivative Works; and
|
||||
|
||||
d. If the Work includes a "NOTICE" text file as part of its distribution,
|
||||
then any Derivative Works that You distribute must include a readable copy
|
||||
of the attribution notices contained within such NOTICE file, excluding
|
||||
those notices that do not pertain to any part of the Derivative Works, in at
|
||||
least one of the following places: within a NOTICE text file distributed as
|
||||
part of the Derivative Works; within the Source form or documentation, if
|
||||
provided along with the Derivative Works; or, within a display generated by
|
||||
the Derivative Works, if and wherever such third-party notices normally
|
||||
appear. The contents of the NOTICE file are for informational purposes only
|
||||
and do not modify the License. You may add Your own attribution notices
|
||||
within Derivative Works that You distribute, alongside or as an addendum to
|
||||
the NOTICE text from the Work, provided that such additional attribution
|
||||
notices cannot be construed as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and may
|
||||
provide additional or different license terms and conditions for use,
|
||||
reproduction, or distribution of Your modifications, or for any such
|
||||
Derivative Works as a whole, provided Your use, reproduction, and
|
||||
distribution of the Work otherwise complies with the conditions stated in
|
||||
this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise, any
|
||||
Contribution intentionally submitted for inclusion in the Work by You to the
|
||||
Licensor shall be under the terms and conditions of this License, without
|
||||
any additional terms or conditions. Notwithstanding the above, nothing
|
||||
herein shall supersede or modify the terms of any separate license agreement
|
||||
you may have executed with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor, except
|
||||
as required for reasonable and customary use in describing the origin of the
|
||||
Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in
|
||||
writing, Licensor provides the Work (and each Contributor provides its
|
||||
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied, including, without limitation, any
|
||||
warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining
|
||||
the appropriateness of using or redistributing the Work and assume any risks
|
||||
associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory, whether
|
||||
in tort (including negligence), contract, or otherwise, unless required by
|
||||
applicable law (such as deliberate and grossly negligent acts) or agreed to
|
||||
in writing, shall any Contributor be liable to You for damages, including
|
||||
any direct, indirect, special, incidental, or consequential damages of any
|
||||
character arising as a result of this License or out of the use or inability
|
||||
to use the Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all other
|
||||
commercial damages or losses), even if such Contributor has been advised of
|
||||
the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing the Work
|
||||
or Derivative Works thereof, You may choose to offer, and charge a fee for,
|
||||
acceptance of support, warranty, indemnity, or other liability obligations
|
||||
and/or rights consistent with this License. However, in accepting such
|
||||
obligations, You may act only on Your own behalf and on Your sole
|
||||
responsibility, not on behalf of any other Contributor, and only if You
|
||||
agree to indemnify, defend, and hold each Contributor harmless for any
|
||||
liability incurred by, or claims asserted against, such Contributor by
|
||||
reason of your accepting any such warranty or additional liability.
|
||||
|
|
@ -0,0 +1,177 @@
|
|||
#!/bin/bash
|
||||
### Copyright 2010 Manuel Carrasco Moñino. (manolo at apache.org)
|
||||
###
|
||||
### Licensed under the Apache License, Version 2.0.
|
||||
### You may obtain a copy of it at
|
||||
### http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
###
|
||||
### A library for shell scripts which creates reports in jUnit format.
|
||||
### These reports can be used in Jenkins, or any other CI.
|
||||
###
|
||||
### Usage:
|
||||
### - Include this file in your shell script
|
||||
### - Use juLog to call your command any time you want to produce a new report
|
||||
### Usage: juLog <options> command arguments
|
||||
### options:
|
||||
### -class="MyClass" : a class name which will be shown in the junit report
|
||||
### -name="TestName" : the test name which will be shown in the junit report
|
||||
### -error="RegExp" : a regexp which sets the test as failure when the output matches it
|
||||
### -ierror="RegExp" : same as -error but case insensitive
|
||||
### -output="Path" : path to output directory, defaults to "./results"
|
||||
### - Junit reports are left in the folder 'result' under the directory where the script is executed.
|
||||
### - Configure Jenkins to parse junit files from the generated folder
|
||||
###
|
||||
|
||||
asserts=00; errors=0; total=0; content=""
|
||||
date=`which gdate 2>/dev/null || which date`
|
||||
|
||||
# default output folder
|
||||
juDIR=`pwd`/results
|
||||
|
||||
# The name of the suite is calculated based in your script name
|
||||
suite=""
|
||||
|
||||
# A wrapper for the eval method witch allows catching seg-faults and use tee
|
||||
errfile=/tmp/evErr.$$.log
|
||||
function eVal() {
|
||||
(eval "$1")
|
||||
# stdout and stderr may currently be inverted (see below) so echo may write to stderr
|
||||
echo $? 2>&1 | tr -d "\n" > $errfile
|
||||
}
|
||||
|
||||
# Method to clean old tests
|
||||
function juLogClean() {
|
||||
echo "+++ Removing old junit reports from: $juDIR "
|
||||
rm -f "$juDIR"/TEST-*
|
||||
}
|
||||
|
||||
# Execute a command and record its results
|
||||
function juLog() {
|
||||
suite="";
|
||||
errfile=/tmp/evErr.$$.log
|
||||
date=`which gdate || which date`
|
||||
asserts=00; errors=0; total=0; content=""
|
||||
|
||||
# parse arguments
|
||||
ya=""; icase=""
|
||||
while [ -z "$ya" ]; do
|
||||
case "$1" in
|
||||
-name=*) name=`echo "$1" | sed -e 's/-name=//'`; shift;;
|
||||
-class=*) class=`echo "$1" | sed -e 's/-class=//'`; shift;;
|
||||
-ierror=*) ereg=`echo "$1" | sed -e 's/-ierror=//'`; icase="-i"; shift;;
|
||||
-error=*) ereg=`echo "$1" | sed -e 's/-error=//'`; shift;;
|
||||
-output=*) juDIR=`echo "$1" | sed -e 's/-output=//'`; shift;;
|
||||
*) ya=1;;
|
||||
esac
|
||||
done
|
||||
|
||||
# create output directory
|
||||
mkdir -p "$juDIR" || exit
|
||||
# use first arg as name if it was not given
|
||||
if [ -z "$name" ]; then
|
||||
name="$asserts-$1"
|
||||
shift
|
||||
fi
|
||||
|
||||
if [[ "$class" = "" ]]; then
|
||||
class="default"
|
||||
fi
|
||||
|
||||
suite=$class
|
||||
|
||||
# calculate command to eval
|
||||
[ -z "$1" ] && return
|
||||
cmd="$1"; shift
|
||||
while [ -n "$1" ]
|
||||
do
|
||||
cmd="$cmd \"$1\""
|
||||
shift
|
||||
done
|
||||
|
||||
# eval the command sending output to a file
|
||||
outf=/var/tmp/ju$$.txt
|
||||
errf=/var/tmp/ju$$-err.txt
|
||||
>$outf
|
||||
echo "" | tee -a $outf
|
||||
echo "+++ Running case: $class.$name " | tee -a $outf
|
||||
echo "+++ working dir: "`pwd` | tee -a $outf
|
||||
echo "+++ command: $cmd" | tee -a $outf
|
||||
ini=`$date +%s.%N`
|
||||
# execute the command, temporarily swapping stderr and stdout so they can be tee'd to separate files,
|
||||
# then swapping them back again so that the streams are written correctly for the invoking process
|
||||
( (eVal "$cmd" | tee -a $outf) 3>&1 1>&2 2>&3 | tee $errf) 3>&1 1>&2 2>&3
|
||||
evErr=`cat $errfile`
|
||||
rm -f $errfile
|
||||
end=`$date +%s.%N`
|
||||
echo "+++ exit code: $evErr" | tee -a $outf
|
||||
|
||||
# set the appropriate error, based in the exit code and the regex
|
||||
[ $evErr != 0 ] && err=1 || err=0
|
||||
out=`cat $outf | sed -e 's/^\([^+]\)/| \1/g'`
|
||||
if [ $err = 0 -a -n "$ereg" ]; then
|
||||
H=`echo "$out" | egrep $icase "$ereg"`
|
||||
[ -n "$H" ] && err=1
|
||||
fi
|
||||
echo "+++ error: $err" | tee -a $outf
|
||||
rm -f $outf
|
||||
|
||||
errMsg=`cat $errf`
|
||||
rm -f $errf
|
||||
# calculate vars
|
||||
asserts=$(($asserts+1))
|
||||
errors=$(($errors+$err))
|
||||
time=`echo "$end - $ini" | bc -l`
|
||||
total=`echo "$total + $time" | bc -l`
|
||||
|
||||
# write the junit xml report
|
||||
## failure tag
|
||||
[ $err = 0 ] && failure="" || failure="
|
||||
<failure type=\"ScriptError\" message=\"Script Error\">
|
||||
<![CDATA[
|
||||
$errMsg
|
||||
]]>
|
||||
</failure>
|
||||
"
|
||||
## testcase tag
|
||||
content="$content
|
||||
<testcase assertions=\"1\" name=\"$name\" time=\"$time\" classname=\"$class\">
|
||||
$failure
|
||||
<system-out>
|
||||
<![CDATA[
|
||||
$out
|
||||
]]>
|
||||
</system-out>
|
||||
<system-err>
|
||||
<![CDATA[
|
||||
$errMsg
|
||||
]]>
|
||||
</system-err>
|
||||
</testcase>
|
||||
"
|
||||
## testsuite block
|
||||
|
||||
if [[ -e "$juDIR/TEST-$suite.xml" ]]; then
|
||||
# file exists. first update the failures count
|
||||
failCount=`sed -n "s/.*testsuite.*failures=\"\([0-9]*\)\".*/\1/p" "$juDIR/TEST-$suite.xml"`
|
||||
errors=$(($failCount+$errors))
|
||||
sed -i "0,/failures=\"$failCount\"/ s/failures=\"$failCount\"/failures=\"$errors\"/" "$juDIR/TEST-$suite.xml"
|
||||
sed -i "0,/errors=\"$failCount\"/ s/errors=\"$failCount\"/errors=\"$errors\"/" "$juDIR/TEST-$suite.xml"
|
||||
|
||||
# file exists. Need to append to it. If we remove the testsuite end tag, we can just add it in after.
|
||||
sed -i "s^</testsuite>^^g" $juDIR/TEST-$suite.xml ## remove testSuite so we can add it later
|
||||
cat <<EOF >> "$juDIR/TEST-$suite.xml"
|
||||
$content
|
||||
</testsuite>
|
||||
EOF
|
||||
|
||||
else
|
||||
# no file exists. Adding a new file
|
||||
cat <<EOF > "$juDIR/TEST-$suite.xml"
|
||||
<testsuite failures="$errors" assertions="$assertions" name="$suite" tests="1" errors="$errors" time="$total">
|
||||
$content
|
||||
</testsuite>
|
||||
EOF
|
||||
fi
|
||||
|
||||
}
|
Loading…
Reference in New Issue