From ccfabd0da53dbcd4713550769c9f55e70c68c012 Mon Sep 17 00:00:00 2001 From: Christian Hofstaedtler Date: Sun, 27 Dec 2015 23:49:23 +0100 Subject: [PATCH] API: add cryptokeys test --- regression-tests.api/.gitignore | 9 +++++---- regression-tests.api/runtests.py | 18 ++++++++++++++++-- regression-tests.api/test_Zones.py | 24 ++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/regression-tests.api/.gitignore b/regression-tests.api/.gitignore index 6349768ea4..3277e4715d 100644 --- a/regression-tests.api/.gitignore +++ b/regression-tests.api/.gitignore @@ -4,8 +4,9 @@ /pdns.sqlite3 /*.controlsocket /named.conf +/pdns.conf /*.pyc -acl.conf -acl.list -recursor.conf -rec-conf.d +/acl.conf +/acl.list +/recursor.conf +/rec-conf.d diff --git a/regression-tests.api/runtests.py b/regression-tests.api/runtests.py index 4d3666720f..d77d1d014d 100755 --- a/regression-tests.api/runtests.py +++ b/regression-tests.api/runtests.py @@ -18,6 +18,16 @@ NAMED_CONF_TPL = """ # Generated by runtests.py options { directory "../regression-tests/zones/"; }; zone "example.com" { type master; file "example.com"; }; +zone "powerdnssec.org" { type master; file "powerdnssec.org"; }; +""" + +AUTH_CONF_TPL = """ +# Generated by runtests.py +launch=gsqlite3 +gsqlite3-dnssec=on +gsqlite3-database="""+SQLITE_DB+""" +module-dir=../regression-tests/modules +# """ ACL_LIST_TPL = """ @@ -61,7 +71,7 @@ daemon = sys.argv[1] if daemon == 'authoritative': - # Prepare sqlite DB with a single zone. + # Prepare sqlite DB with some zones. subprocess.check_call(["rm", "-f", SQLITE_DB]) subprocess.check_call(["make", "-C", "../pdns", "zone2sql"]) @@ -78,7 +88,11 @@ if daemon == 'authoritative': tf.seek(0, os.SEEK_SET) # rewind subprocess.check_call(["sqlite3", SQLITE_DB], stdin=tf) - pdnscmd = ("../pdns/pdns_server --daemon=no --local-port=5300 --socket-dir=./ --module-dir=../regression-tests/modules --no-shuffle --launch=gsqlite3 --gsqlite3-dnssec --send-root-referral --dnsupdate=yes --cache-ttl=0 --no-config --gsqlite3-dnssec=on --gsqlite3-database="+SQLITE_DB+" --api=yes --webserver=yes --webserver-port="+WEBPORT+" --webserver-address=127.0.0.1 --webserver-password=something --api-key="+APIKEY).split() + with open('pdns.conf', 'w') as named_conf: + named_conf.write(AUTH_CONF_TPL) + + subprocess.check_call(["../pdns/pdnsutil", "--config-dir=.", "secure-zone", "powerdnssec.org"]) + pdnscmd = ("../pdns/pdns_server --daemon=no --local-port=5300 --socket-dir=./ --no-shuffle --send-root-referral --dnsupdate=yes --cache-ttl=0 --config-dir=. --api=yes --webserver=yes --webserver-port="+WEBPORT+" --webserver-address=127.0.0.1 --webserver-password=something --api-key="+APIKEY).split() else: conf_dir = 'rec-conf.d' diff --git a/regression-tests.api/test_Zones.py b/regression-tests.api/test_Zones.py index 138fca456d..4d23ce333f 100644 --- a/regression-tests.api/test_Zones.py +++ b/regression-tests.api/test_Zones.py @@ -1,6 +1,7 @@ import json import time import unittest +from copy import deepcopy from test_helper import ApiTestCase, unique_zone_name, is_auth, is_recursor, eq_zone_dict, get_db_records @@ -1285,3 +1286,26 @@ class RecursorZones(ApiTestCase): print r.json() # should return zone, SOA self.assertEquals(len(r.json()), 2) + + +@unittest.skipIf(not is_auth(), "Not applicable") +class AuthZoneKeys(ApiTestCase, AuthZonesHelperMixin): + + def test_get_keys(self): + r = self.session.get( + self.url("/api/v1/servers/localhost/zones/powerdnssec.org./cryptokeys")) + self.assert_success_json(r) + keys = r.json() + self.assertGreater(len(keys), 0) + + key0 = deepcopy(keys[0]) + del key0['dnskey'] + expected = { + u'active': True, + u'type': u'Cryptokey', + u'keytype': u'zsk', + u'id': 1} + self.assertEquals(key0, expected) + + keydata = keys[0]['dnskey'].split() + self.assertEqual(len(keydata), 4) -- 2.47.2