openbsd.subr (3972B)
1 # 2 # OpenBSD ports infrastructure compatibility layer for end to end testing. 3 # Exports CITRUN_PROCDIR. 4 # 5 [ `uname` != "OpenBSD" ] && return 0 6 7 set -eu 8 . tt/libtap.subr 9 10 type comm cut diff make nm sed sort > /dev/null || \ 11 bail "OpenBSD end to end script dependencies not met" 12 13 # Script arguments give the path in the OpenBSD ports system. 14 portdir="/usr/ports/$1/$2" 15 workdist=`make -C $portdir show=WRKDIST` 16 workdir=`make -C $portdir show=WRKDIR` 17 18 workdir_inst="${workdir}-citrun" 19 workdist_inst=`make -C $portdir WRKDIR=$workdir_inst show=WRKDIST` 20 21 # Release testing must be done on installed package. 22 if ! pkg_info -e citrun-9999; then 23 echo "C It Run not found." 24 exit 1 25 fi 26 27 # This is used by the OpenBSD /usr/ports/infrastructure/. 28 portpath="/usr/local/share/citrun:$workdir_inst/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11R6/bin" 29 30 export CITRUN_PROCDIR="$workdir/procdir/" 31 32 pkg_extract() 33 { 34 make -C $portdir extract > /dev/null 35 ok "is vanilla src extracted in '$workdir'" test $? -eq 0 36 } 37 38 pkg_extract_instrumented() 39 { 40 make -C $portdir WRKDIR="$workdir_inst" extract > /dev/null 41 ok "is instrumented src extracted in '$workdir_inst'" test $? -eq 0 42 } 43 44 pkg_check_deps() 45 { 46 make -C $portdir full-all-depends > $workdir/deps 47 #make -C $portdir full-test-depends >> $workdir/deps 48 sort $workdir/deps | uniq > $workdir/deps.uniq 49 50 pkg_info -q > $workdir/installed 51 comm -2 -3 $workdir/deps.uniq $workdir/installed > $workdir/deps_needed 52 53 diff -u /dev/null $workdir/deps_needed || bail "dependencies not met" 54 ok "is all `wc -l < $workdir/deps.uniq` port dependencies met" 55 } 56 57 pkg_build() 58 { 59 start=`date +%s` 60 61 make -C $portdir build > $workdir/build.stdout 2> $workdir/build.stderr 62 ok 'is make build exit code 0' test $? -eq 0 63 64 diag "Vanilla build took $((`date +%s` - start)) sec" 65 } 66 67 pkg_build_instrumented() 68 { 69 start=`date +%s` 70 71 make -C $portdir PORTPATH="$portpath" WRKDIR="$workdir_inst" build \ 72 > $workdir_inst/build.stdout \ 73 2> $workdir_inst/build.stderr 74 ok 'is instrumented make build exit code 0' test $? -eq 0 75 76 diag "Instrumented build took $((`date +%s` - start)) sec" 77 } 78 79 pkg_test() 80 { 81 start=`date +%s` 82 83 make -C $portdir test > $workdir/test.stdout 2> $workdir/test.stderr 84 ok 'is make test exit code 0' test $? -eq 0 85 86 diag "Vanilla test took $((`date +%s` - start)) sec" 87 } 88 89 pkg_test_instrumented() 90 { 91 ok 'is test with instrumentation successful' \ 92 make -C $portdir PORTPATH="${portpath}" test 93 } 94 95 pkg_citrun_check() 96 { 97 citrun_check $workdist_inst > $workdir_inst/check.out 98 ok 'is citrun_check successful' test $? -eq 0 99 100 ok 'is Milliseconds sanitized' \ 101 sed -i.bak -e "/Milliseconds spent/d" $workdir_inst/check.out 102 ok 'is citrun_check output identical' \ 103 diff -u $workdir_inst/check.good $workdir_inst/check.out 104 } 105 106 pkg_clean() 107 { 108 make -C $portdir clean=all > /dev/null 109 ok 'is make clean exit code 0' test $? -eq 0 110 ok 'is rm -rf instrumented workdir exit code 0' rm -rf $workdir_inst 111 } 112 113 # 114 # By default operates on build.std{out,err} but optionally takes extra files as 115 # parameters. 116 # 117 pkg_scrub_logs() 118 { 119 # 120 # Replace port specific paths like /usr/ports/pobj/.* and .text section 121 # hex offsets with constants. 122 # 123 sed -i.bak \ 124 -e 's;/usr/ports/pobj/.*/;<port_path>;' \ 125 -e 's/\.text+0x[0-9a-f]*/\.text+OFF/' \ 126 $workdir/build.stdout $workdir_inst/build.stdout \ 127 $workdir/build.stderr $workdir_inst/build.stderr \ 128 $@ 129 } 130 131 pkg_diff_build_logs() 132 { 133 ok 'is build stdout identical' \ 134 diff -u $workdir/build.stdout $workdir_inst/build.stdout 135 ok 'is build stderr identical' \ 136 diff -u $workdir/build.stderr $workdir_inst/build.stderr 137 } 138 139 pkg_diff_symbols() 140 { 141 nm -P $workdist/$1 | cut -f 1-2 -d ' ' | cut -f 1 -d '.' > $workdir/nm.out 142 ok "is nm on vanilla binary '$1' exit code 0" test $? -eq 0 143 144 nm -P $workdist_inst/$1 | cut -f 1-2 -d ' ' | cut -f 1 -d '.' > $workdir_inst/nm.out 145 ok "is nm on instrumented binary '$1' exit code 0'" test $? -eq 0 146 147 ok 'is symbol diff empty' diff -u $workdir/nm.out $workdir_inst/nm.out 148 }