BIND 10 trac547-summarized, updated. 36b32903369f9a3afda93e2537d369d2402a3bfc [trac547] added a note in docstring of the 'get_value' method. this note is about difference from the original method.

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Apr 15 12:27:28 UTC 2011


The branch, trac547-summarized has been updated
       via  36b32903369f9a3afda93e2537d369d2402a3bfc (commit)
       via  bb5efb65cb0114b5bf985fd1588e8b645d4c45aa (commit)
       via  7ae7577211c77f31a9f30be122d245add72d893d (commit)
       via  0eea320309f86b8f1f95bed053078bdcf4c82071 (commit)
       via  8eb1d7a04312f7fa70ee3c986e66b6444a1dfde4 (commit)
       via  99c44efcd64b8262614354faaef2b5abb6fb644e (commit)
       via  af9f4f7fdaf88b906022bb808f44c6e586e702fc (commit)
       via  1ea4834d960f3d5f14ff8cee312448baab72e075 (commit)
       via  f1ac03b8147047bee020fbc019d4969f16c75064 (commit)
       via  4e8ed21d6a2e80e81393e64d808bb07655f42cbf (commit)
       via  5012fabe00f1ebcbd2d67564df325fc69a529b5c (commit)
       via  160b06212023cfce40c1ff6f13c5307c4d4f6e50 (commit)
       via  8541053e6fffaf84127fddd2c0a25d0dcd5c635b (commit)
       via  5e89e6afd429bf91d66f2f70435342fa1de388a4 (commit)
       via  a37c25cdb88ceb49b518d27a324ad7523f936fb2 (commit)
       via  b1610a09098d7019c6701daf77c2b8b98eb03b75 (commit)
       via  04330565df2cc183a92f196772e03b05482046eb (commit)
       via  3437b4fa8efb83ce5395ec159e85b38951e23504 (commit)
       via  4b65b6bdb511b88979d0b1c6f44161c223e1dc9d (commit)
       via  3f6620c5ba918a2a411aca9430fd8ac347e1aeca (commit)
       via  2018011dab54aaff10385ae4905c1a5706997062 (commit)
       via  b751b7e0cc08dca691029169909a54a0bd1e6b45 (commit)
       via  d7cf894e555a8aa8508f695fabac2061822d454d (commit)
       via  41361697fe474af2b511e922c18dc0b211f1344c (commit)
       via  0dc2e2582d63c42847400701a7c3c6b0fb2d6d9b (commit)
      from  f8a702716291db0b289aa211e5adac6fb2790cb7 (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 36b32903369f9a3afda93e2537d369d2402a3bfc
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 21:18:02 2011 +0900

    [trac547] added a note in docstring of the 'get_value' method.
    this note is about difference from the original method.

commit bb5efb65cb0114b5bf985fd1588e8b645d4c45aa
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 20:31:32 2011 +0900

    Revert "[trac547] renamed the method name according to consideration of the meaning of the original class"
    
    This reverts commit 160b06212023cfce40c1ff6f13c5307c4d4f6e50.

commit 7ae7577211c77f31a9f30be122d245add72d893d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 19:50:02 2011 +0900

    [trac547] removed invalid assertions according to removing unnecessary 'group_reply' in StatsHttpd.get_stats_data()

commit 0eea320309f86b8f1f95bed053078bdcf4c82071
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 19:38:38 2011 +0900

    [trac547] added a helpful comment for anyone who has concern about the test case

commit 8eb1d7a04312f7fa70ee3c986e66b6444a1dfde4
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 19:27:24 2011 +0900

    [trac547] removed line feed code in the error message

commit 99c44efcd64b8262614354faaef2b5abb6fb644e
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 19:25:32 2011 +0900

    [trac547] made it exit at status code 1 when an exception is raised in the main routine

commit af9f4f7fdaf88b906022bb808f44c6e586e702fc
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 19:19:11 2011 +0900

    [trac547] removed unnecessary assertion to check number of list because there can be empty list in future

commit 1ea4834d960f3d5f14ff8cee312448baab72e075
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 19:12:36 2011 +0900

    [trac547] removed unneccessary 'group_reply'

commit f1ac03b8147047bee020fbc019d4969f16c75064
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 18:42:07 2011 +0900

    [trac547]
     - added prefix 'fake_' to names of mock-up modules to be apart from builtin modules (socket, select)
     - updated class names according to above changes
     - updated and corrected docstrings
     - added NOTEs for usage into docstrings

commit 4e8ed21d6a2e80e81393e64d808bb07655f42cbf
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 18:25:44 2011 +0900

    [trac547] added docstring

commit 5012fabe00f1ebcbd2d67564df325fc69a529b5c
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 18:15:39 2011 +0900

    [trac547] removed an unused mock-up module

commit 160b06212023cfce40c1ff6f13c5307c4d4f6e50
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 16:49:48 2011 +0900

    [trac547] renamed the method name according to consideration of the meaning of the original class

commit 8541053e6fffaf84127fddd2c0a25d0dcd5c635b
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 16:45:06 2011 +0900

    [trac547] removed an unused argument

commit 5e89e6afd429bf91d66f2f70435342fa1de388a4
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 16:41:45 2011 +0900

    [trac547] renamed test method

commit a37c25cdb88ceb49b518d27a324ad7523f936fb2
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 16:39:57 2011 +0900

    [trac547] added checking internal values for test_config

commit b1610a09098d7019c6701daf77c2b8b98eb03b75
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 16:25:17 2011 +0900

    [trac547] added more successful conditions to test_open_template

commit 04330565df2cc183a92f196772e03b05482046eb
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 16:19:03 2011 +0900

    [trac547]
      - renamed a test method name
      - remove unnecessary self

commit 3437b4fa8efb83ce5395ec159e85b38951e23504
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 16:12:58 2011 +0900

    [trac547] fixed spelling errors

commit 4b65b6bdb511b88979d0b1c6f44161c223e1dc9d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 16:10:18 2011 +0900

    [trac547] use string.find method instead of assertRegexpMatches (Regex wasn't needed there.)

commit 3f6620c5ba918a2a411aca9430fd8ac347e1aeca
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 14:59:34 2011 +0900

    [trac547] add a FIXME comment

commit 2018011dab54aaff10385ae4905c1a5706997062
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 14:46:59 2011 +0900

    [trac547] select.error exception is caught only in the case of EINTR, or in other cases it is just thrown.

commit b751b7e0cc08dca691029169909a54a0bd1e6b45
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 14:09:27 2011 +0900

    [trac547] removed unnecessary code sorting addresses and ports

commit d7cf894e555a8aa8508f695fabac2061822d454d
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 13:47:40 2011 +0900

    [trac547] removed unexpected HTTP redirection

commit 41361697fe474af2b511e922c18dc0b211f1344c
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 13:33:13 2011 +0900

    [trac547] removed assertions checking type or instance because of reusability of module

commit 0dc2e2582d63c42847400701a7c3c6b0fb2d6d9b
Author: Naoki Kambe <kambe at jprs.co.jp>
Date:   Fri Apr 15 11:58:54 2011 +0900

    [trac547] removed unnecessary size limitation for a template file

-----------------------------------------------------------------------

Summary of changes:
 src/bin/stats/stats_httpd.py.in                   |   67 ++++-------
 src/bin/stats/tests/Makefile.am                   |    4 +-
 src/bin/stats/tests/b10-stats-httpd_test.py       |  131 ++++++++++++---------
 src/bin/stats/tests/{select.py => fake_select.py} |   15 ++-
 src/bin/stats/tests/{socket.py => fake_socket.py} |    6 +-
 src/bin/stats/tests/http/server.py                |   20 ++-
 src/bin/stats/tests/isc/cc/session.py             |   20 ++-
 src/bin/stats/tests/isc/config/ccsession.py       |   27 ++++-
 src/bin/stats/tests/isc/util/process.py           |    5 +-
 src/bin/stats/tests/isc/utils/Makefile.am         |    2 -
 src/bin/stats/tests/isc/utils/process.py          |   18 ---
 11 files changed, 167 insertions(+), 148 deletions(-)
 rename src/bin/stats/tests/{select.py => fake_select.py} (88%)
 rename src/bin/stats/tests/{socket.py => fake_socket.py} (95%)
 delete mode 100644 src/bin/stats/tests/isc/utils/Makefile.am
 delete mode 100644 src/bin/stats/tests/isc/utils/__init__.py
 delete mode 100644 src/bin/stats/tests/isc/utils/process.py

-----------------------------------------------------------------------
diff --git a/src/bin/stats/stats_httpd.py.in b/src/bin/stats/stats_httpd.py.in
index 830ef73..a35ef3d 100644
--- a/src/bin/stats/stats_httpd.py.in
+++ b/src/bin/stats/stats_httpd.py.in
@@ -15,6 +15,10 @@
 # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
+"""
+A standalone HTTP server for HTTP/XML interface of statistics in BIND 10
+
+"""
 import sys; sys.path.append ('@@PYTHONPATH@@')
 import os
 import time
@@ -55,10 +59,6 @@ XSL_URL_PATH = '/bind10/statistics/xsl'
 XSD_NAMESPACE = 'http://bind10.isc.org' + XSD_URL_PATH
 DEFAULT_CONFIG = dict(listen_on=[('127.0.0.1', 8000)])
 
-# The size of template file should be under 100k. TODO: should be
-# considered later.
-MAX_SIZE_OF_TEMPLATE = 102400
-
 # Assign this process name
 isc.util.process.rename()
 
@@ -75,7 +75,6 @@ class HttpHandler(http.server.BaseHTTPRequestHandler):
         self.send_head()
 
     def send_head(self):
-        assert isinstance(self.server, HttpServer)
         try:
             if self.path == XML_URL_PATH:
                 body = self.server.xml_handler()
@@ -84,18 +83,8 @@ class HttpHandler(http.server.BaseHTTPRequestHandler):
             elif self.path == XSL_URL_PATH:
                 body = self.server.xsl_handler()
             else:
-                if 'Host' in self.headers.keys():
-                    # redirect to XML URL
-                    self.send_response(302)
-                    self.send_header(
-                        "Location",
-                        "http://" + self.headers.get('Host') + XML_URL_PATH)
-                    self.end_headers()
-                    return None
-                else:
-                    # Couldn't find HOST
-                    self.send_error(404)
-                    return None
+                self.send_error(404)
+                return None
         except StatsHttpdError as err:
             self.send_error(500)
             if self.server.verbose:
@@ -111,7 +100,6 @@ class HttpHandler(http.server.BaseHTTPRequestHandler):
 
     def log_message(self, format, *args):
         """Change the default log format"""
-        assert isinstance(self.server, HttpServer)
         if self.server.verbose:
             self.server.log_writer(
                 "[b10-stats-httpd] %s - - [%s] %s\n" %
@@ -202,8 +190,6 @@ class StatsHttpd:
         from the config manager"""
         # load config
         if len(new_config) > 0:
-            assert type(self.config) is dict
-            assert type(new_config) is dict
             self.config.update(new_config)
         else:
             self.config = DEFAULT_CONFIG
@@ -213,22 +199,16 @@ class StatsHttpd:
                         for itm in self.mccs.get_module_spec().get_config_spec()
                         ])
                 )
-        assert 'listen_on' in self.config
-        assert type(self.config['listen_on']) is list
-        # remove duplicated element
-        self.http_addrs = list(
-            set([ (cf['address'], cf['port']) for cf in self.config['listen_on'] ])
-                )
+        # set addresses and ports for HTTP
+        self.http_addrs = [ (cf['address'], cf['port']) for cf in self.config['listen_on'] ]
 
     def open_httpd(self):
         """Opens sockets for HTTP. Iterating each HTTP address to be
         configured in spec file"""
-        assert type(self.http_addrs) is list
         for addr in self.http_addrs:
             self.httpd.append(self._open_httpd(addr))
 
     def _open_httpd(self, server_address, address_family=None):
-        assert type(server_address) is tuple
         try:
             # try IPv6 at first
             if address_family is not None:
@@ -254,7 +234,6 @@ class StatsHttpd:
                 self.write_log(
                     "[b10-stats-httpd] Started on address %s, port %s\n" %
                     server_address)
-        assert isinstance(httpd, HttpServer)
         return httpd
 
     def close_httpd(self):
@@ -262,7 +241,6 @@ class StatsHttpd:
         if len(self.httpd) == 0:
             return
         for ht in self.httpd:
-            assert type(ht.server_address) is tuple
             if self.verbose:
                 self.write_log(
                     "[b10-stats-httpd] Closing address %s, port %s\n" %
@@ -281,10 +259,15 @@ class StatsHttpd:
                 (rfd, wfd, xfd) = select.select(
                     self.get_sockets(), [], [], self.poll_intval)
             except select.error as err:
+                # select.error exception is caught only in the case of
+                # EINTR, or in other cases it is just thrown.
                 if err.args[0] == errno.EINTR:
                     (rfd, wfd, xfd) = ([], [], [])
                 else:
-                    raise select.error(err)
+                    raise
+            # FIXME: This module can handle only one request at a
+            # time, but it isn't so big issue for administration
+            # purposes.
             for fd in rfd + xfd:
                 if fd == self.mccs.get_socket():
                     self.mccs.check_command(nonblock=False)
@@ -316,7 +299,6 @@ class StatsHttpd:
     def config_handler(self, new_config):
         """Config handler for the ModuleCCSession object. It resets
         addresses and ports to listen HTTP requests on."""
-        assert type(new_config) is dict
         if self.verbose:
             self.write_log("[b10-stats-httpd] Loading config : %s\n" % str(new_config))
         for key in new_config.keys():
@@ -373,8 +355,6 @@ class StatsHttpd:
             (answer, env) = self.cc_session.group_recvmsg(False, seq)
             if answer:
                 (rcode, value) = isc.config.ccsession.parse_answer(answer)
-                self.cc_session.group_reply(
-                    env, isc.config.ccsession.create_answer(0))
         except (isc.cc.session.SessionTimeout,
                 isc.cc.session.SessionError) as err:
             raise StatsHttpdError("%s: %s" %
@@ -455,7 +435,6 @@ class StatsHttpd:
             elem.text = v
             xml_list.append(
                 xml.etree.ElementTree.tostring(elem))
-        assert len(xml_list) > 0
         xml_string = "".join(xml_list)
         self.xml_body = self.open_template(XML_TEMPLATE_LOCATION).substitute(
             xml_string=xml_string,
@@ -474,11 +453,11 @@ class StatsHttpd:
         return self.xsl_body
 
     def open_template(self, file_name):
-        """Opens a template file with size limitation, loads all lines to a
-        string variable and returns string.Template object include the
-        variable."""
+        """It opens a template file, and it loads all lines to a
+        string variable and returns string. Template object includes
+        the variable. Limitation of a file size isn't needed there."""
         lines = "".join(
-            open(file_name, 'r').readlines(MAX_SIZE_OF_TEMPLATE))
+            open(file_name, 'r').readlines())
         assert lines is not None
         return string.Template(lines)
 
@@ -492,11 +471,11 @@ if __name__ == "__main__":
         stats_httpd = StatsHttpd(verbose=options.verbose)
         stats_httpd.start()
     except OptionValueError:
-        sys.stderr.write("[b10-stats-httpd] Error parsing options\n")
+        sys.exit("[b10-stats-httpd] Error parsing options")
     except isc.cc.session.SessionError as se:
-        sys.stderr.write("[b10-stats-httpd] Error creating module, "
-                         + "is the command channel daemon running?\n")
+        sys.exit("[b10-stats-httpd] Error creating module, "
+                 + "is the command channel daemon running?")
     except HttpServerError as hse:
-        sys.stderr.write("[b10-stats-httpd] %s\n" % hse)
+        sys.exit("[b10-stats-httpd] %s" % hse)
     except KeyboardInterrupt as kie:
-        sys.stderr.write("[b10-stats-httpd] Interrupted, exiting\n")
+        sys.exit("[b10-stats-httpd] Interrupted, exiting")
diff --git a/src/bin/stats/tests/Makefile.am b/src/bin/stats/tests/Makefile.am
index 9617027..1fbb0cc 100644
--- a/src/bin/stats/tests/Makefile.am
+++ b/src/bin/stats/tests/Makefile.am
@@ -1,8 +1,8 @@
 SUBDIRS = isc http testdata
 PYCOVERAGE_RUN = @PYCOVERAGE_RUN@
 PYTESTS = b10-stats_test.py b10-stats-httpd_test.py
-EXTRA_DIST = $(PYTESTS) fake_time.py socket.py select.py
-CLEANFILES = fake_time.pyc socket.pyc select.pyc
+EXTRA_DIST = $(PYTESTS) fake_time.py fake_socket.py fake_select.py
+CLEANFILES = fake_time.pyc fake_socket.pyc fake_select.pyc
 
 # test using command-line arguments, so use check-local target instead of TESTS
 check-local:
diff --git a/src/bin/stats/tests/b10-stats-httpd_test.py b/src/bin/stats/tests/b10-stats-httpd_test.py
index 24659af..71ee2b4 100644
--- a/src/bin/stats/tests/b10-stats-httpd_test.py
+++ b/src/bin/stats/tests/b10-stats-httpd_test.py
@@ -17,14 +17,16 @@ import unittest
 import os
 import http.server
 import string
-import select
+import fake_select
 import imp
 import sys
-import socket
+import fake_socket
 
 import isc.cc
 
 import stats_httpd
+stats_httpd.socket = fake_socket
+stats_httpd.select = fake_select
 
 DUMMY_DATA = {
     "auth.queries.tcp": 10000,
@@ -78,20 +80,15 @@ class TestHttpHandler(unittest.TestCase):
         self.assertIsNone(arg)
         self.assertTrue('group' in env)
         self.assertEqual(env['group'], 'Stats')
-        (ret, arg, env) = pull_query(self.stats_httpd)
-        self.assertEqual(ret, 0)
-        self.assertIsNone(arg)
-        self.assertTrue('group' in env)
-        self.assertEqual(env['group'], 'Stats')
         self.assertEqual(handler.response.code, 200)
         self.assertEqual(handler.response.headers["Content-type"], "text/xml")
         self.assertTrue(handler.response.headers["Content-Length"] > 0)
         self.assertTrue(handler.response.wrote_headers)
-        self.assertRegexpMatches(handler.response.body, stats_httpd.XSD_NAMESPACE)
-        self.assertRegexpMatches(handler.response.body, stats_httpd.XSD_URL_PATH)
+        self.assertTrue(handler.response.body.find(stats_httpd.XSD_NAMESPACE)>0)
+        self.assertTrue(handler.response.body.find(stats_httpd.XSD_URL_PATH)>0)
         for (k, v) in DUMMY_DATA.items():
-            self.assertRegexpMatches(handler.response.body, str(k))
-            self.assertRegexpMatches(handler.response.body, str(v))
+            self.assertTrue(handler.response.body.find(str(k))>0)
+            self.assertTrue(handler.response.body.find(str(v))>0)
 
         # URL is '/bind10/statitics/xsd'
         handler.path = stats_httpd.XSD_URL_PATH
@@ -100,9 +97,9 @@ class TestHttpHandler(unittest.TestCase):
         self.assertEqual(handler.response.headers["Content-type"], "text/xml")
         self.assertTrue(handler.response.headers["Content-Length"] > 0)
         self.assertTrue(handler.response.wrote_headers)
-        self.assertRegexpMatches(handler.response.body, stats_httpd.XSD_NAMESPACE)
+        self.assertTrue(handler.response.body.find(stats_httpd.XSD_NAMESPACE)>0)
         for (k, v) in DUMMY_DATA.items():
-            self.assertRegexpMatches(handler.response.body, str(k))
+            self.assertTrue(handler.response.body.find(str(k))>0)
 
         # URL is '/bind10/statitics/xsl'
         handler.path = stats_httpd.XSL_URL_PATH
@@ -111,19 +108,17 @@ class TestHttpHandler(unittest.TestCase):
         self.assertEqual(handler.response.headers["Content-type"], "text/xml")
         self.assertTrue(handler.response.headers["Content-Length"] > 0)
         self.assertTrue(handler.response.wrote_headers)
-        self.assertRegexpMatches(handler.response.body, stats_httpd.XSD_NAMESPACE)
+        self.assertTrue(handler.response.body.find(stats_httpd.XSD_NAMESPACE)>0)
         for (k, v) in DUMMY_DATA.items():
-            self.assertRegexpMatches(handler.response.body, str(k))
+            self.assertTrue(handler.response.body.find(str(k))>0)
 
-        # 302 redirect
+        # 404 NotFound with Host header
         handler.path = '/'
         handler.headers = {'Host': 'my.host.domain'}
         handler.do_GET()
-        self.assertEqual(handler.response.code, 302)
-        self.assertEqual(handler.response.headers["Location"],
-                         "http://my.host.domain%s" % stats_httpd.XML_URL_PATH)
+        self.assertEqual(handler.response.code, 404)
 
-        # 404 NotFound
+        # 404 NotFound without Host header
         handler.path = '/path/to/foo/bar'
         handler.headers = {}
         handler.do_GET()
@@ -137,7 +132,7 @@ class TestHttpHandler(unittest.TestCase):
         handler.do_GET()
         self.stats_httpd.cc_session._socket._closed = False
         self.assertEqual(handler.response.code, 500)
-        self.stats_httpd.cc_session._clear_ques()
+        self.stats_httpd.cc_session._clear_queues()
 
         # failure case(Stats module returns err)
         handler.path = stats_httpd.XML_URL_PATH
@@ -147,7 +142,7 @@ class TestHttpHandler(unittest.TestCase):
         self.stats_httpd.cc_session._socket._closed = False
         handler.do_GET()
         self.assertEqual(handler.response.code, 500)
-        self.stats_httpd.cc_session._clear_ques()
+        self.stats_httpd.cc_session._clear_queues()
 
     def test_do_HEAD(self):
         for ht in self.httpd:
@@ -185,19 +180,19 @@ class TestHttpServerError(unittest.TestCase):
 class TestHttpServer(unittest.TestCase):
     """Tests for HttpServer class"""
 
-    def setUp(self):
+    def test_httpserver(self):
         self.verbose = True
         self.stats_httpd = stats_httpd.StatsHttpd(self.verbose)
         self.stats_httpd.cc_session.verbose = False
         for ht in self.stats_httpd.httpd:
             self.assertTrue(ht.server_address in self.stats_httpd.http_addrs)
-            self.assertEqual(self.ht.verbose, self.verbose)
-            self.assertEqual(self.ht.xml_handler, self.stats_httpd.xml_handler)
-            self.assertEqual(self.ht.xsd_handler, self.stats_httpd.xsd_handler)
-            self.assertEqual(self.ht.xsl_handler, self.stats_httpd.xsl_handler)
-            self.assertEqual(self.ht.log_writer, self.stats_httpd.write_log)
-            self.assertTrue(isinstance(self.ht._handler, stats_httpd.HttpHandler))
-            self.assertTrue(isinstance(self.ht.socket, socket.socket))
+            self.assertEqual(ht.verbose, self.verbose)
+            self.assertEqual(ht.xml_handler, self.stats_httpd.xml_handler)
+            self.assertEqual(ht.xsd_handler, self.stats_httpd.xsd_handler)
+            self.assertEqual(ht.xsl_handler, self.stats_httpd.xsl_handler)
+            self.assertEqual(ht.log_writer, self.stats_httpd.write_log)
+            self.assertTrue(isinstance(ht._handler, stats_httpd.HttpHandler))
+            self.assertTrue(isinstance(ht.socket, fake_socket.socket))
 
 class TestStatsHttpdError(unittest.TestCase):
     """Tests for StatsHttpdError exception"""
@@ -213,8 +208,8 @@ class TestStatsHttpd(unittest.TestCase):
 
     def setUp(self):
         self.verbose = True
-        socket._CLOSED = False
-        socket.has_ipv6 = True
+        fake_socket._CLOSED = False
+        fake_socket.has_ipv6 = True
         self.stats_httpd = stats_httpd.StatsHttpd(self.verbose)
         self.stats_httpd.cc_session.verbose = False
 
@@ -229,15 +224,15 @@ class TestStatsHttpd(unittest.TestCase):
         for ht in self.stats_httpd.httpd:
             self.assertFalse(ht.socket._closed)
             self.assertEqual(ht.socket.fileno(), id(ht.socket))
-        socket._CLOSED = True
+        fake_socket._CLOSED = True
         self.assertRaises(isc.cc.session.SessionError,
                           stats_httpd.StatsHttpd)
-        socket._CLOSED = False
+        fake_socket._CLOSED = False
 
     def test_mccs(self):
         self.stats_httpd.open_mccs()
         self.assertTrue(
-            isinstance(self.stats_httpd.mccs.get_socket(), socket.socket))
+            isinstance(self.stats_httpd.mccs.get_socket(), fake_socket.socket))
         self.assertTrue(
             isinstance(self.stats_httpd.cc_session, isc.cc.session.Session))
         self.assertTrue(
@@ -253,42 +248,42 @@ class TestStatsHttpd(unittest.TestCase):
 
     def test_httpd(self):
         # dual stack (addresses is ipv4 and ipv6)
-        socket.has_ipv6 = True
+        fake_socket.has_ipv6 = True
         self.assertTrue(('127.0.0.1', 8000) in set(self.stats_httpd.http_addrs))
         self.stats_httpd.http_addrs = [ ('::1', 8000), ('127.0.0.1', 8000) ]
         self.assertTrue(
-            stats_httpd.HttpServer.address_family in set([socket.AF_INET, socket.AF_INET6]))
+            stats_httpd.HttpServer.address_family in set([fake_socket.AF_INET, fake_socket.AF_INET6]))
         self.stats_httpd.open_httpd()
         for ht in self.stats_httpd.httpd:
-            self.assertTrue(isinstance(ht.socket, socket.socket))
+            self.assertTrue(isinstance(ht.socket, fake_socket.socket))
         self.stats_httpd.close_httpd()
 
         # dual stack (address is ipv6)
-        socket.has_ipv6 = True
+        fake_socket.has_ipv6 = True
         self.stats_httpd.http_addrs = [ ('::1', 8000) ]
         self.stats_httpd.open_httpd()
         for ht in self.stats_httpd.httpd:
-            self.assertTrue(isinstance(ht.socket, socket.socket))
+            self.assertTrue(isinstance(ht.socket, fake_socket.socket))
         self.stats_httpd.close_httpd()
 
         # dual stack (address is ipv4)
-        socket.has_ipv6 = True
+        fake_socket.has_ipv6 = True
         self.stats_httpd.http_addrs = [ ('127.0.0.1', 8000) ]
         self.stats_httpd.open_httpd()
         for ht in self.stats_httpd.httpd:
-            self.assertTrue(isinstance(ht.socket, socket.socket))
+            self.assertTrue(isinstance(ht.socket, fake_socket.socket))
         self.stats_httpd.close_httpd()
 
         # only-ipv4 single stack
-        socket.has_ipv6 = False
+        fake_socket.has_ipv6 = False
         self.stats_httpd.http_addrs = [ ('127.0.0.1', 8000) ]
         self.stats_httpd.open_httpd()
         for ht in self.stats_httpd.httpd:
-            self.assertTrue(isinstance(ht.socket, socket.socket))
+            self.assertTrue(isinstance(ht.socket, fake_socket.socket))
         self.stats_httpd.close_httpd()
 
         # only-ipv4 single stack (force set ipv6 )
-        socket.has_ipv6 = False
+        fake_socket.has_ipv6 = False
         self.stats_httpd.http_addrs = [ ('::1', 8000) ]
         self.assertRaises(stats_httpd.HttpServerError,
             self.stats_httpd.open_httpd)
@@ -297,13 +292,13 @@ class TestStatsHttpd(unittest.TestCase):
         self.stats_httpd.http_addrs = [ ('localhost', 8000) ]
         self.stats_httpd.open_httpd()
         for ht in self.stats_httpd.httpd:
-            self.assertTrue(isinstance(ht.socket, socket.socket))
+            self.assertTrue(isinstance(ht.socket, fake_socket.socket))
         self.stats_httpd.close_httpd()
 
         self.stats_httpd.http_addrs = [ ('my.host.domain', 8000) ]
         self.stats_httpd.open_httpd()
         for ht in self.stats_httpd.httpd:
-            self.assertTrue(isinstance(ht.socket, socket.socket))
+            self.assertTrue(isinstance(ht.socket, fake_socket.socket))
         self.stats_httpd.close_httpd()
 
         # over flow of port number
@@ -323,11 +318,11 @@ class TestStatsHttpd(unittest.TestCase):
         self.stats_httpd = stats_httpd.StatsHttpd(self.verbose)
         self.stats_httpd.cc_session.verbose = False
         self.assertRaises(
-            select.error, self.stats_httpd.start)
+            fake_select.error, self.stats_httpd.start)
 
     def test_stop(self):
         # success case
-        socket._CLOSED = False
+        fake_socket._CLOSED = False
         self.stats_httpd.stop()
         self.assertFalse(self.stats_httpd.running)
         self.assertIsNone(self.stats_httpd.mccs)
@@ -342,6 +337,11 @@ class TestStatsHttpd(unittest.TestCase):
         self.stats_httpd.cc_session._socket._closed = False
 
     def test_open_template(self):
+        # successful conditions
+        self.stats_httpd.open_template(stats_httpd.XML_TEMPLATE_LOCATION)
+        self.stats_httpd.open_template(stats_httpd.XSD_TEMPLATE_LOCATION)
+        self.stats_httpd.open_template(stats_httpd.XSL_TEMPLATE_LOCATION)
+        # unsuccessful condition
         self.assertRaises(
             IOError,
             self.stats_httpd.open_template, '/path/to/foo/bar')
@@ -361,40 +361,59 @@ class TestStatsHttpd(unittest.TestCase):
                 1, "Unknown command: __UNKNOWN_COMMAND__"))
 
     def test_config(self):
