Browse Source

[2225] corrected the wrong place to count receive errors of a unix socket

moved the counter from handle_request() to _select_loop() and revised the
related unit test
Naoki Kambe 12 years ago
parent
commit
6f6247afed
2 changed files with 23 additions and 14 deletions
  1. 21 12
      src/bin/xfrout/tests/xfrout_test.py.in
  2. 2 2
      src/bin/xfrout/xfrout.py.in

+ 21 - 12
src/bin/xfrout/tests/xfrout_test.py.in

@@ -1527,16 +1527,20 @@ class DummySocketserverException(DummyBaseSocketserver):
 class TestUnixSockServerForCounter(unittest.TestCase):
 
     def setUp(self):
-        (self.orig_remove_unused_sock_file,
-         self.orig_update_config_data,
-         self.orig_socket_socketpair,
-         self.orig_NoPollMixIn,
-         self.orig_ThreadingUnixStreamServer ) = \
+        ( self.orig_remove_unused_sock_file,
+          self.orig_update_config_data,
+          self.orig_socket_socketpair,
+          self.orig_NoPollMixIn,
+          self.orig_ThreadingUnixStreamServer,
+          self.orig_process_request,
+          self.orig_select ) = \
          ( UnixSockServer._remove_unused_sock_file,
            UnixSockServer.update_config_data,
            xfrout.socket.socketpair,
            xfrout.socketserver_mixin.NoPollMixIn,
-           xfrout.ThreadingUnixStreamServer )
+           xfrout.ThreadingUnixStreamServer,
+           UnixSockServer.process_request,
+           xfrout.select.select )
         UnixSockServer._remove_unused_sock_file = lambda x,y: None
         UnixSockServer.update_config_data = lambda x,y: None
         xfrout.socket.socketpair = \
@@ -1544,7 +1548,8 @@ class TestUnixSockServerForCounter(unittest.TestCase):
         xfrout.socketserver_mixin.NoPollMixIn = DummySocketserver
         xfrout.ThreadingUnixStreamServer = DummySocketserver
         xfrout.super = lambda : DummySocketserver()
-        self.unix = UnixSockServer(None, None, None, None, None)
+        xfrout.select.select = lambda x,y,z: ([None],[None],[None])
+        self.unix = UnixSockServer(None, None, threading.Event(), None, None)
 
     def tearDown(self):
         ( UnixSockServer._remove_unused_sock_file,
@@ -1552,13 +1557,17 @@ class TestUnixSockServerForCounter(unittest.TestCase):
           xfrout.socket.socketpair,
           xfrout.socketserver_mixin.NoPollMixIn,
           xfrout.ThreadingUnixStreamServer,
-          xfrout.super ) = \
+          xfrout.super,
+          UnixSockServer.process_request,
+          xfrout.select.select ) = \
           ( self.orig_remove_unused_sock_file,
             self.orig_update_config_data,
             self.orig_socket_socketpair,
             self.orig_NoPollMixIn,
             self.orig_ThreadingUnixStreamServer,
-            super )
+            super,
+            self.orig_process_request,
+            self.orig_select )
         counter.clear_counters()
 
     def test_open(self):
@@ -1607,10 +1616,10 @@ class TestUnixSockServerForCounter(unittest.TestCase):
         # recverr
         self.assertRaises(isc.cc.data.DataNotFoundError,
                           counter.get_unixsocket_recverr)
-        def raise_socketerror():
+        def raise_socketerror(x,y):
             raise socket.error
-        self.unix.get_request = raise_socketerror
-        self.unix.handle_request()
+        self.unix.process_request = raise_socketerror
+        self.unix._select_loop(None)
         self.assertEqual(counter.get_unixsocket_recverr(), 1)
 
 class TestInitialization(unittest.TestCase):

+ 2 - 2
src/bin/xfrout/xfrout.py.in

@@ -732,8 +732,6 @@ class UnixSockServer(socketserver_mixin.NoPollMixIn,
         try:
             request, client_address = self.get_request()
         except socket.error:
-            # count unixsockets receive errors
-            counter.inc_unixsocket_recverr()
             logger.error(XFROUT_FETCH_REQUEST_ERROR)
             return
         self._select_loop(request)
@@ -769,6 +767,8 @@ class UnixSockServer(socketserver_mixin.NoPollMixIn,
                 if not self.process_request(request_sock):
                     break
             except Exception as pre:
+                # count unixsockets receive errors
+                counter.inc_unixsocket_recverr()
                 logger.error(XFROUT_PROCESS_REQUEST_ERROR, pre)
                 break