3 ## "upstream" travis functions
5 ANSI_GREEN
="\033[32;1m"
12 function travis_cmd
() {
13 local assert output display retry timing cmd result
21 --assert) assert
=true
; shift ;;
22 --echo) output
=true
; shift ;;
23 --display) display
=$2; shift 2;;
24 --retry) retry
=true
; shift ;;
25 --timing) timing
=true
; shift ;;
30 if [[ -n "$timing" ]]; then
34 if [[ -n "$output" ]]; then
35 echo "\$ ${display:-$cmd}"
38 if [[ -n "$retry" ]]; then
39 travis_retry
eval "$cmd"
45 if [[ -n "$timing" ]]; then
49 if [[ -n "$assert" ]]; then
57 travis_timer_id
=$
(printf %08x $
(( RANDOM
* RANDOM
)))
58 travis_start_time
=$
(travis_nanoseconds
)
59 echo -en "travis_time:start:$travis_timer_id\r${ANSI_CLEAR}"
62 travis_time_finish
() {
64 travis_end_time
=$
(travis_nanoseconds
)
65 local duration
=$
(($travis_end_time-$travis_start_time))
66 echo -en "\ntravis_time:end:$travis_timer_id:start=$travis_start_time,finish=$travis_end_time,duration=$duration\r${ANSI_CLEAR}"
70 function travis_nanoseconds
() {
75 if hash gdate
> /dev
/null
2>&1; then
76 cmd
="gdate" # use gdate if available
77 elif [[ "$os" = Darwin
]]; then
78 format
="+%s000000000" # fallback to second precision on darwin (does not support %N)
86 if [ $result -ne 0 ]; then
87 echo -e "\n${ANSI_RED}The command \"$TRAVIS_CMD\" failed and exited with $result during $TRAVIS_STAGE.${ANSI_RESET}\n\nYour build has been stopped."
94 export TRAVIS_TEST_RESULT
=$
(( ${TRAVIS_TEST_RESULT:-0} | $
(($result != 0)) ))
96 if [ $result -eq 0 ]; then
97 echo -e "\n${ANSI_GREEN}The command \"$TRAVIS_CMD\" exited with $result.${ANSI_RESET}"
99 echo -e "\n${ANSI_RED}The command \"$TRAVIS_CMD\" exited with $result.${ANSI_RESET}"
104 pkill
-9 -P $$
&> /dev
/null || true
111 if [[ $timeout =~ ^
[0-9]+$
]]; then
112 # looks like an integer, so we assume it's a timeout
120 local log_file
=travis_wait_$$.log
125 travis_jigger $
! $timeout $cmd &
130 wait $cmd_pid 2>/dev
/null
132 ps
-p$jigger_pid &>/dev
/null
&& kill $jigger_pid
135 if [ $result -eq 0 ]; then
136 echo -e "\n${ANSI_GREEN}The command $cmd exited with $result.${ANSI_RESET}"
138 echo -e "\n${ANSI_RED}The command $cmd exited with $result.${ANSI_RESET}"
141 echo -e "\n${ANSI_GREEN}Log:${ANSI_RESET}\n"
148 # helper method for travis_wait()
151 local timeout
=$1 # in minutes
158 while [ $count -lt $timeout ]; do
159 count
=$
(($count + 1))
160 echo -ne "Still running ($count of $timeout): $@\r"
164 echo -e "\n${ANSI_RED}Timeout (${timeout} minutes) reached. Terminating \"$@\"${ANSI_RESET}\n"
171 while [ $count -le 3 ]; do
172 [ $result -ne 0 ] && {
173 echo -e "\n${ANSI_RED}The command \"$@\" failed. Retrying, $count of 3.${ANSI_RESET}\n" >&2
177 [ $result -eq 0 ] && break
178 count
=$
(($count + 1))
182 [ $count -gt 3 ] && {
183 echo -e "\n${ANSI_RED}The command \"$@\" failed 3 times.${ANSI_RESET}\n" >&2
192 echo -en "travis_fold:${action}:${name}\r${ANSI_CLEAR}"
196 echo $1 | base64
-d | openssl rsautl
-decrypt -inkey ~
/.ssh
/id_rsa.repo
201 travis_cmd
"$1" --echo --assert
205 # pkcs11 build requirements
206 run
"sudo apt-get -qq --no-install-recommends install \
210 run
"sudo apt-get -qq --no-install-recommends install \
215 run
"sudo apt-get -qq --no-install-recommends install \
219 run
"sudo apt-get -qq --no-install-recommends install \
223 # remote-backend build requirements
224 run
"sudo apt-get -qq --no-install-recommends install \
227 # authoritative test requirements / setup
228 run
"sudo apt-get -qq --no-install-recommends install \
239 run
"wget http://www.verisignlabs.com/dnssec-tools/packages/jdnssec-tools-0.12.tar.gz"
240 run
"sudo tar xfz jdnssec-tools-0.12.tar.gz --strip-components=1 -C /"
243 # pkcs11 test requirements / setup
244 run
"sudo apt-get -qq --no-install-recommends install \
247 run
"sudo mkdir -p /etc/pkcs11/modules/"
248 run
"sudo cp -f regression-tests/softhsm.mod /etc/pkcs11/modules/softhsm.module"
249 run
"sudo cp -f regression-tests/softhsm.conf /etc/softhsm/softhsm.conf"
250 run
"sudo chmod 0755 /etc/softhsm/"
251 run
"sudo chmod 0644 /etc/softhsm/softhsm.conf"
252 run
"sudo chmod 0777 /var/lib/softhsm"
253 run
"p11-kit -l" # ensure it's ok
255 # bind-backend tests requirements
256 run
"sudo apt-get -qq --no-install-recommends install \
259 run
"wget ftp://ftp.nominum.com/pub/nominum/dnsperf/2.0.0.0/dnsperf-2.0.0.0-1-rhel-6-x86_64.tar.gz"
260 run
"tar xzvf dnsperf-2.0.0.0-1-rhel-6-x86_64.tar.gz"
261 run
"fakeroot alien --to-deb dnsperf-2.0.0.0-1/dnsperf-2.0.0.0-1.el6.x86_64.rpm"
262 run
"sudo dpkg -i dnsperf_2.0.0.0-2_amd64.deb"
265 # geoip-backend test requirements / setup
266 run
"sudo apt-get -qq --no-install-recommends install \
269 # gmysql-backend test requirements
270 run
"sudo apt-get -qq --no-install-recommends install \
273 # godbc-backend test setup
274 run
echo\
-e\
"[pdns-sqlite3-1]\nDriver = SQLite3\nDatabase = ${PWD}/regression-tests/pdns.sqlite3\n\n[pdns-sqlite3-2]\nDriver = SQLite3\nDatabase = ${PWD}/regression-tests/pdns.sqlite32\n"\ >\ ${HOME}/.odbc.ini
276 # ldap-backend test setup
277 run "sudo apt-get
-qq --no-install-recommends install \
280 run "mkdir
/tmp
/ldap-dns
"
281 run "pushd /tmp
/ldap-dns
"
282 run 'for schema in /etc/ldap/schema/{core,cosine}.schema ${TRAVIS_BUILD_DIR}/modules/ldapbackend/{dnsdomain2,pdns-domaininfo}.schema ; do echo include $schema ; done > ldap.conf'
284 run "slaptest
-f ldap.conf
-F slapd.d
"
285 run "sudo
cp slapd.d
/cn
=config
/cn
=schema
/cn
={*dns
*.ldif
/etc
/ldap
/slapd.d
/cn
=config
/cn
=schema
/"
286 run "sudo chown
-R openldap
:openldap
/etc
/ldap
/slapd.d
/"
287 run "sudo service slapd restart
"
289 run "sudo
-u openldap mkdir
-p /var
/lib
/ldap
/powerdns
"
290 run "sudo ldapadd
-Y EXTERNAL
-H ldapi
:/// -f .
/modules
/ldapbackend
/testfiles
/add.ldif
"
292 # remote-backend tests requirements
293 run "sudo apt-get
-qq --no-install-recommends install \
295 rubygems-integration \
297 run "gem
install bundler
--no-rdoc --no-ri"
298 run "cd modules
/remotebackend
"
299 run "ruby
-S bundle
install"
303 run "sudo apt-get
-qq --no-install-recommends install \
307 run "sudo apt-get
-qq --no-install-recommends install \
310 run "sudo
touch /etc
/authbind
/byport
/53"
311 run "sudo
chmod 755 /etc
/authbind
/byport
/53"
315 ### documentation requirements
316 run "sudo apt-get
-qq --no-install-recommends install \
320 # documentation test requirements
321 run "virtualenv
$HOME/.venv
"
322 run "source $HOME/.venv
/bin
/activate
"
323 run "pip
install -q pandocfilters
==1.2.3 mkdocs
==0.14 linkchecker
==9.3 click
==5.1"
328 # recursor test requirements / setup
329 run "sudo apt-get
-qq --no-install-recommends install \
337 run "wget http
://s3.amazonaws.com
/alexa-static
/top-1m.csv.
zip"
338 run "unzip top-1m.csv.
zip -d .
/pdns
/regression-tests
"
339 PDNS_SERVER_VERSION="0.0.880gcb54743-1pdns
"
340 run "wget https
://downloads.powerdns.com
/autobuilt
/auth
/deb
/$PDNS_SERVER_VERSION.trusty-amd64
/pdns-server_
$PDNS_SERVER_VERSION.trusty_amd64.deb
"
341 run "wget https
://downloads.powerdns.com
/autobuilt
/auth
/deb
/$PDNS_SERVER_VERSION.trusty-amd64
/pdns-tools_
$PDNS_SERVER_VERSION.trusty_amd64.deb
"
342 run "sudo dpkg
-i pdns-server_
$PDNS_SERVER_VERSION.trusty_amd64.deb pdns-tools_
$PDNS_SERVER_VERSION.trusty_amd64.deb
"
343 run 'for suffix in {1..40}; do sudo /sbin/ip addr add 10.0.3.$suffix/32 dev lo; done'
344 run "sudo
touch /etc
/authbind
/byport
/53"
345 run "sudo
chmod 755 /etc
/authbind
/byport
/53"
355 # Build without --enable-botan1.10 option, Botan/SoftHSM conflict #2496
356 run "CFLAGS
='-O1' CXXFLAGS
='-O1' .
/configure \
357 --with-dynmodules='bind gmysql geoip gpgsql gsqlite3 ldap lua mydns opendbx pipe random remote tinydns' \
361 --enable-experimental-pkcs11 \
362 --enable-remotebackend-zeromq \
364 --enable-unit-tests \
365 --enable-backend-unit-tests \
366 --disable-dependency-tracking \
367 --disable-silent-rules"
370 run "make -k install DESTDIR
=/tmp
/pdns-install-dir
"
371 run "find /tmp
/pdns-install-dir
-ls"
375 export PDNS_RECURSOR_DIR=$HOME/pdns_recursor
377 run ".
/build-scripts
/dist-recursor
"
378 run "cd pdns
/recursordist
"
379 run "tar xf pdns-recursor-
*.
tar.bz2
"
380 run "rm -f pdns-recursor-
*.
tar.bz2
"
381 run "cd pdns-recursor-
*"
382 run "CFLAGS
='-O1' CXXFLAGS
='-O1' .
/configure \
383 --prefix=$PDNS_RECURSOR_DIR \
384 --disable-silent-rules"
387 run "find $PDNS_RECURSOR_DIR -ls"
392 run ".
/build-scripts
/dist-dnsdist
"
393 run "cd pdns
/dnsdistdist
"
394 run "tar xf dnsdist
*.
tar.bz2
"
396 run "CFLAGS
='-O1' CXXFLAGS
='-O1' .
/configure \
397 --enable-unit-tests \
400 --prefix=$HOME/dnsdist \
401 --disable-silent-rules"
406 run "find $HOME/dnsdist
-ls"
407 run "rm -rf pdns
/dnsdistdist
/dnsdist-
*/"
413 run "source $HOME/.venv
/bin
/activate
"
414 run ".
/configure
--disable-dependency-tracking --with-modules='' --with-dyn-modules=''"
421 run "test -f pdns
/test-suite.log
&& cat pdns
/test-suite.log || true
"
422 run "test -f modules
/remotebackend
/test-suite.log
&& cat modules
/remotebackend
/test-suite.log || true
"
424 #DNSName - make -k -j3 -C pdns $(grep '(EXEEXT):' pdns/Makefile | cut -f1 -d\$ | grep -E -v 'dnsdist|calidns')
425 run 'make -k -j3 -C pdns $(grep "(EXEEXT
):" pdns/Makefile | cut -f1 -d\$ | grep -E -v "dnspcap2protobuf|dnsdist|calidns|speedtest
")'
428 run ".
/pdnsutil test-algorithms
"
431 run "cd regression-tests
"
433 run ".
/timestamp .
/start-test-stop
5300 ldap-tree
"
434 run ".
/timestamp .
/start-test-stop
5300 ldap-simple
"
435 run ".
/timestamp .
/start-test-stop
5300 ldap-strict
"
437 run ".
/timestamp .
/start-test-stop
5300 bind-both
"
438 run ".
/timestamp .
/start-test-stop
5300 bind-dnssec-both
"
439 run ".
/timestamp .
/start-test-stop
5300 bind-dnssec-nsec3-both
"
440 run ".
/timestamp .
/start-test-stop
5300 bind-dnssec-nsec3-optout-both
"
441 run ".
/timestamp .
/start-test-stop
5300 bind-dnssec-nsec3-narrow
"
442 run ".
/timestamp .
/start-test-stop
5300 bind-hybrid-nsec3
"
443 #ecdsa - ./timestamp ./start-test-stop 5300 bind-dnssec-pkcs11
445 run "export geoipregion
=oc geoipregionip
=1.2.3.4"
446 run ".
/timestamp .
/start-test-stop
5300 geoip
"
447 run ".
/timestamp .
/start-test-stop
5300 geoip-nsec3-narrow
"
449 run ".
/timestamp .
/start-test-stop
5300 gmysql-nodnssec-both
"
450 run ".
/timestamp .
/start-test-stop
5300 gmysql-both
"
451 run ".
/timestamp .
/start-test-stop
5300 gmysql-nsec3-both
"
452 run ".
/timestamp .
/start-test-stop
5300 gmysql-nsec3-optout-both
"
453 run ".
/timestamp .
/start-test-stop
5300 gmysql-nsec3-narrow
"
455 run "export GODBC_SQLITE3_DSN
=pdns-sqlite3-1
"
456 # run ".
/timestamp .
/start-test-stop
5300 godbc_sqlite3-nsec3
"
458 run ".
/timestamp .
/start-test-stop
5300 gpgsql-nodnssec-both
"
459 run ".
/timestamp .
/start-test-stop
5300 gpgsql-both
"
460 run ".
/timestamp .
/start-test-stop
5300 gpgsql-nsec3-both
"
461 run ".
/timestamp .
/start-test-stop
5300 gpgsql-nsec3-optout-both
"
462 run ".
/timestamp .
/start-test-stop
5300 gpgsql-nsec3-narrow
"
464 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-nodnssec-both
"
465 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-both
"
466 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-nsec3-both
"
467 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-nsec3-optout-both
"
468 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-nsec3-narrow
"
470 run ".
/timestamp .
/start-test-stop
5300 mydns
"
472 run ".
/timestamp .
/start-test-stop
5300 opendbx-sqlite3
"
474 run ".
/timestamp .
/start-test-stop
5300 remotebackend-pipe
"
475 run ".
/timestamp .
/start-test-stop
5300 remotebackend-pipe-dnssec
"
476 run ".
/timestamp .
/start-test-stop
5300 remotebackend-unix
"
477 run ".
/timestamp .
/start-test-stop
5300 remotebackend-unix-dnssec
"
478 run ".
/timestamp .
/start-test-stop
5300 remotebackend-http
"
479 run ".
/timestamp .
/start-test-stop
5300 remotebackend-http-dnssec
"
480 run ".
/timestamp .
/start-test-stop
5300 remotebackend-zeromq
"
481 run ".
/timestamp .
/start-test-stop
5300 remotebackend-zeromq-dnssec
"
483 run ".
/timestamp .
/start-test-stop
5300 tinydns
"
486 run "cd regression-tests.rootzone
"
487 run ".
/timestamp .
/start-test-stop
5300 bind-both
"
488 run ".
/timestamp .
/start-test-stop
5300 bind-dnssec-both
"
489 run ".
/timestamp .
/start-test-stop
5300 bind-dnssec-nsec3-both
"
490 run ".
/timestamp .
/start-test-stop
5300 bind-dnssec-nsec3-optout-both
"
491 run ".
/timestamp .
/start-test-stop
5300 bind-dnssec-nsec3-narrow
"
492 run ".
/timestamp .
/start-test-stop
5300 bind-hybrid-nsec3
"
494 run ".
/timestamp .
/start-test-stop
5300 gmysql-nodnssec-both
"
495 run ".
/timestamp .
/start-test-stop
5300 gmysql-both
"
496 run ".
/timestamp .
/start-test-stop
5300 gmysql-nsec3-both
"
497 run ".
/timestamp .
/start-test-stop
5300 gmysql-nsec3-optout-both
"
498 run ".
/timestamp .
/start-test-stop
5300 gmysql-nsec3-narrow
"
500 run ".
/timestamp .
/start-test-stop
5300 gpgsql-nodnssec-both
"
501 run ".
/timestamp .
/start-test-stop
5300 gpgsql-both
"
502 run ".
/timestamp .
/start-test-stop
5300 gpgsql-nsec3-both
"
503 run ".
/timestamp .
/start-test-stop
5300 gpgsql-nsec3-optout-both
"
504 run ".
/timestamp .
/start-test-stop
5300 gpgsql-nsec3-narrow
"
506 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-nodnssec-both
"
507 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-both
"
508 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-nsec3-both
"
509 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-nsec3-optout-both
"
510 run ".
/timestamp .
/start-test-stop
5300 gsqlite3-nsec3-narrow
"
515 run "cd regression-tests.api
"
516 run ".
/runtests authoritative
"
519 ### no backend tests ###
520 run "cd regression-tests.nobackend
/"
522 run "test ! -s .
/failed_tests
"
525 run "rm -f regression-tests
/zones
/*-slave.
*" #FIXME
529 export PDNSRECURSOR="${PDNS_RECURSOR_DIR}/sbin
/pdns_recursor
"
530 run ".
/build-scripts
/test-recursor
"
531 export RECURSOR="${PDNSRECURSOR}"
532 export DNSBULKTEST="/usr
/bin
/dnsbulktest
"
533 export RECCONTROL="${PDNS_RECURSOR_DIR}/bin
/rec_control
"
534 run "cd regression-tests
"
535 run "THRESHOLD
=90 TRACE
=no .
/timestamp .
/recursor-test
5300 25000"
537 run "cd regression-tests.api
"
538 run ".
/runtests recursor
"
543 run "source $HOME/.venv
/bin
/activate
"
544 run "make -C docs check-links
"
549 run "cd regression-tests.dnsdist
"
550 run "DNSDISTBIN
=$HOME/dnsdist
/bin
/dnsdist .
/runtests
-v"
551 run "rm -f .
/DNSCryptResolver.cert .
/DNSCryptResolver.key
"
557 run "git status |
grep -q clean
"
560 # global build requirements
561 run "sudo apt-get
-qq --no-install-recommends install \
568 run "wget http
://ppa.launchpad.net
/kalon33
/gamesgiroll
/ubuntu
/pool
/main
/libs
/libsodium
/libsodium-dev_1.0
.3-1~ppa14.04
+1_amd64.deb
"
569 run "wget http
://ppa.launchpad.net
/kalon33
/gamesgiroll
/ubuntu
/pool
/main
/libs
/libsodium
/libsodium13_1.0
.3-1~ppa14.04
+1_amd64.deb
"
570 run "sudo dpkg
-i libsodium-dev_1.0
.3-1~ppa14.04
+1_amd64.deb libsodium13_1.0
.3-1~ppa14.04
+1_amd64.deb
"
573 install_$PDNS_BUILD_PRODUCT
575 build_$PDNS_BUILD_PRODUCT
577 test_$PDNS_BUILD_PRODUCT
579 if [ $PDNS_BUILD_PRODUCT == "auth
"]; then