paths:
- pdns-auth
- test-auth-regress-odbc-sqlite3:
- resource_class: small
-
- docker:
- - image: debian:buster
- auth:
- username: powerdnsreadonly
- password: $DOCKERHUB_PASSWORD
- environment:
- UBSAN_OPTIONS: 'print_stacktrace=1:halt_on_error=1'
- ASAN_OPTIONS: detect_leaks=0
- steps:
- - auth-regress-setup
- - run:
- name: Configure ODBC for sqlite
- command: |
- cat >> ~/.odbc.ini \<<- __EOF__
- [pdns-sqlite3-1]
- Driver = SQLite3
- Database = ${PWD}/regression-tests/pdns.sqlite3
- [pdns-sqlite3-2]
- Driver = SQLite3
- Database = ${PWD}/regression-tests/pdns.sqlite32
- __EOF__
- - run:
- name: Install ODBC deps
- command: |
- apt-get install -qq -y \
- unixodbc \
- libsqliteodbc
- - run:
- name: Set up sqlite3 odbc testing
- command: echo 'export GODBC_SQLITE3_DSN=pdns-sqlite3-1' > ./vars
- workdir: ~/project/regression-tests
- - auth-regress:
- context: godbc_sqlite3-nsec3
- doroot: false # Broken at the moment
-
- test-auth-regress-odbc-mssql:
- docker:
- - image: debian:buster
- auth:
- username: powerdnsreadonly
- password: $DOCKERHUB_PASSWORD
- environment:
- UBSAN_OPTIONS: 'print_stacktrace=1:halt_on_error=1'
- ASAN_OPTIONS: detect_leaks=0
- - image: mcr.microsoft.com/mssql/server:2017-GA-ubuntu
- environment:
- - ACCEPT_EULA: Y
- - SA_PASSWORD: 'SAsa12%%'
- steps:
- - auth-regress-setup
- - run:
- name: Install ODBC deps
- command: |
- apt-get install -qq -y \
- freetds-bin \
- tdsodbc \
- unixodbc
- - run:
- name: set up mssql odbc
- command: |
- cat >> ~/.odbc.ini \<<- __EOF__
- [pdns-mssql-docker]
- Driver=FreeTDS
- Trace=No
- Server=127.0.0.1
- Port=1433
- Database=pdns
- TDS_Version=7.1
- [pdns-mssql-docker-nodb]
- Driver=FreeTDS
- Trace=No
- Server=127.0.0.1
- Port=1433
- TDS_Version=7.1
- __EOF__
- - run:
- command: cat /usr/share/tdsodbc/odbcinst.ini <(echo Threading=1) >> /etc/odbcinst.ini
- - run:
- name: create database
- command: echo 'create database pdns' | isql -v pdns-mssql-docker-nodb sa SAsa12%%
- - run:
- name: Set up mssql odbc testing
- command: echo 'export GODBC_MSSQL_PASSWORD=SAsa12%% GODBC_MSSQL_USERNAME=sa GODBC_MSSQL_DSN=pdns-mssql-docker' > ./vars
- workdir: ~/project/regression-tests
- - auth-regress:
- context: godbc_mssql-nodnssec
- skip: 8bit-txt-unescaped
- - auth-regress:
- context: godbc_mssql
- skip: 8bit-txt-unescaped
- - auth-regress:
- context: godbc_mssql-nsec3
- skip: 8bit-txt-unescaped
- - auth-regress:
- context: godbc_mssql-nsec3-optout
- skip: 8bit-txt-unescaped
- - auth-regress:
- context: godbc_mssql-nsec3-narrow
- skip: 8bit-txt-unescaped
-
test-auth-regress-bind:
resource_class: small
- build-auth:
requires:
- checkout
- - test-auth-regress-odbc-sqlite3:
- requires:
- - build-auth
- - test-auth-regress-odbc-mssql:
- requires:
- - build-auth
- test-auth-regress-geoip:
requires:
- build-auth
geoip=[],
lua2=[],
tinydns=[],
- authpy=[]
+ authpy=[],
+ godbc_sqlite3=['libsqliteodbc'],
+ godbc_mssql=['freetds-bin','tdsodbc']
)
@task(help={'backend': 'Backend to install test deps for, e.g. gsqlite3; can be repeated'}, iterable=['backend'], optional=['backend'])
backend_regress_tests = dict(
bind = [
- 'bind-both',
- 'bind-dnssec-both',
- 'bind-dnssec-nsec3-both',
- 'bind-dnssec-nsec3-optout-both',
- 'bind-dnssec-nsec3-narrow',
- # FIXME 'bind-dnssec-pkcs11'
+ 'bind-both',
+ 'bind-dnssec-both',
+ 'bind-dnssec-nsec3-both',
+ 'bind-dnssec-nsec3-optout-both',
+ 'bind-dnssec-nsec3-narrow',
+ # FIXME 'bind-dnssec-pkcs11'
],
geoip = [
- 'geoip',
- 'geoip-nsec3-narrow'
- # FIXME: also run this with the mmdb we ship
- ],
- lua2 = [
- 'lua2',
- 'lua2-dnssec'
- ],
- tinydns = [
- 'tinydns'
+ 'geoip',
+ 'geoip-nsec3-narrow'
+ # FIXME: also run this with the mmdb we ship
],
+ lua2 = ['lua2', 'lua2-dnssec'],
+ tinydns = ['tinydns'],
remote = [
- 'remotebackend-pipe',
- 'remotebackend-unix',
- 'remotebackend-http',
- 'remotebackend-zeromq',
- 'remotebackend-pipe-dnssec',
- 'remotebackend-unix-dnssec',
- 'remotebackend-http-dnssec',
- 'remotebackend-zeromq-dnssec'
+ 'remotebackend-pipe',
+ 'remotebackend-unix',
+ 'remotebackend-http',
+ 'remotebackend-zeromq',
+ 'remotebackend-pipe-dnssec',
+ 'remotebackend-unix-dnssec',
+ 'remotebackend-http-dnssec',
+ 'remotebackend-zeromq-dnssec'
],
lmdb = [
- 'lmdb-nodnssec-both',
- 'lmdb-both',
- 'lmdb-nsec3-both',
- 'lmdb-nsec3-optout-both',
- 'lmdb-nsec3-narrow'
+ 'lmdb-nodnssec-both',
+ 'lmdb-both',
+ 'lmdb-nsec3-both',
+ 'lmdb-nsec3-optout-both',
+ 'lmdb-nsec3-narrow'
+ ],
+ gmysql = [
+ 'gmysql',
+ 'gmysql-nodnssec-both',
+ 'gmysql-nsec3-both',
+ 'gmysql-nsec3-optout-both',
+ 'gmysql-nsec3-narrow',
+ 'gmysql_sp-both'
+ ],
+ gpgsql = [
+ 'gpgsql',
+ 'gpgsql-nodnssec-both',
+ 'gpgsql-nsec3-both',
+ 'gpgsql-nsec3-optout-both',
+ 'gpgsql-nsec3-narrow',
+ 'gpgsql_sp-both'
+ ],
+ gsqlite3 = [
+ 'gsqlite3',
+ 'gsqlite3-nodnssec-both',
+ 'gsqlite3-nsec3-both',
+ 'gsqlite3-nsec3-optout-both',
+ 'gsqlite3-nsec3-narrow'
+ ],
+ godbc_sqlite3 = ['godbc_sqlite3-nodnssec'],
+ godbc_mssql = [
+ 'godbc_mssql',
+ 'godbc_mssql-nodnssec',
+ 'godbc_mssql-nsec3',
+ 'godbc_mssql-nsec3-optout',
+ 'godbc_mssql-nsec3-narrow'
],
- gmysql = ['gmysql', 'gmysql-nodnssec-both', 'gmysql-nsec3-both', 'gmysql-nsec3-optout-both', 'gmysql-nsec3-narrow', 'gmysql_sp-both'],
- gpgsql = ['gpgsql', 'gpgsql-nodnssec-both', 'gpgsql-nsec3-both', 'gpgsql-nsec3-optout-both', 'gpgsql-nsec3-narrow', 'gpgsql_sp-both'],
- gsqlite3 = ['gsqlite3', 'gsqlite3-nodnssec-both', 'gsqlite3-nsec3-both', 'gsqlite3-nsec3-optout-both', 'gsqlite3-nsec3-narrow'],
)
+godbc_mssql_credentials = {"username": "sa", "password": "SAsa12%%"}
+
+godbc_config = '''
+[pdns-mssql-docker]
+Driver=FreeTDS
+Trace=No
+Server=127.0.0.1
+Port=1433
+Database=pdns
+TDS_Version=7.1
+
+[pdns-mssql-docker-nodb]
+Driver=FreeTDS
+Trace=No
+Server=127.0.0.1
+Port=1433
+TDS_Version=7.1
+
+[pdns-sqlite3-1]
+Driver = SQLite3
+Database = pdns.sqlite3
+
+[pdns-sqlite3-2]
+Driver = SQLite3
+Database = pdns.sqlite32
+'''
+
+def setup_godbc_mssql(c):
+ with open(os.path.expanduser("~/.odbc.ini"), "a") as f:
+ f.write(godbc_config)
+ c.sudo('sh -c \'echo "Threading=1" | cat /usr/share/tdsodbc/odbcinst.ini - | tee -a /etc/odbcinst.ini\'')
+ c.sudo('sed -i "s/libtdsodbc.so/\/usr\/lib\/x86_64-linux-gnu\/odbc\/libtdsodbc.so/g" /etc/odbcinst.ini')
+ c.run(f'echo "create database pdns" | isql -v pdns-mssql-docker-nodb {godbc_mssql_credentials["username"]} {godbc_mssql_credentials["password"]}')
+ # FIXME: Skip 8bit-txt-unescaped test
+ c.run('touch ${PWD}/regression-tests/tests/8bit-txt-unescaped/skip')
+
+def setup_godbc_sqlite3(c):
+ with open(os.path.expanduser("~/.odbc.ini"), "a") as f:
+ f.write(godbc_config)
+ c.sudo('sed -i "s/libsqlite3odbc.so/\/usr\/lib\/x86_64-linux-gnu\/odbc\/libsqlite3odbc.so/g" /etc/odbcinst.ini')
+
@task
def test_auth_backend(c, backend):
+ pdns_auth_env_vars = 'PDNS=/opt/pdns-auth/sbin/pdns_server PDNS2=/opt/pdns-auth/sbin/pdns_server SDIG=/opt/pdns-auth/bin/sdig NOTIFY=/opt/pdns-auth/bin/pdns_notify NSEC3DIG=/opt/pdns-auth/bin/nsec3dig SAXFR=/opt/pdns-auth/bin/saxfr ZONE2SQL=/opt/pdns-auth/bin/zone2sql ZONE2LDAP=/opt/pdns-auth/bin/zone2ldap ZONE2JSON=/opt/pdns-auth/bin/zone2json PDNSUTIL=/opt/pdns-auth/bin/pdnsutil PDNSCONTROL=/opt/pdns-auth/bin/pdns_control PDNSSERVER=/opt/pdns-auth/sbin/pdns_server SDIG=/opt/pdns-auth/bin/sdig GMYSQLHOST=127.0.0.1 GMYSQL2HOST=127.0.0.1 MYSQL_HOST="127.0.0.1" PGHOST="127.0.0.1" PGPORT="5432"'
+
if backend == 'remote':
ci_auth_install_remotebackend_test_deps(c)
if backend == 'authpy':
with c.cd('regression-tests.auth-py'):
- c.run(f'PDNS=/opt/pdns-auth/sbin/pdns_server PDNS2=/opt/pdns-auth/sbin/pdns_server SDIG=/opt/pdns-auth/bin/sdig NOTIFY=/opt/pdns-auth/bin/pdns_notify NSEC3DIG=/opt/pdns-auth/bin/nsec3dig SAXFR=/opt/pdns-auth/bin/saxfr ZONE2SQL=/opt/pdns-auth/bin/zone2sql ZONE2LDAP=/opt/pdns-auth/bin/zone2ldap ZONE2JSON=/opt/pdns-auth/bin/zone2json PDNSUTIL=/opt/pdns-auth/bin/pdnsutil PDNSCONTROL=/opt/pdns-auth/bin/pdns_control PDNSSERVER=/opt/pdns-auth/sbin/pdns_server SDIG=/opt/pdns-auth/bin/sdig GMYSQLHOST=127.0.0.1 GMYSQL2HOST=127.0.0.1 MYSQL_HOST="127.0.0.1" PGHOST="127.0.0.1" PGPORT="5432" WITHKERBEROS=YES ./runtests')
+ c.run(f'{pdns_auth_env_vars} WITHKERBEROS=YES ./runtests')
+ return
+
+ if backend == 'godbc_sqlite3':
+ setup_godbc_sqlite3(c)
+ with c.cd('regression-tests'):
+ for variant in backend_regress_tests[backend]:
+ c.run(f'{pdns_auth_env_vars} GODBC_SQLITE3_DSN=pdns-sqlite3-1 ./start-test-stop 5300 {variant}')
+ return
+
+ if backend == 'godbc_mssql':
+ setup_godbc_mssql(c)
+ with c.cd('regression-tests'):
+ for variant in backend_regress_tests[backend]:
+ c.run(f'{pdns_auth_env_vars} GODBC_MSSQL_PASSWORD={godbc_mssql_credentials["password"]} GODBC_MSSQL_USERNAME={godbc_mssql_credentials["username"]} GODBC_MSSQL_DSN=pdns-mssql-docker GODBC_MSSQL2_PASSWORD={godbc_mssql_credentials["password"]} GODBC_MSSQL2_USERNAME={godbc_mssql_credentials["username"]} GODBC_MSSQL2_DSN=pdns-mssql-docker ./start-test-stop 5300 {variant}')
return
with c.cd('regression-tests'):
if backend == 'lua2':
c.run('touch trustedkeys') # avoid silly error during cleanup
for variant in backend_regress_tests[backend]:
- # FIXME this long line is terrible
- c.run(f'PDNS=/opt/pdns-auth/sbin/pdns_server PDNS2=/opt/pdns-auth/sbin/pdns_server SDIG=/opt/pdns-auth/bin/sdig NOTIFY=/opt/pdns-auth/bin/pdns_notify NSEC3DIG=/opt/pdns-auth/bin/nsec3dig SAXFR=/opt/pdns-auth/bin/saxfr ZONE2SQL=/opt/pdns-auth/bin/zone2sql ZONE2LDAP=/opt/pdns-auth/bin/zone2ldap ZONE2JSON=/opt/pdns-auth/bin/zone2json PDNSUTIL=/opt/pdns-auth/bin/pdnsutil PDNSCONTROL=/opt/pdns-auth/bin/pdns_control PDNSSERVER=/opt/pdns-auth/sbin/pdns_server SDIG=/opt/pdns-auth/bin/sdig GMYSQLHOST=127.0.0.1 GMYSQL2HOST=127.0.0.1 MYSQL_HOST="127.0.0.1" PGHOST="127.0.0.1" PGPORT="5432" ./start-test-stop 5300 {variant}')
+ c.run(f'{pdns_auth_env_vars} ./start-test-stop 5300 {variant}')
if backend == 'gsqlite3':
with c.cd('regression-tests.nobackend'):
- c.run(f'PDNS=/opt/pdns-auth/sbin/pdns_server PDNS2=/opt/pdns-auth/sbin/pdns_server SDIG=/opt/pdns-auth/bin/sdig NOTIFY=/opt/pdns-auth/bin/pdns_notify NSEC3DIG=/opt/pdns-auth/bin/nsec3dig SAXFR=/opt/pdns-auth/bin/saxfr ZONE2SQL=/opt/pdns-auth/bin/zone2sql ZONE2LDAP=/opt/pdns-auth/bin/zone2ldap ZONE2JSON=/opt/pdns-auth/bin/zone2json PDNSUTIL=/opt/pdns-auth/bin/pdnsutil PDNSCONTROL=/opt/pdns-auth/bin/pdns_control PDNSSERVER=/opt/pdns-auth/sbin/pdns_server SDIG=/opt/pdns-auth/bin/sdig GMYSQLHOST=127.0.0.1 GMYSQL2HOST=127.0.0.1 MYSQL_HOST="127.0.0.1" PGHOST="127.0.0.1" PGPORT="5432" ./runtests')
+ c.run(f'{pdns_auth_env_vars} ./runtests')
c.run('/opt/pdns-auth/bin/pdnsutil test-algorithms')
return