-        d = dict(_UNKNOWN_KEY_=None)
-        assert type(d) is dict
         self.assertEqual(
-            self.stats_httpd.config_handler(d),
+            self.stats_httpd.config_handler(dict(_UNKNOWN_KEY_=None)),
             isc.config.ccsession.create_answer(
                     1, "Unknown known config: _UNKNOWN_KEY_"))
         self.assertEqual(
             self.stats_httpd.config_handler(
                         dict(listen_on=[dict(address="::2",port=8000)])),
             isc.config.ccsession.create_answer(0))
+        self.assertTrue("listen_on" in self.stats_httpd.config)
+        for addr in self.stats_httpd.config["listen_on"]:
+            self.assertTrue("address" in addr)
+            self.assertTrue("port" in addr)
+            self.assertTrue(addr["address"] == "::2")
+            self.assertTrue(addr["port"] == 8000)
+
         self.assertEqual(
             self.stats_httpd.config_handler(
                         dict(listen_on=[dict(address="::1",port=80)])),
             isc.config.ccsession.create_answer(0))
+        self.assertTrue("listen_on" in self.stats_httpd.config)
+        for addr in self.stats_httpd.config["listen_on"]:
+            self.assertTrue("address" in addr)
+            self.assertTrue("port" in addr)
+            self.assertTrue(addr["address"] == "::1")
+            self.assertTrue(addr["port"] == 80)
+
         self.assertEqual(
             self.stats_httpd.config_handler(
                         dict(listen_on=[dict(address="1.2.3.4",port=54321)])),
             isc.config.ccsession.create_answer(0))
