BIND 10 trac2117, updated. d08c384ab8fa9a5993ac985d9b98d1d2909f463f checkpoint on src/lib/python improvments

BIND 10 source code commits bind10-changes at lists.isc.org
Sun Sep 16 17:56:38 UTC 2012


The branch, trac2117 has been updated
       via  d08c384ab8fa9a5993ac985d9b98d1d2909f463f (commit)
      from  007839e627b153351406e9ad8d11cdc7324b005c (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 d08c384ab8fa9a5993ac985d9b98d1d2909f463f
Author: Francis Dupont <fdupont at isc.org>
Date:   Sun Sep 16 19:56:22 2012 +0200

    checkpoint on src/lib/python improvments

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

Summary of changes:
 src/bin/bind10/run_bind10.bat                      |    6 ++--
 .../python/isc/bind10/tests/sockcreator_test.py    |    6 ++--
 src/lib/python/isc/cc/PARTIAL_PORT_ON_WINDOWS      |    1 -
 src/lib/python/isc/cc/session.py                   |   16 +++++----
 src/lib/python/isc/cc/tests/session_test.py        |   19 ++++++----
 src/lib/python/isc/config/PARTIAL_PORT_ON_WINDOWS  |    1 -
 src/lib/python/isc/config/cfgmgr.py                |    8 ++++-
 src/lib/python/isc/util/socketserver_mixin.py      |    2 +-
 .../lib/python/isc/util/socketspec.py              |   25 +++++++------
 .../tests/{file_test.py => file_test_win32.py}     |   13 ++++---
 win32build/check/python-debug.sh                   |   23 ++++++------
 win32build/check/python-release.sh                 |   23 ++++++------
 win32build/env-debug.bat                           |   38 ++++++++++----------
 win32build/env-release.bat                         |   38 ++++++++++----------
 14 files changed, 114 insertions(+), 105 deletions(-)
 delete mode 100644 src/lib/python/isc/cc/PARTIAL_PORT_ON_WINDOWS
 delete mode 100644 src/lib/python/isc/config/PARTIAL_PORT_ON_WINDOWS
 copy tests/lettuce/run_lettuce.sh => src/lib/python/isc/util/socketspec.py (63%)
 mode change 100755 => 100644
 copy src/lib/python/isc/util/tests/{file_test.py => file_test_win32.py} (76%)

-----------------------------------------------------------------------
diff --git a/src/bin/bind10/run_bind10.bat b/src/bin/bind10/run_bind10.bat
index 1fdb7ee..efaed7c 100755
--- a/src/bin/bind10/run_bind10.bat
+++ b/src/bin/bind10/run_bind10.bat
@@ -15,9 +15,7 @@ rem FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 rem NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 rem WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
-setlocal
-c:\cygwin\bin\cygpath -w %BIND10HOME% | set /p b10home=
-endlocal
+for /f %%p in ('c:\cygwin\bin\cygpath -w %BIND10HOME%') do set b10home=%%p
 
 if "%VSCNF%"=="" set VSCNF=release
 
@@ -50,4 +48,4 @@ set B10_FROM_BUILD=%BIND10HOME%
 
 set BIND10_MSGQ_SOCKET_FILE=%BIND10HOME%/msgq_socket
 
-%PYTHON% -O %BIND10_PATH%\bind10.py %*
+%PYTHON% -O %BIND10_PATH%\bind10_src.py %*
diff --git a/src/lib/python/isc/bind10/tests/sockcreator_test.py b/src/lib/python/isc/bind10/tests/sockcreator_test.py
index f67781c..4b3fb36 100644
--- a/src/lib/python/isc/bind10/tests/sockcreator_test.py
+++ b/src/lib/python/isc/bind10/tests/sockcreator_test.py
@@ -22,9 +22,11 @@ import struct
 import socket
 from isc.net.addr import IPAddr
 import isc.log
+import isc.util.socketpair
 from libutil_io_python import send_fd
 from isc.bind10.sockcreator import Parser, CreatorError, WrappedSocket
 
+
 class FakeCreator:
     """
     Class emulating the socket to the socket creator. It can be given expected
@@ -295,9 +297,9 @@ class WrapTests(unittest.TestCase):
         # check the received one can be used as a socket
 
         # The transport socket
-        (t1, t2) = socket.socketpair()
+        (t1, t2) = socketpair.socketpair()
         # The payload socket
-        (p1, p2) = socket.socketpair()
+        (p1, p2) = socketpair.socketpair()
 
         t2 = WrappedSocket(t2)
 
diff --git a/src/lib/python/isc/cc/PARTIAL_PORT_ON_WINDOWS b/src/lib/python/isc/cc/PARTIAL_PORT_ON_WINDOWS
deleted file mode 100644
index 30888ae..0000000
--- a/src/lib/python/isc/cc/PARTIAL_PORT_ON_WINDOWS
+++ /dev/null
@@ -1 +0,0 @@
-session
diff --git a/src/lib/python/isc/cc/session.py b/src/lib/python/isc/cc/session.py
index 33a47bd..bcbd767 100644
--- a/src/lib/python/isc/cc/session.py
+++ b/src/lib/python/isc/cc/session.py
@@ -22,6 +22,7 @@ import threading
 import bind10_config
 
 import isc.cc.message
+import isc.util.socketspec
 
 class ProtocolError(Exception): pass
 class NetworkError(Exception): pass
@@ -31,7 +32,7 @@ class SessionTimeout(Exception): pass
 class Session:
     MSGQ_DEFAULT_TIMEOUT = 4000
     
-    def __init__(self, socket_file=None):
+    def __init__(self, socket_name=None):
         self._socket = None
         self._lname = None
         self._sequence = 1
@@ -42,17 +43,18 @@ class Session:
         self._recv_len_size = 0
         self._recv_size = 0
 
-        if socket_file is None:
+        if socket_name is None:
             if "BIND10_MSGQ_SOCKET_FILE" in os.environ:
-                self.socket_file = os.environ["BIND10_MSGQ_SOCKET_FILE"]
+                self.socket_name = os.environ["BIND10_MSGQ_SOCKET_FILE"]
             else:
-                self.socket_file = bind10_config.BIND10_MSGQ_SOCKET_FILE
+                self.socket_name = bind10_config.BIND10_MSGQ_SOCKET_FILE
         else:
-            self.socket_file = socket_file
+            self.socket_name = socket_name
 
         try:
-            self._socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-            self._socket.connect(self.socket_file)
+            af, address = isc.util.socketspec.parse(self.socket_name)
+            self._socket = socket.socket(af, socket.SOCK_STREAM)
+            self._socket.connect(address)
             self.sendmsg({ "type": "getlname" })
             env, msg = self.recvmsg(False)
             if not env:
diff --git a/src/lib/python/isc/cc/tests/session_test.py b/src/lib/python/isc/cc/tests/session_test.py
index e589085..2d07c7d 100644
--- a/src/lib/python/isc/cc/tests/session_test.py
+++ b/src/lib/python/isc/cc/tests/session_test.py
@@ -19,7 +19,9 @@
 
 import unittest
 import os
+import sys
 from isc.cc.session import *
+import isc.util.socketspec
 
 # our fake socket, where we can read and insert messages
 class MySocket():
@@ -389,24 +391,27 @@ class testSession(unittest.TestCase):
         if "BIND10_TEST_SOCKET_FILE" not in os.environ:
             self.assertEqual("", "This test can only run if the value BIND10_TEST_SOCKET_FILE is set in the environment")
         TEST_SOCKET_FILE = os.environ["BIND10_TEST_SOCKET_FILE"]
+        af, address = isc.util.socketspec.parse(TEST_SOCKET_FILE)
 
         # create a read domain socket to pass into the session
-        s1 = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-        if os.path.exists(TEST_SOCKET_FILE):
-            os.remove(TEST_SOCKET_FILE)
-        s1.bind(TEST_SOCKET_FILE)
+        s1 = socket.socket(af, socket.SOCK_STREAM)
+        if sys.platform != 'win32':
+            if os.path.exists(TEST_SOCKET_FILE):
+                os.remove(TEST_SOCKET_FILE)
+        s1.bind(address)
 
         try:
             s1.listen(1)
 
-            s2 = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-            s2.connect(TEST_SOCKET_FILE)
+            s2 = socket.socket(af, socket.SOCK_STREAM)
+            s2.connect(address)
             sess = MySession(1, s2)
             # set timeout to 100 msec, so test does not take too long
             sess.set_timeout(100)
             self.assertRaises(SessionTimeout, sess.group_recvmsg, False)
         finally:
-            os.remove(TEST_SOCKET_FILE)
+            if sys.platform != 'win32':
+                os.remove(TEST_SOCKET_FILE)
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/src/lib/python/isc/config/PARTIAL_PORT_ON_WINDOWS b/src/lib/python/isc/config/PARTIAL_PORT_ON_WINDOWS
deleted file mode 100644
index 8adbf92..0000000
--- a/src/lib/python/isc/config/PARTIAL_PORT_ON_WINDOWS
+++ /dev/null
@@ -1 +0,0 @@
-ccsession cfgmgr
diff --git a/src/lib/python/isc/config/cfgmgr.py b/src/lib/python/isc/config/cfgmgr.py
index d401b47..883615c 100644
--- a/src/lib/python/isc/config/cfgmgr.py
+++ b/src/lib/python/isc/config/cfgmgr.py
@@ -20,9 +20,9 @@
 """
 
 import isc
-import signal
 import ast
 import os
+import sys
 import copy
 import tempfile
 import json
@@ -135,8 +135,14 @@ class ConfigManagerData:
             file.write("\n")
             file.close()
             if output_file_name:
+                if sys.platform == 'win32':
+                    if os.path.exists(output_file_name):
+                        os.remove(output_file_name)
                 os.rename(filename, output_file_name)
             else:
+                if sys.platform== 'win32':
+                    if os.path.exists(self.db_filename):
+                        os.remove(self.db_filename)
                 os.rename(filename, self.db_filename)
         except IOError as ioe:
             logger.error(CFGMGR_IOERROR_WHILE_WRITING_CONFIGURATION, ioe)
diff --git a/src/lib/python/isc/util/socketserver_mixin.py b/src/lib/python/isc/util/socketserver_mixin.py
index 08797e6..b116ba8 100644
--- a/src/lib/python/isc/util/socketserver_mixin.py
+++ b/src/lib/python/isc/util/socketserver_mixin.py
@@ -16,7 +16,7 @@
 import threading
 import socket
 import select
-from socketpair import socketpair
+from isc.util.socketpair import socketpair
 
 SOCK_DATA = b'somedata'
 class NoPollMixIn:
diff --git a/src/lib/python/isc/util/socketspec.py b/src/lib/python/isc/util/socketspec.py
new file mode 100644
index 0000000..a4034ac
--- /dev/null
+++ b/src/lib/python/isc/util/socketspec.py
@@ -0,0 +1,30 @@
+# Copyright (C) 2012  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.
+
+"""Parse socket name to spec, aka address-family and address."""
+
+import socket
+import sys
+
+def parse(name):
+    """parse and return family and address pair"""
+    if sys.platform != 'win32':
+        return socket.AF_UNIX, name
+    elif name[:3] == 'v4_':
+        return socket.AF_INET, ('127.0.0.1', int(name[3:]))
+    elif name[:3] == 'v6_':
+        return socket.AF_INET6, ('::1', int(name[3:]), 0, 0)
+    else:
+        raise ValueError('invalid socket spec: ' + name)
diff --git a/src/lib/python/isc/util/tests/file_test_win32.py b/src/lib/python/isc/util/tests/file_test_win32.py
new file mode 100644
index 0000000..2869420
--- /dev/null
+++ b/src/lib/python/isc/util/tests/file_test_win32.py
@@ -0,0 +1,35 @@
+# 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 os
+
+import isc.util.file
+import unittest
+
+class FileTest(unittest.TestCase):
+    def test_search_path_find(self):
+        """Test it returns the first occurence of the file"""
+        os.chdir(os.environ['BIND10HOME'] + '/src/lib/python/isc/util/tests')
+        self.assertEqual('.\Makefile.am',
+                         isc.util.file.path_search('Makefile.am',
+                                                  ['\no\such\directory\\', '.',
+                                                  '..\tests\\']))
+
+    def test_search_path_notfound(self):
+        """Test it throws an exception when the file can't be found"""
+        self.assertRaises(IOError, isc.util.file.path_search, 'no file', ['\no\such\directory'])
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/win32build/check/python-debug.sh b/win32build/check/python-debug.sh
index 7f0c507..49ce272 100755
--- a/win32build/check/python-debug.sh
+++ b/win32build/check/python-debug.sh
@@ -25,11 +25,10 @@ for pytest in ${PYTESTS}
         fi
     done
 
-echo partial python cc / Debug
+echo python cc / Debug
 export PYTHONPATH=${CPYTHONPATH}
-#export BIND10_TEST_SOCKET_FILE=
-#PYTESTS='message_test.py data_test.py session_test.py'
-PYTESTS='message_test.py data_test.py'
+export BIND10_TEST_SOCKET_FILE=v4_12345
+PYTESTS='message_test.py data_test.py session_test.py'
 for pytest in ${PYTESTS}
     do
         echo ${pytest}
@@ -39,17 +38,16 @@ for pytest in ${PYTESTS}
         fi
     done
 
-echo partial python config / Debug
+echo python config / Debug
 export PYTHONPATH="${CPYTHONPATH};${BIND10HOME}/src/lib/python/isc/config"
 export B10_LOCKFILE_DIR_FROM_BUILD=${BIND10HOME}
 export B10_TEST_PLUGIN_DIR=${BIND10HOME}/src/bin/cfgmgr/plugins
 export CONFIG_TESTDATA_PATH=${BIND10HOME}/src/lib/config/tests/testdata
 export CONFIG_WR_TESTDATA_PATH=${BIND10HOME}/src/lib/config/tests/testdata
-#PYTESTS='ccsession_test.py
-#    cfgmgr_test.py
-#    config_data_test.py
-#    module_spec_test.py'
-PYTESTS='config_data_test.py module_spec_test.py'
+PYTESTS='ccsession_test.py
+    cfgmgr_test.py
+    config_data_test.py
+    module_spec_test.py'
 for pytest in ${PYTESTS}
     do
         echo ${pytest}
@@ -118,10 +116,9 @@ PYTESTS='socketsession_test.py'
 #        fi
 #    done
 
-echo partial python util / Debug
+echo python util / Debug
 export PYTHONPATH=${CPYTHONPATH}
-#PYTESTS='process_test.py socketserver_mixin_test.py file_test.py'
-PYTESTS='process_test.py socketserver_mixin_test.py'
+PYTESTS='process_test.py socketserver_mixin_test.py file_test_win32.py'
 for pytest in ${PYTESTS}
     do
         echo ${pytest}
diff --git a/win32build/check/python-release.sh b/win32build/check/python-release.sh
index 153f72b..59051a1 100755
--- a/win32build/check/python-release.sh
+++ b/win32build/check/python-release.sh
@@ -25,11 +25,10 @@ for pytest in ${PYTESTS}
         fi
     done
 
-echo partial python cc / Release
+echo python cc / Release
 export PYTHONPATH=${CPYTHONPATH}
-#export BIND10_TEST_SOCKET_FILE=
-#PYTESTS='message_test.py data_test.py session_test.py'
-PYTESTS='message_test.py data_test.py'
+export BIND10_TEST_SOCKET_FILE=v4_12345
+PYTESTS='message_test.py data_test.py session_test.py'
 for pytest in ${PYTESTS}
     do
         echo ${pytest}
@@ -39,17 +38,16 @@ for pytest in ${PYTESTS}
         fi
     done
 
-echo partial python config / Release
+echo python config / Release
 export PYTHONPATH="${CPYTHONPATH};${BIND10HOME}/src/lib/python/isc/config"
 export B10_LOCKFILE_DIR_FROM_BUILD=${BIND10HOME}
 export B10_TEST_PLUGIN_DIR=${BIND10HOME}/src/bin/cfgmgr/plugins
 export CONFIG_TESTDATA_PATH=${BIND10HOME}/src/lib/config/tests/testdata
 export CONFIG_WR_TESTDATA_PATH=${BIND10HOME}/src/lib/config/tests/testdata
-#PYTESTS='ccsession_test.py
-#    cfgmgr_test.py
-#    config_data_test.py
-#    module_spec_test.py'
-PYTESTS='config_data_test.py module_spec_test.py'
+PYTESTS='ccsession_test.py
+    cfgmgr_test.py
+    config_data_test.py
+    module_spec_test.py'
 for pytest in ${PYTESTS}
     do
         echo ${pytest}
@@ -118,10 +116,9 @@ PYTESTS='socketsession_test.py'
 #        fi
 #    done
 
-echo partial python util / Release
+echo python util / Release
 export PYTHONPATH=${CPYTHONPATH}
-#PYTESTS='process_test.py socketserver_mixin_test.py file_test.py'
-PYTESTS='process_test.py socketserver_mixin_test.py'
+PYTESTS='process_test.py socketserver_mixin_test.py file_test_win32.py'
 for pytest in ${PYTESTS}
     do
         echo ${pytest}
diff --git a/win32build/env-debug.bat b/win32build/env-debug.bat
index d562b9f..bab89f6 100755
--- a/win32build/env-debug.bat
+++ b/win32build/env-debug.bat
@@ -1,20 +1,18 @@
- at rem Setting environment for BIND10 - Debug
-
- at echo off
-
-setlocal
-c:\cygwin\bin\cygpath -w %BIND10HOME% | set /p b10home=
-c:\cygwin\bin\cygpath -w %BIND10HOME%/.. | set /p b10parent=
-endlocal
-
-set B10_FROM_BUILD=%BIND10HOME%
-set VSVER=VS2010
-set RTVER=v100
-set PATH=%PATH%;%b10parent%\gtest\%RTVER%\Debug
-set PATH=%PATH%;%b10parent%\botan\%RTVER%\Debug
-set PATH=%PATH%;%b10parent%\log4cplus\%RTVER%\Debug
-set PATH=%PATH%;%b10home%\win32build\%VSVER%\Debug
-set PYTHONPATH=%PYTHONPATH%;%b10home%\win32build\%VSVER%\Debug
-set PYTHONPATH=%PYTHONPATH%;%b10home%\src\lib\python\isc\util
-set PYTHON=C:\Python32\python_d.exe
-set BIND10_PATH=%BIND10HOME%/src/bin/bind10
+ at rem Setting environment for BIND10 - Debug
+
+ at echo off
+
+for /f %%p in ('c:\cygwin\bin\cygpath -w %BIND10HOME%') do set b10home=%%p
+for /f %%p in ('c:\cygwin\bin\cygpath -w %BIND10HOME%/..') do set b10parent=%%p
+
+set B10_FROM_BUILD=%BIND10HOME%
+set VSVER=VS2010
+set RTVER=v100
+set PATH=%PATH%;%b10parent%\gtest\%RTVER%\Debug
+set PATH=%PATH%;%b10parent%\botan\%RTVER%\Debug
+set PATH=%PATH%;%b10parent%\log4cplus\%RTVER%\Debug
+set PATH=%PATH%;%b10home%\win32build\%VSVER%\Debug
+set PYTHONPATH=%PYTHONPATH%;%b10home%\win32build\%VSVER%\Debug
+set PYTHONPATH=%PYTHONPATH%;%b10home%\src\lib\python\isc\util
+set PYTHON=C:\Python32\python_d.exe
+set BIND10_PATH=%BIND10HOME%/src/bin/bind10
diff --git a/win32build/env-release.bat b/win32build/env-release.bat
index 9755d9c..f3a2645 100755
--- a/win32build/env-release.bat
+++ b/win32build/env-release.bat
@@ -1,20 +1,18 @@
- at rem Setting environment for BIND10 - Release
-
- at echo off
-
-setlocal
-c:\cygwin\bin\cygpath -w %BIND10HOME% | set /p b10home=
-c:\cygwin\bin\cygpath -w %BIND10HOME%/.. | set /p b10parent=
-endlocal
-
-set B10_FROM_BUILD=%BIND10HOME%
-set VSVER=VS2010
-set RTVER=v100
-set PATH=%PATH%;%b10parent%\gtest\%RTVER%\Release
-set PATH=%PATH%;%b10parent%\botan\%RTVER%\Release
-set PATH=%PATH%;%b10parent%\log4cplus\%RTVER%\Release
-set PATH=%PATH%;%b10home%\win32build\%VSVER%\Release
-set PYTHONPATH=%PYTHONPATH%;%b10home%\win32build\%VSVER%\Release
-set PYTHONPATH=%PYTHONPATH%;%b10home%\src\lib\python\isc\util
-set PYTHON=C:\Python32\python.exe
-set BIND10_PATH=%BIND10HOME%/src/bin/bind10
+ at rem Setting environment for BIND10 - Release
+
+ at echo off
+
+for /f %%p in ('c:\cygwin\bin\cygpath -w %BIND10HOME%') do set b10home=%%p
+for /f %%p in ('c:\cygwin\bin\cygpath -w %BIND10HOME%/..') do set b10parent=%%p
+
+set B10_FROM_BUILD=%BIND10HOME%
+set VSVER=VS2010
+set RTVER=v100
+set PATH=%PATH%;%b10parent%gtest\%RTVER%\Release
+set PATH=%PATH%;%b10parent%botan\%RTVER%\Release
+set PATH=%PATH%;%b10parent%log4cplus\%RTVER%\Release
+set PATH=%PATH%;%b10home%\win32build\%VSVER%\Release
+set PYTHONPATH=%PYTHONPATH%;%b10home%\win32build\%VSVER%\Release
+set PYTHONPATH=%PYTHONPATH%;%b10home%\src\lib\python\isc\util
+set PYTHON=C:\Python32\python.exe
+set BIND10_PATH=%BIND10HOME%/src/bin/bind10



More information about the bind10-changes mailing list