* 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. Signed-off-by: Matt Madison <matt@madison.systems> --- meta/classes/go.bbclass | 87 +++++++++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 36 deletions(-) diff --git a/meta/classes/go.bbclass b/meta/classes/go.bbclass index 2f196b487c..010914c307 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 export GOBUILDFLAGS ?= "-v ${GO_LDFLAGS}" export GOPATH_OMIT_IN_ACTIONID ?= "1" export GOPTESTBUILDFLAGS ?= "${GOBUILDFLAGS} -c" -export GOPTESTFLAGS ?= "-test.v" +export GOPTESTFLAGS ?= "" GOBUILDFLAGS_prepend_task-compile = "${GO_PARALLEL_BUILD} " export GO = "${HOST_PREFIX}go" @@ -76,7 +76,7 @@ go_list_packages() { } go_list_package_tests() { - ${GO} list -f '{{.ImportPath}} {{.TestGoFiles}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \ + ${GO} list -f '{{.ImportPath}} {{.TestGoFiles}}' ${GOBUILDFLAGS} ${GO_INSTALL} | \ grep -v '\[\]$' | \ egrep -v '${GO_INSTALL_FILTEROUT}' | \ awk '{ print $1 }' @@ -99,14 +99,15 @@ go_do_compile() { do_compile[dirs] =+ "${GOTMPDIR}" do_compile[cleandirs] = "${B}/bin ${B}/pkg" -do_compile_ptest() { - rm -f ${B}/.go_compiled_tests.list +do_compile_ptest_base() { + rm -f ${B}/.go_compiled_tests.list go_list_package_tests | while read pkg; do cd ${B}/src/$pkg ${GO} test ${GOPTESTBUILDFLAGS} $pkg find . -mindepth 1 -maxdepth 1 -type f -name '*.test' -exec echo $pkg/{} \; | \ sed -e's,/\./,/,'>> ${B}/.go_compiled_tests.list done + do_compile_ptest } do_compile_ptest_base[dirs] =+ "${GOTMPDIR}" @@ -122,40 +123,54 @@ go_do_install() { fi } -do_install_ptest_base() { - test -f "${B}/.go_compiled_tests.list" || exit 0 - tests="" - while read test; do - tests="$tests${tests:+ }${test%.test}" - testdir=`dirname $test` - install -d ${D}${PTEST_PATH}/$testdir - install -m 0755 ${B}/src/$test ${D}${PTEST_PATH}/$test - if [ -d "${B}/src/$testdir/testdata" ]; then - cp --preserve=mode,timestamps -R "${B}/src/$testdir/testdata" ${D}${PTEST_PATH}/$testdir - fi - done < ${B}/.go_compiled_tests.list - if [ -n "$tests" ]; then - install -d ${D}${PTEST_PATH} - cat >${D}${PTEST_PATH}/run-ptest <<EOF +go_make_ptest_wrapper() { + cat >${D}${PTEST_PATH}/run-ptest <<EOF #!/bin/sh -ANYFAILED=0 -for t in $tests; do - testdir=\`dirname \$t.test\` - if ( cd "${PTEST_PATH}/\$testdir"; "${PTEST_PATH}/\$t.test" ${GOPTESTFLAGS} | tee /dev/fd/9 | grep -q "^FAIL" ) 9>&1; then - ANYFAILED=1 - fi -done -if [ \$ANYFAILED -ne 0 ]; then - echo "FAIL: ${PN}" - exit 1 -fi -echo "PASS: ${PN}" -exit 0 +RC=0 +run_test() ( + cd "\$1" + ((((./\$2 ${GOPTESTFLAGS}; echo \$? >&3) | sed -r -e"s,^(PASS|SKIP|FAIL)\$,\\1: \$1/\$2," >&4) 3>&1) | (read rc; exit \$rc)) 4>&1 + exit \$?) EOF - chmod +x ${D}${PTEST_PATH}/run-ptest - else - rm -rf ${D}${PTEST_PATH} - fi + +} + +go_stage_testdata() { + oldwd="$PWD" + cd ${S}/src + find ${GO_IMPORT} -depth -type d -name testdata | while read d; do + if echo "$d" | grep -q '/vendor/'; then + continue + fi + parent=`dirname $d` + install -d ${D}${PTEST_PATH}/$parent + cp --preserve=mode,timestamps -R $d ${D}${PTEST_PATH}/$parent/ + done + cd "$oldwd" +} + +do_install_ptest_base() { + test -f "${B}/.go_compiled_tests.list" || exit 0 + install -d ${D}${PTEST_PATH} + go_stage_testdata + go_make_ptest_wrapper + havetests="" + while read test; do + testdir=`dirname $test` + testprog=`basename $test` + install -d ${D}${PTEST_PATH}/$testdir + install -m 0755 ${B}/src/$test ${D}${PTEST_PATH}/$test + echo "run_test $testdir $testprog || RC=1" >> ${D}${PTEST_PATH}/run-ptest + havetests="yes" + done < ${B}/.go_compiled_tests.list + if [ -n "$havetests" ]; then + echo "exit \$RC" >> ${D}${PTEST_PATH}/run-ptest + chmod +x ${D}${PTEST_PATH}/run-ptest + else + rm -rf ${D}${PTEST_PATH} + fi + do_install_ptest + chown -R root:root ${D}${PTEST_PATH} } EXPORT_FUNCTIONS do_unpack do_configure do_compile do_install -- 2.14.1 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core