+        self.assertTrue("listen_on" in self.stats_httpd.config)
+        for addr in self.stats_httpd.config["listen_on"]:
+            self.assertTrue("address" in addr)
+            self.assertTrue("port" in addr)
+            self.assertTrue(addr["address"] == "1.2.3.4")
+            self.assertTrue(addr["port"] == 54321)
         (ret, arg) = isc.config.ccsession.parse_answer(
             self.stats_httpd.config_handler(
                 dict(listen_on=[dict(address="1.2.3.4",port=543210)]))
             )
         self.assertEqual(ret, 1)
 
-    def test_no_buildpath(self):
-        """
-        test for no "B10_FROM_SOURCE"
-        """
+    def test_for_without_B10_FROM_SOURCE(self):
+        # just lets it go through the code without B10_FROM_SOURCE env
+        # variable
         if "B10_FROM_SOURCE" in os.environ:
             tmppath = os.environ["B10_FROM_SOURCE"]
             os.environ.pop("B10_FROM_SOURCE")
             imp.reload(stats_httpd)
             os.environ["B10_FROM_SOURCE"] = tmppath
             imp.reload(stats_httpd)
+            stats_httpd.socket = fake_socket
+            stats_httpd.select = fake_select
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/src/bin/stats/tests/fake_select.py b/src/bin/stats/tests/fake_select.py
new file mode 100644
index 0000000..ca0ca82
--- /dev/null
+++ b/src/bin/stats/tests/fake_select.py
@@ -0,0 +1,43 @@
+# Copyright (C) 2011  Internet Systems Consortium.
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
+# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""
+A mock-up module of select
+
+*** NOTE ***
+It is only for testing stats_httpd module and not reusable for
+external module.
+"""
+
+import fake_socket
+import errno
+
+class error(Exception):
+    pass
+
+def select(rlst, wlst, xlst, timeout):
+    if type(timeout) != int and type(timeout) != float:
+            raise TypeError("Error: %s must be integer or float"
+                            % timeout.__class__.__name__)
+    for s in rlst + wlst + xlst:
+        if type(s) != fake_socket.socket:
+            raise TypeError("Error: %s must be a dummy socket"
+                            % s.__class__.__name__)
+        s._called = s._called + 1
+        if s._called > 3:
+            raise error("Something is happened!")
+        elif s._called > 2:
+            raise error(errno.EINTR)
+    return (rlst, wlst, xlst)
diff --git a/src/bin/stats/tests/fake_socket.py b/src/bin/stats/tests/fake_socket.py
new file mode 100644
index 0000000..4e3a458
--- /dev/null
+++ b/src/bin/stats/tests/fake_socket.py
@@ -0,0 +1,70 @@
+# Copyright (C) 2011  Internet Systems Consortium.
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
+# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
+# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""
+A mock-up module of socket
+
+*** NOTE ***
+It is only for testing stats_httpd module and not reusable for
+external module.
+"""
+
+import re
+
+AF_INET = 'AF_INET'
+AF_INET6 = 'AF_INET6'
+_ADDRFAMILY = AF_INET
+has_ipv6 = True
+_CLOSED = False
+
+class gaierror(Exception):
+    pass
+
+class error(Exception):
+    pass
+
+class socket:
+
+    def __init__(self, family=None):
+        if family is None:
+            self.address_family = _ADDRFAMILY
+        else:
+            self.address_family = family
+        self._closed = _CLOSED
+        if self._closed:
+            raise error('socket is already closed!')
+        self._called = 0
+
+    def close(self):
+        self._closed = True
+
+    def fileno(self):
+        return id(self)
+
+    def bind(self, server_class):
+        (self.server_address, self.server_port) = server_class
+        if self.address_family not in set([AF_INET, AF_INET6]):
+            raise error("Address family not supported by protocol: %s" % self.address_family)
+        if self.address_family == AF_INET6 and not has_ipv6:
+            raise error("Address family not supported in this machine: %s has_ipv6: %s"
+                        % (self.address_family, str(has_ipv6)))
+        if self.address_family == AF_INET and re.search(':', self.server_address) is not None:
+            raise gaierror("Address family for hostname not supported : %s %s" % (self.server_address, self.address_family))
+        if self.address_family == AF_INET6 and re.search(':', self.server_address) is None:
+            raise error("Cannot assign requested address : %s" % str(self.server_address))
+        if type(self.server_port) is not int:
+            raise TypeError("an integer is required: %s" % str(self.server_port))
+        if self.server_port < 0 or self.server_port > 65535:
+            raise OverflowError("port number must be 0-65535.: %s" % str(self.server_port))
diff --git a/src/bin/stats/tests/http/server.py b/src/bin/stats/tests/http/server.py
index 8bdad98..70ed6fa 100644
--- a/src/bin/stats/tests/http/server.py
+++ b/src/bin/stats/tests/http/server.py
@@ -13,7 +13,15 @@
 # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
