Bug 876761 - Mirror moznetwork to testing/mozbase, r=jhammel, a=NPOTB,bustage
authorAndrew Halberstadt <ahalberstadt@mozilla.com>
Thu, 06 Jun 2013 15:55:55 -0400
changeset 199904 abbab34b0f02ff5aa23bdeadb002cf167937fd67
parent 199903 8086f1032f7e4a45bd2a2bfa1befc6bb1d90ddb8
child 199905 3b087c81c1f7b3adb13779e1deef39df3a8603b9
push id1
push userraliiev@mozilla.com
push dateMon, 14 Jul 2014 20:22:58 +0000
treeherdermozilla-esr31@450086c0ded0 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjhammel, NPOTB, bustage
bugs876761
milestone21.0
Bug 876761 - Mirror moznetwork to testing/mozbase, r=jhammel, a=NPOTB,bustage
testing/mozbase/moznetwork/moznetwork/__init__.py
testing/mozbase/moznetwork/moznetwork/moznetwork.py
testing/mozbase/moznetwork/setup.py
new file mode 100644
--- /dev/null
+++ b/testing/mozbase/moznetwork/moznetwork/__init__.py
@@ -0,0 +1,5 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from moznetwork import *
new file mode 100644
--- /dev/null
+++ b/testing/mozbase/moznetwork/moznetwork/moznetwork.py
@@ -0,0 +1,71 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import os
+import socket
+import array
+import struct
+if os.name != 'nt':
+    import fcntl
+
+
+class NetworkError(Exception):
+    """Unable to obtain interface or IP"""
+
+
+def _get_interface_list():
+    """Provides a list of available network interfaces
+       as a list of tuples (name, ip)"""
+    max_iface = 32  # Maximum number of interfaces(Aribtrary)
+    bytes = max_iface * 32
+    is_32bit = (8 * struct.calcsize("P")) == 32  # Set Architecture
+    struct_size = 32 if is_32bit else 40
+
+    try:
+        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        names = array.array('B', '\0' * bytes)
+        outbytes = struct.unpack('iL', fcntl.ioctl(
+            s.fileno(),
+            0x8912,  # SIOCGIFCONF
+            struct.pack('iL', bytes, names.buffer_info()[0])
+        ))[0]
+        namestr = names.tostring()
+        return [(namestr[i:i + 32].split('\0', 1)[0],
+                socket.inet_ntoa(namestr[i + 20:i + 24]))\
+                for i in range(0, outbytes, struct_size)]
+
+    except IOError:
+        raise NetworkError('Unable to call ioctl with SIOCGIFCONF')
+
+
+def get_ip():
+    """Provides an available network interface address. A
+       NetworkError exception is raised in case of failure."""
+    try:
+        try:
+            ip = socket.gethostbyname(socket.gethostname())
+        except socket.gaierror:  # for Mac OS X
+            ip = socket.gethostbyname(socket.gethostname() + ".local")
+    except socket.gaierror:
+        # sometimes the hostname doesn't resolve to an ip address, in which
+        # case this will always fail
+        ip = None
+
+    if (ip is None or ip.startswith("127.")) and os.name != "nt":
+        interfaces = _get_interface_list()
+        for ifconfig in interfaces:
+            if ifconfig[0] == 'lo':
+                continue
+            else:
+                return ifconfig[1]
+
+    if ip is None:
+        raise NetworkError('Unable to obtain network address')
+
+    return ip
+
+
+def get_lan_ip():
+    """Deprecated. Please use get_ip() instead."""
+    return get_ip()
new file mode 100644
--- /dev/null
+++ b/testing/mozbase/moznetwork/setup.py
@@ -0,0 +1,25 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from setuptools import setup
+
+PACKAGE_VERSION = '0.21'
+
+deps=[]
+
+setup(name='moznetwork',
+      version=PACKAGE_VERSION,
+      description="Library of network utilities for use in Mozilla testing",
+      long_description="see http://mozbase.readthedocs.org/",
+      classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+      keywords='mozilla',
+      author='Mozilla Automation and Tools team',
+      author_email='tools@lists.mozilla.org',
+      url='https://wiki.mozilla.org/Auto-tools/Projects/MozBase',
+      license='MPL',
+      packages=['moznetwork'],
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=deps
+      )