From 6f9b4f45ca2fa9f2406d8f0dcd5a058c4dc0a064 Mon Sep 17 00:00:00 2001 From: Wouter Wijngaards Date: Fri, 11 Feb 2011 14:39:37 +0000 Subject: [PATCH] Test set makeover. --- Makefile.in | 5 +- test/05-nm.tpkg | Bin 3526 -> 0 bytes test/13-unit-tests-base.tpkg | Bin 0 -> 5329 bytes test/14-drill-random.tpkg | Bin 611 -> 0 bytes test/14-unit-tests-base.tpkg | Bin 15159 -> 0 bytes test/18-drill-tests1.tpkg | Bin 8297 -> 8269 bytes test/common.sh | 232 +++++++++++++++++++++++++++++++++++ test/test_all.sh | 35 ++++-- 8 files changed, 260 insertions(+), 12 deletions(-) delete mode 100644 test/05-nm.tpkg create mode 100644 test/13-unit-tests-base.tpkg delete mode 100644 test/14-drill-random.tpkg delete mode 100644 test/14-unit-tests-base.tpkg create mode 100644 test/common.sh diff --git a/Makefile.in b/Makefile.in index 0cb2bf4c..cf6d61fb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -114,7 +114,7 @@ LINK_LIB = $(LIBTOOL) --mode=link $(CC) $(strip $(CFLAGS) $(LDFLAGS) $(LIBS) -ve %.o: $(srcdir)/%.c $(LIBDNS_HEADERS) ldns/net.h ldns/util.h ldns/config.h $(COMP_LIB) $(LIBSSL_CPPFLAGS) -c $< -.PHONY: clean realclean docclean manpages doc lint all lib pyldns +.PHONY: clean realclean docclean manpages doc lint all lib pyldns test .PHONY: install uninstall install-doc uninstall-doc uninstall-pyldns .PHONY: install-h uninstall-h install-lib uninstall-lib install-pyldns @@ -353,6 +353,9 @@ allclean: test-clean clean test-clean: tpkg -b test clean +test: + if test -x "`which bash`"; then bash test/test_all.sh; else sh test/test_all.sh; fi + #-include $(ALL_SOURCES:.c=.d) # Recreate symbols file, only needed when API changes diff --git a/test/05-nm.tpkg b/test/05-nm.tpkg deleted file mode 100644 index 5c6bc998e33e975b2ed77bee294b3fd957869b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 3526 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 AR{#J2 diff --git a/test/13-unit-tests-base.tpkg b/test/13-unit-tests-base.tpkg new file mode 100644 index 0000000000000000000000000000000000000000..a753312b05f736794356bdf18855749b0acc2db1 GIT binary patch literal 5329 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 literal 0 Hc-jL100001 diff --git a/test/14-drill-random.tpkg b/test/14-drill-random.tpkg deleted file mode 100644 index bda46849bcaf06ebf22a6c66ccc1bae3e083ed58..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc-jL100001 literal 611 zc-jGD0-XIHiwFQEKr~GN1MQYkPunmM$Mft@aSw>MCU$U=DbqATJI17eDugy6hLCBl zV38)B?J)MT&ps!uCeanjR0bNmpA_5iIX)-nf6hYo3Zu)iXH-?xld#Yx3LY8m$&zGN zr}9=kClDeL374F2WdRpba1lWA*b7-kW1TVp!MD0`Xzm`j%Knccmc)Ot?-I-DIzHL} zr#{Aa#y`#i!F|kQze~997ru@I;E(l^_wk>{|DXnCE}98e&NmP$!~zTU+{+@Kh==Ik zp>^x{Sfzg{vxWbEmhy!3{}h}+Zwz4=g>HIv5nd}3PL%a83a7BS3AS#`2$$Iz!<%Vs z91ORQ_TFr?Wga!wMD|=)`MhlJ%X*~BXyLXqhl~x5KMu}5e%LwOK0H3_W@=r9QK`@2 z3%k!YYj@jpRzgohRN!^g%yz9`;OMdjywMIe-ZDLglM~;79)1M@r>C#MU19|c=5zx& z!_wmIKEcNN<^B&JqW{8<*7C7Z|FQU$|7F_gU$*Bz(*NIQM_D{j6U<>D>g*F5tLw@e zLe2(gM@COw*D=@I_?F(F%@V9{P_=^w%K0fjV*&gA>&7vNERSF1LPG!D5yXB!uzjT~ z=Pxul>}$M&_ZrW!VtxPUMQy(4!20!MT37yPlKTZru_~ob4)IHvaLKtMuhOH2?ot!^bN9Z)MW!KS_C-N}2d^ xet!r_`hNxF5aqA>F2A9KR3n~T>1@F*E0Ys)O1 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%0AX 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 literal 8297 zc-m!l1yEdD(=86cf)B32A-KE4-~@N~;O-hc=n$O2-DQvjch}(V1ShyX?)|?fU%jeR zwYzt(Ufp}`I;Rg=3=-5&OHM^7*c1IHUu>DwJ*_(%DA67afM0fZhkKIAL3g0LgRQ#k*->_Q zYd=~%E0*z)VAfvqwwKvC1IM#0S2tJ;K9mY%4TWEB4wW;Jc)D6_EIp@bfdq>Xim)h- zzk0fq`bY(?GR$fCltpjP(y0G<1*Sd);u!?%o zp1l&=ApT%f!M+Fj{?PkelCPy?UmZ>7<81=%pC*I^pIlgdI`gu8LkqURj!(&GW1iMe z{rG_MmGz6c?d6D;$d!IJ$wh#lCJ4b12vx~i*JJmT9{rFPpvK; ze_~vch4DXQz2$C$t5!PMz{@X&8%jPl+ygqkI|g_oK5Mb1wUvKJl-+Fy*CUth1bx~8FQ-oW+L95uWp~m-RxXi`)9d75#2ZjoS|JcLOL!~I~*p> z1s8o@jSn2G8m|AgM(%i>-Wc+@W=-6_79b*e>JJV>6Ux-#(0Z!{aUIpZ~= z_c@Wo)G9+(PkJIW7b(kxoK*EG`Ju9HX^n0TmqLk>B2bOl0>iKEE92=iCji9xTG9@@HJ^f<)s6M+C*C8N z+TZfrEW`)6MQc56Brq3H|joQ@&d^8BuEJg&>vOSS45w9VkD;e|MA+%z74+++(|2%3H{=B$4xynEeW z;=rh=JeJ#MSJoZgCmT;>Fvz|w{{8wByXHFO zbGPryLkPpjO0q3-M%cY5!7;-%ylypuVJn8rURs@6ZdT zpMNZAqwjIlym2nS@HW6%6W>&uklw$n{jl^~$=1Pr8F;MR^vbqqllW`tFM>a{u)gB< z4$RVQ{`r~~Vkhw&`ZTFBLhr4P#Iv09xz@2Po{M086JQ}m4M~8(&N>Ertf)he0En9A!JfHRf zh8Gb66TWW^30XB<0~Y6j`E)6FBE0&i@O^I-)?I+-w-4V}AR2$#&(9nk9lm^}7AZ?xoI# zY}qq3pn|bx@N>H!&v`0^6^aOf>*WB~4&pM?#1d~z@8pJ6qYV+j^SChEn!q-&{aQOk zgjxRQ{p{;U+rWdR<`C75sn`KtK>yqG)1N;Ni`17j21W~)@qFPuZ!Z_4Pr1r2eo=2C z#?NmG%QWWButV3@_O6E1KUP%`BL-Lb3sN+z*PRTW>9Qry9_Y76FA;?&Hr_Y}Woq~a z`X5A)LWj&=?^KatM6jN%E^dDOBd;DJ;zyjjN8X9sGqHoC>-H6qlM{ZCucSeT9cLvn z9zMd}B8^H`zUSSuHhfOpkO05NK=4)f#mlwB)|}1P)TwL~o#y2wjm(LcQ==TMrJtk^ z-0XNR*tVfpDOVum6l73zN;C+VBHcU##SQcYJ^>Md5kMK>;E?IWsiu6@;|^VNSx>2U z#iGVgbam>6q;WOyps zgFr$I?*ap-Umq9ckV=BGm`jC#2#NnX4xTiwm@s_!d~CH~c(|&RimVtLT(*K_ifQ?i zAIO(MQ601FQ@e@`8=TGEBmc~2_;h#@0^eJ>hV(OXp)7yKkWza^3>UM)q(Zj89NJ zv@`XNx21-2^(mVSrlf@(gYUfiRvS`&Jr~HJYV-~Ss9@TJgRKY&n;_l&>kqpzC|3;B z+Jm+rz%-YC#}hFKxDzmWR|*bAtJ}APb^Zj&Q4cL|2qCh=U}6#Yx)K+Yu@%crGk#`$$5T z1df}(x08_j7v-8b|DpT6CrC97$)y+3ic-K(vmg6Ix=N{$QzVfh92Wz!gdbygmqb}` z1$02Q4(K+Vl2wu-SM49}pOzOR1)WCKYq?SCV~VLaA1sIojGB~$NEmU(zRUBg_Ipzd z$3Qs6w(63h-wVcNsr^QF_|RUSBc3=}x1^Xb=rpEY3-x8$_T73~fMh6JBpW;D1S|h= zrP|vc>B$rKp`t{uj)k_bo=NG*>E?6AtESuYQKWe9CU->INmM0@36mq)_*JTyJxn~` zrO&opEgmJpgIu<^A6uGzu7r_9btzac9LWVEAJqn~E}9{>G7QcXcEC7G9tNY6=NncG zIMu=21{y@7vc%TGsG;t{FDs#1=#ndsLRme;G4{1l%Mg)Uyfet(Oe6XMmO%hqk6kr` zbb~b=JJ$6;C9%b$Mu>%3TS8|{6}k{BRGUJo0C4lvFa z6K-kT(i12U&a8??!-9W&d`%FZ5^8d{09O0~5?#$EU*#~{=P?-y z5XpenuuP5whSidU9(ctp<8-C+8wt|F()KRnw}&LIF!M1G!uK8Za9dfPxp!1w5p_q zjJgLNJtJwP$^~3nF_u2uuT zB2ERy^AS5YYw}CX=~`9B`o)P+w_ACj^riQ7cFKii;@N%fhqX(~hV4?xVHdx*dS{6D(hsShXNHRDiVaQk?OcUY9SQ`^9RS*&} zH=l<@Rp$x?TAIevy%Ut2U}ED^hJ$Xj>1NYfBf3_wxJ4=drrBBsDexSjpOM=|>QJf@ zB$6ZN9wD`UEWa$$r}&~{L^-L3JcC%AUZmL8D;|MpI)S$yC60FgQ5I?_Hqzq@w1zm6 zC{`i~FP9#uk7iA*AHh}zUW|WpTmG>`ODrVp2yT&R-|BI~rX|E8Yp8?9n4>LOn+9Kj zXc2}$aDf=DoVvOp1aCFNB50U=Ho*elgh@5|jCIxkW@+;JiDpe_02Yu{E$2x{ddMxL z(r_rcfe~&0eFO?{4cAQ07on4U)-?kqH}n!DQyM$8R@OzNo(?xp2X^gRbfVPls{cz4 zf@L`d%XzXQB?*z5aiMzijK$OX%jf7I6XzRN)++v34?;$Xm@-K|BQM#4RyWoAofbpQ zVA3kuzx|V)vL8v4gHvZ;x!{xa42dMhCaYjA#$5@It?-@(x>Fcg+hT*ug#EIuA>Qf(iWuCVw)OMHH~kAc>-v<7CN=nV}%)RR`c$P z-m|f1S*_KDg&`8qa?p~nI2Kvxyht-N&l4zYmo#f-DvE4qTIS+ZCSs7r6FWGKa>c`` zAmaQw~z=x)uum#@uFHCibu` zj_&E0{G}2js_dliS3u+^bq`aeh#`VJ5refd^n&*Zmuz!AUwP{y_KubF@~@y)_rPM& z{yO{~3#sq6;Vo!eYY~sY47m@yg%L}VKK9r_CXvQ8r;8lPX(rM-WQ``z4JjnkhWu-T z6W+VAX?G6)mpNQaX(f))4WB*|RqYS`-}afz&e^li?}Jb1<|LdaP+nbE5uq$x?0qyS z^;RvJ;Ji=Y?`y39l2K3m_p>mgUL8Lisz)S-43Rgn4*h?u|3X}r9rW{h>E5dzhwH5U z$F?^~nEkg+WXjMv+|bJZffrD~kwaZ!qoSs56*qd)Xki_JVYYS8Bd2E`vXN7tdU!+J(jDba7n@ocV?}zPY-)y@_V$k^!ok z58@SHj--af45CB_#7T{C;wJh!Vx_BY#7I&akg&$Pgc2a*s->q8(v9{_P?p6h57&O$ZX(y z##;X#&;O15KSfd2`iuT6qWgZ8fByp!K`j6Kv>XL3$GW58Y07D9kj!YnQI_RIeK&@N zuXSAY*{KM3!>8aZYa3{F*1n0tnI}bO5cM;Oqka?$^udsr@=76@k)k{}1XCMHco$XB zOzK5d$qmW5?1b{$irKGu57WgG&KrS7?CLO9DE{%VT=Hyd=zgYO_0VuGiN;P67+7%} z7S>A0&N@sdeWJ_V`atFNVfkG^Qay?{1TdIXQ1}vl@Q^e%Gz#-YBKnL z&?s`ysi@(a7(a$!$a1t;;-=}SBE2l))p6%Ah*g7^S4GZT`lir zc!Smv&DfH2OrwQ7gc_yON?lw?Mm|1hD!H-4fe|d)OV}zTas2s$2%N3O-I_#uzU&u# zJ_WCzmooloH7u9i-Q`QdNe8QVUK||Zw8`8quoQgpCz~IQI(CT2Gi%0 zsfOgEaMc~|y`O4il(&UgDabl_zfQa6Cosv*rAT90giGOlg&(ZQpuCCMHU5pm*YI&> z7pP?yot4?}t_p5ysP_0Lz3vnzAJlIN+#bPpG{J-34|O9uy{cqV}X2cPNPF(Y7nrj;YoA zGbBsx_aUo&lTT*6%$<4;^wnynf}p_#T8N0pDu6Xie==mWNThgEOZzyR zMWx_F97dMzq@fHI_)}%HsRuAe-o6ceQZfA*ATSc0NIXTlW$RkeCz`V{l1tfd+wU;@ zb-~T7mel2M)nRhFapJniu8((ojE1TDNVEXvThkTes-;m`%G9g_CaW=|YcJ9QDw7wp zUfkxk63a}}>qv4nmP$xOIMiU`2XDfSs895vnlk5!rnrH5{#vm*S_-~4>liXGnFA^y z>`pr+hsr5wR!cbAT8SF+$OT|7nIv&0qhoVFawM9^y?gCq^GGF{XSGe4EOqQDdmU&M1|r^^Rk^Z0rz=z zJ+&GH7~z_L@Xz-W60xWn>uG-)$=>Kt4~VU^ASdKu?ckpS)ciH0oD=R)%7iQWc!!?C z)pIpWiFaSb%O@Gw(60h0=B+^Zh~AwE#|^;P(Ep@s?Y?xR3d0cD4IBQJ@xwasl)$^( z;S~w2BZ0-~#XT4-2Ml7^e^Mx^1~siW)320T3J>Pzll;bgfiifr=j&7}8dSAJ{&QGt zMjv+YoaA>iSR_v9W)#IxSVMYe!KQZIHc&d}+AK7_&2{rkj!;8^PM{1r zl9sbF@5eUGR@v+v@=pxGbB66_LTXAUcu8L>Soi~jN_`ljXF{&YGWyVk*=y67>BbKp zf(HkWEXdP2v3=N(ZEyx-w=g}Qb8xvfpMBo|$i#Os=XwV_8~^q)aC8I^58oCS@ilmM zek9WCme;X4Ya??cSCs5h1!H~xV{P2tGdfC70Uu$&Vqc~!r{CSY;+bh@S;QjEj7;HB z`YMU`1Pgrm*Tn&s0D&pFF7DLpm0%^9=DMs6bT_PjvOU1bL0_2;Ah6kR_GWyYB!{1j ziAEnzMQNc|v?tDS6(!n#P%}42@pj&QlFYeox3ie6d(TqiLL<}arNQDt%bfO^V9}VZ zO_v47%g%AylQiU9%g=Kf2kQO1J)6E&8}&)CSNh>!*oCv%qU7y0C)%5USg((eE+q`l z-Hsmlt5Vjs6Pm*nq)i;w={m!YV!^UrV;5<)rT8U;tqQakPu&aSN;Pg;%AxyO8Pu~5 zga!w6;00DdC%Y2P1%@wt_#!i*!_8#f4M@0fD3aCJh&Y}XYSoevY%!tG%_HLxDfR1< zLaS6VKfb7u=g*hs;$(_G6E#~c?++oeW#L?dF^2B=w7}V_OY%diVID-A4ZoEEx(cW5 z4SY%>)-*F%kordP_m5=R1@y%+cfUP=kKSd0tMT2jXJ(gLeifWQrq=GUEhU^VDo*l2WYY z(Ing?@-3Jx-3|D-EY@}nmJz$CMh-5Ug0(q3WeIVIaYj3H(zt7@#2-I8T%;l1&{~EB z#Q2od<)xtm=ae2*nMbwB4IN4ZgJBk}lh*TF8C%+Q#4+JyR*jjbnebvz*W*&V7z^mi zXW-&fHRq+1|JLFa%1AZfGNZU>{nZ7?R4QaZre({FSWlx6Hy`AD9MQY33#iYGhxS|5 zgt0gUn`$ER-%GFK`rl7u-5O@CIZV}E@th^;+ClJEBQb#udMFO0HbUx~)tr0S-UR)? zhLH+NlZ=@Vq9i+|KNLIUrg~fmmgF_TURu@}mU(K-rl<*M;8}G?xiUl^_50nGFnG(z znHE>p;2=b3*P>0!6>7zOA`hkT2EElPCUM_my6STS{o zPb+s+$V|^u^jw%HI21}UPpB}1ts<#ULwY7FHEqR@O24Z(AdhW{A058ZBgqKG6Ez#` zx#|JUGoVtD8F`sFjj*}T+UwI=2+t!^Zh|S>xJg5>(p>O=ynR_NCYUI^RpPR5QsmRf zgx}SBDHE*W(f%hK@{MY~7U`3&SZ|{3A|v_btktg#e#3{?1*0DuuYL!FlO1pLj14bO zMpw;i9dAX#2XBD`m!o84y+#|aFa8g&lNN^#E#wL^%)lesXESe4>F;5v0SR^)!EG%+Rzi?Bh{h8M19J zT`Bsr_bKUpxbdeyQ^gtqd~SxLJLwNfsEn`pqr=MShMJA39ddWVE;! CvKL&2 + exit 1 +} + +# print info +# $0: name of program +# $1: to printout. +info () { + echo "$0: info: $1" +} + +# test if 'tool' is available in path and complain otherwise. +# $1: tool +test_tool_avail () { + if test ! -x "`which $1 2>&1`"; then + echo No "$1" in path + exit 1 + fi +} + +# get ldns-testns tool in LDNS_TESTNS variable. +get_ldns_testns () { + if test -x "`which ldns-testns 2>&1`"; then + LDNS_TESTNS=ldns-testns + else + LDNS_TESTNS=/home/wouter/bin/ldns-testns + fi +} + +# get make tool in MAKE variable, gmake is used if present. +get_make () { + if test -x "`which gmake 2>&1`"; then + MAKE=gmake + else + MAKE=make + fi +} + +# get cc tool in CC variable, gcc is used if present. +get_gcc () { + if test -x "`which gcc 2>&1`"; then + CC=gcc + else + CC=cc + fi +} + +# set SKIP=1 if the name is in list and tool is not available. +# $1: name of package to check. +# $2: list of packages that need the tool. +# #3: name of the tool required. +skip_if_in_list () { + if echo $2 | grep $1 >/dev/null; then + if test ! -x "`which $3 2>&1`"; then + SKIP=1; + fi + fi +} + +# function to get a number of random port numbers. +# $1: number of random ports. +# RND_PORT is returned as the starting port number +get_random_port () { + local plist + local cont + local collisions + local i + local MAXCOLLISION=1000 + cont=1 + collisions=0 + while test "$cont" = 1; do + #netstat -n -A ip -A ip6 -a | sed -e "s/^.*:\([0-9]*\) .*$/\1/" + RND_PORT=$(( $RANDOM + 5354 )) + # depending on uname try to check for collisions in port numbers + case "`uname`" in + linux|Linux) + plist=`netstat -n -A ip -A ip6 -a | sed -e "s/^.*:\([0-9]*\) .*$/\1/"` + ;; + *) + plist="" + ;; + esac + cont=0 + for (( i=0 ; i < $1 ; i++ )); do + if echo "$plist" | grep '^'`expr $i + $RND_PORT`'$' >/dev/null 2>&1; then + cont=1; + collisions=`expr $collisions + 1` + fi + done + if test $collisions = $MAXCOLLISION; then + error "too many collisions getting random port number" + fi + done +} + +# wait for server to go up, pass +# $1 : logfilename +# $2 : string to watch for. +# exits with failure if it does not come up +wait_server_up () { + local MAX_UP_TRY=120 + local WAIT_THRES=30 + local try + for (( try=0 ; try <= $MAX_UP_TRY ; try++ )) ; do + if test -f $1 && fgrep "$2" $1 >/dev/null; then + #echo "done on try $try" + break; + fi + if test $try -eq $MAX_UP_TRY; then + echo "Server in $1 did not go up!" + cat $1 + exit 1; + fi + if test $try -ge $WAIT_THRES; then + sleep 1 + fi + done +} + +# wait for ldns-testns to come up +# $1 : logfilename that is watched. +wait_ldns_testns_up () { + wait_server_up "$1" "Listening on port" +} + +# wait for unbound to come up +# string 'Start of service' in log. +# $1 : logfilename that is watched. +wait_unbound_up () { + wait_server_up "$1" "start of service" +} + +# wait for petal to come up +# string 'petal start' in log. +# $1 : logfilename that is watched. +wait_petal_up () { + wait_server_up "$1" "petal start" +} + +# wait for server to go up, pass +# $1 : logfile +# $2 : success string +# $3 : failure string +wait_server_up_or_fail () { + local MAX_UP_TRY=120 + local WAIT_THRES=30 + local try + for (( try=0 ; try <= $MAX_UP_TRY ; try++ )) ; do + if test -f $1 && fgrep "$2" $1 >/dev/null; then + echo "done on try $try" + break; + fi + if test -f $1 && fgrep "$3" $1 >/dev/null; then + echo "failed on try $try" + break; + fi + if test $try -eq $MAX_UP_TRY; then + echo "Server in $1 did not go up!" + cat $1 + exit 1; + fi + if test $try -ge $WAIT_THRES; then + sleep 1 + fi + done +} + +# kill a pid, make sure and wait for it to go down. +# $1 : pid to kill +kill_pid () { + local MAX_DOWN_TRY=120 + local WAIT_THRES=30 + local try + kill $1 + for (( try=0 ; try <= $MAX_DOWN_TRY ; try++ )) ; do + if kill -0 $1 >/dev/null 2>&1; then + : + else + #echo "done on try $try" + break; + fi + if test $try -eq $MAX_DOWN_TRY; then + echo "Server in $1 did not go down! Send SIGKILL" + kill -9 $1 >/dev/null 2>&1 + fi + if test $try -ge $WAIT_THRES; then + sleep 1 + fi + # re-send the signal + kill $1 >/dev/null 2>&1 + done + return 0 +} + +# set doxygen path, so that make doc can find doxygen +set_doxygen_path () { + if test -x '/home/wouter/bin/doxygen'; then + export PATH="/home/wouter/bin:$PATH" + fi +} + diff --git a/test/test_all.sh b/test/test_all.sh index 5d0ad7b3..21f9d7cb 100755 --- a/test/test_all.sh +++ b/test/test_all.sh @@ -1,22 +1,35 @@ -TPKG=$1 -if [ -z "$TPKG" ] -then - TPKG=$HOME/repos/tpkg/tpkg +#!/bin/bash +# do ldns tests +cd test +. common.sh + +# find tpkg +if test -x "`which tpkg 2>&1`"; then + TPKG=tpkg +else + TPKG=$1 + if [ -z "$TPKG" ] + then + TPKG=$HOME/repos/tpkg/tpkg + fi fi +test_tool_avail "dig" + +echo start the test at `date` in `pwd` +$TPKG clean +$TPKG -a ../.. fake 01-compile.tpkg +$TPKG -a ../.. fake 07-compile-examples.tpkg +$TPKG -a ../.. fake 16-compile-builddir.tpkg +$TPKG -a ../.. fake 999-compile-nossl.tpkg for tests in *.tpkg do COMMAND="$TPKG -a ../.. exe `basename $tests`" echo $COMMAND $COMMAND - if [ $? = 1 ]; then - if [ $tests = "01-compile.tpkg" ]; then - echo "Important base test failed, stopping." - $TPKG report - exit 1 - fi - fi done +echo finished the test at `date` in `pwd` $TPKG report +cd .. -- 2.47.3