-import socket
+"""
+A mock-up module of http.server
+
+*** NOTE ***
+It is only for testing stats_httpd module and not reusable for
+external module.
+"""
+
+import fake_socket
 
 class DummyHttpResponse:
     def __init__(self, path):
@@ -22,16 +30,15 @@ class DummyHttpResponse:
         self.log = ""
 
     def _write_log(self, msg):
-        assert type(msg) is str
         self.log = self.log + msg
 
 class HTTPServer:
     """
-    This module is a mock-up class of http.server.HTTPServer
+    A mock-up class of http.server.HTTPServer
     """
-    address_family = socket.AF_INET
+    address_family = fake_socket.AF_INET
     def __init__(self, server_class, handler_class):
-        self.socket = socket.socket(self.address_family)
+        self.socket = fake_socket.socket(self.address_family)
         self.server_class = server_class
         self.socket.bind(self.server_class)
         self._handler = handler_class(None, None, self)
@@ -44,7 +51,7 @@ class HTTPServer:
 
 class BaseHTTPRequestHandler:
     """
-    This module is a mock-up class of http.server.BaseHTTPRequestHandler
+    A mock-up class of http.server.BaseHTTPRequestHandler
     """
 
     def __init__(self, request, client_address, server):
@@ -85,6 +92,5 @@ class BaseHTTPRequestHandler:
     def _write(self, obj):
         if self.path != self.response.path:
             self.response = DummyHttpResponse(path=self.path)
