diff options
| author | Matt Madison <matt@madison.systems> | 2018-03-04 13:09:30 -0800 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-03-06 06:43:10 -0800 |
| commit | 13fd7abbe088dba1882e158270ef44a9b0c47f8e (patch) | |
| tree | 4602011b1769c1b7e8f673c5a000b2fa5051eb9b /meta/classes/go.bbclass | |
| parent | 02b8eae8c7fc56c5047372e326f42500e9bbe13e (diff) | |
| download | poky-13fd7abbe088dba1882e158270ef44a9b0c47f8e.tar.gz | |
go.bbclass: ptest cleanup and improvements
* Don't enable verbose test output (-test.v)
by default, as it generates too much noise
for automated results parsing
* Override do_install_ptest_base in the bbclass,
so recipes can provide their own modifications
with do_install_ptest.
* Improve the generated run-ptest script to better
handle large numbers of tests, and to generate
'status: test name' output similar to Automake
tests.
* Install all non-vendored 'testdata' directories
from the source into the ptest package, as some
packages share test data among multiple tests.
(From OE-Core rev: 11037462d80cefbee90a69e6a8a95895375ed6da)
Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/go.bbclass')
| -rw-r--r-- | meta/classes/go.bbclass | 87 |
1 files changed, 51 insertions, 36 deletions
diff --git a/meta/classes/go.bbclass b/meta/classes/go.bbclass index afd68b5951..a51ba3e9f0 100644 --- a/meta/classes/go.bbclass +++ b/meta/classes/go.bbclass | |||
| @@ -26,7 +26,7 @@ GO_LDFLAGS ?= '-ldflags="${GO_RPATH} ${GO_LINKMODE} -extldflags '${GO_EXTLDFLAGS | |||
| 26 | export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS}" | 26 | export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS}" |
| 27 | export GOPATH_OMIT_IN_ACTIONID ?= "1" | 27 | export GOPATH_OMIT_IN_ACTIONID ?= "1" |
| 28 | export GOPTESTBUILDFLAGS ?= "${GOBUILDFLAGS} -c" | 28 | export GOPTESTBUILDFLAGS ?= "${GOBUILDFLAGS} -c" |
| 29 | export GOPTESTFLAGS ?= "-test.v" | 29 | export GOPTESTFLAGS ?= "" |
| 30 | GOBUILDFLAGS_prepend_task-compile = "${GO_PARALLEL_BUILD} " | 30 | GOBUILDFLAGS_prepend_task-compile = "${GO_PARALLEL_BUILD} " |
| 31 | 31 | ||
| 32 | export GO = "${HOST_PREFIX}go" | 32 | export GO = "${HOST_PREFIX}go" |
| @@ -76,7 +76,7 @@ go_list_packages() { | |||
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | go_list_package_tests() { | 78 | go_list_package_tests() { |
| 79 | ${GO} list -f '{{.ImportPath}} {{.TestGoFiles}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \ | 79 | ${GO} list -f '{{.ImportPath}} {{.TestGoFiles}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \ |
| 80 | grep -v '\[\]$' | \ | 80 | grep -v '\[\]$' | \ |
| 81 | egrep -v '${GO_INSTALL_FILTEROUT}' | \ | 81 | egrep -v '${GO_INSTALL_FILTEROUT}' | \ |
| 82 | awk '{ print $1 }' | 82 | awk '{ print $1 }' |
| @@ -100,15 +100,16 @@ go_do_compile() { | |||
| 100 | do_compile[dirs] =+ "${GOTMPDIR}" | 100 | do_compile[dirs] =+ "${GOTMPDIR}" |
| 101 | do_compile[cleandirs] = "${B}/bin ${B}/pkg" | 101 | do_compile[cleandirs] = "${B}/bin ${B}/pkg" |
| 102 | 102 | ||
| 103 | do_compile_ptest() { | 103 | do_compile_ptest_base() { |
| 104 | export TMPDIR="${GOTMPDIR}" | 104 | export TMPDIR="${GOTMPDIR}" |
| 105 | rm -f ${B}/.go_compiled_tests.list | 105 | rm -f ${B}/.go_compiled_tests.list |
| 106 | go_list_package_tests | while read pkg; do | 106 | go_list_package_tests | while read pkg; do |
| 107 | cd ${B}/src/$pkg | 107 | cd ${B}/src/$pkg |
| 108 | ${GO} test ${GOPTESTBUILDFLAGS} $pkg | 108 | ${GO} test ${GOPTESTBUILDFLAGS} $pkg |
| 109 | find . -mindepth 1 -maxdepth 1 -type f -name '*.test' -exec echo $pkg/{} \; | \ | 109 | find . -mindepth 1 -maxdepth 1 -type f -name '*.test' -exec echo $pkg/{} \; | \ |
| 110 | sed -e's,/\./,/,'>> ${B}/.go_compiled_tests.list | 110 | sed -e's,/\./,/,'>> ${B}/.go_compiled_tests.list |
| 111 | done | 111 | done |
| 112 | do_compile_ptest | ||
| 112 | } | 113 | } |
| 113 | do_compile_ptest_base[dirs] =+ "${GOTMPDIR}" | 114 | do_compile_ptest_base[dirs] =+ "${GOTMPDIR}" |
| 114 | 115 | ||
| @@ -124,40 +125,54 @@ go_do_install() { | |||
| 124 | fi | 125 | fi |
| 125 | } | 126 | } |
| 126 | 127 | ||
| 127 | do_install_ptest_base() { | 128 | go_make_ptest_wrapper() { |
| 128 | test -f "${B}/.go_compiled_tests.list" || exit 0 | 129 | cat >${D}${PTEST_PATH}/run-ptest <<EOF |
| 129 | tests="" | ||
| 130 | while read test; do | ||
| 131 | tests="$tests${tests:+ }${test%.test}" | ||
| 132 | testdir=`dirname $test` | ||
| 133 | install -d ${D}${PTEST_PATH}/$testdir | ||
| 134 | install -m 0755 ${B}/src/$test ${D}${PTEST_PATH}/$test | ||
| 135 | if [ -d "${B}/src/$testdir/testdata" ]; then | ||
| 136 | cp --preserve=mode,timestamps -R "${B}/src/$testdir/testdata" ${D}${PTEST_PATH}/$testdir | ||
| 137 | fi | ||
| 138 | done < ${B}/.go_compiled_tests.list | ||
| 139 | if [ -n "$tests" ]; then | ||
| 140 | install -d ${D}${PTEST_PATH} | ||
| 141 | cat >${D}${PTEST_PATH}/run-ptest <<EOF | ||
| 142 | #!/bin/sh | 130 | #!/bin/sh |
| 143 | ANYFAILED=0 | 131 | RC=0 |
| 144 | for t in $tests; do | 132 | run_test() ( |
| 145 | testdir=\`dirname \$t.test\` | 133 | cd "\$1" |
| 146 | if ( cd "${PTEST_PATH}/\$testdir"; "${PTEST_PATH}/\$t.test" ${GOPTESTFLAGS} | tee /dev/fd/9 | grep -q "^FAIL" ) 9>&1; then | 134 | ((((./\$2 ${GOPTESTFLAGS}; echo \$? >&3) | sed -r -e"s,^(PASS|SKIP|FAIL)\$,\\1: \$1/\$2," >&4) 3>&1) | (read rc; exit \$rc)) 4>&1 |
| 147 | ANYFAILED=1 | 135 | exit \$?) |
| 148 | fi | ||
| 149 | done | ||
| 150 | if [ \$ANYFAILED -ne 0 ]; then | ||
| 151 | echo "FAIL: ${PN}" | ||
| 152 | exit 1 | ||
| 153 | fi | ||
| 154 | echo "PASS: ${PN}" | ||
| 155 | exit 0 | ||
| 156 | EOF | 136 | EOF |
| 157 | chmod +x ${D}${PTEST_PATH}/run-ptest | 137 | |
| 158 | else | 138 | } |
| 159 | rm -rf ${D}${PTEST_PATH} | 139 | |
| 160 | fi | 140 | go_stage_testdata() { |
| 141 | oldwd="$PWD" | ||
| 142 | cd ${S}/src | ||
| 143 | find ${GO_IMPORT} -depth -type d -name testdata | while read d; do | ||
| 144 | if echo "$d" | grep -q '/vendor/'; then | ||
| 145 | continue | ||
| 146 | fi | ||
| 147 | parent=`dirname $d` | ||
| 148 | install -d ${D}${PTEST_PATH}/$parent | ||
| 149 | cp --preserve=mode,timestamps -R $d ${D}${PTEST_PATH}/$parent/ | ||
| 150 | done | ||
| 151 | cd "$oldwd" | ||
| 152 | } | ||
| 153 | |||
| 154 | do_install_ptest_base() { | ||
| 155 | test -f "${B}/.go_compiled_tests.list" || exit 0 | ||
| 156 | install -d ${D}${PTEST_PATH} | ||
| 157 | go_stage_testdata | ||
| 158 | go_make_ptest_wrapper | ||
| 159 | havetests="" | ||
| 160 | while read test; do | ||
| 161 | testdir=`dirname $test` | ||
| 162 | testprog=`basename $test` | ||
| 163 | install -d ${D}${PTEST_PATH}/$testdir | ||
| 164 | install -m 0755 ${B}/src/$test ${D}${PTEST_PATH}/$test | ||
| 165 | echo "run_test $testdir $testprog || RC=1" >> ${D}${PTEST_PATH}/run-ptest | ||
| 166 | havetests="yes" | ||
| 167 | done < ${B}/.go_compiled_tests.list | ||
| 168 | if [ -n "$havetests" ]; then | ||
| 169 | echo "exit \$RC" >> ${D}${PTEST_PATH}/run-ptest | ||
| 170 | chmod +x ${D}${PTEST_PATH}/run-ptest | ||
| 171 | else | ||
| 172 | rm -rf ${D}${PTEST_PATH} | ||
| 173 | fi | ||
| 174 | do_install_ptest | ||
| 175 | chown -R root:root ${D}${PTEST_PATH} | ||
| 161 | } | 176 | } |
| 162 | 177 | ||
| 163 | EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install | 178 | EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install |
