BIND 10 trac1454, updated. 6f19208c5954d030c0b9795fe399c4ef1e11c8c4 [1454] Make sure the _listen_socket is set
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Jan 20 09:31:38 UTC 2012
The branch, trac1454 has been updated
via 6f19208c5954d030c0b9795fe399c4ef1e11c8c4 (commit)
from fb20b8bb0c4ed9445a2a97504fdfd201ff15df38 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 6f19208c5954d030c0b9795fe399c4ef1e11c8c4
Author: Michal 'vorner' Vaner <michal.vaner at nic.cz>
Date: Fri Jan 20 10:31:17 2012 +0100
[1454] Make sure the _listen_socket is set
-----------------------------------------------------------------------
Summary of changes:
src/bin/ddns/ddns.py.in | 15 +++++++++++++++
src/bin/ddns/tests/ddns_test.py | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+), 0 deletions(-)
-----------------------------------------------------------------------
diff --git a/src/bin/ddns/ddns.py.in b/src/bin/ddns/ddns.py.in
index 7546ddf..7e855f8 100755
--- a/src/bin/ddns/ddns.py.in
+++ b/src/bin/ddns/ddns.py.in
@@ -31,13 +31,16 @@ from isc.log_messages.ddns_messages import *
from optparse import OptionParser, OptionValueError
import os
+import os.path
import signal
+import socket
isc.log.init("b10-ddns")
logger = isc.log.Logger("ddns")
TRACE_BASIC = logger.DBGLVL_TRACE_BASIC
DATA_PATH = bind10_config.DATA_PATH
+SOCKET_FILE = DATA_PATH + '/ddns_socket'
if "B10_FROM_SOURCE" in os.environ:
DATA_PATH = os.environ['B10_FROM_SOURCE'] + "/src/bin/ddns"
SPECFILE_LOCATION = DATA_PATH + "/ddns.spec"
@@ -69,6 +72,13 @@ class DDNSSession:
'''Initialize a DDNS Session'''
pass
+def clear_socket():
+ '''
+ Removes the socket file, if it exists.
+ '''
+ if os.path.exists(SOCKET_FILE):
+ os.remove(SOCKET_FILE)
+
class DDNSServer:
def __init__(self, cc_session=None):
'''
@@ -91,6 +101,10 @@ class DDNSServer:
self._shutdown = False
# List of the session receivers where we get the requests
self._socksession_receivers = {}
+ clear_socket()
+ self._listen_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ self._listen_socket.bind(SOCKET_FILE)
+ self._listen_socket.listen(16)
def config_handler(self, new_config):
'''Update config data.'''
@@ -270,6 +284,7 @@ def main(ddns_server=None):
logger.error(DDNS_CC_SESSION_TIMEOUT_ERROR)
except Exception as e:
logger.error(DDNS_UNCAUGHT_EXCEPTION, type(e).__name__, str(e))
+ clear_socket()
if '__main__' == __name__:
main()
diff --git a/src/bin/ddns/tests/ddns_test.py b/src/bin/ddns/tests/ddns_test.py
index 6dd05e3..daa8a38 100755
--- a/src/bin/ddns/tests/ddns_test.py
+++ b/src/bin/ddns/tests/ddns_test.py
@@ -22,6 +22,8 @@ import isc.config
import select
import errno
import isc.util.io.socketsession
+import socket
+import os.path
class FakeSocket:
"""
@@ -112,6 +114,28 @@ class TestDDNSServer(unittest.TestCase):
ddns.isc.util.io.socketsession.SocketSessionReceiver = \
isc.util.io.socketsession.SocketSessionReceiver
+ def test_listen(self):
+ '''
+ Test the old socket file is removed (if any) and a new socket
+ is created when the ddns server is created.
+ '''
+ # Make sure the socket does not exist now
+ ddns.clear_socket()
+ # Hook the call for clearing the socket
+ orig_clear = ddns.clear_socket
+ ddns.clear_socket = self.__hook
+ # Create the server
+ ddnss = ddns.DDNSServer(MyCCSession())
+ ddns.clear_socket = orig_clear
+ # The socket is created
+ self.assertTrue(os.path.exists(ddns.SOCKET_FILE))
+ self.assertTrue(isinstance(ddnss._listen_socket, socket.socket))
+ # And deletion of the socket was requested
+ self.assertIsNone(self.__hook_called)
+ # Now make sure the clear_socket really works
+ ddns.clear_socket()
+ self.assertFalse(os.path.exists(ddns.SOCKET_FILE))
+
def test_config_handler(self):
# Config handler does not do anything yet, but should at least
# return 'ok' for now.
@@ -299,11 +323,21 @@ class TestDDNSServer(unittest.TestCase):
class TestMain(unittest.TestCase):
def setUp(self):
self._server = MyDDNSServer()
+ self.__orig_clear = ddns.clear_socket
+ ddns.clear_socket = self.__clear_socket
+ self.__clear_called = False
+
+ def tearDown(self):
+ ddns.clear_socket = self.__orig_clear
def test_main(self):
self.assertFalse(self._server.run_called)
ddns.main(self._server)
self.assertTrue(self._server.run_called)
+ self.assertTrue(self.__clear_called)
+
+ def __clear_socket(self):
+ self.__clear_called = True
def check_exception(self, ex):
'''Common test sequence to see if the given exception is caused.
More information about the bind10-changes
mailing list