diff --git a/third_party/forked/shell2junit/LICENSE b/third_party/forked/shell2junit/LICENSE new file mode 100644 index 0000000000000..a03114bc7cf11 --- /dev/null +++ b/third_party/forked/shell2junit/LICENSE @@ -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. + diff --git a/third_party/forked/shell2junit/sh2ju.sh b/third_party/forked/shell2junit/sh2ju.sh new file mode 100755 index 0000000000000..097d13bf93b9f --- /dev/null +++ b/third_party/forked/shell2junit/sh2ju.sh @@ -0,0 +1,169 @@ +#!/bin/sh +### 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 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 +### - 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` + +# create output folder +juDIR=`pwd`/results +mkdir -p "$juDIR" || exit + +# 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 +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 +juLogClean() { + echo "+++ Removing old junit reports from: $juDIR " + rm -f "$juDIR"/TEST-* +} + +# Execute a command and record its results +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;; + *) ya=1;; + esac + done + + # 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 + + echo "name is: $name" + echo "class is: $class" + + 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=`expr $asserts + 1` + errors=`expr $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=" + + " + ## testcase tag + content="$content + + $failure + + + + + + + + " + ## testsuite block + + if [[ -e "$juDIR/TEST-$suite.xml" ]]; then + + # file exists. Need to append to it. If we remove the testsuite end tag, we can just add it in after. + sed -i "s^^^g" $juDIR/TEST-$suite.xml ## remove testSuite so we can add it later + cat <> "$juDIR/TEST-$suite.xml" + $content + +EOF + + else + # no file exists. Adding a new file + cat < "$juDIR/TEST-$suite.xml" + + $content + +EOF + fi + +} +