-        assert type(obj) is bytes
         self.response.body = obj.decode()
 
diff --git a/src/bin/stats/tests/isc/cc/session.py b/src/bin/stats/tests/isc/cc/session.py
index 5bdb2e1..e16d6a9 100644
--- a/src/bin/stats/tests/isc/cc/session.py
+++ b/src/bin/stats/tests/isc/cc/session.py
@@ -13,10 +13,16 @@
 # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
-# This module is a mock-up class of isc.cc.session
+"""
+A mock-up module of isc.cc.session
+
+*** NOTE ***
+It is only for testing stats_httpd module and not reusable for
+external module.
+"""
 
 import sys
-import socket
+import fake_socket
 
 # set a dummy lname
 _TEST_LNAME = '123abc at xxxx'
@@ -41,8 +47,8 @@ class Session:
         self.message_queue = []
         self.old_message_queue = []
         try:
-            self._socket = socket.socket()
-        except socket.error as se:
+            self._socket = fake_socket.socket()
+        except fake_socket.error as se:
             raise SessionError(se)
         self.verbose = verbose
 
@@ -53,7 +59,7 @@ class Session:
     def close(self):
         self._socket.close()
 
-    def _clear_ques(self):
+    def _clear_queues(self):
         while len(self.message_queue) > 0:
             self.dequeue()
 
