[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