[svn] commit: r3344 - in /branches/trac216/src/bin/xfrin: tests/xfrin_test.py xfrin.py.in
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Oct 25 09:02:17 UTC 2010
Author: shentingting
Date: Mon Oct 25 09:02:17 2010
New Revision: 3344
Log:
cancel the last change, delete the EALREADY error dealing code
Modified:
branches/trac216/src/bin/xfrin/tests/xfrin_test.py
branches/trac216/src/bin/xfrin/xfrin.py.in
Modified: branches/trac216/src/bin/xfrin/tests/xfrin_test.py
==============================================================================
--- branches/trac216/src/bin/xfrin/tests/xfrin_test.py (original)
+++ branches/trac216/src/bin/xfrin/tests/xfrin_test.py Mon Oct 25 09:02:17 2010
@@ -65,8 +65,7 @@
def check_command(self):
return True
-class MockSession():
- def group_sendmsg(self, arg1, arg2):pass
+class MockSession: pass
class MockXfrin(Xfrin):
# This is a class attribute of a callable object that specifies a non
@@ -128,9 +127,9 @@
self.closed = False
def connect_to_master(self):
- return self._socket
-
- def _select(self, rl, wl, el):
+ return True
+
+ def _select(self):
if self.force_time_out:
return 0
if self.force_close:
@@ -225,10 +224,6 @@
if os.path.exists(TEST_DB_FILE):
os.remove(TEST_DB_FILE)
- def test_connect(self):
- self.assertRaises(Exception, self.conn.connect,
- (TEST_MASTER_IPV4_ADDRESS,53))
-
def test_send(self):
self.conn._socket.close()
self.conn._socket = MockSocket()
@@ -266,20 +261,19 @@
def test_select_readok(self):
self.mock_xfrsockets[0].send(self.conn.mock_test_data)
self.conn._idle_timeout = 3 # timeout shouldn't occur
- self.assertEqual(1, super(MockXfrinConnection, self.conn)._select(\
- [self.conn._socket, self.conn._conn_socket], [], [] ))
+ self.assertEqual(1, super(MockXfrinConnection, self.conn)._select())
self.assertEqual(self.conn.mock_test_data,
self.conn._socket.recv(len(self.conn.mock_test_data)))
def test_select_timeout(self):
self.conn._idle_timeout = 0.1
- self.assertEqual(0, super(MockXfrinConnection, self.conn)._select([], [], []))
+ self.assertEqual(0, super(MockXfrinConnection, self.conn)._select())
def test_select_shutdown(self):
self.conn._idle_timeout = 3 # timeout shouldn't occur
self.conn_sockets[0].send(b"shutdown")
self.assertRaises(XfrinException, super(MockXfrinConnection,
- self.conn)._select, [self.conn._conn_socket], [], [])
+ self.conn)._select)
def test_init_ip6(self):
# This test simply creates a new XfrinConnection object with an
# IPv6 address, tries to bind it to an IPv6 wildcard address/port
Modified: branches/trac216/src/bin/xfrin/xfrin.py.in
==============================================================================
--- branches/trac216/src/bin/xfrin/xfrin.py.in (original)
+++ branches/trac216/src/bin/xfrin/xfrin.py.in Mon Oct 25 09:02:17 2010
@@ -27,7 +27,7 @@
import select
import random
import time
-from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, \
+from errno import EINPROGRESS, EWOULDBLOCK, ECONNRESET, \
ENOTCONN, ESHUTDOWN, EINTR, EISCONN, EBADF, ECONNABORTED, errorcode
from optparse import OptionParser, OptionValueError
@@ -84,7 +84,6 @@
check_soa: when it's true, check soa first before sending xfr query
'''
self._socket = socket.socket(master_addrinfo[0], master_addrinfo[1])
- self._socket.setblocking(0)
self._conn_socket = conn_socket
self._zone_name = zone_name
self._rrclass = rrclass
@@ -93,12 +92,12 @@
self._idle_timeout = idle_timeout
self._verbose = verbose
self._master_address = master_addrinfo[4]
-
- def connect(self,address):
+
+ def connect(self, address):
try:
self._socket.connect(address)
except socket.error as why:
- if why.args[0] in (EINPROGRESS, EALREADY, EWOULDBLOCK):
+ if why.args[0] in (EINPROGRESS, EWOULDBLOCK):
return
else:
raise
@@ -179,23 +178,20 @@
msg.to_wire(render)
header_len = struct.pack('H', socket.htons(render.get_length()))
- if self._select([], [self._socket], []) == 0:
- raise XfrinException('socket is not writable!')
- ret = self._socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
- if ret!=0:
- raise XfrinException("error when writing:" + str(os.strerror(ret)))
-
self._send_data(header_len)
self._send_data(render.get_data())
- def _select(self, rl, wl, el):
+ def _select(self):
'''
This method is a trivial asynchronous I/O routine using select.
- It checks which socket is writable or readable.'''
+ It's extracted from _get_request_response so that we can test the
+ rest of the code without involving actual communication with a remote
+ server.'''
while True:
try:
- (rlist, wlist, elist) = select.select(rl, wl,\
- el, self._idle_timeout)
+ rlist, wlist, elist = select.select([self._socket,
+ self._conn_socket],
+ [], [], self._idle_timeout)
except select.error as err:
if err.args[0] != EINTR:
raise
@@ -207,20 +203,15 @@
raise XfrinException("shutdown xfrin!")
else:
return
- if len(rl):
- return len(rlist)
- return len(wlist)
+ return len(rlist)
def _get_request_response(self, size):
recv_size = 0
data = b''
while recv_size < size:
self._need_recv_size = size - recv_size
- if self._select([self._socket, self._conn_socket], [],[]) == 0:
+ if self._select() == 0:
raise XfrinException('receive data from socket time out.')
- ret = self._socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
- if ret!=0:
- raise XfrinException("error when reading:" + str(os.strerror(ret)))
recvd_data = self.recv(self._need_recv_size)
recvd_size = len(recvd_data)
if recvd_size == 0:
@@ -393,9 +384,9 @@
self._cc_setup()
self._shutdown_flag = 0
self._verbose = verbose
- #self._zones_to_threads: the key is zone name, the value is a thread
+ #self._zones_to_threads:the key is zone name, the value is a thread
#which doing tranfer for this zone.
- #self._conn_sockets_to_threads:the key is socket, the value is a xfr
+ #self._conn_sockets_to_threads:the key is socket, the value is a xfr
#thread. The mian thread uses this socket to communicate to this thread.
self._zones_to_threads = {}
self._conn_sockets_to_threads = {}
More information about the bind10-changes
mailing list