[svn] commit: r2640 - in /branches/trac289/src/bin/zonemgr: tests/zonemgr_test.py zonemgr.py.in
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Aug 5 08:28:40 UTC 2010
Author: chenzhengzhang
Date: Thu Aug 5 08:28:39 2010
New Revision: 2640
Log:
add run_timer unittest
Modified:
branches/trac289/src/bin/zonemgr/tests/zonemgr_test.py
branches/trac289/src/bin/zonemgr/zonemgr.py.in
Modified: branches/trac289/src/bin/zonemgr/tests/zonemgr_test.py
==============================================================================
--- branches/trac289/src/bin/zonemgr/tests/zonemgr_test.py (original)
+++ branches/trac289/src/bin/zonemgr/tests/zonemgr_test.py Thu Aug 5 08:28:39 2010
@@ -342,8 +342,27 @@
self.assertTrue(time2 + MAX_TRANSFER_TIMEOUT >= refresh_timeout)
self.assertFalse("notify_master" in self.zoneinfo._zonemgr_refresh_info[ZONE_NAME_CLASS1].keys())
- def test_shutdown(self):
- pass
+ def test_run_timer(self):
+ time1 = time.time()
+ self.zoneinfo._zonemgr_refresh_info = {
+ ("sd.cn.", "IN"):{
+ 'last_refresh_time': time1 - 7200,
+ 'next_refresh_time': time1 - 1,
+ 'zone_soa_rdata': 'a.dns.cn. root.cnnic.cn. 2009073105 7200 3600 2419200 21600',
+ 'zone_state': ZONE_OK}
+ }
+ master_socket, slave_socket = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM)
+ self.zoneinfo._socket = slave_socket
+ # Run timer in daemon thread
+ listener = threading.Thread(target = self.zoneinfo.run_timer, args = ())
+ listener.setDaemon(True)
+ listener.start()
+ slave_socket.close()
+ zone_state = self.zoneinfo._zonemgr_refresh_info[ZONE_NAME_CLASS1]["zone_state"]
+ self.assertTrue("refresh_timeout" in self.zoneinfo._zonemgr_refresh_info[ZONE_NAME_CLASS1].keys())
+ self.assertTrue(zone_state == ZONE_REFRESHING)
+
+ self.assertRaises(ZonemgrException, self.zoneinfo.run_timer)
def tearDown(self):
sys.stdout = self.stdout_backup
@@ -390,7 +409,7 @@
def test_parse_cmd_params(self):
params1 = {"zone_name" : "org.cn", "zone_class" : "IN", "master" : "127.0.0.1"}
- answer1 = ("org.cn", "IN", "127.0.0.1")
+ answer1 = (("org.cn", "IN"), "127.0.0.1")
self.assertEqual(answer1, self.zonemgr._parse_cmd_params(params1, ZONE_NOTIFY_COMMAND))
params2 = {"zone_name" : "org.cn", "zone_class" : "IN"}
answer2 = ("org.cn", "IN")
Modified: branches/trac289/src/bin/zonemgr/zonemgr.py.in
==============================================================================
--- branches/trac289/src/bin/zonemgr/zonemgr.py.in (original)
+++ branches/trac289/src/bin/zonemgr/zonemgr.py.in Thu Aug 5 08:28:39 2010
@@ -67,9 +67,9 @@
ZONE_EXPIRED = 2
# smallest refresh timeout
-LOWERBOUND_REFRESH = 1
+LOWERBOUND_REFRESH = 10
# smallest retry timeout
-LOWERBOUND_RETRY = 1
+LOWERBOUND_RETRY = 5
# max zone transfer timeout
MAX_TRANSFER_TIMEOUT = 14400
@@ -297,18 +297,19 @@
while True:
# Zonemgr has no zone.
if self._zone_mgr_is_empty():
- time.sleep(1) # A better time?
+ time.sleep(LOWERBOUND_RETRY) # A better time?
continue
zone_need_refresh = self._find_need_do_refresh_zone()
# If don't get zone with minimum next refresh time, set timer timeout = LOWERBOUND_REFRESH
if not zone_need_refresh:
- timeout = LOWERBOUND_REFRESH
+ timeout = LOWERBOUND_RETRY
else:
timeout = self._get_zone_next_refresh_time(zone_need_refresh) - self._get_current_time()
if (timeout < 0):
self._do_refresh(zone_need_refresh)
continue
+
""" Wait for the socket notification for a maximum time of timeout
in seconds (as float)."""
@@ -317,20 +318,14 @@
if rlist:
self._socket.recv(32)
except ValueError as e:
- sys.stderr.write("[b10-zonemgr] Socket has been closed\n")
+ raise ZonemgrException("[b10-zonemgr] Socket has been closed\n")
break
except select.error as e:
if e.args[0] == errno.EINTR:
(rlist, wlist, xlist) = ([], [], [])
else:
- sys.stderr.write("[b10-zonemgr] Error with select(): %s\n" % err)
+ raise ZonemgrException("[b10-zonemgr] Error with select(): %s\n" % err)
break
-
-
-def start_timer(zone_refresh_info):
- """Keep track of zone timers"""
- zone_refresh_info.run_timer()
-
class Zonemgr:
@@ -338,8 +333,8 @@
self._setup_session()
self._db_file = self.get_db_file()
# Create socket pair for communicating between main thread and zonemgr timer thread
- self._master_socket, self._slave_scoket = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM)
- self._zone_refresh_info = ZoneMgrRefreshInfo(self._cc, self._db_file, self._slave_scoket)
+ self._master_socket, self._slave_socket = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM)
+ self._zone_refresh_info = ZoneMgrRefreshInfo(self._cc, self._db_file, self._slave_socket)
self._start_zone_refresh_timer()
self._lock = threading.Lock()
@@ -347,8 +342,8 @@
self._verbose = verbose
def _start_zone_refresh_timer(self):
- """Start a new thread to run zonemgr refresh timer"""
- listener = threading.Thread(target = start_timer, args = (self._zone_refresh_info,))
+ """Start a new thread to keep track of zone timers"""
+ listener = threading.Thread(target = self._zone_refresh_info.run_timer, args = ())
listener.setDaemon(True)
listener.start()
@@ -372,7 +367,7 @@
def shutdown(self):
- self._slave_scoket.close()
+ self._slave_socket.close()
self._master_socket.close()
self._shutdown_event.set()
More information about the bind10-changes
mailing list