From c1a6d81157c72c7fdf344403bb20f68043e805ac Mon Sep 17 00:00:00 2001 From: Justin Riley Date: Tue, 2 Aug 2016 13:21:42 -0400 Subject: [PATCH] add daemon method to DynamicResolver Keeps main process up indefinitely as long as DynamicResolver UDP socketserver is up --- onedns/resolver.py | 10 ++++++++++ onedns/tests/test_dynamicresolver.py | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/onedns/resolver.py b/onedns/resolver.py index efe892b..94707d4 100644 --- a/onedns/resolver.py +++ b/onedns/resolver.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from __future__ import print_function +import time import dnslib from dnslib import server @@ -100,3 +101,12 @@ class DynamicResolver(server.BaseResolver): if srv: srv.stop() srv.server.socket.close() + + def daemon(self, *args, **kwargs): + testing = kwargs.pop('testing', False) + if self._udp_server is None or not self._udp_server.isAlive(): + self.start(*args, **kwargs) + while self._udp_server.isAlive(): + time.sleep(1) + if testing: + break diff --git a/onedns/tests/test_dynamicresolver.py b/onedns/tests/test_dynamicresolver.py index d73480b..b64a5a8 100644 --- a/onedns/tests/test_dynamicresolver.py +++ b/onedns/tests/test_dynamicresolver.py @@ -49,3 +49,9 @@ def test_get_fqdn(dns, name, ip): dns.add_host(name, ip) assert dns.zone[0][0].label[0] == name.split('.')[0] assert '.'.join(dns.zone[0][0].label[1:]) == conftest.DOMAIN + + +def test_daemon(dns): + dns.close() + dns.daemon(dns_address=conftest.INTERFACE, dns_port=conftest.PORT, + tcp=True, testing=True)