@@ -71,7 +77,7 @@ class Session:
             sys.stdout.write("[Session] enqueue: " + str(que.dump()) + "\n")
         return seq
 
-    def dequeue(self, seq=0):
+    def dequeue(self):
         if self._socket._closed:
             raise SessionError("Session has been closed.")
         que = None
@@ -108,7 +114,7 @@ class Session:
                 "instance": instance })
 
     def group_recvmsg(self, nonblock=True, seq=0):
-        que = self.dequeue(seq)
+        que = self.dequeue()
         return que.msg, que.env
         
     def group_reply(self, routing, msg):
diff --git a/src/bin/stats/tests/isc/config/ccsession.py b/src/bin/stats/tests/isc/config/ccsession.py
index db2a09f..046a35f 100644
--- a/src/bin/stats/tests/isc/config/ccsession.py
+++ b/src/bin/stats/tests/isc/config/ccsession.py
@@ -13,7 +13,13 @@
 # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
-# This module is a mock-up class of isc.cc.session
+"""
+A mock-up module of isc.cc.session
+
+*** NOTE ***
+It is only for testing stats_httpd module and not reusable for
+external module.
+"""
 
 import json
 import os
@@ -22,7 +28,6 @@ from isc.cc.session import Session
 COMMAND_CONFIG_UPDATE = "config_update"
 
 def parse_answer(msg):
