]> git.ipfire.org Git - thirdparty/pdns.git/blame - build-scripts/travis.sh
Add support for dnsdist-15 to repo script.
[thirdparty/pdns.git] / build-scripts / travis.sh
CommitLineData
bf6096f5
PL
1#!/bin/bash
2
3## "upstream" travis functions
4ANSI_RED="\033[31;1m"
5ANSI_GREEN="\033[32;1m"
6ANSI_RESET="\033[0m"
7ANSI_CLEAR="\033[0K"
8
9TRAVIS_TEST_RESULT=
10TRAVIS_CMD=
11
12function travis_cmd() {
13 local assert output display retry timing cmd result
14
15 cmd=$1
16 TRAVIS_CMD=$cmd
17 shift
18
19 while true; do
20 case "$1" in
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 ;;
26 *) break ;;
27 esac
28 done
29
30 if [[ -n "$timing" ]]; then
31 travis_time_start
32 fi
33
34 if [[ -n "$output" ]]; then
35 echo "\$ ${display:-$cmd}"
36 fi
37
38 if [[ -n "$retry" ]]; then
39 travis_retry eval "$cmd"
40 else
41 eval "$cmd"
42 fi
43 result=$?
44
45 if [[ -n "$timing" ]]; then
46 travis_time_finish
47 fi
48
49 if [[ -n "$assert" ]]; then
50 travis_assert $result
51 fi
52
53 return $result
54}
55
56travis_time_start() {
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}"
60}
61
62travis_time_finish() {
63 local result=$?
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}"
67 return $result
68}
69
70function travis_nanoseconds() {
71 local cmd="date"
72 local format="+%s%N"
73 local os=$(uname)
74
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)
79 fi
80
81 $cmd -u $format
82}
83
84travis_assert() {
85 local result=${1:-$?}
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."
88 travis_terminate 2
89 fi
90}
91
92travis_result() {
93 local result=$1
94 export TRAVIS_TEST_RESULT=$(( ${TRAVIS_TEST_RESULT:-0} | $(($result != 0)) ))
95
96 if [ $result -eq 0 ]; then
97 echo -e "\n${ANSI_GREEN}The command \"$TRAVIS_CMD\" exited with $result.${ANSI_RESET}"
98 else
99 echo -e "\n${ANSI_RED}The command \"$TRAVIS_CMD\" exited with $result.${ANSI_RESET}"
100 fi
101}
102
103travis_terminate() {
104 pkill -9 -P $$ &> /dev/null || true
105 exit $1
106}
107
108travis_wait() {
109 local timeout=$1
110
111 if [[ $timeout =~ ^[0-9]+$ ]]; then
112 # looks like an integer, so we assume it's a timeout
113 shift
114 else
115 # default value
116 timeout=20
117 fi
118
119 local cmd="$@"
120 local log_file=travis_wait_$$.log
121
122 $cmd &>$log_file &
123 local cmd_pid=$!
124
125 travis_jigger $! $timeout $cmd &
126 local jigger_pid=$!
127 local result
128
129 {
130 wait $cmd_pid 2>/dev/null
131 result=$?
132 ps -p$jigger_pid &>/dev/null && kill $jigger_pid
133 }
134
135 if [ $result -eq 0 ]; then
136 echo -e "\n${ANSI_GREEN}The command $cmd exited with $result.${ANSI_RESET}"
137 else
138 echo -e "\n${ANSI_RED}The command $cmd exited with $result.${ANSI_RESET}"
139 fi
140
141 echo -e "\n${ANSI_GREEN}Log:${ANSI_RESET}\n"
142 cat $log_file
143
144 return $result
145}
146
147travis_jigger() {
148 # helper method for travis_wait()
149 local cmd_pid=$1
150 shift
151 local timeout=$1 # in minutes
152 shift
153 local count=0
154
155 # clear the line
156 echo -e "\n"
157
158 while [ $count -lt $timeout ]; do
159 count=$(($count + 1))
160 echo -ne "Still running ($count of $timeout): $@\r"
161 sleep 60
162 done
163
164 echo -e "\n${ANSI_RED}Timeout (${timeout} minutes) reached. Terminating \"$@\"${ANSI_RESET}\n"
165 kill -9 $cmd_pid
166}
167
168travis_retry() {
169 local result=0
170 local count=1
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
174 }
175 "$@"
176 result=$?
177 [ $result -eq 0 ] && break
178 count=$(($count + 1))
179 sleep 1
180 done
181
182 [ $count -gt 3 ] && {
183 echo -e "\n${ANSI_RED}The command \"$@\" failed 3 times.${ANSI_RESET}\n" >&2
184 }
185
186 return $result
187}
188
189travis_fold() {
190 local action=$1
191 local name=$2
192 echo -en "travis_fold:${action}:${name}\r${ANSI_CLEAR}"
193}
194
195decrypt() {
196 echo $1 | base64 -d | openssl rsautl -decrypt -inkey ~/.ssh/id_rsa.repo
197}
198
199
200run() {
201 travis_cmd "$1" --echo --assert
202}
203
204install_auth() {
205 # pkcs11 build requirements
206 run "sudo apt-get -qq --no-install-recommends install \
207 libp11-kit-dev"
208
c5791798
PD
209 # for validns
210 run "sudo add-apt-repository -y ppa:jelu/validns"
211 run 'curl "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x7AA4AC1F04A52E842B88094F01B7B7D6564DECD0" | sudo apt-key add - '
212
bf6096f5 213 # geoip-backend
9c741511
AT
214 run "sudo add-apt-repository -y ppa:maxmind/ppa"
215 run "gpg --keyserver keyserver.ubuntu.com --recv-keys DE742AFA"
216 run "gpg --export DE742AFA | sudo apt-key add -"
217 run "sudo apt-get update"
bf6096f5
PL
218 run "sudo apt-get -qq --no-install-recommends install \
219 libgeoip-dev \
9c741511
AT
220 libyaml-cpp-dev \
221 libmaxminddb-dev"
bf6096f5 222
42f1f726 223 # lmdb-backend
224 run "sudo apt-get -qq --no-install-recommends install \
225 liblmdb-dev"
226
bf6096f5
PL
227 # remote-backend build requirements
228 run "sudo apt-get -qq --no-install-recommends install \
229 libzmq3-dev"
230
3a435d2e
PD
231 # godbc-backend
232 run "sudo apt-get -qq --no-install-recommends install \
233 libsqliteodbc"
234
bf6096f5
PL
235 # authoritative test requirements / setup
236 run "sudo apt-get -qq --no-install-recommends install \
237 bind9utils \
238 ldnsutils \
239 libnet-dns-perl \
240 moreutils \
241 unbound-host \
242 validns \
243 default-jre \
244 jq"
245
246 run "cd .."
20445e69
PD
247 run "wget https://github.com/dblacka/jdnssec-tools/releases/download/0.14/jdnssec-tools-0.14.tar.gz"
248 run "sudo tar xfz jdnssec-tools-0.14.tar.gz --strip-components=1 -C /"
1e0253ca 249 run "cd ${TRAVIS_BUILD_DIR}"
bf6096f5
PL
250
251 # pkcs11 test requirements / setup
252 run "sudo apt-get -qq --no-install-recommends install \
253 p11-kit \
254 softhsm"
255 run "sudo mkdir -p /etc/pkcs11/modules/"
256 run "sudo cp -f regression-tests/softhsm.mod /etc/pkcs11/modules/softhsm.module"
257 run "sudo cp -f regression-tests/softhsm.conf /etc/softhsm/softhsm.conf"
258 run "sudo chmod 0755 /etc/softhsm/"
259 run "sudo chmod 0644 /etc/softhsm/softhsm.conf"
260 run "sudo chmod 0777 /var/lib/softhsm"
261 run "p11-kit -l" # ensure it's ok
262
263 # bind-backend tests requirements
264 run "sudo apt-get -qq --no-install-recommends install \
14fa3ea1
PD
265 alien\
266 fakeroot"
bf6096f5 267 run "cd .."
0e62797e 268 run "wget https://downloads.powerdns.com/tmp/dnsperf-2.0.0.0-1-rhel-6-x86_64.tar.gz"
bf6096f5
PL
269 run "tar xzvf dnsperf-2.0.0.0-1-rhel-6-x86_64.tar.gz"
270 run "fakeroot alien --to-deb dnsperf-2.0.0.0-1/dnsperf-2.0.0.0-1.el6.x86_64.rpm"
271 run "sudo dpkg -i dnsperf_2.0.0.0-2_amd64.deb"
1e0253ca 272 run "cd ${TRAVIS_BUILD_DIR}"
bf6096f5
PL
273
274 # geoip-backend test requirements / setup
275 run "sudo apt-get -qq --no-install-recommends install \
276 geoip-database"
277
278 # gmysql-backend test requirements
d004b14c
RG
279 # as of 2016/12/01, mysql-5.6 is now installed in the default travis image
280 # see https://github.com/travis-ci/travis-ci/issues/6961
281 #run "sudo apt-get -qq --no-install-recommends install \
282 # mysql-server"
bf6096f5
PL
283
284 # godbc-backend test setup
3a435d2e
PD
285 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'
286 run 'echo ${HOME}/.odbc.ini'
287 run 'cat ${HOME}/.odbc.ini'
bf6096f5 288
bf6096f5
PL
289 # remote-backend tests requirements
290 run "sudo apt-get -qq --no-install-recommends install \
291 ruby-json \
292 rubygems-integration \
293 socat"
2a5c0b37 294 run "gem update --system"
bf6096f5
PL
295 run "gem install bundler --no-rdoc --no-ri"
296 run "cd modules/remotebackend"
297 run "ruby -S bundle install"
298 run "cd ../.."
299
300 # tinydns
301 run "sudo apt-get -qq --no-install-recommends install \
302 libcdb-dev"
303
304 # No backend
305 run "sudo apt-get -qq --no-install-recommends install \
306 authbind \
307 faketime"
308 run "sudo touch /etc/authbind/byport/53"
309 run "sudo chmod 755 /etc/authbind/byport/53"
869c68a4
PD
310
311 # Install dnsmasq to make lookups more robust
312 run "sudo apt-get -qq --no-install-recommends install \
313 dnsmasq"
314 run 'echo listen-address=127.0.0.53 | sudo tee /etc/dnsmasq.d/local.conf'
315 run 'echo bind-interfaces | sudo tee -a /etc/dnsmasq.d/local.conf'
316
317 ## WARNING
318 ## after this dnsmasq restart, DNS lookups will fail for a few seconds.
319 run 'sudo service dnsmasq restart'
320 run "sudo resolvconf --disable-updates"
321 run 'echo nameserver 127.0.0.53 | sudo tee /etc/resolv.conf'
322 run "export RESOLVERIP=127.0.0.53"
bf6096f5
PL
323}
324
eb353acc
RG
325install_ixfrdist() {
326 run "sudo apt-get -qq --no-install-recommends install \
327 libyaml-cpp-dev"
328}
329
bf6096f5
PL
330install_recursor() {
331 # recursor test requirements / setup
97ab616e
RG
332 # lua-posix is required for the ghost tests
333 # (used by the prequery script in the auth)
bf6096f5
PL
334 run "sudo apt-get -qq --no-install-recommends install \
335 authbind \
336 daemontools \
7c114c00 337 jq \
cb54e9b5 338 libfaketime \
7c114c00 339 libsnmp-dev \
97ab616e 340 lua-posix \
c51c551e 341 lua-socket \
bf6096f5 342 moreutils \
7c114c00 343 snmpd"
bf6096f5 344 run "cd .."
8a27076c 345 run "wget http://s3-us-west-1.amazonaws.com/umbrella-static/top-1m.csv.zip"
1e0253ca 346 run "unzip top-1m.csv.zip -d ${TRAVIS_BUILD_DIR}/regression-tests"
8a27076c 347 run 'echo -e "deb [arch=amd64] http://repo.powerdns.com/ubuntu trusty-auth-master main" | sudo tee /etc/apt/sources.list.d/pdns.list'
348 run 'echo -e "Package: pdns-*\nPin: origin repo.powerdns.com\nPin-Priority: 9001" | sudo tee /etc/apt/preferences.d/pdns'
349 run 'curl https://repo.powerdns.com/CBC8B383-pub.asc | sudo apt-key add - '
dad54543
PL
350 run 'sudo apt-get update'
351 run 'sudo apt-get -y install pdns-server pdns-tools'
e07dae82 352 run "sudo service pdns stop"
bf6096f5
PL
353 run 'for suffix in {1..40}; do sudo /sbin/ip addr add 10.0.3.$suffix/32 dev lo; done'
354 run "sudo touch /etc/authbind/byport/53"
355 run "sudo chmod 755 /etc/authbind/byport/53"
1e0253ca 356 run "cd ${TRAVIS_BUILD_DIR}"
aa7a54c9
RG
357 # install SNMP
358 run "sudo sed -i \"s/agentxperms 0700 0755 recursor/agentxperms 0700 0755 ${USER}/g\" regression-tests.recursor-dnssec/snmpd.conf"
359 run "sudo cp -f regression-tests.recursor-dnssec/snmpd.conf /etc/snmp/snmpd.conf"
360 run "sudo service snmpd restart"
361 ## fun story, the directory perms are only applied if it doesn't exist yet, and it is created by the init script, so..
362 run "sudo chmod 0755 /var/agentx"
bf6096f5
PL
363}
364
365install_dnsdist() {
35d883a8 366 # test requirements / setup
82a91ddf
CH
367 run "sudo add-apt-repository -y ppa:zeha/libfstrm-ppa"
368 run 'curl "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x396160EF8126A2E2" | sudo apt-key add - '
369 run "sudo apt-get -qq update"
9f4eb5cc
RG
370 run "sudo apt-get -qq --no-install-recommends install \
371 snmpd \
60fb9966
RG
372 libcdb-dev \
373 libfstrm-dev \
374 liblmdb-dev \
375 libsnmp-dev"
9f4eb5cc
RG
376 run "sudo sed -i \"s/agentxperms 0700 0755 dnsdist/agentxperms 0700 0755 ${USER}/g\" regression-tests.dnsdist/snmpd.conf"
377 run "sudo cp -f regression-tests.dnsdist/snmpd.conf /etc/snmp/snmpd.conf"
378 run "sudo service snmpd restart"
379 # fun story, the directory perms are only applied if it doesn't exist yet, and it is created by the init script, so..
380 run "sudo chmod 0755 /var/agentx"
bf6096f5
PL
381}
382
d5d421b3
JS
383check_for_dangling_symlinks() {
384 run '! find -L . -name missing-sources -prune -o ! -name pubsuffix.cc -type l | grep .'
385}
386
bf6096f5 387build_auth() {
48c7cae9 388 run "autoreconf -vi"
e9ccf0f7 389 run "./configure \
040e40bb 390 ${sanitizerflags} \
1d1c4b1d 391 --with-dynmodules='bind gmysql geoip gpgsql gsqlite3 lmdb pipe random remote tinydns godbc lua2' \
bf6096f5
PL
392 --with-modules='' \
393 --with-sqlite3 \
cb264691 394 --with-libsodium \
bf6096f5
PL
395 --enable-experimental-pkcs11 \
396 --enable-remotebackend-zeromq \
397 --enable-tools \
398 --enable-unit-tests \
399 --enable-backend-unit-tests \
84f3c7d3 400 --enable-fuzz-targets \
bf6096f5 401 --disable-dependency-tracking \
42f1f726 402 --disable-silent-rules \
403 --with-lmdb=/usr"
bf6096f5
PL
404 run "make -k dist"
405 run "make -k -j3"
406 run "make -k install DESTDIR=/tmp/pdns-install-dir"
407 run "find /tmp/pdns-install-dir -ls"
408}
409
eb353acc
RG
410build_ixfrdist() {
411 run "autoreconf -vi"
412 run "./configure \
413 ${sanitizerflags} \
414 --with-dynmodules='bind' \
415 --with-modules='' \
416 --enable-ixfrdist \
417 --enable-unit-tests \
418 --disable-dependency-tracking \
419 --disable-silent-rules"
8f9ca3a1 420 run "make -C ext -k -j3"
eb353acc
RG
421 run "cd pdns"
422 run "make -k -j3 ixfrdist"
423 run "cd .."
424}
425
bf6096f5
PL
426build_recursor() {
427 export PDNS_RECURSOR_DIR=$HOME/pdns_recursor
d5d421b3
JS
428 run "cd pdns/recursordist"
429 check_for_dangling_symlinks
430 run "cd ../.."
bf6096f5
PL
431 # distribution build
432 run "./build-scripts/dist-recursor"
433 run "cd pdns/recursordist"
434 run "tar xf pdns-recursor-*.tar.bz2"
435 run "rm -f pdns-recursor-*.tar.bz2"
436 run "cd pdns-recursor-*"
1e0a958b 437 run "./configure \
040e40bb 438 ${sanitizerflags} \
bf6096f5 439 --prefix=$PDNS_RECURSOR_DIR \
cb264691 440 --with-libsodium \
35d883a8 441 --enable-unit-tests \
af1377b7 442 --enable-nod \
e593a398 443 --disable-dnstap \
bf6096f5
PL
444 --disable-silent-rules"
445 run "make -k -j3"
446 run "make install"
447 run "find $PDNS_RECURSOR_DIR -ls"
448 run "cd ../../.."
449}
450
451build_dnsdist(){
d5d421b3
JS
452 run "cd pdns/dnsdistdist"
453 check_for_dangling_symlinks
454 run "cd ../.."
bf6096f5
PL
455 run "./build-scripts/dist-dnsdist"
456 run "cd pdns/dnsdistdist"
457 run "tar xf dnsdist*.tar.bz2"
458 run "cd dnsdist-*"
e9ccf0f7 459 run "./configure \
040e40bb 460 ${sanitizerflags} \
bf6096f5 461 --enable-unit-tests \
cb264691 462 --with-libsodium \
bf6096f5 463 --enable-dnscrypt \
a227f47d 464 --enable-dns-over-tls \
3bbbeb11 465 --enable-dnstap \
60fb9966 466 --with-lmdb=/usr \
bf6096f5
PL
467 --prefix=$HOME/dnsdist \
468 --disable-silent-rules"
469 run "make -k -j3"
470 run "./testrunner"
471 run "make install"
472 run "cd ../../.."
473 run "find $HOME/dnsdist -ls"
474 run "rm -rf pdns/dnsdistdist/dnsdist-*/"
475
476}
477
bf6096f5 478test_auth() {
488c8611 479 run "make -j3 check || (cat pdns/test-suite.log; false)"
bf6096f5
PL
480 run "test -f pdns/test-suite.log && cat pdns/test-suite.log || true"
481 run "test -f modules/remotebackend/test-suite.log && cat modules/remotebackend/test-suite.log || true"
482
483 #DNSName - make -k -j3 -C pdns $(grep '(EXEEXT):' pdns/Makefile | cut -f1 -d\$ | grep -E -v 'dnsdist|calidns')
8695de46 484 run 'make -k -j3 -C pdns $(grep "(EXEEXT):" pdns/Makefile | cut -f1 -d\$)'
bf6096f5
PL
485
486 run "cd pdns"
487 run "./pdnsutil test-algorithms"
488 run "cd .."
489
490 run "cd regression-tests"
491
b6072c01
KM
492 #travis unbound is too old for this test (unbound 1.6.0 required)
493 run "touch tests/ent-asterisk/fail.nsec"
494
bf6096f5
PL
495 run "./timestamp ./start-test-stop 5300 bind-both"
496 run "./timestamp ./start-test-stop 5300 bind-dnssec-both"
497 run "./timestamp ./start-test-stop 5300 bind-dnssec-nsec3-both"
9955ccf6 498 # run "./timestamp ./start-test-stop 5300 bind-dnssec-nsec3-optout-both"
bf6096f5
PL
499 run "./timestamp ./start-test-stop 5300 bind-dnssec-nsec3-narrow"
500 run "./timestamp ./start-test-stop 5300 bind-hybrid-nsec3"
501 #ecdsa - ./timestamp ./start-test-stop 5300 bind-dnssec-pkcs11
502
bf6096f5
PL
503 run "./timestamp ./start-test-stop 5300 geoip"
504 run "./timestamp ./start-test-stop 5300 geoip-nsec3-narrow"
effa40ed
AT
505 run "export geoipdatabase=../modules/geoipbackend/regression-tests/GeoLiteCity.mmdb"
506 run "./timestamp ./start-test-stop 5300 geoip"
bf6096f5
PL
507
508 run "./timestamp ./start-test-stop 5300 gmysql-nodnssec-both"
509 run "./timestamp ./start-test-stop 5300 gmysql-both"
510 run "./timestamp ./start-test-stop 5300 gmysql-nsec3-both"
9955ccf6 511 # run "./timestamp ./start-test-stop 5300 gmysql-nsec3-optout-both"
bf6096f5
PL
512 run "./timestamp ./start-test-stop 5300 gmysql-nsec3-narrow"
513
23743d14
PD
514 run "sudo perl -i -pe 's/\]/]\nThreading=1/g' /etc/odbcinst.ini"
515 run "cat /etc/odbcinst.ini"
bf6096f5 516 run "export GODBC_SQLITE3_DSN=pdns-sqlite3-1"
0d756465
PD
517 # this test is unstable on the library versions in the Travis trusty image
518 # run "./timestamp ./start-test-stop 5300 godbc_sqlite3-nsec3"
bf6096f5
PL
519
520 run "./timestamp ./start-test-stop 5300 gpgsql-nodnssec-both"
521 run "./timestamp ./start-test-stop 5300 gpgsql-both"
522 run "./timestamp ./start-test-stop 5300 gpgsql-nsec3-both"
ce4cbc87
OM
523 #run "./timestamp ./start-test-stop 5300 gpgsql-nsec3-optout-both"
524 #run "./timestamp ./start-test-stop 5300 gpgsql-nsec3-narrow"
bf6096f5
PL
525
526 run "./timestamp ./start-test-stop 5300 gsqlite3-nodnssec-both"
527 run "./timestamp ./start-test-stop 5300 gsqlite3-both"
528 run "./timestamp ./start-test-stop 5300 gsqlite3-nsec3-both"
9955ccf6 529 # run "./timestamp ./start-test-stop 5300 gsqlite3-nsec3-optout-both"
bf6096f5
PL
530 run "./timestamp ./start-test-stop 5300 gsqlite3-nsec3-narrow"
531
bf6096f5
PL
532 run "./timestamp ./start-test-stop 5300 remotebackend-pipe"
533 run "./timestamp ./start-test-stop 5300 remotebackend-pipe-dnssec"
ce4cbc87 534 #run "./timestamp ./start-test-stop 5300 remotebackend-unix"
bf6096f5 535 run "./timestamp ./start-test-stop 5300 remotebackend-unix-dnssec"
ce4cbc87 536 #run "./timestamp ./start-test-stop 5300 remotebackend-http"
bf6096f5 537 run "./timestamp ./start-test-stop 5300 remotebackend-http-dnssec"
ce4cbc87 538 #run "./timestamp ./start-test-stop 5300 remotebackend-zeromq"
bf6096f5
PL
539 run "./timestamp ./start-test-stop 5300 remotebackend-zeromq-dnssec"
540
541 run "./timestamp ./start-test-stop 5300 tinydns"
b6072c01 542
42f1f726 543 run "./timestamp ./start-test-stop 5300 lmdb-nodnssec-both"
544 run "./timestamp ./start-test-stop 5300 lmdb-both"
545 run "./timestamp ./start-test-stop 5300 lmdb-nsec3-both"
9955ccf6 546 # run "./timestamp ./start-test-stop 5300 lmdb-nsec3-optout-both"
42f1f726 547
b6072c01
KM
548 run "rm tests/ent-asterisk/fail.nsec"
549
50de1cba 550 run "cd ../regression-tests.rootzone"
bf6096f5
PL
551 run "./timestamp ./start-test-stop 5300 bind-both"
552 run "./timestamp ./start-test-stop 5300 bind-dnssec-both"
553 run "./timestamp ./start-test-stop 5300 bind-dnssec-nsec3-both"
9955ccf6 554 # run "./timestamp ./start-test-stop 5300 bind-dnssec-nsec3-optout-both"
bf6096f5
PL
555 run "./timestamp ./start-test-stop 5300 bind-dnssec-nsec3-narrow"
556 run "./timestamp ./start-test-stop 5300 bind-hybrid-nsec3"
557
558 run "./timestamp ./start-test-stop 5300 gmysql-nodnssec-both"
559 run "./timestamp ./start-test-stop 5300 gmysql-both"
560 run "./timestamp ./start-test-stop 5300 gmysql-nsec3-both"
9955ccf6 561 # run "./timestamp ./start-test-stop 5300 gmysql-nsec3-optout-both"
bf6096f5
PL
562 run "./timestamp ./start-test-stop 5300 gmysql-nsec3-narrow"
563
564 run "./timestamp ./start-test-stop 5300 gpgsql-nodnssec-both"
565 run "./timestamp ./start-test-stop 5300 gpgsql-both"
566 run "./timestamp ./start-test-stop 5300 gpgsql-nsec3-both"
9955ccf6 567 # run "./timestamp ./start-test-stop 5300 gpgsql-nsec3-optout-both"
bf6096f5
PL
568 run "./timestamp ./start-test-stop 5300 gpgsql-nsec3-narrow"
569
570 run "./timestamp ./start-test-stop 5300 gsqlite3-nodnssec-both"
571 run "./timestamp ./start-test-stop 5300 gsqlite3-both"
572 run "./timestamp ./start-test-stop 5300 gsqlite3-nsec3-both"
9955ccf6 573 # run "./timestamp ./start-test-stop 5300 gsqlite3-nsec3-optout-both"
bf6096f5
PL
574 run "./timestamp ./start-test-stop 5300 gsqlite3-nsec3-narrow"
575
6f09dd5d
AT
576 run "./timestamp ./start-test-stop 5300 lua2"
577 run "./timestamp ./start-test-stop 5300 lua2-dnssec"
578
42f1f726 579 run "./timestamp ./start-test-stop 5300 lmdb-both"
580 run "./timestamp ./start-test-stop 5300 lmdb-nodnssec-both"
581 run "./timestamp ./start-test-stop 5300 lmdb-nsec3-both"
9955ccf6 582 # run "./timestamp ./start-test-stop 5300 lmdb-nsec3-optout-both"
42f1f726 583
bf6096f5
PL
584 run "cd .."
585
586 ### api ###
587 run "cd regression-tests.api"
588 run "./runtests authoritative"
589 run "cd .."
590
591 ### no backend tests ###
592 run "cd regression-tests.nobackend/"
593 run "./runtests"
594 run "test ! -s ./failed_tests"
595 run "cd .."
596
2b3cdcc0
CHB
597 ### Lua rec tests ###
598 run "cd regression-tests.auth-py"
005d7627 599 run "./runtests -v || (cat ./configs/auth/pdns.log; false)"
2b3cdcc0
CHB
600 run "cd .."
601
bf6096f5
PL
602 run "rm -f regression-tests/zones/*-slave.*" #FIXME
603}
604
eb353acc
RG
605test_ixfrdist(){
606 run "cd regression-tests.ixfrdist"
607 run "IXFRDISTBIN=${TRAVIS_BUILD_DIR}/pdns/ixfrdist ./runtests -v || (cat ixfrdist.log; false)"
608 run "cd .."
609}
610
bf6096f5
PL
611test_recursor() {
612 export PDNSRECURSOR="${PDNS_RECURSOR_DIR}/sbin/pdns_recursor"
bf6096f5
PL
613 export DNSBULKTEST="/usr/bin/dnsbulktest"
614 export RECCONTROL="${PDNS_RECURSOR_DIR}/bin/rec_control"
35d883a8 615 run "cd pdns/recursordist/pdns-recursor-*"
6aac061c 616 run "make -j 3 check || (cat test-suite.log; false)"
35d883a8 617 run "cd ${TRAVIS_BUILD_DIR}"
7568b07d
PL
618 run "./build-scripts/test-recursor"
619 export RECURSOR="${PDNSRECURSOR}"
bf6096f5 620 run "cd regression-tests"
280c2f89 621 run "THRESHOLD=50 TRACE=no ./timestamp ./recursor-test 5300 50000"
bf6096f5 622 run "cd .."
7568b07d 623
bf6096f5
PL
624 run "cd regression-tests.api"
625 run "./runtests recursor"
626 run "cd .."
627}
628
bf6096f5
PL
629test_dnsdist(){
630 run "cd regression-tests.dnsdist"
683bf211
RG
631 export SKIP_DOH_TESTS=1
632 export SKIP_PROMETHEUS_TESTS=1
633 run "DNSDISTBIN=$HOME/dnsdist/bin/dnsdist ./runtests -v --ignore-files='(?:^\.|^_,|^setup\.py$|^test_TLSSessionResumption\.py$)'"
bf6096f5
PL
634 run "rm -f ./DNSCryptResolver.cert ./DNSCryptResolver.key"
635 run "cd .."
636}
637
638test_repo(){
639 run "git status"
640 run "git status | grep -q clean"
641}
642
643# global build requirements
644run "sudo apt-get -qq --no-install-recommends install \
645 libboost-all-dev \
3a086960 646 libluajit-5.1-dev \
bf6096f5 647 libedit-dev \
0a4a38ab 648 libprotobuf-dev \
0a4a38ab 649 protobuf-compiler"
bf6096f5
PL
650
651run "cd .."
652run "wget http://ppa.launchpad.net/kalon33/gamesgiroll/ubuntu/pool/main/libs/libsodium/libsodium-dev_1.0.3-1~ppa14.04+1_amd64.deb"
653run "wget http://ppa.launchpad.net/kalon33/gamesgiroll/ubuntu/pool/main/libs/libsodium/libsodium13_1.0.3-1~ppa14.04+1_amd64.deb"
654run "sudo dpkg -i libsodium-dev_1.0.3-1~ppa14.04+1_amd64.deb libsodium13_1.0.3-1~ppa14.04+1_amd64.deb"
1e0253ca 655run "cd ${TRAVIS_BUILD_DIR}"
bf6096f5 656
e9ccf0f7 657compilerflags="-O1 -Werror=vla"
040e40bb 658sanitizerflags=""
e9ccf0f7
PD
659if [ "$CC" = "clang" ]
660then
661 compilerflags="$compilerflags -Werror=string-plus-int"
040e40bb
RG
662 if [ "${PDNS_BUILD_PRODUCT}" = "recursor" ]; then
663 sanitizerflags="${sanitizerflags} --enable-asan"
664 elif [ "${PDNS_BUILD_PRODUCT}" = "dnsdist" ]; then
665 sanitizerflags="${sanitizerflags} --enable-asan --enable-ubsan"
eb353acc 666 elif [ "${PDNS_BUILD_PRODUCT}" = "ixfrdist" ]; then
478ca077 667 sanitizerflags="${sanitizerflags} --enable-asan --enable-ubsan"
040e40bb 668 fi
e9ccf0f7
PD
669fi
670export CFLAGS=$compilerflags
671export CXXFLAGS=$compilerflags
040e40bb 672export sanitizerflags
478ca077
RG
673# We need a suppression for UndefinedBehaviorSanitizer with ixfrdist,
674# because of a vptr bug fixed in Boost 1.57.0:
675# https://github.com/boostorg/any/commit/c92ab03ab35775b6aab30f6cdc3d95b7dd8fc5c6
676export UBSAN_OPTIONS="print_stacktrace=1:halt_on_error=1:suppressions=${TRAVIS_BUILD_DIR}/build-scripts/UBSan.supp"
e9ccf0f7 677
bf6096f5
PL
678install_$PDNS_BUILD_PRODUCT
679
680build_$PDNS_BUILD_PRODUCT
681
682test_$PDNS_BUILD_PRODUCT
683
d2a4a399 684if [ $PDNS_BUILD_PRODUCT == "auth" ]; then
bf6096f5
PL
685 test_repo
686fi