diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/leap/common/events/tests/__init__.py | 0 | ||||
| -rw-r--r-- | src/leap/common/events/tests/test_zmq_components.py | 51 | ||||
| -rw-r--r-- | src/leap/common/events/zmq_components.py | 24 | 
3 files changed, 65 insertions, 10 deletions
| diff --git a/src/leap/common/events/tests/__init__.py b/src/leap/common/events/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/leap/common/events/tests/__init__.py diff --git a/src/leap/common/events/tests/test_zmq_components.py b/src/leap/common/events/tests/test_zmq_components.py new file mode 100644 index 0000000..c51e37e --- /dev/null +++ b/src/leap/common/events/tests/test_zmq_components.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# test_zmq_components.py +# Copyright (C) 2014 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +""" +Tests for the zmq_components module. +""" +try: +    import unittest2 as unittest +except ImportError: +    import unittest + +from leap.common.events import zmq_components + + +class AddrParseTestCase(unittest.TestCase): + +    def setUp(self): +        pass + +    def tearDown(self): +        pass + +    def test_addr_parsing(self): +        addr_re = zmq_components.ADDRESS_RE + +        self.assertEqual( +            addr_re.search("ipc:///tmp/foo/bar/baaz-2/foo.0").groups(), +            ("ipc", "/tmp/foo/bar/baaz-2/foo.0", None)) +        self.assertEqual( +            addr_re.search("tcp://localhost:9000").groups(), +            ("tcp", "localhost", "9000")) +        self.assertEqual( +            addr_re.search("tcp://127.0.0.1:9000").groups(), +            ("tcp", "127.0.0.1", "9000")) + + +if __name__ == "__main__": +    unittest.main() diff --git a/src/leap/common/events/zmq_components.py b/src/leap/common/events/zmq_components.py index 4fb95d3..3b88862 100644 --- a/src/leap/common/events/zmq_components.py +++ b/src/leap/common/events/zmq_components.py @@ -45,7 +45,7 @@ from leap.common.zmq_utils import PUBLIC_KEYS_PREFIX  logger = logging.getLogger(__name__) -ADDRESS_RE = re.compile("(.+)://(.+):([0-9]+)") +ADDRESS_RE = re.compile("^([a-z]+)://([^:]+):?(\d+)?$")  class TxZmqComponent(object): @@ -63,7 +63,7 @@ class TxZmqComponent(object):          """          self._factory = txzmq.ZmqFactory()          self._factory.registerForShutdown() -        if path_prefix == None: +        if path_prefix is None:              path_prefix = get_path_prefix()          self._config_prefix = os.path.join(path_prefix, "leap", "events")          self._connections = [] @@ -125,15 +125,19 @@ class TxZmqComponent(object):              socket.curve_publickey = public              socket.curve_secretkey = secret              self._start_thread_auth(connection.socket) -        # check if port was given -        protocol, addr, port = ADDRESS_RE.match(address).groups() -        if port == "0": -            port = socket.bind_to_random_port("%s://%s" % (protocol, addr)) + +        proto, addr, port = ADDRESS_RE.search(address).groups() + +        if port is None: +            params = proto, addr +            port = socket.bind("%s://%s" % params) +            # XXX this log doesn't appear +            logger.debug("Binded %s to %s://%s." % ((connClass,) + params))          else: -            socket.bind(address) -            port = int(port) -        logger.debug("Binded %s to %s://%s:%d." -                     % (connClass, protocol, addr, port)) +            params = proto, addr, int(port) +            socket.bind("%s://%s:%d" % params) +            # XXX this log doesn't appear +            logger.debug("Binded %s to %s://%s:%d." % ((connClass,) + params))          self._connections.append(connection)          return connection, port | 