-    assert type(msg) is dict
     assert 'result' in msg
     try:
         return msg['result'][0], msg['result'][1]
@@ -36,7 +41,6 @@ def create_answer(rcode, arg = None):
         return { 'result': [ rcode, arg ] }
 
 def parse_command(msg):
-    assert type(msg) is dict
     assert 'command' in msg
     try:
         return msg['command'][0], msg['command'][1]
@@ -92,8 +96,21 @@ class ConfigData:
     def get_value(self, identifier):
         """Returns a tuple where the first item is the value at the
            given identifier, and the second item is a bool which is
-           true if the value is an unset default. Raises an
-           DataNotFoundError if the identifier is bad"""
+           False if the identifier has the default value in the spec
+           file. If the identifier has no default value the spec file,
+           it returns a tuple where first item is an empty value of
+           each type, and the second item is True. It raises an
+           DataNotFoundError if the identifier is not found in the
+           spec file.
+           *** NOTE ***
+           This method is strictly not same as the original method in
+           isc.config.config_data.ConfigData, so this method is
+           limited with only internal use to test the statistics
+           modules. This method never handles the local variables and
+           is different from the original method at this point.
+           However there is no issue in testing it. Because the
+           statistics modules never call the method after they call it
+           at first."""
         def _get_value(config_map):
                 if 'item_default' in config_map:
                     return config_map['item_default'], False
diff --git a/src/bin/stats/tests/isc/util/process.py b/src/bin/stats/tests/isc/util/process.py
index 7274a48..0f764c1 100644
--- a/src/bin/stats/tests/isc/util/process.py
+++ b/src/bin/stats/tests/isc/util/process.py
@@ -13,6 +13,9 @@
 # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 # WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
-# A dummy function of isc.util.process.rename()
+"""
+A dummy function of isc.util.process.rename()
+"""
+
 def rename(name=None):
     pass
diff --git a/src/bin/stats/tests/isc/utils/Makefile.am b/src/bin/stats/tests/isc/utils/Makefile.am
deleted file mode 100644
index b09fdee..0000000
--- a/src/bin/stats/tests/isc/utils/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-EXTRA_DIST = __init__.py process.py
-CLEANFILES = __init__.pyc process.pyc
diff --git a/src/bin/stats/tests/isc/utils/__init__.py b/src/bin/stats/tests/isc/utils/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/src/bin/stats/tests/isc/utils/process.py b/src/bin/stats/tests/isc/utils/process.py
deleted file mode 100644
index 4c0cf8c..0000000
--- a/src/bin/stats/tests/isc/utils/process.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2010  Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-# A dummy function of isc.utils.process.rename()
-def rename(name=None):
-    pass
diff --git a/src/bin/stats/tests/select.py b/src/bin/stats/tests/select.py
deleted file mode 100644
index a33c8be..0000000
--- a/src/bin/stats/tests/select.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (C) 2011  Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-import socket
-import errno
-
-class error(Exception):
-    pass
-
-def select(rlst, wlst, xlst, timeout):
-    """
-    This module is a mock-up function of select.select
-    """
-    if type(timeout) != int and type(timeout) != float:
-            raise TypeError("Error: %s must be integer or float"
-                            % timeout.__class__.__name__)
-    for s in rlst + wlst + xlst:
-        if type(s) != socket.socket:
-            raise TypeError("Error: %s must be a dummy socket"
-                            % s.__class__.__name__)
-        s._called = s._called + 1
-        if s._called > 3:
-            raise error("Something is happened!")
-        elif s._called > 2:
-            raise error(errno.EINTR)
-    return (rlst, wlst, xlst)
diff --git a/src/bin/stats/tests/socket.py b/src/bin/stats/tests/socket.py
deleted file mode 100644
index e6a4dd7..0000000
--- a/src/bin/stats/tests/socket.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (C) 2011  Internet Systems Consortium.
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SYSTEMS CONSORTIUM
-# DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
-# INTERNET SYSTEMS CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
-# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-"""
-This module is a mock-up classes of socket module
-"""
-
-import re
-
-AF_INET = 'AF_INET'
-AF_INET6 = 'AF_INET6'
-_ADDRFAMILY = AF_INET
-has_ipv6 = True
-_CLOSED = False
-
-class gaierror(Exception):
-    pass
-
-class error(Exception):
-    pass
-
-class socket:
-
-    def __init__(self, family=None):
-        if family is None:
-            self.address_family = _ADDRFAMILY
-        else:
-            self.address_family = family
-        self._closed = _CLOSED
-        if self._closed:
-            raise error('socket is already closed!')
-        self._called = 0
-
-    def close(self):
-        self._closed = True
-
-    def fileno(self):
-        return id(self)
-
-    def bind(self, server_class):
-        (self.server_address, self.server_port) = server_class
-        if self.address_family not in set([AF_INET, AF_INET6]):
-            raise error("Address family not supported by protocol: %s" % self.address_family)
-        if self.address_family == AF_INET6 and not has_ipv6:
-            raise error("Address family not supported in this machine: %s has_ipv6: %s"
-                        % (self.address_family, str(has_ipv6)))
-        if self.address_family == AF_INET and re.search(':', self.server_address) is not None:
-            raise gaierror("Address family for hostname not supported : %s %s" % (self.server_address, self.address_family))
-        if self.address_family == AF_INET6 and re.search(':', self.server_address) is None:
-            raise error("Cannot assign requested address : %s" % str(self.server_address))
-        if type(self.server_port) is not int:
-            raise TypeError("an integer is required: %s" % str(self.server_port))
-        if self.server_port < 0 or self.server_port > 65535:
-            raise OverflowError("port number must be 0-65535.: %s" % str(self.server_port))




More information about the bind10-changes mailing list